@fluxfast/core 0.0.0-oidc-bootstrap.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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -0
  3. package/dist/cache.d.ts +18 -0
  4. package/dist/cache.d.ts.map +1 -0
  5. package/dist/cache.js +50 -0
  6. package/dist/cache.js.map +1 -0
  7. package/dist/errors.d.ts +33 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +75 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/events.d.ts +62 -0
  12. package/dist/events.d.ts.map +1 -0
  13. package/dist/events.js +45 -0
  14. package/dist/events.js.map +1 -0
  15. package/dist/history.d.ts +19 -0
  16. package/dist/history.d.ts.map +1 -0
  17. package/dist/history.js +55 -0
  18. package/dist/history.js.map +1 -0
  19. package/dist/index.d.ts +14 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +30 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/mutation.d.ts +6 -0
  24. package/dist/mutation.d.ts.map +1 -0
  25. package/dist/mutation.js +62 -0
  26. package/dist/mutation.js.map +1 -0
  27. package/dist/prefetch.d.ts +20 -0
  28. package/dist/prefetch.d.ts.map +1 -0
  29. package/dist/prefetch.js +78 -0
  30. package/dist/prefetch.js.map +1 -0
  31. package/dist/protocol.d.ts +49 -0
  32. package/dist/protocol.d.ts.map +1 -0
  33. package/dist/protocol.js +10 -0
  34. package/dist/protocol.js.map +1 -0
  35. package/dist/router.d.ts +67 -0
  36. package/dist/router.d.ts.map +1 -0
  37. package/dist/router.js +242 -0
  38. package/dist/router.js.map +1 -0
  39. package/dist/store.d.ts +93 -0
  40. package/dist/store.d.ts.map +1 -0
  41. package/dist/store.js +277 -0
  42. package/dist/store.js.map +1 -0
  43. package/dist/transport.d.ts +38 -0
  44. package/dist/transport.d.ts.map +1 -0
  45. package/dist/transport.js +218 -0
  46. package/dist/transport.js.map +1 -0
  47. package/package.json +45 -0
