@autometa/http 1.0.14 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @autometa/http
2
2
 
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 98d911f: feat: replace tsyringe with custom DI solution
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [98d911f]
12
+ - @autometa/injection@0.1.0
13
+ - @autometa/app@0.3.0
14
+
15
+ ## 1.1.0
16
+
17
+ ### Minor Changes
18
+
19
+ - 4bbe6fc: feat: support factory function for shared headers
20
+
3
21
  ## 1.0.14
4
22
 
5
23
  ### Patch 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, LIFE_CYCLE as LIFE_CYCLE2 } from "@autometa/app";
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(LIFE_CYCLE.Transient)
459
+ Fixture(INJECTION_SCOPE.TRANSIENT)
460
460
  ], HTTPRequestBuilder);
461
461
 
462
462
  // src/http.ts
@@ -535,7 +535,15 @@ var HTTP = class {
535
535
  return this.builder().get();
536
536
  }
537
537
  builder() {
538
- return new HTTPRequestBuilder(__privateGet(this, _schemaMap2)).url(__privateGet(this, _url2)).route(...__privateGet(this, _route2)).allowPlainText(__privateGet(this, _allowPlainText2)).headers(Object.fromEntries(__privateGet(this, _headers2))).requireSchema(__privateGet(this, _requireSchema2)).onBeforeSend(...__privateGet(this, _onBeforeSend2)).onReceivedResponse(...__privateGet(this, _onAfterSend2));
538
+ const headers = this.convertFactoriesToString();
539
+ return new HTTPRequestBuilder(__privateGet(this, _schemaMap2)).url(__privateGet(this, _url2)).route(...__privateGet(this, _route2)).allowPlainText(__privateGet(this, _allowPlainText2)).headers(headers).requireSchema(__privateGet(this, _requireSchema2)).onBeforeSend(...__privateGet(this, _onBeforeSend2)).onReceivedResponse(...__privateGet(this, _onAfterSend2));
540
+ }
541
+ convertFactoriesToString() {
542
+ const dict = {};
543
+ for (const [key, value] of __privateGet(this, _headers2).entries()) {
544
+ dict[key] = typeof value === "string" ? value : value();
545
+ }
546
+ return dict;
539
547
  }
540
548
  };
541
549
  _url2 = new WeakMap();
@@ -547,7 +555,7 @@ _onBeforeSend2 = new WeakMap();
547
555
  _onAfterSend2 = new WeakMap();
548
556
  _allowPlainText2 = new WeakMap();
549
557
  HTTP = __decorateClass([
550
- Fixture2(LIFE_CYCLE2.Transient)
558
+ Fixture2(INJECTION_SCOPE2.TRANSIENT)
551
559
  ], HTTP);
552
560
  export {
553
561
  DerivedHTTPResponse,
@@ -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\";\n@Fixture(LIFE_CYCLE.Transient)\nexport class HTTP {\n #url: string;\n #route: string[] = [];\n #headers = new Map<string, string>();\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) {\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 return new HTTPRequestBuilder(this.#schemaMap)\n .url(this.#url)\n .route(...this.#route)\n .allowPlainText(this.#allowPlainText)\n .headers(Object.fromEntries(this.#headers))\n .requireSchema(this.#requireSchema)\n .onBeforeSend(...this.#onBeforeSend)\n .onReceivedResponse(...this.#onAfterSend);\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.d.cts CHANGED
@@ -91,6 +91,7 @@ declare class HTTPRequestBuilder {
91
91
  private tryRunAfterHooks;
92
92
  }
93
93
 
94
+ type DynamicHeader = () => string;
94
95
  declare class HTTP {
95
96
  #private;
96
97
  allowPlainText(value: boolean): this;
@@ -114,12 +115,13 @@ declare class HTTP {
114
115
  param(name: string, value: string): HTTPRequestBuilder;
115
116
  params(dict: Record<string, string>): HTTPRequestBuilder;
116
117
  data<T>(data: T): HTTPRequestBuilder;
117
- sharedHeader(name: string, value: string): this;
118
+ sharedHeader(name: string, value: string | DynamicHeader): this;
118
119
  route(...route: (string | number | boolean)[]): HTTPRequestBuilder;
119
120
  header<T>(name: string, value: T): HTTPRequestBuilder;
120
121
  headers(dict: Record<string, string>): HTTPRequestBuilder;
121
122
  get(): Promise<HTTPResponse<unknown>>;
122
123
  private builder;
124
+ private convertFactoriesToString;
123
125
  }
124
126
 
125
- export { DerivedHTTPResponse, HTTP, HTTPResponse, RequestHook, RequestState, ResponseHook, SchemaParser, StatusCode };
127
+ export { DerivedHTTPResponse, DynamicHeader, HTTP, HTTPResponse, RequestHook, RequestState, ResponseHook, SchemaParser, StatusCode };
package/dist/index.d.ts CHANGED
@@ -91,6 +91,7 @@ declare class HTTPRequestBuilder {
91
91
  private tryRunAfterHooks;
92
92
  }
93
93
 
94
+ type DynamicHeader = () => string;
94
95
  declare class HTTP {
95
96
  #private;
96
97
  allowPlainText(value: boolean): this;
@@ -114,12 +115,13 @@ declare class HTTP {
114
115
  param(name: string, value: string): HTTPRequestBuilder;
115
116
  params(dict: Record<string, string>): HTTPRequestBuilder;
116
117
  data<T>(data: T): HTTPRequestBuilder;
117
- sharedHeader(name: string, value: string): this;
118
+ sharedHeader(name: string, value: string | DynamicHeader): this;
118
119
  route(...route: (string | number | boolean)[]): HTTPRequestBuilder;
119
120
  header<T>(name: string, value: T): HTTPRequestBuilder;
120
121
  headers(dict: Record<string, string>): HTTPRequestBuilder;
121
122
  get(): Promise<HTTPResponse<unknown>>;
122
123
  private builder;
124
+ private convertFactoriesToString;
123
125
  }
124
126
 
125
- export { DerivedHTTPResponse, HTTP, HTTPResponse, RequestHook, RequestState, ResponseHook, SchemaParser, StatusCode };
127
+ export { DerivedHTTPResponse, DynamicHeader, HTTP, HTTPResponse, RequestHook, RequestState, ResponseHook, SchemaParser, StatusCode };
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 import_app2 = require("@autometa/app");
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, import_app.Fixture)(import_app.LIFE_CYCLE.Transient)
494
+ (0, import_injection.Fixture)(import_injection.INJECTION_SCOPE.TRANSIENT)
495
495
  ], HTTPRequestBuilder);
