@calimero-network/mero-js 0.1.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.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +443 -0
  3. package/dist/admin-api/admin-client.d.ts +38 -0
  4. package/dist/admin-api/admin-client.d.ts.map +1 -0
  5. package/dist/admin-api/admin-client.js +104 -0
  6. package/dist/admin-api/admin-client.js.map +1 -0
  7. package/dist/admin-api/admin-factory.d.ts +8 -0
  8. package/dist/admin-api/admin-factory.d.ts.map +1 -0
  9. package/dist/admin-api/admin-factory.js +42 -0
  10. package/dist/admin-api/admin-factory.js.map +1 -0
  11. package/dist/admin-api/admin-types.d.ts +213 -0
  12. package/dist/admin-api/admin-types.d.ts.map +1 -0
  13. package/dist/admin-api/admin-types.js +3 -0
  14. package/dist/admin-api/admin-types.js.map +1 -0
  15. package/dist/admin-api/index.d.ts +4 -0
  16. package/dist/admin-api/index.d.ts.map +1 -0
  17. package/dist/admin-api/index.js +5 -0
  18. package/dist/admin-api/index.js.map +1 -0
  19. package/dist/auth-api/auth-client.d.ts +34 -0
  20. package/dist/auth-api/auth-client.d.ts.map +1 -0
  21. package/dist/auth-api/auth-client.js +112 -0
  22. package/dist/auth-api/auth-client.js.map +1 -0
  23. package/dist/auth-api/auth-factory.d.ts +8 -0
  24. package/dist/auth-api/auth-factory.d.ts.map +1 -0
  25. package/dist/auth-api/auth-factory.js +42 -0
  26. package/dist/auth-api/auth-factory.js.map +1 -0
  27. package/dist/auth-api/auth-types.d.ts +127 -0
  28. package/dist/auth-api/auth-types.d.ts.map +1 -0
  29. package/dist/auth-api/auth-types.js +3 -0
  30. package/dist/auth-api/auth-types.js.map +1 -0
  31. package/dist/auth-api/index.d.ts +4 -0
  32. package/dist/auth-api/index.d.ts.map +1 -0
  33. package/dist/auth-api/index.js +5 -0
  34. package/dist/auth-api/index.js.map +1 -0
  35. package/dist/http-client/api-response.d.ts +16 -0
  36. package/dist/http-client/api-response.d.ts.map +1 -0
  37. package/dist/http-client/api-response.js +2 -0
  38. package/dist/http-client/api-response.js.map +1 -0
  39. package/dist/http-client/http-factory.d.ts +32 -0
  40. package/dist/http-client/http-factory.d.ts.map +1 -0
  41. package/dist/http-client/http-factory.js +52 -0
  42. package/dist/http-client/http-factory.js.map +1 -0
  43. package/dist/http-client/http-types.d.ts +42 -0
  44. package/dist/http-client/http-types.d.ts.map +1 -0
  45. package/dist/http-client/http-types.js +2 -0
  46. package/dist/http-client/http-types.js.map +1 -0
  47. package/dist/http-client/index.d.ts +8 -0
  48. package/dist/http-client/index.d.ts.map +1 -0
  49. package/dist/http-client/index.js +12 -0
  50. package/dist/http-client/index.js.map +1 -0
  51. package/dist/http-client/retry.d.ts +6 -0
  52. package/dist/http-client/retry.d.ts.map +1 -0
  53. package/dist/http-client/retry.js +83 -0
  54. package/dist/http-client/retry.js.map +1 -0
  55. package/dist/http-client/signal-utils.d.ts +3 -0
  56. package/dist/http-client/signal-utils.d.ts.map +1 -0
  57. package/dist/http-client/signal-utils.js +42 -0
  58. package/dist/http-client/signal-utils.js.map +1 -0
  59. package/dist/http-client/web-client.d.ts +38 -0
  60. package/dist/http-client/web-client.d.ts.map +1 -0
  61. package/dist/http-client/web-client.js +296 -0
  62. package/dist/http-client/web-client.js.map +1 -0
  63. package/dist/index.browser.mjs +2 -0
  64. package/dist/index.browser.mjs.map +7 -0
  65. package/dist/index.cjs +995 -0
  66. package/dist/index.cjs.map +7 -0
  67. package/dist/index.d.ts +6 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +12 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/index.mjs +973 -0
  72. package/dist/index.mjs.map +7 -0
  73. package/dist/mero-js.d.ts +77 -0
  74. package/dist/mero-js.d.ts.map +1 -0
  75. package/dist/mero-js.js +175 -0
  76. package/dist/mero-js.js.map +1 -0
  77. package/dist/types/api-response.d.ts +16 -0
  78. package/dist/types/api-response.d.ts.map +1 -0
  79. package/dist/types/api-response.js +2 -0
  80. package/dist/types/api-response.js.map +1 -0
  81. package/dist/types/index.d.ts +2 -0
  82. package/dist/types/index.d.ts.map +1 -0
  83. package/dist/types/index.js +2 -0
  84. package/dist/types/index.js.map +1 -0
  85. package/package.json +86 -0
