@astram/frontend-core 0.7.0 → 0.8.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.
@@ -0,0 +1,104 @@
1
+ import { listQueryString } from './identityService.js';
2
+ const BASE = '/identity/security-policies';
3
+ /** A server error message (`{ message }`) when it is a plain string. */
4
+ function messageOf(data) {
5
+ if (data !== null && typeof data === 'object') {
6
+ const m = data.message;
7
+ if (typeof m === 'string' && m.length > 0)
8
+ return m;
9
+ }
10
+ return null;
11
+ }
12
+ function fail(r, generic) {
13
+ switch (r.status) {
14
+ case 0:
15
+ return { ok: false, status: 0, error: 'Cannot reach the server. Is it running?' };
16
+ case 401:
17
+ return { ok: false, status: 401, error: 'Not authenticated (no/invalid token).' };
18
+ case 403:
19
+ return {
20
+ ok: false,
21
+ status: 403,
22
+ error: messageOf(r.data) ?? 'You do not have access to do this.',
23
+ };
24
+ case 404:
25
+ return { ok: false, status: 404, error: 'Security policy not found.' };
26
+ case 400:
27
+ case 409:
28
+ return { ok: false, status: r.status, error: messageOf(r.data) ?? generic };
29
+ case 503:
30
+ return {
31
+ ok: false,
32
+ status: 503,
33
+ error: 'The service is temporarily unavailable. Please try again shortly.',
34
+ };
35
+ default:
36
+ return { ok: false, status: r.status, error: generic };
37
+ }
38
+ }
39
+ /** Only the documented create fields, each only when set. */
40
+ function createBody(body) {
41
+ return {
42
+ ...(body.scopeNodeUuid !== undefined ? { scopeNodeUuid: body.scopeNodeUuid } : {}),
43
+ ...(body.platform !== undefined ? { platform: body.platform } : {}),
44
+ targetKind: body.targetKind,
45
+ ...(body.targetValue !== undefined ? { targetValue: body.targetValue } : {}),
46
+ ...(body.graceDays !== undefined ? { graceDays: body.graceDays } : {}),
47
+ };
48
+ }
49
+ export function createSecurityPolicyService(http) {
50
+ return {
51
+ /** List the policies the caller may see (their subtree; platform rows for root only). */
52
+ async list(accessToken, opts) {
53
+ const r = await http.get(`${BASE}${listQueryString(opts)}`, {
54
+ bearerToken: accessToken,
55
+ ...(opts?.signal ? { signal: opts.signal } : {}),
56
+ });
57
+ if (r.ok) {
58
+ const data = r.data;
59
+ return {
60
+ ok: true,
61
+ total: data?.total ?? 0,
62
+ rows: data?.rows ?? [],
63
+ page: data?.page ?? 1,
64
+ limit: data?.limit ?? data?.rows?.length ?? 0,
65
+ };
66
+ }
67
+ return fail(r, 'Could not load security policies.');
68
+ },
69
+ /** Read one policy; `policy: null` when it does not exist or is outside the caller's scope. */
70
+ async get(accessToken, uuid) {
71
+ const r = await http.get(`${BASE}/${encodeURIComponent(uuid)}`, {
72
+ bearerToken: accessToken,
73
+ });
74
+ if (r.ok)
75
+ return { ok: true, policy: r.data ?? null };
76
+ return fail(r, 'Could not load the security policy.');
77
+ },
78
+ /** Create a policy → `{ ok:true, id }`. */
79
+ async create(accessToken, body) {
80
+ const r = await http.post(BASE, createBody(body), { bearerToken: accessToken });
81
+ if (r.ok)
82
+ return { ok: true, id: r.data?.id };
83
+ return fail(r, 'Could not create the security policy.');
84
+ },
85
+ /** Change a policy's target value and/or grace period. */
86
+ async update(accessToken, uuid, body) {
87
+ const r = await http.put(`${BASE}/${encodeURIComponent(uuid)}`, {
88
+ ...(body.targetValue !== undefined ? { targetValue: body.targetValue } : {}),
89
+ ...(body.graceDays !== undefined ? { graceDays: body.graceDays } : {}),
90
+ }, { bearerToken: accessToken });
91
+ if (r.ok)
92
+ return { ok: true };
93
+ return fail(r, 'Could not update the security policy.');
94
+ },
95
+ /** Delete a policy. */
96
+ async remove(accessToken, uuid) {
97
+ const r = await http.delete(`${BASE}/${encodeURIComponent(uuid)}`, {}, { bearerToken: accessToken });
98
+ if (r.ok)
99
+ return { ok: true };
100
+ return fail(r, 'Could not delete the policy.');
101
+ },
102
+ };
103
+ }
104
+ //# sourceMappingURL=securityPolicyService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"securityPolicyService.js","sourceRoot":"","sources":["../../src/auth/securityPolicyService.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astram/frontend-core",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -24,6 +24,11 @@
24
24
  "typescript": "^5.7.0",
25
25
  "vitest": "^2.1.0"
26
26
  },
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/ASTRAM-2-0/astram-framework.git",
30
+ "directory": "packages/frontend-core"
31
+ },
27
32
  "scripts": {
28
33
  "build": "tsc -p tsconfig.json",
29
34
  "lint": "eslint .",