aziosxjs 0.4.0 → 0.4.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.
@@ -0,0 +1,3 @@
1
+ export declare function getCache(key: string): any;
2
+ export declare function setCache(key: string, value: any, ttl?: number): void;
3
+ export declare function clearCache(key: string): void;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCache = getCache;
4
+ exports.setCache = setCache;
5
+ exports.clearCache = clearCache;
6
+ const cache = new Map();
7
+ function getCache(key) {
8
+ const entry = cache.get(key);
9
+ if (!entry)
10
+ return null;
11
+ if (Date.now() > entry.expiry) {
12
+ cache.delete(key);
13
+ return null;
14
+ }
15
+ return entry.data;
16
+ }
17
+ function setCache(key, value, ttl = 5000) {
18
+ cache.set(key, {
19
+ data: value,
20
+ expiry: Date.now() + ttl
21
+ });
22
+ }
23
+ function clearCache(key) {
24
+ cache.delete(key);
25
+ }
26
+ //# sourceMappingURL=memoryCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryCache.js","sourceRoot":"","sources":["../../src/cache/memoryCache.ts"],"names":[],"mappings":";;AAEA,4BAaC;AAED,4BAOC;AAED,gCAEC;AA5BD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyC,CAAA;AAE9D,SAAgB,QAAQ,CAAC,GAAW;IAElC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAE5B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAA;AAEnB,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAW,EAAE,KAAU,EAAE,GAAG,GAAG,IAAI;IAE1D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;QACb,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;KACzB,CAAC,CAAA;AAEJ,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW;IACpC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC"}
@@ -7,7 +7,12 @@ export default class Azios {
7
7
  response: InterceptorManager<any>;
8
8
  };
9
9
  constructor(config: AziosRequestConfig);
10
- request(config: AziosRequestConfig): Promise<import("../types/response").AziosResponse<any>>;
11
- get(url: string, config?: AziosRequestConfig): Promise<import("../types/response").AziosResponse<any>>;
12
- post(url: string, data?: any, config?: AziosRequestConfig): Promise<import("../types/response").AziosResponse<any>>;
10
+ request(config: AziosRequestConfig): Promise<AziosRequestConfig>;
11
+ get(url: string, config?: AziosRequestConfig): Promise<AziosRequestConfig>;
12
+ post(url: string, data?: any, config?: AziosRequestConfig): Promise<AziosRequestConfig>;
13
+ put(url: string, data?: any, config?: AziosRequestConfig): Promise<AziosRequestConfig>;
14
+ patch(url: string, data?: any, config?: AziosRequestConfig): Promise<AziosRequestConfig>;
15
+ delete(url: string, config?: AziosRequestConfig): Promise<AziosRequestConfig>;
16
+ head(url: string, config?: AziosRequestConfig): Promise<AziosRequestConfig>;
17
+ options(url: string, config?: AziosRequestConfig): Promise<AziosRequestConfig>;
13
18
  }
@@ -15,7 +15,21 @@ class Azios {
15
15
  }
16
16
  request(config) {
17
17
  config = { ...this.defaults, ...config };
18
- return (0, dispatchRequest_1.default)(config);
18
+ const chain = [];
19
+ this.interceptors.request.forEach(interceptor => {
20
+ chain.unshift(interceptor.fulfilled, interceptor.rejected);
21
+ });
22
+ chain.push(dispatchRequest_1.default, undefined);
23
+ this.interceptors.response.forEach(interceptor => {
24
+ chain.push(interceptor.fulfilled, interceptor.rejected);
25
+ });
26
+ let promise = Promise.resolve(config);
27
+ while (chain.length) {
28
+ const fulfilled = chain.shift();
29
+ const rejected = chain.shift();
30
+ promise = promise.then(fulfilled, rejected);
31
+ }
32
+ return promise;
19
33
  }