@@ -0,0 +1,32 @@
1
+ import { Transport, HttpClient } from './http-types';
2
+ export declare function createHttpClient(transport: Transport): HttpClient;
3
+ export declare function createBrowserHttpClient(options: {
4
+ baseUrl: string;
5
+ getAuthToken?: () => Promise<string | undefined>;
6
+ onTokenRefresh?: (newToken: string) => Promise<void>;
7
+ defaultHeaders?: Record<string, string>;
8
+ timeoutMs?: number;
9
+ credentials?: RequestCredentials;
10
+ defaultAbortSignal?: AbortSignal;
11
+ }): HttpClient;
12
+ export declare function createNodeHttpClient(options: {
13
+ baseUrl: string;
14
+ fetch?: typeof fetch;
15
+ getAuthToken?: () => Promise<string | undefined>;
16
+ onTokenRefresh?: (newToken: string) => Promise<void>;
17
+ defaultHeaders?: Record<string, string>;
18
+ timeoutMs?: number;
19
+ credentials?: RequestCredentials;
20
+ defaultAbortSignal?: AbortSignal;
21
+ }): HttpClient;
22
+ export declare function createUniversalHttpClient(options: {
23
+ baseUrl: string;
24
+ fetch?: typeof fetch;
25
+ getAuthToken?: () => Promise<string | undefined>;
26
+ onTokenRefresh?: (newToken: string) => Promise<void>;
27
+ defaultHeaders?: Record<string, string>;
28
+ timeoutMs?: number;
29
+ credentials?: RequestCredentials;
30
+ defaultAbortSignal?: AbortSignal;
31
+ }): HttpClient;
32
+ //# sourceMappingURL=http-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-factory.d.ts","sourceRoot":"","sources":["../../src/http-client/http-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGrD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAEjE;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,kBAAkB,CAAC,EAAE,WAAW,CAAC;CAClC,GAAG,UAAU,CAab;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,kBAAkB,CAAC,EAAE,WAAW,CAAC;CAClC,GAAG,UAAU,CAuBb;AAGD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,kBAAkB,CAAC,EAAE,WAAW,CAAC;CAClC,GAAG,UAAU,CASb"}
@@ -0,0 +1,52 @@
1
+ import { WebHttpClient } from './web-client';
2
+ // Factory function to create HTTP client with sensible defaults
3
+ export function createHttpClient(transport) {
4
+ return new WebHttpClient(transport);
5
+ }
6
+ // Factory function for browser environments
7
+ export function createBrowserHttpClient(options) {
8
+ const transport = {
9
+ fetch: globalThis.fetch,
10
+ baseUrl: options.baseUrl,
11
+ getAuthToken: options.getAuthToken,
12
+ onTokenRefresh: options.onTokenRefresh,
13
+ defaultHeaders: options.defaultHeaders,
14
+ timeoutMs: options.timeoutMs,
15
+ credentials: options.credentials,
16
+ defaultAbortSignal: options.defaultAbortSignal,
17
+ };
18
+ return createHttpClient(transport);
19
+ }
20
+ // Factory function for Node.js environments
21
+ export function createNodeHttpClient(options) {
22
+ // Use provided fetch or try to use global fetch (Node 18+)
23
+ const fetchImpl = options.fetch ?? globalThis.fetch;
24
+ if (!fetchImpl) {
25
+ throw new Error('No fetch implementation available. Please provide a fetch implementation ' +
26
+ '(e.g., undici.fetch) or use Node.js 18+ which has native fetch support.');
27
+ }
28
+ const transport = {
29
+ fetch: fetchImpl,
30
+ baseUrl: options.baseUrl,
31
+ getAuthToken: options.getAuthToken,
32
+ onTokenRefresh: options.onTokenRefresh,
33
+ defaultHeaders: options.defaultHeaders,
34
+ timeoutMs: options.timeoutMs,
35
+ credentials: options.credentials,
36
+ defaultAbortSignal: options.defaultAbortSignal,
37
+ };
38
+ return createHttpClient(transport);
39
+ }
40
+ // Universal factory that works in both environments
41
+ export function createUniversalHttpClient(options) {
42
+ // Try to detect environment and use appropriate factory
43
+ if (typeof window !== 'undefined') {
44
+ // Browser environment
45
+ return createBrowserHttpClient(options);
46
+ }
47
+ else {
48
+ // Node.js environment
49
+ return createNodeHttpClient(options);
50
+ }
51
+ }
52
+ //# sourceMappingURL=http-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-factory.js","sourceRoot":"","sources":["../../src/http-client/http-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,SAAoB;IACnD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,uBAAuB,CAAC,OAQvC;IACC,MAAM,SAAS,GAAc;QAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KAC/C,CAAC;IAEF,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,oBAAoB,CAAC,OASpC;IACC,2DAA2D;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAEpD,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,KAAK,CACb,2EAA2E;YACzE,yEAAyE,CAC5E,CAAC;KACH;IAED,MAAM,SAAS,GAAc;QAC3B,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KAC/C,CAAC;IAEF,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,yBAAyB,CAAC,OASzC;IACC,wDAAwD;IACxD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,sBAAsB;QACtB,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;KACzC;SAAM;QACL,sBAAsB;QACtB,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;KACtC;AACH,CAAC"}
@@ -0,0 +1,42 @@
1
+ export type FetchLike = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
2
+ export interface Transport {
3
+ fetch: FetchLike;
4
+ baseUrl: string;
5
+ defaultHeaders?: Record<string, string>;
6
+ getAuthToken?: () => Promise<string | undefined>;
7
+ onTokenRefresh?: (newToken: string) => Promise<void>;
8
+ timeoutMs?: number;
9
+ credentials?: RequestCredentials;
10
+ defaultAbortSignal?: AbortSignal;
11
+ }
12
+ export type ResponseParser = 'json' | 'text' | 'blob' | 'arrayBuffer' | 'response';
13
+ export interface RequestOptions extends RequestInit {
14
+ parse?: ResponseParser;
15
+ timeoutMs?: number;
16
+ }
17
+ export interface HttpClient {
18
+ get<T>(path: string, init?: RequestOptions): Promise<T>;
19
+ post<T>(path: string, body?: unknown, init?: RequestOptions): Promise<T>;
20
+ put<T>(path: string, body?: unknown, init?: RequestOptions): Promise<T>;
21
+ delete<T>(path: string, init?: RequestOptions): Promise<T>;
22
+ patch<T>(path: string, body?: unknown, init?: RequestOptions): Promise<T>;
23
+ head(path: string, init?: RequestOptions): Promise<{
24
+ headers: Record<string, string>;
25
+ status: number;
26
+ }>;
27
+ request<T>(path: string, init?: RequestOptions): Promise<T>;
28
+ }
29
+ export interface Header {
30
+ [key: string]: string;
31
+ }
32
+ export interface ProgressCallback {
33
+ (progress: number): void;
34
+ }
35
+ export interface HeadResponse {
36
+ headers: Record<string, string>;
37
+ status: number;
38
+ }
39
+ export interface LegacyRequestOptions {
40
+ responseType?: 'arraybuffer' | 'blob' | 'json';
41
+ }
42
+ //# sourceMappingURL=http-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-types.d.ts","sourceRoot":"","sources":["../../src/http-client/http-types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,kBAAkB,CAAC,EAAE,WAAW,CAAC;CAClC;AAGD,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,MAAM,GACN,aAAa,GACb,UAAU,CAAC;AAEf,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7D;AAGD,MAAM,WAAW,MAAM;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;CAChD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-types.js","sourceRoot":"","sources":["../../src/http-client/http-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export * from './http-types';
2
+ export * from './api-response';
3
+ export { WebHttpClient, HTTPError } from './web-client';
4
+ export { createHttpClient, createBrowserHttpClient, createNodeHttpClient, createUniversalHttpClient, } from './http-factory';
5
+ export { withRetry, createRetryableMethod } from './retry';
6
+ export type { RetryOptions } from './retry';
7
+ export { combineSignals, createTimeoutSignal } from './signal-utils';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http-client/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC3D,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ // HTTP client types and interfaces
2
+ export * from './http-types';
3
+ export * from './api-response';
4
+ // Web Standards HTTP client implementation
5
+ export { WebHttpClient, HTTPError } from './web-client';
6
+ // Factory functions for easy client creation
7
+ export { createHttpClient, createBrowserHttpClient, createNodeHttpClient, createUniversalHttpClient, } from './http-factory';
8
+ // Retry functionality
9
+ export { withRetry, createRetryableMethod } from './retry';
10
+ // Signal utilities
11
+ export { combineSignals, createTimeoutSignal } from './signal-utils';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http-client/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAE/B,2CAA2C;AAC3C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAExD,6CAA6C;AAC7C,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAExB,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAG3D,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface RetryOptions {
2
+ attempts?: number;
3
+ }
4
+ export declare function withRetry<T>(fn: (attempt: number) => Promise<T>, options?: RetryOptions): Promise<T>;
5
+ export declare function createRetryableMethod<T extends unknown[], R>(method: (...args: T) => Promise<R>, retryOptions?: RetryOptions): (...args: T) => Promise<R>;
6
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/http-client/retry.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAsDD,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CA6CZ;AAGD,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC1D,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAClC,YAAY,GAAE,YAAiB,aAER,CAAC,KAAG,QAAQ,CAAC,CAAC,CAGtC"}
@@ -0,0 +1,83 @@
1
+ // Default retry condition - retry on network errors and 5xx status codes
2
+ function defaultRetryCondition(error, attempt) {
3
+ // Don't retry on the last attempt
4
+ if (attempt <= 0)
5
+ return false;
6
+ // Distinguish timeout vs. user abort:
7
+ // - Timeout: name === 'TimeoutError' (per spec/platforms)
8
+ // - User abort: name === 'AbortError'
9
+ const errorWithName = error;
10
+ const name = errorWithName?.name;
11
+ if (name === 'TimeoutError')
12
+ return true;
13
+ if (name === 'AbortError')
14
+ return false;
15
+ // HTTP 5xx and 429 (including HTTPError from web-client)
16
+ const errorWithStatus = error;
17
+ if ('status' in errorWithStatus &&
18
+ typeof errorWithStatus.status === 'number') {
19
+ const status = errorWithStatus.status;
20
+ return status >= 500 || status === 429;
21
+ }
22
+ // Network TypeError (DNS/reset) is reasonably retryable
23
+ if (name === 'TypeError')
24
+ return true;
25
+ return false;
26
+ }
27
+ // Calculate delay with exponential backoff and jitter
28
+ function calculateDelay(attempt) {
29
+ const baseDelayMs = 250; // Base 250ms as per spec
30
+ const delay = baseDelayMs * Math.pow(2, attempt - 1);
31
+ // Add ±20% jitter to reduce stampedes
32
+ const jitter = (Math.random() - 0.5) * 0.4 * delay;
33
+ return Math.max(0, delay + jitter);
34
+ }
35
+ // Retry helper function with new signature
36
+ export async function withRetry(fn, options = {}) {
37
+ const { attempts = 3 } = options;
38
+ let lastError;
39
+ for (let attempt = 1; attempt <= attempts; attempt++) {
40
+ try {
41
+ return await fn(attempt);
42
+ }
43
+ catch (error) {
44
+ lastError = error;
45
+ // Check if we should retry (this handles the last attempt check)
46
+ if (!defaultRetryCondition(lastError, attempts - attempt)) {
47
+ throw lastError;
48
+ }
49
+ // Calculate delay
50
+ let delayMs = calculateDelay(attempt);
51
+ // Check for Retry-After header if it's an HTTP error
52
+ const errorWithHeaders = lastError;
53
+ const hdrs = errorWithHeaders.headers;
54
+ const retryAfter = hdrs?.get?.('Retry-After');
55
+ if (retryAfter) {
56
+ // If it's a number, treat as seconds
57
+ const seconds = parseInt(retryAfter, 10);
58
+ if (!isNaN(seconds)) {
59
+ delayMs = Math.max(delayMs, seconds * 1000);
60
+ }
61
+ else {
62
+ // If it's a date, calculate the difference
63
+ const date = new Date(retryAfter);
64
+ if (!isNaN(date.getTime())) {
65
+ const waitTime = Math.max(0, date.getTime() - Date.now());
66
+ // Cap wait at 60s per attempt as per spec
67
+ delayMs = Math.max(delayMs, Math.min(waitTime, 60000));
68
+ }
69
+ }
70
+ }
71
+ // Wait before retrying
72
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
73
+ }
74
+ }
75
+ throw lastError || new Error('Retry failed without error');
76
+ }
77
+ // Helper to create a retry-enabled HTTP client method
78
+ export function createRetryableMethod(method, retryOptions = {}) {
79
+ return async (...args) => {
80
+ return withRetry(() => method(...args), retryOptions);
81
+ };
82
+ }
83
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/http-client/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function combineSignals(signals: Array<AbortSignal | undefined>): AbortSignal | undefined;
2
+ export declare function createTimeoutSignal(timeoutMs: number): AbortSignal;
3
+ //# sourceMappingURL=signal-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-utils.d.ts","sourceRoot":"","sources":["../../src/http-client/signal-utils.ts"],"names":[],"mappings":"AACA,wBAAgB,cAAc,CAC5B,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GACtC,WAAW,GAAG,SAAS,CA4BzB;AAGD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAalE"}
@@ -0,0 +1,42 @@
1
+ // Utility for combining multiple AbortSignals
2
+ export function combineSignals(signals) {
3
+ const list = signals.filter(Boolean);
4
+ if (list.length === 0)
5
+ return undefined;
6
+ // Prefer native any(), but fall back if unavailable or it throws
7
+ const AbortSignalAny = AbortSignal;
8
+ if (typeof AbortSignalAny.any === 'function') {
9
+ try {
10
+ return AbortSignalAny.any(list);
11
+ }
12
+ catch {
13
+ // Fall through to manual implementation
14
+ }
15
+ }
16
+ const controller = new AbortController();
17
+ const onAbort = (evt) => {
18
+ controller.abort(evt.target.reason);
19
+ for (const s of list)
20
+ s.removeEventListener('abort', onAbort);
21
+ };
22
+ for (const s of list) {
23
+ if (s.aborted)
24
+ return AbortSignal.abort(s.reason);
25
+ s.addEventListener('abort', onAbort, { once: true });
26
+ }
27
+ return controller.signal;
28
+ }
29
+ // Helper to create a timeout signal
30
+ export function createTimeoutSignal(timeoutMs) {
31
+ // Use AbortSignal.timeout if available (Node 18.17+, modern browsers)
32
+ if (typeof AbortSignal.timeout === 'function') {
33
+ return AbortSignal.timeout(timeoutMs);
34
+ }
35
+ // Fallback for older environments
36
+ const controller = new AbortController();
37
+ setTimeout(() => {
38
+ controller.abort(new DOMException('Timeout', 'TimeoutError'));
39
+ }, timeoutMs);
40
+ return controller.signal;
41
+ }
42
+ //# sourceMappingURL=signal-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-utils.js","sourceRoot":"","sources":["../../src/http-client/signal-utils.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,UAAU,cAAc,CAC5B,OAAuC;IAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAkB,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAExC,iEAAiE;IACjE,MAAM,cAAc,GAAG,WAEtB,CAAC;IACF,IAAI,OAAO,cAAc,CAAC,GAAG,KAAK,UAAU,EAAE;QAC5C,IAAI;YACF,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACjC;QAAC,MAAM;YACN,wCAAwC;SACzC;KACF;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;QAC7B,UAAU,CAAC,KAAK,CAAE,GAAG,CAAC,MAAsB,CAAC,MAAM,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;QACpB,IAAI,CAAC,CAAC,OAAO;YAAE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACtD;IAED,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,sEAAsE;IACtE,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,UAAU,EAAE;QAC7C,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,kCAAkC;IAClC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAChE,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { HttpClient, Transport, RequestOptions } from './http-types';
2
+ export declare class HTTPError extends Error {
3
+ status: number;
4
+ statusText: string;
5
+ url: string;
6
+ headers: Headers;
7
+ bodyText?: string;
8
+ name: "HTTPError";
9
+ constructor(status: number, statusText: string, url: string, headers: Headers, bodyText?: string);
10
+ toJSON(): {
11
+ status: number;
12
+ statusText: string;
13
+ url: string;
14
+ headers: Record<string, string>;
15
+ bodyText?: string;
16
+ };
17
+ }
18
+ export declare class WebHttpClient implements HttpClient {
19
+ private transport;
20
+ constructor(transport: Transport);
21
+ get<T>(path: string, init?: RequestOptions): Promise<T>;
22
+ post<T>(path: string, body?: unknown, init?: RequestOptions): Promise<T>;
23
+ put<T>(path: string, body?: unknown, init?: RequestOptions): Promise<T>;
24
+ delete<T>(path: string, init?: RequestOptions): Promise<T>;
25
+ patch<T>(path: string, body?: unknown, init?: RequestOptions): Promise<T>;
26
+ head(path: string, init?: RequestOptions): Promise<{
27
+ headers: Record<string, string>;
28
+ status: number;
29
+ }>;
30
+ request<T>(path: string, init?: RequestOptions): Promise<T>;
31
+ private makeRequest;
32
+ private buildUrl;
33
+ private createAbortSignal;
34
+ private buildHeaders;
35
+ private parseResponse;
36
+ private getBodyText;
37
+ }
38
+ //# sourceMappingURL=web-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-client.d.ts","sourceRoot":"","sources":["../../src/http-client/web-client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,SAAS,EACT,cAAc,EAEf,MAAM,cAAc,CAAC;AAItB,qBAAa,SAAU,SAAQ,KAAK;IAIzB,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,OAAO;IAChB,QAAQ,CAAC,EAAE,MAAM;IAP1B,IAAI,cAAwB;gBAGnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM;IAK1B,MAAM,IAAI;QACR,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;CASF;AAYD,qBAAa,aAAc,YAAW,UAAU;IAClC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAElC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvD,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,GAAG,CAAC,CAAC,EACT,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,KAAK,CAAC,CAAC,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAYzD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;YAInD,WAAW;IAyJzB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,iBAAiB;YAyBX,YAAY;YAqCZ,aAAa;YAmBb,WAAW;CAQ1B"}