package/dist/store.js ADDED
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ /**
3
+ * Reactive ResourceStore with key-level subscriptions and stable snapshots.
4
+ * Framework-neutral, suitable for React useSyncExternalStore or other UI bindings.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.PageStore = exports.ResourceStore = void 0;
8
+ const mutation_1 = require("./mutation");
9
+ class ResourceStore {
10
+ records = new Map();
11
+ subscribers = new Map();
12
+ globalSubscribers = new Set();
13
+ lruOrder = [];
14
+ staleKeys = new Set();
15
+ maxResources;
16
+ constructor(options = {}) {
17
+ const maxResources = options.maxResources ?? 128;
18
+ if (!Number.isInteger(maxResources) || maxResources <= 0) {
19
+ throw new RangeError("maxResources must be a positive integer");
20
+ }
21
+ this.maxResources = maxResources;
22
+ }
23
+ /**
24
+ * Subscribe to changes for a specific resource key.
25
+ */
26
+ subscribe(key, callback) {
27
+ if (!this.subscribers.has(key)) {
28
+ this.subscribers.set(key, new Set());
29
+ }
30
+ this.subscribers.get(key).add(callback);
31
+ return () => {
32
+ const set = this.subscribers.get(key);
33
+ if (set) {
34
+ set.delete(callback);
35
+ if (set.size === 0) {
36
+ this.subscribers.delete(key);
37
+ }
38
+ }
39
+ };
40
+ }
41
+ /**
42
+ * Subscribe to all store changes.
43
+ */
44
+ subscribeAll(callback) {
45
+ this.globalSubscribers.add(callback);
46
+ return () => {
47
+ this.globalSubscribers.delete(callback);
48
+ };
49
+ }
50
+ /**
51
+ * Return stable snapshot of a resource value for useSyncExternalStore.
52
+ */
53
+ getSnapshot(key) {
54
+ const rec = this.records.get(key);
55
+ if (rec)
56
+ this.touchLru(key);
57
+ return rec ? rec.value : undefined;
58
+ }
59
+ /**
60
+ * Return snapshot for server-side rendering.
61
+ */
62
+ getServerSnapshot(key) {
63
+ const rec = this.records.get(key);
64
+ return rec ? rec.value : undefined;
65
+ }
66
+ /**
67
+ * Return full record metadata.
68
+ */
69
+ getRecord(key) {
70
+ const record = this.records.get(key);
71
+ if (record)
72
+ this.touchLru(key);
73
+ return record;
74
+ }
75
+ /**
76
+ * Insert or update a resource record. Only updates and notifies if version or value changed.
77
+ */
78
+ set(record) {
79
+ const existing = this.records.get(record.key);
80
+ if (existing && existing.version === record.version && !this.staleKeys.has(record.key)) {
81
+ this.touchLru(record.key);
82
+ return false;
83
+ }
84
+ const newRecord = Object.freeze({
85
+ key: record.key,
86
+ version: record.version,
87
+ value: record.value,
88
+ updatedAt: Date.now(),
89
+ });
90
+ this.records.set(record.key, newRecord);
91
+ this.staleKeys.delete(record.key);
92
+ this.touchLru(record.key);
93
+ this.evictIfNeeded();
94
+ this.notify(record.key);
95
+ return true;
96
+ }
97
+ /**
98
+ * Set multiple wire records from a protocol response.
99
+ */
100
+ setMany(resources) {
101
+ const updatedKeys = [];
102
+ for (const [key, record] of Object.entries(resources)) {
103
+ if (this.set({
104
+ key,
105
+ version: record.version,
106
+ value: record.value,
107
+ })) {
108
+ updatedKeys.push(key);
109
+ }
110
+ }
111
+ return updatedKeys;
112
+ }
113
+ /**
114
+ * Apply mutation patches to a specific resource.
115
+ */
116
+ patch(key, patches) {
117
+ const existing = this.records.get(key);
118
+ if (!existing) {
119
+ return false;
120
+ }
121
+ let val = existing.value;
122
+ for (const p of patches) {
123
+ val = (0, mutation_1.applyPatchToValue)(val, p);
124
+ }
125
+ const newRecord = Object.freeze({
126
+ key,
127
+ version: `${existing.version}_p${Date.now().toString(36)}`,
128
+ value: val,
129
+ updatedAt: Date.now(),
130
+ });
131
+ this.records.set(key, newRecord);
132
+ this.staleKeys.add(key);
133
+ this.touchLru(key);
134
+ this.notify(key);
135
+ return true;
136
+ }
137
+ /**
138
+ * Invalidate a resource key.
139
+ */
140
+ invalidate(key) {
141
+ if (this.records.has(key)) {
142
+ this.records.delete(key);
143
+ this.staleKeys.delete(key);
144
+ this.removeFromLru(key);
145
+ this.notify(key);
146
+ }
147
+ }
148
+ /** Keep the last value visible while excluding its version from revalidation. */
149
+ markStale(key) {
150
+ if (this.records.has(key)) {
151
+ this.staleKeys.add(key);
152
+ }
153
+ }
154
+ isStale(key) {
155
+ return this.staleKeys.has(key);
156
+ }
157
+ hasSubscribers(key) {
158
+ return (this.subscribers.get(key)?.size ?? 0) > 0;
159
+ }
160
+ /**
161
+ * Export map of known versions for X-FluxFast-Known header.
162
+ */
163
+ exportKnownVersions(limit = 100) {
164
+ const result = {};
165
+ const safeLimit = Number.isFinite(limit)
166
+ ? Math.max(0, Math.min(100, Math.floor(limit)))
167
+ : 100;
168
+ if (safeLimit === 0)
169
+ return result;
170
+ const keys = this.lruOrder.slice(-safeLimit).reverse();
171
+ for (const key of keys) {
172
+ const rec = this.records.get(key);
173
+ if (rec && rec.version && !this.staleKeys.has(key)) {
174
+ result[key] = rec.version;
175
+ }
176
+ }
177
+ return result;
178
+ }
179
+ /**
180
+ * Clear all records (e.g. upon user logout).
181
+ */
182
+ clear() {
183
+ const allKeys = Array.from(this.records.keys());
184
+ this.records.clear();
185
+ this.staleKeys.clear();
186
+ this.lruOrder = [];
187
+ for (const key of allKeys) {
188
+ this.notify(key);
189
+ }
190
+ }
191
+ notify(key) {
192
+ const keySubs = this.subscribers.get(key);
193
+ if (keySubs) {
194
+ for (const cb of Array.from(keySubs)) {
195
+ try {
196
+ cb();
197
+ }
198
+ catch (e) {
199
+ console.error(`[fluxfast] Error in ResourceStore subscriber for '${key}':`, e);
200
+ }
201
+ }
202
+ }
203
+ for (const cb of Array.from(this.globalSubscribers)) {
204
+ try {
205
+ cb();
206
+ }
207
+ catch (e) {
208
+ console.error("[fluxfast] Error in ResourceStore global subscriber:", e);
209
+ }
210
+ }
211
+ }
212
+ touchLru(key) {
213
+ this.removeFromLru(key);
214
+ this.lruOrder.push(key);
215
+ }
216
+ removeFromLru(key) {
217
+ const idx = this.lruOrder.indexOf(key);
218
+ if (idx !== -1) {
219
+ this.lruOrder.splice(idx, 1);
220
+ }
221
+ }
222
+ evictIfNeeded() {
223
+ while (this.records.size > this.maxResources) {
224
+ const oldestKey = this.lruOrder.shift();
225
+ if (oldestKey === undefined) {
226
+ return;
227
+ }
228
+ if (this.records.delete(oldestKey)) {
229
+ this.staleKeys.delete(oldestKey);
230
+ this.notify(oldestKey);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ exports.ResourceStore = ResourceStore;
236
+ class PageStore {
237
+ state;
238
+ subscribers = new Set();
239
+ constructor(initialPage) {
240
+ this.state = initialPage
241
+ ? {
242
+ component: initialPage.component,
243
+ url: initialPage.url,
244
+ meta: initialPage.meta || {},
245
+ }
246
+ : { component: "", url: "", meta: {} };
247
+ }
248
+ subscribe(callback) {
249
+ this.subscribers.add(callback);
250
+ return () => {
251
+ this.subscribers.delete(callback);
252
+ };
253
+ }
254
+ getSnapshot() {
255
+ return this.state;
256
+ }
257
+ setPage(page) {
258
+ this.state = {
259
+ component: page.component,
260
+ url: page.url,
261
+ meta: page.meta || {},
262
+ };
263
+ for (const cb of Array.from(this.subscribers)) {
264
+ try {
265
+ cb();
266
+ }
267
+ catch (e) {
268
+ console.error("[fluxfast] Error in PageStore subscriber:", e);
269
+ }
270
+ }
271
+ }
272
+ clear() {
273
+ this.setPage({ component: "", url: "", meta: {} });
274
+ }
275
+ }
276
+ exports.PageStore = PageStore;
277
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /** Framework-neutral transport abstraction and native Fetch implementation. */
2
+ import { MutationEnvelope, PageEnvelope } from "./protocol";
3
+ export interface VisitTransportRequest {
4
+ url: string;
5
+ visitId: string;
6
+ knownVersions?: Record<string, string>;
7
+ only?: string[];
8
+ signal?: AbortSignal;
9
+ headers?: Record<string, string>;
10
+ }
11
+ export interface MutationTransportRequest {
12
+ url: string;
13
+ method?: string;
14
+ data?: unknown;
15
+ signal?: AbortSignal;
16
+ headers?: Record<string, string>;
17
+ }
18
+ export interface FluxTransport {
19
+ visit(request: VisitTransportRequest): Promise<PageEnvelope>;
20
+ mutate(request: MutationTransportRequest): Promise<MutationEnvelope>;
21
+ }
22
+ /** Return an encoded safe header, or undefined when the optimization must be omitted. */
23
+ export declare function encodeKnownVersions(knownVersions: Record<string, string> | undefined): string | undefined;
24
+ export declare function assertPageEnvelope(data: unknown): asserts data is PageEnvelope;
25
+ export declare function assertMutationEnvelope(data: unknown): asserts data is MutationEnvelope;
26
+ export declare class FetchTransport implements FluxTransport {
27
+ private readonly baseUrl;
28
+ constructor(baseUrl?: string);
29
+ private resolveUrl;
30
+ visit(request: VisitTransportRequest): Promise<PageEnvelope>;
31
+ mutate(request: MutationTransportRequest): Promise<MutationEnvelope>;
32
+ private readResponse;
33
+ private throwForError;
34
+ private handlePageResponse;
35
+ private handleMutationResponse;
36
+ }
37
+ export declare function createFetchTransport(baseUrl?: string): FetchTransport;
38
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,OAAO,EAEL,gBAAgB,EAChB,YAAY,EAGb,MAAM,YAAY,CAAC;AAcpB,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7D,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACtE;AAaD,yFAAyF;AACzF,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAChD,MAAM,GAAG,SAAS,CAkBpB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAkB9E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,gBAAgB,CA2CtF;AAkBD,qBAAa,cAAe,YAAW,aAAa;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,YAAY,OAAO,GAAE,MAAW,EAE/B;IAED,OAAO,CAAC,UAAU;IAKZ,KAAK,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwBjE;IAEK,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgBzE;YAEa,YAAY;IAiB1B,OAAO,CAAC,aAAa;YAeP,kBAAkB;YAOlB,sBAAsB;CAUrC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,MAAW,GAAG,cAAc,CAEzE"}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ /** Framework-neutral transport abstraction and native Fetch implementation. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.FetchTransport = void 0;
5
+ exports.encodeKnownVersions = encodeKnownVersions;
6
+ exports.assertPageEnvelope = assertPageEnvelope;
7
+ exports.assertMutationEnvelope = assertMutationEnvelope;
8
+ exports.createFetchTransport = createFetchTransport;
9
+ const protocol_1 = require("./protocol");
10
+ const errors_1 = require("./errors");
11
+ const MAX_KNOWN_RESOURCES = 100;
12
+ const MAX_KNOWN_BYTES = 16 * 1024;
13
+ const MAX_KEY_LENGTH = 128;
14
+ const MAX_VERSION_LENGTH = 128;
15
+ function isObject(value) {
16
+ return typeof value === "object" && value !== null && !Array.isArray(value);
17
+ }
18
+ function encodeBase64Url(bytes) {
19
+ let binary = "";
20
+ for (const byte of bytes)
21
+ binary += String.fromCharCode(byte);
22
+ const encoded = btoa(binary);
23
+ return encoded.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
24
+ }
25
+ /** Return an encoded safe header, or undefined when the optimization must be omitted. */
26
+ function encodeKnownVersions(knownVersions) {
27
+ if (!knownVersions)
28
+ return undefined;
29
+ const safe = {};
30
+ for (const [key, version] of Object.entries(knownVersions)) {
31
+ if (Object.keys(safe).length >= MAX_KNOWN_RESOURCES)
32
+ break;
33
+ if (key.length <= MAX_KEY_LENGTH &&
34
+ version.length <= MAX_VERSION_LENGTH) {
35
+ safe[key] = version;
36
+ }
37
+ }
38
+ if (Object.keys(safe).length === 0)
39
+ return undefined;
40
+ const bytes = new TextEncoder().encode(JSON.stringify(safe));
41
+ if (bytes.byteLength > MAX_KNOWN_BYTES)
42
+ return undefined;
43
+ return encodeBase64Url(bytes);
44
+ }
45
+ function assertPageEnvelope(data) {
46
+ if (!isObject(data) || data.protocol !== protocol_1.PROTOCOL_VERSION) {
47
+ const received = isObject(data) ? data.protocol : undefined;
48
+ throw new errors_1.VersionMismatchError(`Protocol mismatch: expected '${protocol_1.PROTOCOL_VERSION}', got '${String(received)}'`);
49
+ }
50
+ if (!isObject(data.page) || typeof data.page.component !== "string" || typeof data.page.url !== "string") {
51
+ throw new errors_1.ProtocolError("Invalid PageEnvelope: page descriptor is missing or malformed");
52
+ }
53
+ if (!isObject(data.resources)) {
54
+ throw new errors_1.ProtocolError("Invalid PageEnvelope: resources must be an object");
55
+ }
56
+ for (const [key, record] of Object.entries(data.resources)) {
57
+ if (!isObject(record) || typeof record.version !== "string" || !("value" in record)) {
58
+ throw new errors_1.ProtocolError(`Invalid PageEnvelope resource record for '${key}'`);
59
+ }
60
+ }
61
+ }
62
+ function assertMutationEnvelope(data) {
63
+ if (!isObject(data) || data.protocol !== protocol_1.PROTOCOL_VERSION) {
64
+ const received = isObject(data) ? data.protocol : undefined;
65
+ throw new errors_1.VersionMismatchError(`Protocol mismatch: expected '${protocol_1.PROTOCOL_VERSION}', got '${String(received)}'`);
66
+ }
67
+ if (!isObject(data.mutation)) {
68
+ throw new errors_1.MutationError("Invalid MutationEnvelope: mutation payload is missing");
69
+ }
70
+ if (data.mutation.invalidate !== undefined && !Array.isArray(data.mutation.invalidate)) {
71
+ throw new errors_1.MutationError("Invalid MutationEnvelope: invalidate must be an array");
72
+ }
73
+ if (data.mutation.patches !== undefined && !isObject(data.mutation.patches)) {
74
+ throw new errors_1.MutationError("Invalid MutationEnvelope: patches must be an object");
75
+ }
76
+ const allowedOps = new Set([
77
+ "replace-resource",
78
+ "merge-object",
79
+ "replace-item",
80
+ "remove-item",
81
+ "append-item",
82
+ ]);
83
+ for (const [key, patches] of Object.entries(data.mutation.patches ?? {})) {
84
+ if (!Array.isArray(patches)) {
85
+ throw new errors_1.MutationError(`Invalid MutationEnvelope patches for '${key}'`);
86
+ }
87
+ for (const patch of patches) {
88
+ if (!isObject(patch) || typeof patch.op !== "string" || !allowedOps.has(patch.op)) {
89
+ throw new errors_1.MutationError(`Invalid mutation patch operation for '${key}'`);
90
+ }
91
+ const hasIdentity = "id" in patch || (isObject(patch.match) && Object.keys(patch.match).length > 0);
92
+ if ((["replace-resource", "merge-object", "append-item"].includes(patch.op) && !("value" in patch)) ||
93
+ (["replace-item", "remove-item"].includes(patch.op) && !hasIdentity) ||
94
+ (patch.op === "replace-item" && !("value" in patch))) {
95
+ throw new errors_1.MutationError(`Incomplete '${patch.op}' patch for '${key}'`);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ function validationDetails(data) {
101
+ if (!isObject(data))
102
+ return undefined;
103
+ if (isObject(data.error) && isObject(data.error.details)) {
104
+ return data.error.details;
105
+ }
106
+ if (!Array.isArray(data.detail))
107
+ return undefined;
108
+ const errors = {};
109
+ for (const issue of data.detail) {
110
+ if (!isObject(issue) || !Array.isArray(issue.loc))
111
+ continue;
112
+ const field = String(issue.loc.at(-1) ?? "general");
113
+ (errors[field] ??= []).push(String(issue.msg ?? "Invalid value"));
114
+ }
115
+ return errors;
116
+ }
117
+ class FetchTransport {
118
+ baseUrl;
119
+ constructor(baseUrl = "") {
120
+ this.baseUrl = baseUrl.replace(/\/$/, "");
121
+ }
122
+ resolveUrl(path) {
123
+ if (/^https?:\/\//i.test(path))
124
+ return path;
125
+ return `${this.baseUrl}${path.startsWith("/") ? "" : "/"}${path}`;
126
+ }
127
+ async visit(request) {
128
+ const headers = {
129
+ ...(request.headers ?? {}),
130
+ Accept: protocol_1.PROTOCOL_MEDIA_TYPE,
131
+ "X-FluxFast": "1",
132
+ "X-FluxFast-Protocol": "1",
133
+ "X-FluxFast-Visit": request.visitId,
134
+ };
135
+ const encodedKnown = encodeKnownVersions(request.knownVersions);
136
+ if (encodedKnown)
137
+ headers["X-FluxFast-Known"] = encodedKnown;
138
+ if (request.only?.length) {
139
+ const only = request.only
140
+ .filter(key => key.length <= MAX_KEY_LENGTH && !key.includes(",") && !/[\u0000-\u001f]/.test(key))
141
+ .slice(0, MAX_KNOWN_RESOURCES);
142
+ if (only.length)
143
+ headers["X-FluxFast-Only"] = only.join(",");
144
+ }
145
+ const response = await fetch(this.resolveUrl(request.url), {
146
+ method: "GET",
147
+ headers,
148
+ signal: request.signal,
149
+ credentials: "include",
150
+ });
151
+ return this.handlePageResponse(response);
152
+ }
153
+ async mutate(request) {
154
+ const headers = {
155
+ ...(request.headers ?? {}),
156
+ Accept: protocol_1.PROTOCOL_MEDIA_TYPE,
157
+ "Content-Type": "application/json",
158
+ "X-FluxFast": "1",
159
+ "X-FluxFast-Protocol": "1",
160
+ };
161
+ const response = await fetch(this.resolveUrl(request.url), {
162
+ method: request.method ?? "POST",
163
+ headers,
164
+ body: request.data === undefined ? undefined : JSON.stringify(request.data),
165
+ signal: request.signal,
166
+ credentials: "include",
167
+ });
168
+ return this.handleMutationResponse(response);
169
+ }
170
+ async readResponse(response) {
171
+ const contentType = response.headers.get("content-type") ?? "";
172
+ if (contentType && !contentType.includes("json")) {
173
+ throw new errors_1.ProtocolError(`Expected a JSON FluxFast response from ${response.url || "request"}, got '${contentType}'`);
174
+ }
175
+ try {
176
+ return await response.json();
177
+ }
178
+ catch {
179
+ throw new errors_1.TransportError(`Failed to parse JSON response from ${response.url || "request"} (status ${response.status})`, response.status);
180
+ }
181
+ }
182
+ throwForError(response, data) {
183
+ if (response.ok)
184
+ return;
185
+ if (response.status === 422) {
186
+ const details = validationDetails(data);
187
+ if (details)
188
+ throw new errors_1.ValidationError("Request validation failed", details);
189
+ }
190
+ const message = isObject(data) && isObject(data.error) && typeof data.error.message === "string"
191
+ ? data.error.message
192
+ : isObject(data) && typeof data.detail === "string"
193
+ ? data.detail
194
+ : `Request failed with HTTP status ${response.status}`;
195
+ throw new errors_1.TransportError(message, response.status, data);
196
+ }
197
+ async handlePageResponse(response) {
198
+ const data = await this.readResponse(response);
199
+ this.throwForError(response, data);
200
+ assertPageEnvelope(data);
201
+ return data;
202
+ }
203
+ async handleMutationResponse(response) {
204
+ const data = await this.readResponse(response);
205
+ this.throwForError(response, data);
206
+ assertMutationEnvelope(data);
207
+ const externalRedirect = response.headers.get("X-FluxFast-External-Redirect");
208
+ if (externalRedirect && !data.mutation.externalRedirect) {
209
+ data.mutation.externalRedirect = externalRedirect;
210
+ }
211
+ return data;
212
+ }
213
+ }
214
+ exports.FetchTransport = FetchTransport;
215
+ function createFetchTransport(baseUrl = "") {
216
+ return new FetchTransport(baseUrl);
217
+ }
218
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@fluxfast/core",
3
+ "version": "0.0.0-oidc-bootstrap.0",
4
+ "license": "MIT",
5
+ "description": "Framework-neutral core client runtime for FluxFast",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/El37628/FluxFast.git",
9
+ "directory": "packages/core"
10
+ },
11
+ "homepage": "https://github.com/El37628/FluxFast#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/El37628/FluxFast/issues"
14
+ },
15
+ "engines": {
16
+ "node": "^22.0.0 || ^24.0.0"
17
+ },
18
+ "publishConfig": {
19
+ "access": "public",
20
+ "registry": "https://registry.npmjs.org/"
21
+ },
22
+ "main": "./dist/index.js",
23
+ "module": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js",
32
+ "require": "./dist/index.js",
33
+ "default": "./dist/index.js"
34
+ }
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "typecheck": "tsc --noEmit",
39
+ "test": "vitest run"
40
+ },
41
+ "devDependencies": {
42
+ "typescript": "^7.0.2",
43
+ "vitest": "^4.1.11"
44
+ }
45
+ }