20
34
  get(url, config) {
21
35
  return this.request({
@@ -32,6 +46,43 @@ class Azios {
32
46
  data
33
47
  });
34
48
  }
49
+ put(url, data, config) {
50
+ return this.request({
51
+ ...config,
52
+ method: "PUT",
53
+ url,
54
+ data
55
+ });
56
+ }
57
+ patch(url, data, config) {
58
+ return this.request({
59
+ ...config,
60
+ method: "PATCH",
61
+ url,
62
+ data
63
+ });
64
+ }
65
+ delete(url, config) {
66
+ return this.request({
67
+ ...config,
68
+ method: "DELETE",
69
+ url
70
+ });
71
+ }
72
+ head(url, config) {
73
+ return this.request({
74
+ ...config,
75
+ method: "HEAD",
76
+ url
77
+ });
78
+ }
79
+ options(url, config) {
80
+ return this.request({
81
+ ...config,
82
+ method: "OPTIONS",
83
+ url
84
+ });
85
+ }
35
86
  }
36
87
  exports.default = Azios;
37
88
  //# sourceMappingURL=Azios.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Azios.js","sourceRoot":"","sources":["../../src/core/Azios.ts"],"names":[],"mappings":";;;;;AAAA,wEAA+C;AAE/C,4FAAmE;AAEnE,MAAqB,KAAK;IASxB,YAAY,MAA0B;QAEpC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;QAEtB,IAAI,CAAC,YAAY,GAAG;YAClB,OAAO,EAAE,IAAI,4BAAkB,EAAE;YACjC,QAAQ,EAAE,IAAI,4BAAkB,EAAE;SACnC,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAA0B;QAEhC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAA;QAExC,OAAO,IAAA,yBAAe,EAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,MAA2B;QAE1C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,KAAK;YACb,GAAG;SACJ,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,IAAU,EAAE,MAA2B;QAEvD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,MAAM;YACd,GAAG;YACH,IAAI;SACL,CAAC,CAAA;IACJ,CAAC;CAEF;AA7CD,wBA6CC"}
1
+ {"version":3,"file":"Azios.js","sourceRoot":"","sources":["../../src/core/Azios.ts"],"names":[],"mappings":";;;;;AAAA,wEAA+C;AAE/C,4FAAmE;AAEnE,MAAqB,KAAK;IASxB,YAAY,MAA0B;QAEpC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;QAEtB,IAAI,CAAC,YAAY,GAAG;YAClB,OAAO,EAAE,IAAI,4BAAkB,EAAE;YACjC,QAAQ,EAAE,IAAI,4BAAkB,EAAE;SACnC,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAA0B;QAEhC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAA;QAExC,MAAM,KAAK,GAAU,EAAE,CAAA;QAEvB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC9C,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,IAAI,CAAC,yBAAe,EAAE,SAAS,CAAC,CAAA;QAEtC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC/C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAErC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YAEpB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;YAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;YAE9B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAE7C,CAAC;QAED,OAAO,OAAO,CAAA;IAEhB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,MAA2B;QAE1C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,KAAK;YACb,GAAG;SACJ,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,IAAU,EAAE,MAA2B;QAEvD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,MAAM;YACd,GAAG;YACH,IAAI;SACL,CAAC,CAAA;IACJ,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,IAAU,EAAE,MAA2B;QAEtD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,KAAK;YACb,GAAG;YACH,IAAI;SACL,CAAC,CAAA;IAEJ,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,IAAU,EAAE,MAA2B;QAExD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,OAAO;YACf,GAAG;YACH,IAAI;SACL,CAAC,CAAA;IAEJ,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,MAA2B;QAE7C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,QAAQ;YAChB,GAAG;SACJ,CAAC,CAAA;IAEJ,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,MAA2B;QAE3C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,MAAM;YACd,GAAG;SACJ,CAAC,CAAA;IAEJ,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,MAA2B;QAE9C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,SAAS;YACjB,GAAG;SACJ,CAAC,CAAA;IAEJ,CAAC;CAEF;AAzHD,wBAyHC"}
@@ -10,9 +10,12 @@ function createInstance(config) {
10
10
  const instance = Azios_1.default.prototype.request.bind(context);
11
11
  Object.getOwnPropertyNames(Azios_1.default.prototype).forEach(method => {
12
12
  if (method !== "constructor") {
13
+ ;
13
14
  instance[method] = Azios_1.default.prototype[method].bind(context);
14
15
  }
15
16
  });
17
+ // attach interceptors
18
+ instance.interceptors = context.interceptors;
16
19
  return instance;
17
20
  }
