laihui 0.0.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.
Files changed (114) hide show
  1. package/README.md +403 -0
  2. package/dist/core/compose.d.ts +3 -0
  3. package/dist/core/compose.d.ts.map +1 -0
  4. package/dist/core/compose.js +12 -0
  5. package/dist/core/compose.js.map +1 -0
  6. package/dist/core/createFetch.d.ts +3 -0
  7. package/dist/core/createFetch.d.ts.map +1 -0
  8. package/dist/core/createFetch.js +99 -0
  9. package/dist/core/createFetch.js.map +1 -0
  10. package/dist/core/request.d.ts +3 -0
  11. package/dist/core/request.d.ts.map +1 -0
  12. package/dist/core/request.js +69 -0
  13. package/dist/core/request.js.map +1 -0
  14. package/dist/core/response.d.ts +3 -0
  15. package/dist/core/response.d.ts.map +1 -0
  16. package/dist/core/response.js +34 -0
  17. package/dist/core/response.js.map +1 -0
  18. package/dist/errors/index.d.ts +28 -0
  19. package/dist/errors/index.d.ts.map +1 -0
  20. package/dist/errors/index.js +61 -0
  21. package/dist/errors/index.js.map +1 -0
  22. package/dist/index.d.ts +5 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +4 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/middleware/auth-refresh.d.ts +9 -0
  27. package/dist/middleware/auth-refresh.d.ts.map +1 -0
  28. package/dist/middleware/auth-refresh.js +45 -0
  29. package/dist/middleware/auth-refresh.js.map +1 -0
  30. package/dist/middleware/dedupe.d.ts +6 -0
  31. package/dist/middleware/dedupe.d.ts.map +1 -0
  32. package/dist/middleware/dedupe.js +28 -0
  33. package/dist/middleware/dedupe.js.map +1 -0
  34. package/dist/middleware/retry.d.ts +12 -0
  35. package/dist/middleware/retry.d.ts.map +1 -0
  36. package/dist/middleware/retry.js +69 -0
  37. package/dist/middleware/retry.js.map +1 -0
  38. package/dist/middleware/timeout.d.ts +6 -0
  39. package/dist/middleware/timeout.d.ts.map +1 -0
  40. package/dist/middleware/timeout.js +30 -0
  41. package/dist/middleware/timeout.js.map +1 -0
  42. package/dist/patch/download.d.ts +11 -0
  43. package/dist/patch/download.d.ts.map +1 -0
  44. package/dist/patch/download.js +164 -0
  45. package/dist/patch/download.js.map +1 -0
  46. package/dist/patch/pagination.d.ts +8 -0
  47. package/dist/patch/pagination.d.ts.map +1 -0
  48. package/dist/patch/pagination.js +162 -0
  49. package/dist/patch/pagination.js.map +1 -0
  50. package/dist/patch/poll.d.ts +8 -0
  51. package/dist/patch/poll.d.ts.map +1 -0
  52. package/dist/patch/poll.js +112 -0
  53. package/dist/patch/poll.js.map +1 -0
  54. package/dist/patch/resource.d.ts +7 -0
  55. package/dist/patch/resource.d.ts.map +1 -0
  56. package/dist/patch/resource.js +21 -0
  57. package/dist/patch/resource.js.map +1 -0
  58. package/dist/patch/upload/index.d.ts +13 -0
  59. package/dist/patch/upload/index.d.ts.map +1 -0
  60. package/dist/patch/upload/index.js +150 -0
  61. package/dist/patch/upload/index.js.map +1 -0
  62. package/dist/registry.d.ts +6 -0
  63. package/dist/registry.d.ts.map +1 -0
  64. package/dist/registry.js +10 -0
  65. package/dist/registry.js.map +1 -0
  66. package/dist/types/index.d.ts +12 -0
  67. package/dist/types/index.d.ts.map +1 -0
  68. package/dist/types/index.js +2 -0
  69. package/dist/types/index.js.map +1 -0
  70. package/dist/types/instance.d.ts +23 -0
  71. package/dist/types/instance.d.ts.map +1 -0
  72. package/dist/types/instance.js +2 -0
  73. package/dist/types/instance.js.map +1 -0
  74. package/dist/types/method.d.ts +2 -0
  75. package/dist/types/method.d.ts.map +1 -0
  76. package/dist/types/method.js +2 -0
  77. package/dist/types/method.js.map +1 -0
  78. package/dist/types/middleware.d.ts +8 -0
  79. package/dist/types/middleware.d.ts.map +1 -0
  80. package/dist/types/middleware.js +2 -0
  81. package/dist/types/middleware.js.map +1 -0
  82. package/dist/types/options.d.ts +18 -0
  83. package/dist/types/options.d.ts.map +1 -0
  84. package/dist/types/options.js +2 -0
  85. package/dist/types/options.js.map +1 -0
  86. package/dist/types/pagination.d.ts +58 -0
  87. package/dist/types/pagination.d.ts.map +1 -0
  88. package/dist/types/pagination.js +2 -0
  89. package/dist/types/pagination.js.map +1 -0
  90. package/dist/types/poll.d.ts +27 -0
  91. package/dist/types/poll.d.ts.map +1 -0
  92. package/dist/types/poll.js +2 -0
  93. package/dist/types/poll.js.map +1 -0
  94. package/dist/types/resource.d.ts +12 -0
  95. package/dist/types/resource.d.ts.map +1 -0
  96. package/dist/types/resource.js +2 -0
  97. package/dist/types/resource.js.map +1 -0
  98. package/dist/types/transfer.d.ts +31 -0
  99. package/dist/types/transfer.d.ts.map +1 -0
  100. package/dist/types/transfer.js +2 -0
  101. package/dist/types/transfer.js.map +1 -0
  102. package/dist/utils/mergeHeaders.d.ts +2 -0
  103. package/dist/utils/mergeHeaders.d.ts.map +1 -0
  104. package/dist/utils/mergeHeaders.js +20 -0
  105. package/dist/utils/mergeHeaders.js.map +1 -0
  106. package/dist/utils/paramsSerializer.d.ts +3 -0
  107. package/dist/utils/paramsSerializer.d.ts.map +1 -0
  108. package/dist/utils/paramsSerializer.js +23 -0
  109. package/dist/utils/paramsSerializer.js.map +1 -0
  110. package/dist/utils/signal.d.ts +2 -0
  111. package/dist/utils/signal.d.ts.map +1 -0
  112. package/dist/utils/signal.js +12 -0
  113. package/dist/utils/signal.js.map +1 -0
  114. package/package.json +92 -0
