@cedvict/http-guardian 0.0.1-next.0 → 0.0.1-next.10

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 (76) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +21 -1
  3. package/README.md +223 -0
  4. package/dist/aliases.d.ts +35 -0
  5. package/dist/aliases.d.ts.map +1 -0
  6. package/dist/auth/authConfig.d.ts +91 -0
  7. package/dist/auth/authConfig.d.ts.map +1 -0
  8. package/dist/cache/inFlight.d.ts +10 -0
  9. package/dist/cache/inFlight.d.ts.map +1 -0
  10. package/dist/cache/key.d.ts +10 -0
  11. package/dist/cache/key.d.ts.map +1 -0
  12. package/dist/cache/memoryCache.d.ts +16 -0
  13. package/dist/cache/memoryCache.d.ts.map +1 -0
  14. package/dist/cache/types.d.ts +13 -0
  15. package/dist/cache/types.d.ts.map +1 -0
  16. package/dist/client/errors.d.ts +29 -0
  17. package/dist/client/errors.d.ts.map +1 -0
  18. package/dist/client/httpClient.d.ts +13 -0
  19. package/dist/client/httpClient.d.ts.map +1 -0
  20. package/dist/client/types.d.ts +84 -0
  21. package/dist/client/types.d.ts.map +1 -0
  22. package/dist/guards/bearerRefreshGuard.d.ts +45 -0
  23. package/dist/guards/bearerRefreshGuard.d.ts.map +1 -0
  24. package/dist/guards/cookieSafeRefreshGuard.d.ts +40 -0
  25. package/dist/guards/cookieSafeRefreshGuard.d.ts.map +1 -0
  26. package/dist/guards/correlationIdGuard.d.ts +18 -0
  27. package/dist/guards/correlationIdGuard.d.ts.map +1 -0
  28. package/dist/guards/csrfGuard.d.ts +25 -0
  29. package/dist/guards/csrfGuard.d.ts.map +1 -0
  30. package/dist/guards/idempotencyGuard.d.ts +25 -0
  31. package/dist/guards/idempotencyGuard.d.ts.map +1 -0
  32. package/dist/guards/instrumentGuard.d.ts +12 -0
  33. package/dist/guards/instrumentGuard.d.ts.map +1 -0
  34. package/dist/guards/retryGuard.d.ts +12 -0
  35. package/dist/guards/retryGuard.d.ts.map +1 -0
  36. package/dist/guards/types.d.ts +3 -0
  37. package/dist/guards/types.d.ts.map +1 -0
  38. package/dist/guards/unauthorizedGuard.d.ts +19 -0
  39. package/dist/guards/unauthorizedGuard.d.ts.map +1 -0
  40. package/dist/index.cjs +1734 -0
  41. package/dist/index.cjs.map +1 -0
  42. package/dist/index.d.ts +27 -266
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +1077 -42
  45. package/dist/index.js.map +1 -1
  46. package/dist/internal/authGuard.d.ts +4 -0
  47. package/dist/internal/authGuard.d.ts.map +1 -0
  48. package/dist/internal/compose.d.ts +7 -0
  49. package/dist/internal/compose.d.ts.map +1 -0
  50. package/dist/internal/context.d.ts +57 -0
  51. package/dist/internal/context.d.ts.map +1 -0
  52. package/dist/internal/headersPolyfill.d.ts +25 -0
  53. package/dist/internal/headersPolyfill.d.ts.map +1 -0
  54. package/dist/internal/stableStringify.d.ts +2 -0
  55. package/dist/internal/stableStringify.d.ts.map +1 -0
  56. package/dist/internal/url.d.ts +3 -0
  57. package/dist/internal/url.d.ts.map +1 -0
  58. package/dist/notify/defaults.d.ts +9 -0
  59. package/dist/notify/defaults.d.ts.map +1 -0
  60. package/dist/notify/types.d.ts +33 -0
  61. package/dist/notify/types.d.ts.map +1 -0
  62. package/dist/parsing/apiParserStructured.d.ts +94 -0
  63. package/dist/parsing/apiParserStructured.d.ts.map +1 -0
  64. package/dist/parsing/presets.d.ts +15 -0
  65. package/dist/parsing/presets.d.ts.map +1 -0
  66. package/dist/parsing/schemaAdapter.d.ts +18 -0
  67. package/dist/parsing/schemaAdapter.d.ts.map +1 -0
  68. package/dist/parsing/shapeParser.d.ts +8 -0
  69. package/dist/parsing/shapeParser.d.ts.map +1 -0
  70. package/dist/plugins/types.d.ts +22 -0
  71. package/dist/plugins/types.d.ts.map +1 -0
  72. package/dist/presets/presetBuilder.d.ts +181 -0
  73. package/dist/presets/presetBuilder.d.ts.map +1 -0
  74. package/dist/publicTypes.d.ts +12 -0
  75. package/dist/publicTypes.d.ts.map +1 -0
  76. package/package.json +10 -5