18
21
  //# sourceMappingURL=createInstance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createInstance.js","sourceRoot":"","sources":["../../src/core/createInstance.ts"],"names":[],"mappings":";;;;;AAIA,wCAgBC;AApBD,oDAA2B;AAI3B,SAAgB,cAAc,CAAC,MAA0B;IAEvD,MAAM,OAAO,GAAG,IAAI,eAAK,CAAC,MAAM,CAAC,CAAA;IAEjC,MAAM,QAAQ,GAAG,eAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAkB,CAAA;IAEvE,MAAM,CAAC,mBAAmB,CAAC,eAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAE3D,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC5B,QAAgB,CAAC,MAAM,CAAC,GAAI,eAAK,CAAC,SAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5E,CAAC;IAEH,CAAC,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AAEjB,CAAC"}
1
+ {"version":3,"file":"createInstance.js","sourceRoot":"","sources":["../../src/core/createInstance.ts"],"names":[],"mappings":";;;;;AAIA,wCAkBC;AAtBD,oDAA2B;AAI3B,SAAgB,cAAc,CAAC,MAA0B;IAEvD,MAAM,OAAO,GAAG,IAAI,eAAK,CAAC,MAAM,CAAC,CAAA;IAEjC,MAAM,QAAQ,GAAG,eAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAkB,CAAA;IAEvE,MAAM,CAAC,mBAAmB,CAAC,eAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAE3D,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC7B,CAAC;YAAC,QAAgB,CAAC,MAAM,CAAC,GAAI,eAAK,CAAC,SAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC7E,CAAC;IAEH,CAAC,CAAC,CAAA;IAEF,sBAAsB;IACtB,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;IAE5C,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -1,3 +1,2 @@
1
1
  import { AziosRequestConfig } from "../types/config";
2
- import { AziosResponse } from "../types/response";
3
- export default function dispatchRequest(config: AziosRequestConfig): Promise<AziosResponse<any>>;
2
+ export default function dispatchRequest(config: AziosRequestConfig): Promise<any>;
@@ -7,29 +7,65 @@ exports.default = dispatchRequest;
7
7
  const http_1 = __importDefault(require("http"));
8
8
  const https_1 = __importDefault(require("https"));
9
9
  const url_1 = require("url");
10
- function dispatchRequest(config) {
10
+ const buildURL_1 = __importDefault(require("../helpers/buildURL"));
11
+ const AziosError_1 = __importDefault(require("../errors/AziosError"));
12
+ const requestStore_1 = require("./requestStore");
13
+ const memoryCache_1 = require("../cache/memoryCache");
14
+ const rateLimiter_1 = require("../rateLimiter/rateLimiter");
15
+ function delay(ms) {
16
+ return new Promise(resolve => setTimeout(resolve, ms));
17
+ }
18
+ async function makeRequest(config) {
11
19
  return new Promise((resolve, reject) => {
12
- const fullURL = config.baseURL
20
+ let url = config.baseURL
13
21
  ? config.baseURL + config.url
14
22
  : config.url;
15
- const parsedURL = new url_1.URL(fullURL);
23
+ url = (0, buildURL_1.default)(url, config.params);
24
+ const parsedURL = new url_1.URL(url);
16
25
  const isHttps = parsedURL.protocol === "https:";
26
+ const transport = isHttps ? https_1.default : http_1.default;
17
27
  const options = {
18
28
  hostname: parsedURL.hostname,
19
29
  port: parsedURL.port || (isHttps ? 443 : 80),
20
30
  path: parsedURL.pathname + parsedURL.search,
21
31
  method: config.method || "GET",
22
- headers: config.headers || {}
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ ...config.headers
35
+ }
23
36
  };
24
- const transport = isHttps ? https_1.default : http_1.default;
25
37
  const req = transport.request(options, res => {
26
- let data = "";
38
+ // -------------------------
39
+ // TIMEOUT SUPPORT
40
+ // -------------------------
41
+ if (config.timeout) {
42
+ req.setTimeout(config.timeout, () => {
43
+ req.destroy();
44
+ reject(new AziosError_1.default("Request timeout", "TIMEOUT", config, req));
45
+ });
46
+ }
47
+ // -------------------------
48
+ // ABORT SUPPORT
49
+ // -------------------------
50
+ if (config.signal) {
51
+ const abortHandler = () => {
52
+ req.destroy();
53
+ reject(new AziosError_1.default("Request aborted", "ABORTED", config, req));
54
+ };
55
+ config.signal.addEventListener("abort", abortHandler, { once: true });
56
+ }
57
+ let rawData = "";
27
58
  res.on("data", chunk => {
28
- data += chunk;
59
+ rawData += chunk;
29
60
  });
30
61
  res.on("end", () => {
62
+ let responseData = rawData;
63
+ try {
64
+ responseData = JSON.parse(rawData);
65
+ }
66
+ catch (_a) { }
31
67
  const response = {
32
- data: data,
68
+ data: responseData,
33
69
  status: res.statusCode || 0,
34
70
  statusText: res.statusMessage || "",
35
71
  headers: res.headers,
@@ -40,12 +76,67 @@ function dispatchRequest(config) {
40
76
  });
41
77
  });
42
78
  req.on("error", err => {
43
- reject(err);
79
+ reject(new AziosError_1.default(err.message, "NETWORK_ERROR", config, req));
44
80
  });
45
81
  if (config.data) {
46
- req.write(JSON.stringify(config.data));
82
+ const body = typeof config.data === "string"
83
+ ? config.data
84
+ : JSON.stringify(config.data);
85
+ req.write(body);
47
86
  }
48
87
  req.end();
49
88
  });
50
89
  }
90
+ async function dispatchRequest(config) {
91
+ const requestKey = `${config.method}-${config.url}-${JSON.stringify(config.params)}`;
92
+ // -------------------------
93
+ // CACHE CHECK (Sprint 4)
94
+ // -------------------------
95
+ if (config.cache) {
96
+ const cached = (0, memoryCache_1.getCache)(requestKey);
97
+ if (cached) {
98
+ return cached;
99
+ }
100
+ }
101
+ // -------------------------
102
+ // DEDUPLICATION (Sprint 3)
103
+ // -------------------------
104
+ const existing = (0, requestStore_1.getPending)(requestKey);
105
+ if (existing) {
106
+ return existing;
107
+ }
108
+ const retries = config.retry || 0;
109
+ const retryDelay = config.retryDelay || 300;
110
+ let attempt = 0;
111
+ const promise = (async () => {
112
+ var _a;
113
+ while (true) {
114
+ try {
115
+ const task = () => makeRequest(config);
116
+ const response = config.rateLimit
117
+ ? await (0, rateLimiter_1.schedule)(task, config.rateLimit)
118
+ : await task();
119
+ // -------------------------
120
+ // CACHE STORE
121
+ // -------------------------
122
+ if (config.cache) {
123
+ (0, memoryCache_1.setCache)(requestKey, response, (_a = config.cacheTTL) !== null && _a !== void 0 ? _a : 5000);
124
+ }
125
+ (0, requestStore_1.removePending)(requestKey);
126
+ return response;
127
+ }
128
+ catch (err) {
129
+ if (attempt >= retries) {
130
+ (0, requestStore_1.removePending)(requestKey);
131
+ throw err;
132
+ }
133
+ attempt++;
134
+ const backoff = retryDelay * Math.pow(2, attempt);
135
+ await delay(backoff);
136
+ }
137
+ }
138
+ })();
139
+ (0, requestStore_1.setPending)(requestKey, promise);
140
+ return promise;
141
+ }
51
142
  //# sourceMappingURL=dispatchRequest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatchRequest.js","sourceRoot":"","sources":["../../src/core/dispatchRequest.ts"],"names":[],"mappings":";;;;;AAOA,kCA2DC;AAlED,gDAAuB;AACvB,kDAAyB;AACzB,6BAAyB;AAKzB,SAAwB,eAAe,CAAC,MAA0B;IAEhE,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAEpD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;YAC5B,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG;YAC7B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;QAEd,MAAM,SAAS,GAAG,IAAI,SAAG,CAAC,OAAQ,CAAC,CAAA;QAEnC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAA;QAE/C,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM;YAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;YAC9B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;SAC9B,CAAA;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,eAAK,CAAC,CAAC,CAAC,cAAI,CAAA;QAExC,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YAE3C,IAAI,IAAI,GAAG,EAAE,CAAA;YAEb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;gBACrB,IAAI,IAAI,KAAK,CAAA;YACf,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBAEjB,MAAM,QAAQ,GAAkB;oBAC9B,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;oBAC3B,UAAU,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;oBACnC,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,MAAM;oBACN,OAAO,EAAE,GAAG;iBACb,CAAA;gBAED,OAAO,CAAC,QAAQ,CAAC,CAAA;YAEnB,CAAC,CAAC,CAAA;QAEJ,CAAC,CAAC,CAAA;QAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YACpB,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACxC,CAAC;QAED,GAAG,CAAC,GAAG,EAAE,CAAA;IAEX,CAAC,CAAC,CAAA;AAEJ,CAAC"}
1
+ {"version":3,"file":"dispatchRequest.js","sourceRoot":"","sources":["../../src/core/dispatchRequest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getPending(key: string): any;
2
+ export declare function setPending(key: string, promise: Promise<any>): void;
3
+ export declare function removePending(key: string): void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPending = getPending;
4
+ exports.setPending = setPending;
5
+ exports.removePending = removePending;
6
+ const pendingRequests = new Map();
7
+ function getPending(key) {
8
+ return pendingRequests.get(key);
9
+ }
10
+ function setPending(key, promise) {
11
+ pendingRequests.set(key, promise);
12
+ }
13
+ function removePending(key) {
14
+ pendingRequests.delete(key);
15
+ }
16
+ //# sourceMappingURL=requestStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestStore.js","sourceRoot":"","sources":["../../src/core/requestStore.ts"],"names":[],"mappings":";;AAEA,gCAEC;AAED,gCAEC;AAED,sCAEC;AAZD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAE,CAAA;AAEjC,SAAgB,UAAU,CAAC,GAAW;IACpC,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACjC,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW,EAAE,OAAqB;IAC3D,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACnC,CAAC;AAED,SAAgB,aAAa,CAAC,GAAW;IACvC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC"}
@@ -1,7 +1,7 @@
1
- export declare class AziosError extends Error {
1
+ export default class AziosError extends Error {
2
2
  config: any;
3
3
  code?: string;
4
4
  request?: any;
5
5
  response?: any;
6
- constructor(message: string, config: any);
6
+ constructor(message: string, code?: string, config?: any, request?: any, response?: any);
7
7
  }
@@ -1,11 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AziosError = void 0;
4
3
  class AziosError extends Error {
5
- constructor(message, config) {
4
+ constructor(message, code, config, request, response) {
6
5
  super(message);
6
+ this.name = "AziosError";
7
+ this.code = code;
7
8
  this.config = config;
9
+ this.request = request;
10
+ this.response = response;
8
11
  }
9
12
  }
10
- exports.AziosError = AziosError;
13
+ exports.default = AziosError;
11
14
  //# sourceMappingURL=AziosError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AziosError.js","sourceRoot":"","sources":["../../src/errors/AziosError.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAW,SAAQ,KAAK;IAMnC,YAAY,OAAe,EAAE,MAAW;QACtC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAVD,gCAUC"}
1
+ {"version":3,"file":"AziosError.js","sourceRoot":"","sources":["../../src/errors/AziosError.ts"],"names":[],"mappings":";;AAAA,MAAqB,UAAW,SAAQ,KAAK;IAO3C,YACE,OAAe,EACf,IAAa,EACb,MAAY,EACZ,OAAa,EACb,QAAc;QAGd,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAE1B,CAAC;CAEF;AAzBD,6BAyBC"}
@@ -0,0 +1 @@
1
+ export default function buildURL(url: string, params?: Record<string, any>): string;
@@ -1,2 +1,29 @@
1
1
  "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = buildURL;
4
+ function buildURL(url, params) {
5
+ if (!params)
6
+ return url;
7
+ const parts = [];
8
+ Object.keys(params).forEach(key => {
9
+ const val = params[key];
10
+ if (val === null || typeof val === "undefined") {
11
+ return;
12
+ }
13
+ if (Array.isArray(val)) {
14
+ val.forEach(v => {
15
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(v)}`);
16
+ });
17
+ }
18
+ else {
19
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(val)}`);
20
+ }
21
+ });
22
+ if (parts.length === 0)
23
+ return url;
24
+ const serialized = parts.join("&");
25
+ return url.includes("?")
26
+ ? `${url}&${serialized}`
27
+ : `${url}?${serialized}`;
28
+ }
2
29
  //# sourceMappingURL=buildURL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildURL.js","sourceRoot":"","sources":["../../src/helpers/buildURL.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"buildURL.js","sourceRoot":"","sources":["../../src/helpers/buildURL.ts"],"names":[],"mappings":";;AAAA,2BA2CC;AA3CD,SAAwB,QAAQ,CAC9B,GAAW,EACX,MAA4B;IAG5B,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAA;IAEvB,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAEhC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAEvB,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/C,OAAM;QACR,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAEvB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACd,KAAK,CAAC,IAAI,CACR,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE,CACtD,CAAA;YACH,CAAC,CAAC,CAAA;QAEJ,CAAC;aAAM,CAAC;YAEN,KAAK,CAAC,IAAI,CACR,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CACxD,CAAA;QAEH,CAAC;IAEH,CAAC,CAAC,CAAA;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAA;IAElC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAElC,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC,CAAC,GAAG,GAAG,IAAI,UAAU,EAAE;QACxB,CAAC,CAAC,GAAG,GAAG,IAAI,UAAU,EAAE,CAAA;AAE5B,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function schedule(task: Function, limit: number): Promise<unknown>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.schedule = schedule;
4
+ let queue = [];
5
+ let activeRequests = 0;
6
+ function schedule(task, limit) {
7
+ return new Promise((resolve, reject) => {
8
+ const run = async () => {
9
+ activeRequests++;
10
+ try {
11
+ const result = await task();
12
+ resolve(result);
13
+ }
14
+ catch (err) {
15
+ reject(err);
16
+ }
17
+ activeRequests--;
18
+ if (queue.length) {
19
+ const next = queue.shift();
20
+ next && next();
21
+ }
22
+ };
23
+ if (activeRequests < limit) {
24
+ run();
25
+ }
26
+ else {
27
+ queue.push(run);
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=rateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/rateLimiter/rateLimiter.ts"],"names":[],"mappings":";;AAGA,4BAgCC;AAnCD,IAAI,KAAK,GAAe,EAAE,CAAC;AAC3B,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,SAAgB,QAAQ,CAAC,IAAc,EAAE,KAAa;IAEpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAErC,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YAErB,cAAc,EAAE,CAAC;YAEjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;YAED,cAAc,EAAE,CAAC;YAEjB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,CAAC;QAEH,CAAC,CAAC;QAEF,IAAI,cAAc,GAAG,KAAK,EAAE,CAAC;YAC3B,GAAG,EAAE,CAAC;QACR,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IAEH,CAAC,CAAC,CAAC;AAEL,CAAC"}
@@ -1,9 +1,16 @@
1
1
  export interface AziosRequestConfig {
2
- url: string;
2
+ url?: string;
3
3
  method?: string;
4
4
  baseURL?: string;
5
5
  headers?: Record<string, any>;
6
6
  params?: Record<string, any>;
7
7
  data?: any;
8
8
  timeout?: number;
9
+ responseType?: string;
10
+ signal?: AbortSignal;
11
+ retry?: number;
12
+ retryDelay?: number;
13
+ cache?: boolean;
14
+ cacheTTL?: number;
15
+ rateLimit?: number;
9
16
  }
@@ -1,8 +1,18 @@
1
1
  import { AziosRequestConfig } from "./config";
2
2
  import { AziosResponse } from "./response";
3
+ import InterceptorManager from "../interceptors/InterceptorManager";
3
4
  export interface AziosInstance {
4
5
  (config: AziosRequestConfig): Promise<AziosResponse>;
5
6
  request(config: AziosRequestConfig): Promise<AziosResponse>;
6
7
  get(url: string, config?: AziosRequestConfig): Promise<AziosResponse>;
7
8
  post(url: string, data?: any, config?: AziosRequestConfig): Promise<AziosResponse>;
9
+ put(url: string, data?: any, config?: AziosRequestConfig): Promise<AziosResponse>;
10
+ patch(url: string, data?: any, config?: AziosRequestConfig): Promise<AziosResponse>;
11
+ delete(url: string, config?: AziosRequestConfig): Promise<AziosResponse>;
12
+ head(url: string, config?: AziosRequestConfig): Promise<AziosResponse>;
13
+ options(url: string, config?: AziosRequestConfig): Promise<AziosResponse>;
14
+ interceptors: {
15
+ request: InterceptorManager<AziosRequestConfig>;
16
+ response: InterceptorManager<AziosResponse>;
17
+ };
8
18
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aziosxjs",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Lightweight HTTP client inspired by axios",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",