@@ -0,0 +1,28 @@
1
+ export declare class FetchError extends Error {
2
+ request: Request;
3
+ cause?: Error | undefined;
4
+ constructor(message: string, request: Request, cause?: Error | undefined);
5
+ }
6
+ export declare class HTTPError extends FetchError {
7
+ response: Response;
8
+ constructor(message: string, request: Request, response: Response);
9
+ }
10
+ export declare class AbortError extends FetchError {
11
+ cause?: Error | undefined;
12
+ constructor(request: Request, cause?: Error | undefined);
13
+ }
14
+ export declare class TimeoutError extends AbortError {
15
+ constructor(request: Request);
16
+ }
17
+ export declare class RetryError extends FetchError {
18
+ attempts: number;
19
+ cause?: Error | undefined;
20
+ constructor(request: Request, attempts: number, cause?: Error | undefined);
21
+ }
22
+ export declare class NetworkError extends FetchError {
23
+ cause?: Error | undefined;
24
+ code?: string | undefined;
25
+ constructor(request: Request, cause?: Error | undefined, code?: string | undefined);
26
+ }
27
+ export declare function getErrorCode(error: unknown): string | undefined;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;IAG1B,OAAO,EAAE,OAAO;IACP,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACR,OAAO,EAAE,OAAO,EACP,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED,qBAAa,SAAU,SAAQ,UAAU;IAI9B,QAAQ,EAAE,QAAQ;gBAFzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EACT,QAAQ,EAAE,QAAQ;CAK5B;AAED,qBAAa,UAAW,SAAQ,UAAU;IAG7B,KAAK,CAAC,EAAE,KAAK;gBADtB,OAAO,EAAE,OAAO,EACP,KAAK,CAAC,EAAE,KAAK,YAAA;CAKzB;AAED,qBAAa,YAAa,SAAQ,UAAU;gBAC9B,OAAO,EAAE,OAAO;CAI7B;AAED,qBAAa,UAAW,SAAQ,UAAU;IAG/B,QAAQ,EAAE,MAAM;IACd,KAAK,CAAC,EAAE,KAAK;gBAFtB,OAAO,EAAE,OAAO,EACT,QAAQ,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK,YAAA;CAKzB;AAED,qBAAa,YAAa,SAAQ,UAAU;IAG/B,KAAK,CAAC,EAAE,KAAK;IACf,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,OAAO,EACP,KAAK,CAAC,EAAE,KAAK,YAAA,EACf,IAAI,CAAC,EAAE,MAAM,YAAA;CAKvB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK/D"}
@@ -0,0 +1,61 @@
1
+ export class FetchError extends Error {
2
+ request;
3
+ cause;
4
+ constructor(message, request, cause) {
5
+ super(message);
6
+ this.request = request;
7
+ this.cause = cause;
8
+ this.name = 'FetchError';
9
+ }
10
+ }
11
+ export class HTTPError extends FetchError {
12
+ response;
13
+ constructor(message, request, response) {
14
+ super(message, request);
15
+ this.response = response;
16
+ this.name = 'HTTPError';
17
+ }
18
+ }
19
+ export class AbortError extends FetchError {
20
+ cause;
21
+ constructor(request, cause) {
22
+ super('The request was aborted', request, cause);
23
+ this.cause = cause;
24
+ this.name = 'AbortError';
25
+ }
26
+ }
27
+ export class TimeoutError extends AbortError {
28
+ constructor(request) {
29
+ super(request);
30
+ this.name = 'TimeoutError';
31
+ }
32
+ }
33
+ export class RetryError extends FetchError {
34
+ attempts;
35
+ cause;
36
+ constructor(request, attempts, cause) {
37
+ super(`Retry failed after ${attempts} attempts`, request, cause);
38
+ this.attempts = attempts;
39
+ this.cause = cause;
40
+ this.name = 'RetryError';
41
+ }
42
+ }
43
+ export class NetworkError extends FetchError {
44
+ cause;
45
+ code;
46
+ constructor(request, cause, code) {
47
+ super('Network request failed', request, cause);
48
+ this.cause = cause;
49
+ this.code = code;
50
+ this.name = 'NetworkError';
51
+ }
52
+ }
53
+ export function getErrorCode(error) {
54
+ const err = error;
55
+ if (!err)
56
+ return undefined;
57
+ if (err.code && typeof err.code === 'string')
58
+ return err.code;
59
+ return getErrorCode(err.cause);
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAG1B;IACS;IAHlB,YACE,OAAe,EACR,OAAgB,EACP,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,YAAO,GAAP,OAAO,CAAS;QACP,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,UAAU;IAI9B;IAHT,YACE,OAAe,EACf,OAAgB,EACT,QAAkB;QAEzB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAFjB,aAAQ,GAAR,QAAQ,CAAU;QAGzB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,UAAU;IAG7B;IAFX,YACE,OAAgB,EACP,KAAa;QAEtB,KAAK,CAAC,yBAAyB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAFxC,UAAK,GAAL,KAAK,CAAQ;QAGtB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,UAAU;IAC1C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,UAAU;IAG/B;IACE;IAHX,YACE,OAAgB,EACT,QAAgB,EACd,KAAa;QAEtB,KAAK,CAAC,sBAAsB,QAAQ,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAH1D,aAAQ,GAAR,QAAQ,CAAQ;QACd,UAAK,GAAL,KAAK,CAAQ;QAGtB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,UAAU;IAG/B;IACF;IAHT,YACE,OAAgB,EACP,KAAa,EACf,IAAa;QAEpB,KAAK,CAAC,wBAAwB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAHvC,UAAK,GAAL,KAAK,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAS;QAGpB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,GAAG,GAAG,KAAuD,CAAC;IACpE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IAC9D,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { createFetch } from './core/createFetch.js';
2
+ export { AbortError, FetchError, getErrorCode, HTTPError, NetworkError, RetryError, TimeoutError, } from './errors/index.js';
3
+ export { patch } from './registry.js';
4
+ export type { AuthOptions, Context, DedupeOptions, DownloadConfig, DownloadTask, FetchInstance, FetchMethodOptions, FetchOptions, FetchResponse, HttpMethod, Middleware, ProgressData, RetryOptions, TimeoutOptions, TransferState, TransferStatus, UploadConfig, UploadTask, } from './types/index.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,YAAY,EACV,WAAW,EACX,OAAO,EACP,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,GACX,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { createFetch } from './core/createFetch.js';
2
+ export { AbortError, FetchError, getErrorCode, HTTPError, NetworkError, RetryError, TimeoutError, } from './errors/index.js';
3
+ export { patch } from './registry.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Middleware } from '../types/middleware.js';
2
+ export interface AuthOptions {
3
+ getToken: () => string | null;
4
+ refreshToken?: () => Promise<string>;
5
+ applyToken?: (request: Request, token: string) => Request;
6
+ shouldRefresh?: (response: Response) => boolean;
7
+ }
8
+ export declare function auth(options: AuthOptions): Middleware;
9
+ //# sourceMappingURL=auth-refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-refresh.d.ts","sourceRoot":"","sources":["../../src/middleware/auth-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;CACjD;AAYD,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CA2CrD"}
@@ -0,0 +1,45 @@
1
+ function defaultApplyToken(request, token) {
2
+ const headers = new Headers(request.headers);
3
+ headers.set('Authorization', `Bearer ${token}`);
4
+ return new Request(request, { headers });
5
+ }
6
+ function defaultShouldRefresh(response) {
7
+ return response.status === 401;
8
+ }
9
+ export function auth(options) {
10
+ const { getToken, refreshToken, applyToken = defaultApplyToken, shouldRefresh = defaultShouldRefresh } = options;
11
+ let refreshInProgress;
12
+ async function acquireRefresh() {
13
+ if (!refreshInProgress) {
14
+ refreshInProgress = refreshToken().then(() => {
15
+ refreshInProgress = undefined;
16
+ }, (err) => {
17
+ refreshInProgress = undefined;
18
+ throw err;
19
+ });
20
+ }
21
+ await refreshInProgress;
22
+ }
23
+ return async (ctx, next) => {
24
+ const token = getToken();
25
+ if (token) {
26
+ ctx.request = applyToken(ctx.request, token);
27
+ }
28
+ const savedRequest = ctx.request.clone();
29
+ await next();
30
+ if (!refreshToken || !ctx.response)
31
+ return;
32
+ if (!shouldRefresh(ctx.response))
33
+ return;
34
+ if (ctx.state.authRefreshed)
35
+ return;
36
+ ctx.state.authRefreshed = true;
37
+ await acquireRefresh();
38
+ const newToken = getToken();
39
+ if (!newToken)
40
+ return;
41
+ ctx.request = applyToken(savedRequest, newToken);
42
+ await next();
43
+ };
44
+ }
45
+ //# sourceMappingURL=auth-refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-refresh.js","sourceRoot":"","sources":["../../src/middleware/auth-refresh.ts"],"names":[],"mappings":"AASA,SAAS,iBAAiB,CAAC,OAAgB,EAAE,KAAa;IACxD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;IAChD,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAkB;IAC9C,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAoB;IACvC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,GAAG,iBAAiB,EAAE,aAAa,GAAG,oBAAoB,EAAE,GAAG,OAAO,CAAC;IAEjH,IAAI,iBAA4C,CAAC;IAEjD,KAAK,UAAU,cAAc;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,iBAAiB,GAAI,YAAsC,EAAE,CAAC,IAAI,CAChE,GAAG,EAAE;gBACH,iBAAiB,GAAG,SAAS,CAAC;YAChC,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,iBAAiB,GAAG,SAAS,CAAC;gBAC9B,MAAM,GAAG,CAAC;YACZ,CAAC,CACF,CAAC;QACJ,CAAC;QACD,MAAM,iBAAiB,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAEzC,MAAM,IAAI,EAAE,CAAC;QAEb,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,OAAO;QAC3C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QACzC,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa;YAAE,OAAO;QACpC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAE/B,MAAM,cAAc,EAAE,CAAC;QAEvB,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Middleware } from '../types/middleware.js';
2
+ export interface DedupeOptions {
3
+ keyFn?: (request: Request) => string;
4
+ }
5
+ export declare function dedupe(options?: DedupeOptions): Middleware;
6
+ //# sourceMappingURL=dedupe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedupe.d.ts","sourceRoot":"","sources":["../../src/middleware/dedupe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;CACtC;AAMD,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CA0B1D"}
@@ -0,0 +1,28 @@
1
+ function defaultKey(request) {
2
+ return `${request.method}:${request.url}`;
3
+ }
4
+ export function dedupe(options) {
5
+ const inflight = new Map();
6
+ const getKey = options?.keyFn ?? defaultKey;
7
+ return async (ctx, next) => {
8
+ const key = getKey(ctx.request);
9
+ const existing = inflight.get(key);
10
+ if (existing) {
11
+ const res = await existing;
12
+ ctx.response = res.clone();
13
+ return;
14
+ }
15
+ const promise = (async () => {
16
+ await next();
17
+ return ctx.response;
18
+ })();
19
+ inflight.set(key, promise);
20
+ try {
21
+ await promise;
22
+ }
23
+ finally {
24
+ inflight.delete(key);
25
+ }
26
+ };
27
+ }
28
+ //# sourceMappingURL=dedupe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedupe.js","sourceRoot":"","sources":["../../src/middleware/dedupe.ts"],"names":[],"mappings":"AAMA,SAAS,UAAU,CAAC,OAAgB;IAClC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,EAAE,KAAK,IAAI,UAAU,CAAC;IAE5C,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;YAC3B,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,QAAoB,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;QAEL,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Middleware } from '../types/middleware.js';
2
+ export interface RetryOptions {
3
+ limit?: number;
4
+ delay?: number;
5
+ backoff?: 'exponential' | 'linear' | ((retryNum: number) => number);
6
+ jitter?: boolean;
7
+ statusCodes?: number[];
8
+ methods?: string[];
9
+ }
10
+ export declare function computeDelay(retryNum: number, retry: Required<RetryOptions>): number;
11
+ export declare function retry(options?: Partial<RetryOptions>): Middleware;
12
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/middleware/retry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,aAAa,GAAG,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,MAAM,CAgBpF;AAWD,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,UAAU,CAwCjE"}
@@ -0,0 +1,69 @@
1
+ import { AbortError, RetryError, TimeoutError } from '../errors/index.js';
2
+ export function computeDelay(retryNum, retry) {
3
+ let delay;
4
+ if (typeof retry.backoff === 'function') {
5
+ delay = retry.backoff(retryNum);
6
+ }
7
+ else if (retry.backoff === 'linear') {
8
+ delay = retry.delay * retryNum;
9
+ }
10
+ else {
11
+ delay = retry.delay * 2 ** (retryNum - 1);
12
+ }
13
+ if (retry.jitter) {
14
+ delay = delay * (0.5 + Math.random() * 0.5);
15
+ }
16
+ return Math.floor(delay);
17
+ }
18
+ const DEFAULTS = {
19
+ limit: 1,
20
+ delay: 1000,
21
+ backoff: 'exponential',
22
+ jitter: true,
23
+ statusCodes: [408, 413, 429, 500, 502, 503, 504],
24
+ methods: ['GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE'],
25
+ };
26
+ export function retry(options) {
27
+ const opts = { ...DEFAULTS, ...options };
28
+ if (opts.limit <= 0) {
29
+ throw new TypeError('retry: limit must be greater than 0');
30
+ }
31
+ return async (ctx, next) => {
32
+ if (!opts.methods.includes(ctx.request.method)) {
33
+ return await next();
34
+ }
35
+ let lastError;
36
+ for (let tryCount = 0; tryCount <= opts.limit; tryCount++) {
37
+ if (tryCount > 0) {
38
+ const delay = computeDelay(tryCount, opts);
39
+ await sleep(delay);
40
+ ctx.state.retryAttempt = tryCount;
41
+ }
42
+ try {
43
+ await next();
44
+ if (ctx.response && !isRetryableStatus(ctx.response.status, opts)) {
45
+ return;
46
+ }
47
+ if (ctx.response) {
48
+ lastError = new Error(`Retryable status ${ctx.response.status}`);
49
+ }
50
+ }
51
+ catch (error) {
52
+ if (error instanceof AbortError || error instanceof TimeoutError) {
53
+ throw error;
54
+ }
55
+ lastError = error instanceof Error ? error : new Error(String(error));
56
+ }
57
+ if (tryCount >= opts.limit) {
58
+ throw new RetryError(ctx.request, opts.limit, lastError);
59
+ }
60
+ }
61
+ };
62
+ }
63
+ function isRetryableStatus(status, retry) {
64
+ return retry.statusCodes.includes(status);
65
+ }
66
+ function sleep(ms) {
67
+ return new Promise((resolve) => setTimeout(resolve, ms));
68
+ }
69
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/middleware/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Middleware } from '../types/middleware.js';
2
+ export interface TimeoutOptions {
3
+ timeout: number;
4
+ }
5
+ export declare function timeout(options: TimeoutOptions): Middleware;
6
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/middleware/timeout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CA2B3D"}
@@ -0,0 +1,30 @@
1
+ import { TimeoutError } from '../errors/index.js';
2
+ import { mergeSignals } from '../utils/signal.js';
3
+ export function timeout(options) {
4
+ const { timeout: ms } = options;
5
+ if (ms <= 0)
6
+ throw new Error('Timeout must be greater than 0');
7
+ return async (ctx, next) => {
8
+ const controller = new AbortController();
9
+ let timedOut = false;
10
+ const timer = setTimeout(() => {
11
+ timedOut = true;
12
+ controller.abort(new DOMException('The operation timed out', 'TimeoutError'));
13
+ }, ms);
14
+ try {
15
+ const combinedSignal = mergeSignals([ctx.request.signal, controller.signal]);
16
+ ctx.request = new Request(ctx.request, { signal: combinedSignal });
17
+ await next();
18
+ }
19
+ catch (error) {
20
+ if (timedOut) {
21
+ throw new TimeoutError(ctx.request);
22
+ }
23
+ throw error;
24
+ }
25
+ finally {
26
+ clearTimeout(timer);
27
+ }
28
+ };
29
+ }
30
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/middleware/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,MAAM,UAAU,OAAO,CAAC,OAAuB;IAC7C,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAChC,IAAI,EAAE,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAE/D,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAC,CAAC;QAChF,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7E,GAAG,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YAEnE,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { FetchOptions } from '../types/options.js';
2
+ import type { DownloadTask, ProgressData } from '../types/transfer.js';
3
+ declare module '../types/instance.js' {
4
+ interface FetchInstance {
5
+ download: (url: string, config?: DownloadConfig) => DownloadTask;
6
+ }
7
+ }
8
+ export interface DownloadConfig extends Omit<FetchOptions, 'method' | 'body'> {
9
+ onProgress?: (progress: ProgressData) => void;
10
+ }
11
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/patch/download.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAiC,MAAM,sBAAsB,CAAC;AAEtG,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,aAAa;QACrB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,YAAY,CAAC;KAClE;CACF;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C"}
@@ -0,0 +1,164 @@
1
+ import { patch } from '../registry.js';
2
+ function concatChunks(chunks) {
3
+ let size = 0;
4
+ for (const chunk of chunks)
5
+ size += chunk.length;
6
+ const result = new Uint8Array(size);
7
+ let offset = 0;
8
+ for (const chunk of chunks) {
9
+ result.set(chunk, offset);
10
+ offset += chunk.length;
11
+ }
12
+ return result;
13
+ }
14
+ function preferBlob() {
15
+ return typeof window !== 'undefined' && typeof Blob !== 'undefined';
16
+ }
17
+ function parseTotalFromContentRange(value) {
18
+ if (!value)
19
+ return 0;
20
+ const match = value.match(/\/(\d+)\s*$/);
21
+ return match ? Number(match[1]) : 0;
22
+ }
23
+ patch('download', (api) => {
24
+ api.download = (url, config) => createDownload(api, url, config);
25
+ });
26
+ function createDownload(instance, url, config) {
27
+ const { onProgress, headers: baseHeaders, ...fetchOptions } = config ?? {};
28
+ let status = 'idle';
29
+ let transferred = 0;
30
+ let total = 0;
31
+ let validator;
32
+ const chunks = [];
33
+ let controller;
34
+ const getStatus = () => status;
35
+ // biome-ignore lint/suspicious/noExplicitAny: handler storage needs generic args
36
+ const handlers = new Map();
37
+ function emit(event, ...args) {
38
+ handlers.get(event)?.forEach((h) => {
39
+ h(...args);
40
+ });
41
+ }
42
+ let resolveResult;
43
+ let rejectResult;
44
+ const resultPromise = new Promise((resolve, reject) => {
45
+ resolveResult = resolve;
46
+ rejectResult = reject;
47
+ });
48
+ function finalize() {
49
+ const merged = concatChunks(chunks);
50
+ return preferBlob() ? new Blob([merged]) : merged;
51
+ }
52
+ function reportProgress() {
53
+ const percent = total ? transferred / total : 0;
54
+ const data = { transferred, total, percent };
55
+ onProgress?.(data);
56
+ emit('progress', data);
57
+ }
58
+ async function run(resume) {
59
+ status = 'active';
60
+ controller = new AbortController();
61
+ const headers = new Headers(baseHeaders);
62
+ if (resume && transferred > 0) {
63
+ headers.set('Range', `bytes=${transferred}-`);
64
+ if (validator)
65
+ headers.set('If-Range', validator);
66
+ }
67
+ try {
68
+ const pending = instance.get(url, {
69
+ ...fetchOptions,
70
+ headers,
71
+ signal: controller.signal,
72
+ });
73
+ const response = await pending;
74
+ if (resume && response.status === 200) {
75
+ chunks.length = 0;
76
+ transferred = 0;
77
+ total = Number(response.headers.get('Content-Length')) || 0;
78
+ }
79
+ else if (!resume) {
80
+ validator = response.headers.get('ETag') ?? response.headers.get('Last-Modified') ?? undefined;
81
+ total =
82
+ Number(response.headers.get('Content-Length')) ||
83
+ parseTotalFromContentRange(response.headers.get('Content-Range')) ||
84
+ 0;
85
+ }
86
+ const body = await pending.stream();
87
+ const reader = body.getReader();
88
+ while (true) {
89
+ const { done, value } = await reader.read();
90
+ if (done)
91
+ break;
92
+ if (value) {
93
+ chunks.push(value);
94
+ transferred += value.length;
95
+ reportProgress();
96
+ }
97
+ }
98
+ status = 'done';
99
+ const result = finalize();
100
+ emit('done', result);
101
+ resolveResult(result);
102
+ }
103
+ catch (error) {
104
+ if (getStatus() === 'paused')
105
+ return;
106
+ if (getStatus() === 'aborted') {
107
+ rejectResult(error);
108
+ return;
109
+ }
110
+ status = 'error';
111
+ emit('error', error);
112
+ rejectResult(error);
113
+ }
114
+ }
115
+ // biome-ignore lint/suspicious/noExplicitAny: impl signature wider than overloads
116
+ function on(event, handler) {
117
+ let set = handlers.get(event);
118
+ if (!set) {
119
+ set = new Set();
120
+ handlers.set(event, set);
121
+ }
122
+ set.add(handler);
123
+ return task;
124
+ }
125
+ function pause() {
126
+ if (status === 'active') {
127
+ status = 'paused';
128
+ controller?.abort();
129
+ }
130
+ return task;
131
+ }
132
+ function resume() {
133
+ if (status === 'paused') {
134
+ void run(true);
135
+ }
136
+ return task;
137
+ }
138
+ function abort() {
139
+ if (status === 'active' || status === 'paused') {
140
+ status = 'aborted';
141
+ controller?.abort();
142
+ }
143
+ }
144
+ const task = {
145
+ on,
146
+ pause,
147
+ resume,
148
+ abort,
149
+ done: () => resultPromise,
150
+ // biome-ignore lint/suspicious/noThenProperty: intentional thenable for await
151
+ then: (onfulfilled, onrejected) => resultPromise.then(onfulfilled, onrejected),
152
+ get state() {
153
+ return {
154
+ status,
155
+ transferred,
156
+ total,
157
+ percent: total ? transferred / total : 0,
158
+ };
159
+ },
160
+ };
161
+ void run(false);
162
+ return task;
163
+ }
164
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/patch/download.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { FetchOptions } from '../types/options.js';
2
+ import type { PaginationConfig, PaginationHelper } from '../types/pagination.js';
3
+ declare module '../types/instance.js' {
4
+ interface FetchInstance {
5
+ pagination: <T>(url: string, paginationConfig?: PaginationConfig, fetchOptions?: Omit<FetchOptions, 'method' | 'body'>) => PaginationHelper<T>;
6
+ }
7
+ }
8
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/patch/pagination.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAqC,MAAM,wBAAwB,CAAC;AAGpH,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,aAAa;QACrB,UAAU,EAAE,CAAC,CAAC,EACZ,GAAG,EAAE,MAAM,EACX,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC,KACjD,gBAAgB,CAAC,CAAC,CAAC,CAAC;KAC1B;CACF"}