@astram/frontend-core 0.10.0 → 0.12.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.
- package/dist/agent/agentReducer.d.ts +27 -0
- package/dist/agent/agentReducer.d.ts.map +1 -0
- package/dist/agent/agentReducer.js +286 -0
- package/dist/agent/agentReducer.js.map +1 -0
- package/dist/agent/agentService.d.ts +136 -0
- package/dist/agent/agentService.d.ts.map +1 -0
- package/dist/agent/agentService.js +308 -0
- package/dist/agent/agentService.js.map +1 -0
- package/dist/agent/index.d.ts +14 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +10 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/scriptedTransport.d.ts +20 -0
- package/dist/agent/scriptedTransport.d.ts.map +1 -0
- package/dist/agent/scriptedTransport.js +122 -0
- package/dist/agent/scriptedTransport.js.map +1 -0
- package/dist/agent/sseParser.d.ts +45 -0
- package/dist/agent/sseParser.d.ts.map +1 -0
- package/dist/agent/sseParser.js +216 -0
- package/dist/agent/sseParser.js.map +1 -0
- package/dist/agent/types.d.ts +201 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/auth/index.d.ts +2 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +1 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/notificationService.d.ts +51 -1
- package/dist/auth/notificationService.d.ts.map +1 -1
- package/dist/auth/notificationService.js +102 -2
- package/dist/auth/notificationService.js.map +1 -1
- package/dist/http/refreshingHttp.d.ts +28 -1
- package/dist/http/refreshingHttp.d.ts.map +1 -1
- package/dist/http/refreshingHttp.js +19 -0
- package/dist/http/refreshingHttp.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
const CATEGORIES = ['announcement', 'personal'];
|
|
2
|
+
const SEVERITIES = ['info', 'success', 'warning'];
|
|
3
|
+
/** Most uuids one bulk call accepts. */
|
|
4
|
+
export const NOTIFICATION_BULK_MAX = 100;
|
|
2
5
|
/** Fixed failure text per status; anything else gets the call's own generic text. */
|
|
3
6
|
const FIXED_MESSAGES = {
|
|
4
7
|
0: 'Could not reach the server. Check your connection and try again.',
|
|
@@ -27,20 +30,57 @@ function toRow(raw) {
|
|
|
27
30
|
typeof r.createdAt !== 'string' ||
|
|
28
31
|
!isStringOrNull(r.body ?? null) ||
|
|
29
32
|
!isStringOrNull(r.link ?? null) ||
|
|
30
|
-
!isStringOrNull(r.readAt ?? null)
|
|
33
|
+
!isStringOrNull(r.readAt ?? null) ||
|
|
34
|
+
!isStringOrNull(r.archivedAt ?? null)) {
|
|
31
35
|
return null;
|
|
32
36
|
}
|
|
37
|
+
// A server before G-035 sends no label, severity or archive time: fall back, never drop the row.
|
|
33
38
|
return {
|
|
34
39
|
uuid: r.uuid,
|
|
35
40
|
category: r.category,
|
|
36
41
|
kind: r.kind,
|
|
42
|
+
kindLabel: typeof r.kindLabel === 'string' && r.kindLabel !== '' ? r.kindLabel : labelFromKind(r.kind),
|
|
43
|
+
severity: typeof r.severity === 'string' && SEVERITIES.includes(r.severity)
|
|
44
|
+
? r.severity
|
|
45
|
+
: 'info',
|
|
37
46
|
title: r.title,
|
|
38
47
|
body: (r.body ?? null),
|
|
39
48
|
link: (r.link ?? null),
|
|
40
49
|
createdAt: r.createdAt,
|
|
41
50
|
readAt: (r.readAt ?? null),
|
|
51
|
+
archivedAt: (r.archivedAt ?? null),
|
|
42
52
|
};
|
|
43
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* A readable label for a kind the server sent none for (a server before G-035), made like the
|
|
56
|
+
* server's generated label: last segment, `_` ⇒ space, first letter upper-case
|
|
57
|
+
* (`app.task_assigned` ⇒ "Task assigned"). Never the raw kind.
|
|
58
|
+
*/
|
|
59
|
+
function labelFromKind(kind) {
|
|
60
|
+
const words = kind
|
|
61
|
+
.slice(kind.lastIndexOf('.') + 1)
|
|
62
|
+
.split('_')
|
|
63
|
+
.filter((w) => w.length > 0)
|
|
64
|
+
.join(' ');
|
|
65
|
+
if (words === '')
|
|
66
|
+
return 'Notification';
|
|
67
|
+
const first = Array.from(words)[0];
|
|
68
|
+
const chars = Array.from(first.toUpperCase() + words.slice(first.length));
|
|
69
|
+
return chars.length > 40 ? `${chars.slice(0, 39).join('')}…` : chars.join('');
|
|
70
|
+
}
|
|
71
|
+
/** A well-formed kind option, or null (skipped). */
|
|
72
|
+
function toKindOption(raw) {
|
|
73
|
+
if (raw === null || typeof raw !== 'object')
|
|
74
|
+
return null;
|
|
75
|
+
const r = raw;
|
|
76
|
+
if (typeof r.kind !== 'string' ||
|
|
77
|
+
typeof r.label !== 'string' ||
|
|
78
|
+
typeof r.category !== 'string' ||
|
|
79
|
+
!CATEGORIES.includes(r.category)) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return { kind: r.kind, label: r.label, category: r.category };
|
|
83
|
+
}
|
|
44
84
|
/** A non-negative whole count, else 0. */
|
|
45
85
|
function count(v) {
|
|
46
86
|
return typeof v === 'number' && Number.isSafeInteger(v) && v >= 0 ? v : 0;
|
|
@@ -50,7 +90,7 @@ function positive(v) {
|
|
|
50
90
|
return typeof v === 'number' && Number.isSafeInteger(v) && v >= 1 ? v : undefined;
|
|
51
91
|
}
|
|
52
92
|
/**
|
|
53
|
-
* `?category&unread&page&limit`, omitting absent values (the server applies its defaults).
|
|
93
|
+
* `?category&unread&kind&status&from&to&search&page&limit`, omitting absent values (the server applies its defaults).
|
|
54
94
|
* Plain `encodeURIComponent` joins, as the other services (no `URLSearchParams` on React Native).
|
|
55
95
|
*/
|
|
56
96
|
function listQueryString(query) {
|
|
@@ -60,6 +100,17 @@ function listQueryString(query) {
|
|
|
60
100
|
parts.push(`category=${encodeURIComponent(q.category)}`);
|
|
61
101
|
if (q.unread === true)
|
|
62
102
|
parts.push('unread=true');
|
|
103
|
+
if (q.kind)
|
|
104
|
+
parts.push(`kind=${encodeURIComponent(q.kind)}`);
|
|
105
|
+
if (q.status !== undefined)
|
|
106
|
+
parts.push(`status=${encodeURIComponent(q.status)}`);
|
|
107
|
+
if (q.from)
|
|
108
|
+
parts.push(`from=${encodeURIComponent(q.from)}`);
|
|
109
|
+
if (q.to)
|
|
110
|
+
parts.push(`to=${encodeURIComponent(q.to)}`);
|
|
111
|
+
const search = typeof q.search === 'string' ? q.search.trim() : '';
|
|
112
|
+
if (search !== '')
|
|
113
|
+
parts.push(`search=${encodeURIComponent(search)}`);
|
|
63
114
|
const page = positive(q.page);
|
|
64
115
|
if (page !== undefined)
|
|
65
116
|
parts.push(`page=${encodeURIComponent(String(page))}`);
|
|
@@ -133,6 +184,55 @@ export function createNotificationService(http) {
|
|
|
133
184
|
}
|
|
134
185
|
return fail(r.status, 'Could not mark the notifications as read.');
|
|
135
186
|
},
|
|
187
|
+
/** The kinds the user has notices of → { ok:true, kinds } | fail. */
|
|
188
|
+
async listNotificationKinds(accessToken, signal) {
|
|
189
|
+
const r = await http.get('/account/notifications/kinds', {
|
|
190
|
+
bearerToken: accessToken,
|
|
191
|
+
...(signal ? { signal } : {}),
|
|
192
|
+
});
|
|
193
|
+
if (r.ok) {
|
|
194
|
+
const body = (r.data ?? {});
|
|
195
|
+
const raw = Array.isArray(body.kinds) ? body.kinds : [];
|
|
196
|
+
const kinds = [];
|
|
197
|
+
for (const k of raw) {
|
|
198
|
+
const option = toKindOption(k);
|
|
199
|
+
if (option !== null)
|
|
200
|
+
kinds.push(option);
|
|
201
|
+
}
|
|
202
|
+
return { ok: true, kinds };
|
|
203
|
+
}
|
|
204
|
+
return fail(r.status, 'Could not load notification types.');
|
|
205
|
+
},
|
|
206
|
+
/** Return one notice to unread → { ok:true } on 204 | fail. */
|
|
207
|
+
async markNotificationUnread(accessToken, uuid) {
|
|
208
|
+
return updateOne(http, accessToken, uuid, 'unread', 'Could not mark the notification as unread.');
|
|
209
|
+
},
|
|
210
|
+
/** Archive one notice (also marks it read) → { ok:true } on 204 | fail. */
|
|
211
|
+
async archiveNotification(accessToken, uuid) {
|
|
212
|
+
return updateOne(http, accessToken, uuid, 'archive', 'Could not archive the notification.');
|
|
213
|
+
},
|
|
214
|
+
/** Bring one archived notice back (as read) → { ok:true } on 204 | fail. */
|
|
215
|
+
async unarchiveNotification(accessToken, uuid) {
|
|
216
|
+
return updateOne(http, accessToken, uuid, 'unarchive', 'Could not restore the notification.');
|
|
217
|
+
},
|
|
218
|
+
/**
|
|
219
|
+
* One action on up to {@link NOTIFICATION_BULK_MAX} notices → { ok:true, updated } | fail.
|
|
220
|
+
* Only the user's own notices in the active company change; others count 0.
|
|
221
|
+
*/
|
|
222
|
+
async bulkUpdateNotifications(accessToken, action, uuids) {
|
|
223
|
+
const r = await http.post('/account/notifications/bulk', { action, uuids: [...uuids] }, { bearerToken: accessToken });
|
|
224
|
+
if (r.ok) {
|
|
225
|
+
const body = (r.data ?? {});
|
|
226
|
+
return { ok: true, updated: count(body.updated) };
|
|
227
|
+
}
|
|
228
|
+
return fail(r.status, 'Could not update the selected notifications.');
|
|
229
|
+
},
|
|
136
230
|
};
|
|
137
231
|
}
|
|
232
|
+
async function updateOne(http, accessToken, uuid, action, generic) {
|
|
233
|
+
const r = await http.post(`/account/notifications/${encodeURIComponent(uuid)}/${action}`, {}, { bearerToken: accessToken });
|
|
234
|
+
if (r.ok)
|
|
235
|
+
return { ok: true };
|
|
236
|
+
return fail(r.status, generic);
|
|
237
|
+
}
|
|
138
238
|
//# sourceMappingURL=notificationService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationService.js","sourceRoot":"","sources":["../../src/auth/notificationService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notificationService.js","sourceRoot":"","sources":["../../src/auth/notificationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
* the 401 is returned as-is: no refresh, no retry under someone else's token, no logout.
|
|
22
22
|
* The same holds if the store changes WHILE the refresh is in flight (a logout mid-refresh):
|
|
23
23
|
* the rotated tokens are dropped, never written back over the signed-out state.
|
|
24
|
+
* - `refreshAfterUnauthorized(sentToken)` runs the same refresh for a caller with its own
|
|
25
|
+
* transport (the agent stream, before its first byte); the caller retries once on `rotated`.
|
|
24
26
|
*
|
|
25
27
|
* Platform-agnostic: storage is the app's {@link SessionStore} (web: localStorage, so
|
|
26
28
|
* every tab reads the same tokens); the lock manager is injectable (tests, React Native).
|
|
@@ -62,6 +64,31 @@ export interface RefreshingHttpOptions {
|
|
|
62
64
|
*/
|
|
63
65
|
readonly refreshTimeoutMs?: number;
|
|
64
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* What {@link RefreshingHttpClient.refreshAfterUnauthorized} resolves to: `rotated` with the
|
|
69
|
+
* token to retry once with; otherwise no retry (`expired`: the session is gone and was cleared;
|
|
70
|
+
* `superseded`: a different session is stored, or no token was given; `unavailable`: the refresh
|
|
71
|
+
* could not be made, the session is kept).
|
|
72
|
+
*/
|
|
73
|
+
export type RefreshAfterUnauthorizedResult = {
|
|
74
|
+
readonly kind: 'rotated';
|
|
75
|
+
readonly accessToken: string;
|
|
76
|
+
} | {
|
|
77
|
+
readonly kind: 'expired' | 'superseded' | 'unavailable';
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* The refreshing client: an {@link HttpClient} plus the refresh step for callers that do not go
|
|
81
|
+
* through it (the agent stream transport, SPEC agent-read-capabilities §5). It shares the JSON
|
|
82
|
+
* client's single-flight refresh and cross-tab lock, so a stream never spends a refresh token in
|
|
83
|
+
* parallel with a JSON call.
|
|
84
|
+
*/
|
|
85
|
+
export interface RefreshingHttpClient extends HttpClient {
|
|
86
|
+
/**
|
|
87
|
+
* A request that sent `sentToken` got a 401: refresh (or adopt another tab's rotation of the
|
|
88
|
+
* same session) exactly as the JSON calls do. Never throws.
|
|
89
|
+
*/
|
|
90
|
+
refreshAfterUnauthorized(sentToken: string): Promise<RefreshAfterUnauthorizedResult>;
|
|
91
|
+
}
|
|
65
92
|
/** Default {@link RefreshingHttpOptions.refreshTimeoutMs}. */
|
|
66
93
|
export declare const DEFAULT_REFRESH_TIMEOUT_MS = 15000;
|
|
67
94
|
/** What `createRefreshingHttp` hands the injected `refresh` (additive second argument). */
|
|
@@ -69,5 +96,5 @@ export interface RefreshCallOpts {
|
|
|
69
96
|
/** Aborted when the refresh timeout fires; forward it to the HTTP call. */
|
|
70
97
|
readonly signal?: AbortSignalLike;
|
|
71
98
|
}
|
|
72
|
-
export declare function createRefreshingHttp(options: RefreshingHttpOptions):
|
|
99
|
+
export declare function createRefreshingHttp(options: RefreshingHttpOptions): RefreshingHttpClient;
|
|
73
100
|
//# sourceMappingURL=refreshingHttp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshingHttp.d.ts","sourceRoot":"","sources":["../../src/http/refreshingHttp.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"refreshingHttp.d.ts","sourceRoot":"","sources":["../../src/http/refreshingHttp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAA6B,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,qBAAqB;IACpC,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3F,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,+FAA+F;IAC/F,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACrD,+FAA+F;IAC/F,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,MAAM,8BAA8B,GACtC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,aAAa,CAAA;CAAE,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD;;;OAGG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;CACtF;AAED,8DAA8D;AAC9D,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CACnC;AA4ED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CAwLzF"}
|
|
@@ -211,7 +211,26 @@ export function createRefreshingHttp(options) {
|
|
|
211
211
|
return first;
|
|
212
212
|
}
|
|
213
213
|
};
|
|
214
|
+
// The stream transport's entry to the same single-flight refresh (no request to retry here:
|
|
215
|
+
// the caller retries once on `rotated`). Both tokens are learned, as `send` does.
|
|
216
|
+
const refreshAfterUnauthorized = async (sentToken) => {
|
|
217
|
+
if (!nonEmpty(sentToken))
|
|
218
|
+
return { kind: 'superseded' };
|
|
219
|
+
try {
|
|
220
|
+
learn(sentToken);
|
|
221
|
+
const outcome = await refreshFor(sentToken);
|
|
222
|
+
if (outcome.kind === 'rotated') {
|
|
223
|
+
learn(outcome.accessToken);
|
|
224
|
+
return { kind: 'rotated', accessToken: outcome.accessToken };
|
|
225
|
+
}
|
|
226
|
+
return { kind: outcome.kind };
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return { kind: 'unavailable' };
|
|
230
|
+
}
|
|
231
|
+
};
|
|
214
232
|
return {
|
|
233
|
+
refreshAfterUnauthorized,
|
|
215
234
|
get: (path, opts) => send((o) => http.get(path, o), opts),
|
|
216
235
|
post: (path, body, opts) => send((o) => http.post(path, body, o), opts),
|
|
217
236
|
patch: (path, body, opts) => send((o) => http.patch(path, body, o), opts),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshingHttp.js","sourceRoot":"","sources":["../../src/http/refreshingHttp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"refreshingHttp.js","sourceRoot":"","sources":["../../src/http/refreshingHttp.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type { HttpClient, HttpResponse, RequestOpts, AbortSignalLike } from './http/types.js';
|
|
2
2
|
export { createRefreshingHttp, REFRESH_LOCK_NAME, DEFAULT_REFRESH_TIMEOUT_MS, } from './http/refreshingHttp.js';
|
|
3
|
-
export type { RefreshingHttpOptions, LockManagerLike, RefreshCallOpts, } from './http/refreshingHttp.js';
|
|
3
|
+
export type { RefreshingHttpOptions, LockManagerLike, RefreshCallOpts, RefreshingHttpClient, RefreshAfterUnauthorizedResult, } from './http/refreshingHttp.js';
|
|
4
4
|
export * from './auth/index.js';
|
|
5
|
+
export * from './agent/index.js';
|
|
5
6
|
export type { PermissionCatalogRow } from './auth/identityService.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,kBAAkB,CAAC;AAEjC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
// Token refresh over any HttpClient: single-flight, retry once, cross-tab lock (#12).
|
|
2
2
|
export { createRefreshingHttp, REFRESH_LOCK_NAME, DEFAULT_REFRESH_TIMEOUT_MS, } from './http/refreshingHttp.js';
|
|
3
3
|
export * from './auth/index.js';
|
|
4
|
+
// Agent client (G-036 M1): service, SSE parser, reducer, scripted transport.
|
|
5
|
+
export * from './agent/index.js';
|
|
4
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,sFAAsF;AACtF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,sFAAsF;AACtF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAQlC,cAAc,iBAAiB,CAAC;AAChC,6EAA6E;AAC7E,cAAc,kBAAkB,CAAC"}
|