@astram/frontend-core 0.10.0 → 0.11.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/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/package.json +1 -1
package/dist/auth/index.d.ts
CHANGED
|
@@ -12,7 +12,8 @@ export { createAccountService } from './accountService.js';
|
|
|
12
12
|
export { createIdentityService } from './identityService.js';
|
|
13
13
|
export type { SignInStatus, InviteUserResult, UserMfaStatus, UserRecord, SignInAdminResult, SignInAdminFailureReason, PermissionAnnouncementRow, PermissionAnnouncementStatus, PermissionAnnouncementQuery, ListPermissionAnnouncementsResult, } from './identityService.js';
|
|
14
14
|
export { createNotificationService } from './notificationService.js';
|
|
15
|
-
export type { NotificationService, NotificationCategory, NotificationRow, NotificationListQuery, UnreadNotificationCount, ListNotificationsResult, UnreadNotificationCountResult, MarkNotificationReadResult, MarkAllNotificationsReadResult, } from './notificationService.js';
|
|
15
|
+
export type { NotificationService, NotificationCategory, NotificationRow, NotificationListQuery, UnreadNotificationCount, ListNotificationsResult, UnreadNotificationCountResult, MarkNotificationReadResult, MarkAllNotificationsReadResult, NotificationSeverity, NotificationStatus, NotificationBulkAction, NotificationKindOption, ListNotificationKindsResult, UpdateNotificationResult, BulkUpdateNotificationsResult, } from './notificationService.js';
|
|
16
|
+
export { NOTIFICATION_BULK_MAX } from './notificationService.js';
|
|
16
17
|
export { createSecurityPolicyService } from './securityPolicyService.js';
|
|
17
18
|
export type { SecurityPolicyService, SecurityPolicyTargetKind, SecurityPolicyFields, SecurityPolicyRecord, CreateSecurityPolicyBody, UpdateSecurityPolicyBody, SecurityPolicyListResult, SecurityPolicyGetResult, SecurityPolicyCreateResult, SecurityPolicyMutateResult, } from './securityPolicyService.js';
|
|
18
19
|
export { createAuditService } from './auditService.js';
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,cAAc,EACd,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,cAAc,EACd,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,EAC9B,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,YAAY,EACV,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,SAAS,EACT,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,GACV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/auth/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export { restrictionReasonOf } from './restriction.js';
|
|
|
9
9
|
export { createAccountService } from './accountService.js';
|
|
10
10
|
export { createIdentityService } from './identityService.js';
|
|
11
11
|
export { createNotificationService } from './notificationService.js';
|
|
12
|
+
export { NOTIFICATION_BULK_MAX } from './notificationService.js';
|
|
12
13
|
export { createSecurityPolicyService } from './securityPolicyService.js';
|
|
13
14
|
export { createAuditService } from './auditService.js';
|
|
14
15
|
export { createCrossTenantService } from './crossTenantService.js';
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAarD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAa7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAarD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAa7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAmBrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAazE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAUrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAOnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAazE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -13,6 +13,11 @@
|
|
|
13
13
|
* GET /account/notifications/unread-count → { announcement, personal, total }
|
|
14
14
|
* POST /account/notifications/:uuid/read → 204 (idempotent)
|
|
15
15
|
* POST /account/notifications/read-all?category= → { updated }
|
|
16
|
+
* G-035 (notification center):
|
|
17
|
+
* GET /account/notifications?…&kind=&status=&from=&to=&search= (status absent ⇒ not archived)
|
|
18
|
+
* GET /account/notifications/kinds → { kinds: [{ kind, label, category }] }
|
|
19
|
+
* POST /account/notifications/:uuid/{unread,archive,unarchive} → 204
|
|
20
|
+
* POST /account/notifications/bulk { action, uuids (1–100) } → { updated }
|
|
16
21
|
*
|
|
17
22
|
* Notice text (`title`, `body`) is plain text: render it as text, never as HTML. Follow `link`
|
|
18
23
|
* only when it is app-relative.
|
|
@@ -20,16 +25,36 @@
|
|
|
20
25
|
import type { HttpClient, AbortSignalLike } from '../http/types.js';
|
|
21
26
|
/** `announcement` = release news for everyone; `personal` = about the user's own access. */
|
|
22
27
|
export type NotificationCategory = 'announcement' | 'personal';
|
|
23
|
-
/**
|
|
28
|
+
/** How a notice is marked in the list (from its kind's registration). */
|
|
29
|
+
export type NotificationSeverity = 'info' | 'success' | 'warning';
|
|
30
|
+
/** List filter: absent ⇒ every notice that is not archived. */
|
|
31
|
+
export type NotificationStatus = 'unread' | 'read' | 'archived';
|
|
32
|
+
/** `POST /account/notifications/bulk` actions. */
|
|
33
|
+
export type NotificationBulkAction = 'read' | 'unread' | 'archive' | 'unarchive';
|
|
34
|
+
/** Most uuids one bulk call accepts. */
|
|
35
|
+
export declare const NOTIFICATION_BULK_MAX = 100;
|
|
36
|
+
/**
|
|
37
|
+
* One notice (`GET /account/notifications` `rows[]`). Times are ISO 8601; `readAt: null` ⇒ unread,
|
|
38
|
+
* `archivedAt: null` ⇒ not archived. `kindLabel` is the kind's display name (never show `kind`).
|
|
39
|
+
*/
|
|
24
40
|
export interface NotificationRow {
|
|
25
41
|
uuid: string;
|
|
26
42
|
category: NotificationCategory;
|
|
27
43
|
kind: string;
|
|
44
|
+
kindLabel: string;
|
|
45
|
+
severity: NotificationSeverity;
|
|
28
46
|
title: string;
|
|
29
47
|
body: string | null;
|
|
30
48
|
link: string | null;
|
|
31
49
|
createdAt: string;
|
|
32
50
|
readAt: string | null;
|
|
51
|
+
archivedAt: string | null;
|
|
52
|
+
}
|
|
53
|
+
/** One kind the user has notices of (`GET /account/notifications/kinds`), for a Type filter. */
|
|
54
|
+
export interface NotificationKindOption {
|
|
55
|
+
kind: string;
|
|
56
|
+
label: string;
|
|
57
|
+
category: NotificationCategory;
|
|
33
58
|
}
|
|
34
59
|
/** Unread notices per category, and their sum. */
|
|
35
60
|
export interface UnreadNotificationCount {
|
|
@@ -42,6 +67,14 @@ export interface NotificationListQuery {
|
|
|
42
67
|
category?: NotificationCategory;
|
|
43
68
|
/** `true` ⇒ unread notices only. */
|
|
44
69
|
unread?: boolean;
|
|
70
|
+
/** One kind (e.g. `app.task_assigned`). */
|
|
71
|
+
kind?: string;
|
|
72
|
+
status?: NotificationStatus;
|
|
73
|
+
/** UTC days `YYYY-MM-DD`, both inclusive. */
|
|
74
|
+
from?: string;
|
|
75
|
+
to?: string;
|
|
76
|
+
/** Words in the title or body; blank ⇒ no search. At most 100 characters. */
|
|
77
|
+
search?: string;
|
|
45
78
|
page?: number;
|
|
46
79
|
limit?: number;
|
|
47
80
|
}
|
|
@@ -67,11 +100,28 @@ export type MarkAllNotificationsReadResult = {
|
|
|
67
100
|
ok: true;
|
|
68
101
|
updated: number;
|
|
69
102
|
} | Failure;
|
|
103
|
+
export type ListNotificationKindsResult = {
|
|
104
|
+
ok: true;
|
|
105
|
+
kinds: NotificationKindOption[];
|
|
106
|
+
} | Failure;
|
|
107
|
+
/** Mark unread, archive, unarchive: same shape as mark read. */
|
|
108
|
+
export type UpdateNotificationResult = {
|
|
109
|
+
ok: true;
|
|
110
|
+
} | Failure;
|
|
111
|
+
export type BulkUpdateNotificationsResult = {
|
|
112
|
+
ok: true;
|
|
113
|
+
updated: number;
|
|
114
|
+
} | Failure;
|
|
70
115
|
export interface NotificationService {
|
|
71
116
|
listNotifications(accessToken: string, query?: NotificationListQuery, signal?: AbortSignalLike): Promise<ListNotificationsResult>;
|
|
72
117
|
unreadNotificationCount(accessToken: string, signal?: AbortSignalLike): Promise<UnreadNotificationCountResult>;
|
|
73
118
|
markNotificationRead(accessToken: string, uuid: string): Promise<MarkNotificationReadResult>;
|
|
74
119
|
markAllNotificationsRead(accessToken: string, category?: NotificationCategory): Promise<MarkAllNotificationsReadResult>;
|
|
120
|
+
listNotificationKinds(accessToken: string, signal?: AbortSignalLike): Promise<ListNotificationKindsResult>;
|
|
121
|
+
markNotificationUnread(accessToken: string, uuid: string): Promise<UpdateNotificationResult>;
|
|
122
|
+
archiveNotification(accessToken: string, uuid: string): Promise<UpdateNotificationResult>;
|
|
123
|
+
unarchiveNotification(accessToken: string, uuid: string): Promise<UpdateNotificationResult>;
|
|
124
|
+
bulkUpdateNotifications(accessToken: string, action: NotificationBulkAction, uuids: readonly string[]): Promise<BulkUpdateNotificationsResult>;
|
|
75
125
|
}
|
|
76
126
|
export declare function createNotificationService(http: HttpClient): NotificationService;
|
|
77
127
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationService.d.ts","sourceRoot":"","sources":["../../src/auth/notificationService.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"notificationService.d.ts","sourceRoot":"","sources":["../../src/auth/notificationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|