496
496
 
497
497
  // src/http.ts
@@ -570,7 +570,15 @@ var HTTP = class {
570
570
  return this.builder().get();
571
571
  }
572
572
  builder() {
573
- return new HTTPRequestBuilder(__privateGet(this, _schemaMap2)).url(__privateGet(this, _url2)).route(...__privateGet(this, _route2)).allowPlainText(__privateGet(this, _allowPlainText2)).headers(Object.fromEntries(__privateGet(this, _headers2))).requireSchema(__privateGet(this, _requireSchema2)).onBeforeSend(...__privateGet(this, _onBeforeSend2)).onReceivedResponse(...__privateGet(this, _onAfterSend2));
573
+ const headers = this.convertFactoriesToString();
574
+ return new HTTPRequestBuilder(__privateGet(this, _schemaMap2)).url(__privateGet(this, _url2)).route(...__privateGet(this, _route2)).allowPlainText(__privateGet(this, _allowPlainText2)).headers(headers).requireSchema(__privateGet(this, _requireSchema2)).onBeforeSend(...__privateGet(this, _onBeforeSend2)).onReceivedResponse(...__privateGet(this, _onAfterSend2));
575
+ }
576
+ convertFactoriesToString() {
577
+ const dict = {};
578
+ for (const [key, value] of __privateGet(this, _headers2).entries()) {
579
+ dict[key] = typeof value === "string" ? value : value();
580
+ }
581
+ return dict;
574
582
  }
575
583
  };
576
584
  _url2 = new WeakMap();
@@ -582,7 +590,7 @@ _onBeforeSend2 = new WeakMap();
582
590
  _onAfterSend2 = new WeakMap();
583
591
  _allowPlainText2 = new WeakMap();
584
592
  HTTP = __decorateClass([
585
- (0, import_app2.Fixture)(import_app2.LIFE_CYCLE.Transient)
593
+ (0, import_injection2.Fixture)(import_injection2.INJECTION_SCOPE.TRANSIENT)
586
594
  ], HTTP);
587
595
  // Annotate the CommonJS export names for ESM import in node:
588
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\";\n@Fixture(LIFE_CYCLE.Transient)\nexport class HTTP {\n #url: string;\n #route: string[] = [];\n #headers = new Map<string, string>();\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) {\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 return new HTTPRequestBuilder(this.#schemaMap)\n .url(this.#url)\n .route(...this.#route)\n .allowPlainText(this.#allowPlainText)\n .headers(Object.fromEntries(this.#headers))\n .requireSchema(this.#requireSchema)\n .onBeforeSend(...this.#onBeforeSend)\n .onReceivedResponse(...this.#onAfterSend);\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":["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.0.14",
3
+ "version": "1.2.0",
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.2.4",
31
+ "@autometa/app": "^0.3.0",
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",