package/dist/index.d.ts CHANGED
@@ -1,266 +1,27 @@
1
- type AuthConfig = {
2
- mode: "bearer";
3
- getToken: () => string | null | Promise<string | null>;
4
- headerName?: string;
5
- prefix?: string;
6
- } | {
7
- mode: "cookie";
8
- credentials?: RequestCredentials;
9
- csrf?: {
10
- headerName: string;
11
- getToken: () => string | null | Promise<string | null>;
12
- };
13
- } | {
14
- mode: "none";
15
- };
16
- declare function bearerAuth(getToken: () => string | null | Promise<string | null>, opts?: {
17
- headerName?: string;
18
- prefix?: string;
19
- }): AuthConfig;
20
- declare function cookieAuth(opts?: {
21
- credentials?: RequestCredentials;
22
- csrf?: {
23
- headerName: string;
24
- getToken: () => string | null | Promise<string | null>;
25
- };
26
- }): AuthConfig;
27
- declare function noAuth(): AuthConfig;
28
-
29
- type AppError = {
30
- message: string;
31
- code?: string;
32
- field?: string;
33
- details?: unknown;
34
- };
35
- declare class NetworkError extends Error {
36
- readonly cause?: unknown | undefined;
37
- name: string;
38
- constructor(message: string, cause?: unknown | undefined);
39
- }
40
- declare class TimeoutError extends Error {
41
- name: string;
42
- constructor(message?: string);
43
- }
44
- declare class RedirectError extends Error {
45
- readonly fromUrl: string;
46
- readonly toUrl?: string | undefined;
47
- name: string;
48
- constructor(message: string, fromUrl: string, toUrl?: string | undefined);
49
- }
50
- declare class ParseError extends Error {
51
- readonly raw?: unknown | undefined;
52
- readonly cause?: unknown | undefined;
53
- name: string;
54
- constructor(message: string, raw?: unknown | undefined, cause?: unknown | undefined);
55
- }
56
-
57
- type NotifyEvent = {
58
- type: "http-error";
59
- level: "error" | "warning";
60
- title: string;
61
- message: string;
62
- status: number;
63
- errors?: AppError[];
64
- url: string;
65
- } | {
66
- type: "network-error";
67
- level: "error";
68
- title: string;
69
- message: string;
70
- url: string;
71
- } | {
72
- type: "parse-error";
73
- level: "error";
74
- title: string;
75
- message: string;
76
- url: string;
77
- };
78
- type Notifier = {
79
- notify: (event: NotifyEvent) => void;
80
- };
81
-
82
- type RequestContext = {
83
- method: HttpMethod;
84
- url: string;
85
- headers: Headers;
86
- credentials?: RequestCredentials;
87
- redirect?: RequestRedirect;
88
- body?: BodyInit;
89
- signal?: AbortSignal;
90
- timeoutMs?: number;
91
- attempt: number;
92
- auth: AuthConfig;
93
- noAuth?: boolean;
94
- notifier?: Notifier;
95
- idempotencyKey?: string;
96
- _fetch: typeof fetch;
97
- };
98
-
99
- type Guard = (ctx: RequestContext, next: (ctx: RequestContext) => Promise<Response>) => Promise<Response>;
100
-
101
- type CacheEntry = {
102
- expiresAt: number;
103
- value: unknown;
104
- tags?: string[];
105
- };
106
- type CacheStore = {
107
- get: (key: string) => CacheEntry | undefined;
108
- set: (key: string, entry: CacheEntry) => void;
109
- delete: (key: string) => void;
110
- invalidateByTag: (tag: string) => number;
111
- clear: () => void;
112
- };
113
-
114
- type ShapeParser = {
115
- isSuccess: (raw: unknown, status: number) => boolean;
116
- getData: (raw: unknown) => unknown;
117
- getErrors: (raw: unknown, status: number) => AppError[];
118
- };
119
- declare function createShapeParser(p: ShapeParser): ShapeParser;
120
-
121
- type Schema<T> = {
122
- parse: (input: unknown) => T;
123
- };
124
- declare function schema<T>(impl: Schema<T>): Schema<T>;
125
- /**
126
- * Optional helper to wrap a zod-like schema without adding a dependency.
127
- */
128
- declare function fromZod<T>(zodSchema: {
129
- parse?: (i: unknown) => T;
130
- safeParse?: (i: unknown) => {
131
- success: true;
132
- data: T;
133
- } | {
134
- success: false;
135
- error: unknown;
136
- };
137
- }): Schema<T>;
138
-
139
- type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
140
- type RedirectMode = "follow" | "manual" | "error";
141
- type RedirectPolicy = {
142
- mode: RedirectMode;
143
- maxHops?: number;
144
- onRedirect?: (info: {
145
- fromUrl: string;
146
- toUrl: string;
147
- status: number;
148
- hop: number;
149
- method: HttpMethod;
150
- }) => {
151
- action: "follow";
152
- } | {
153
- action: "deny";
154
- reason?: string;
155
- } | {
156
- action: "modify";
157
- url: string;
158
- };
159
- };
160
- type CacheOptions = {
161
- ttlMs: number;
162
- key?: string;
163
- tags?: string[];
164
- policy?: "networkFirst" | "cacheFirst" | "cacheOnly" | "networkOnly" | "staleWhileRevalidate";
165
- dedupe?: boolean;
166
- };
167
- type RequestOptions<T> = {
168
- query?: Record<string, string | number | boolean | null | undefined>;
169
- headers?: Record<string, string | undefined>;
170
- json?: unknown;
171
- body?: BodyInit;
172
- signal?: AbortSignal;
173
- timeoutMs?: number;
174
- cache?: CacheOptions;
175
- dataSchema?: Schema<T>;
176
- notifier?: Notifier;
177
- noAuth?: boolean;
178
- idempotencyKey?: string;
179
- };
180
- type ClientResult<T> = {
181
- ok: true;
182
- status: number;
183
- headers: Headers;
184
- data: T;
185
- raw: unknown;
186
- url: string;
187
- } | {
188
- ok: false;
189
- status: number;
190
- headers: Headers;
191
- errors: AppError[];
192
- raw: unknown;
193
- url: string;
194
- };
195
- type HttpClientOptions = {
196
- baseUrl: string;
197
- fetch?: typeof fetch;
198
- auth: AuthConfig;
199
- parser: ShapeParser;
200
- cache?: CacheStore;
201
- notifier?: Notifier;
202
- redirects?: RedirectPolicy;
203
- defaults?: {
204
- headers?: Record<string, string>;
205
- timeoutMs?: number;
206
- shouldNotify?: (result: {
207
- ok: boolean;
208
- status: number;
209
- }) => boolean;
210
- };
211
- guards?: Guard[];
212
- };
213
-
214
- declare function createHttpClient(opts: HttpClientOptions): {
215
- get: <T>(path: string, ro?: RequestOptions<T>) => Promise<ClientResult<T>>;
216
- post: <T>(path: string, ro?: RequestOptions<T>) => Promise<ClientResult<T>>;
217
- put: <T>(path: string, ro?: RequestOptions<T>) => Promise<ClientResult<T>>;
218
- patch: <T>(path: string, ro?: RequestOptions<T>) => Promise<ClientResult<T>>;
219
- delete: <T>(path: string, ro?: RequestOptions<T>) => Promise<ClientResult<T>>;
220
- cache: {
221
- invalidateByTag: (tag: string) => number;
222
- clear: () => void | undefined;
223
- };
224
- };
225
-
226
- /**
227
- * Simple retry guard for transient HTTP statuses.
228
- * Note: this doesn't retry network errors thrown by fetch itself (those are handled by the client wrapper).
229
- */
230
- declare function retryGuard(opts?: {
231
- retries?: number;
232
- retryOn?: number[];
233
- baseDelayMs?: number;
234
- maxDelayMs?: number;
235
- }): Guard;
236
-
237
- /**
238
- * Simple in-memory LRU-ish cache with tag invalidation.
239
- */
240
- declare function memoryCache(opts?: {
241
- maxEntries?: number;
242
- }): CacheStore;
243
-
244
- declare function createApiParserRestClassic(opts?: {
245
- successField?: string;
246
- dataField?: string;
247
- errorField?: string;
248
- messageField?: string;
249
- }): ShapeParser;
250
- declare function createApiParserLaravel(opts?: {
251
- dataField?: string;
252
- }): ShapeParser;
253
- declare function createApiParserNest(): ShapeParser;
254
- declare function createApiParserGraphQL(opts?: {
255
- allowPartialData?: boolean;
256
- }): ShapeParser;
257
-
258
- declare const consoleNotifier: Notifier;
259
- declare const alertNotifier: Notifier;
260
- /**
261
- * Returns an HTML string you can inject in your own UI layer (Tailwind classes).
262
- * Note: this package does not manipulate the DOM by itself.
263
- */
264
- declare function tailwindAlertRenderer(event: NotifyEvent): string;
265
-
266
- export { type AppError, type AuthConfig, type CacheEntry, type CacheOptions, type CacheStore, type ClientResult, type Guard, type HttpClientOptions, type HttpMethod, NetworkError, type Notifier, type NotifyEvent, ParseError, RedirectError, type RedirectMode, type RedirectPolicy, type RequestContext, type RequestOptions, type Schema, type ShapeParser, TimeoutError, alertNotifier, bearerAuth, consoleNotifier, cookieAuth, createApiParserGraphQL, createApiParserLaravel, createApiParserNest, createApiParserRestClassic, createHttpClient, createShapeParser, fromZod, memoryCache, noAuth, retryGuard, schema, tailwindAlertRenderer };
1
+ export * from "./client/httpClient.js";
2
+ export * from "./client/types.js";
3
+ export * from "./client/errors.js";
4
+ export * from "./auth/authConfig.js";
5
+ export * from "./guards/types.js";
6
+ export * from "./guards/retryGuard.js";
7
+ export * from "./guards/cookieSafeRefreshGuard.js";
8
+ export * from "./guards/bearerRefreshGuard.js";
9
+ export * from "./guards/csrfGuard.js";
10
+ export * from "./guards/correlationIdGuard.js";
11
+ export * from "./guards/idempotencyGuard.js";
12
+ export * from "./guards/unauthorizedGuard.js";
13
+ export * from "./guards/instrumentGuard.js";
14
+ export * from "./cache/types.js";
15
+ export * from "./cache/memoryCache.js";
16
+ export * from "./parsing/shapeParser.js";
17
+ export * from "./parsing/schemaAdapter.js";
18
+ export * from "./parsing/presets.js";
19
+ export * from "./parsing/apiParserStructured.js";
20
+ export * from "./notify/types.js";
21
+ export * from "./notify/defaults.js";
22
+ export * from "./presets/presetBuilder.js";
23
+ export * from "./plugins/types.js";
24
+ export * from "./aliases.js";
25
+ export type { RequestContext, RequestContextMeta } from "./internal/context.js";
26
+ export type * from "./publicTypes.js";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,sBAAsB,CAAC;AAErC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AAEjD,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AAErC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AAGnC,cAAc,cAAc,CAAC;AAG7B,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChF,mBAAmB,kBAAkB,CAAC"}