@jskit-ai/auth-web 0.1.52 → 0.1.54

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.
@@ -1,7 +1,7 @@
1
1
  export default Object.freeze({
2
2
  "packageVersion": 1,
3
3
  "packageId": "@jskit-ai/auth-web",
4
- "version": "0.1.52",
4
+ "version": "0.1.54",
5
5
  "kind": "runtime",
6
6
  "description": "Auth web module: Fastify auth routes plus web login/sign-out scaffolds.",
7
7
  "dependsOn": [
@@ -220,10 +220,10 @@ export default Object.freeze({
220
220
  "@tanstack/vue-query": "5.92.12",
221
221
  "@mdi/js": "^7.4.47",
222
222
  "@fastify/type-provider-typebox": "^6.1.0",
223
- "@jskit-ai/auth-core": "0.1.50",
224
- "@jskit-ai/http-runtime": "0.1.50",
225
- "@jskit-ai/kernel": "0.1.51",
226
- "@jskit-ai/shell-web": "0.1.50",
223
+ "@jskit-ai/auth-core": "0.1.52",
224
+ "@jskit-ai/http-runtime": "0.1.52",
225
+ "@jskit-ai/kernel": "0.1.53",
226
+ "@jskit-ai/shell-web": "0.1.52",
227
227
  "vuetify": "^4.0.0"
228
228
  },
229
229
  "dev": {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/auth-web",
3
- "version": "0.1.52",
3
+ "version": "0.1.54",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "test": "node --test"
@@ -18,13 +18,13 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@tanstack/vue-query": "^5.90.5",
21
- "@jskit-ai/auth-core": "0.1.50",
21
+ "@jskit-ai/auth-core": "0.1.52",
22
22
  "@mdi/js": "^7.4.47",
23
23
  "@fastify/type-provider-typebox": "^6.1.0",
24
- "@jskit-ai/kernel": "0.1.51",
25
- "@jskit-ai/shell-web": "0.1.50",
24
+ "@jskit-ai/kernel": "0.1.53",
25
+ "@jskit-ai/shell-web": "0.1.52",
26
26
  "pinia": "^3.0.4",
27
27
  "vuetify": "^4.0.0",
28
- "@jskit-ai/http-runtime": "0.1.50"
28
+ "@jskit-ai/http-runtime": "0.1.52"
29
29
  }
30
30
  }
@@ -3,6 +3,7 @@ import { AUTH_PATHS } from "@jskit-ai/auth-core/shared/authPaths";
3
3
  import { isExternalLinkTarget } from "@jskit-ai/kernel/shared/support/linkPath";
4
4
  import { normalizePathname as normalizeSurfacePathname } from "@jskit-ai/kernel/shared/surface/paths";
5
5
  import { createListenerSubscription } from "@jskit-ai/kernel/shared/support/listenerSet";
6
+ import { normalizePermissionList } from "@jskit-ai/kernel/shared/support/permissions";
6
7
 
7
8
  const GLOBAL_GUARD_EVALUATOR_KEY = "__JSKIT_WEB_SHELL_GUARD_EVALUATOR__";
8
9
  const AUTH_POLICY_AUTHENTICATED = "authenticated";
@@ -34,6 +35,8 @@ const KEEP_PREVIOUS_AUTH_STATE = Symbol("keepPreviousAuthState");
34
35
  const DEFAULT_AUTH_STATE = Object.freeze({
35
36
  authenticated: false,
36
37
  username: "",
38
+ email: "",
39
+ permissions: Object.freeze([]),
37
40
  oauthDefaultProvider: "",
38
41
  oauthProviders: Object.freeze([])
39
42
  });
@@ -102,10 +105,14 @@ function normalizeAuthState(payload = {}) {
102
105
  .toLowerCase();
103
106
  const authenticated = Boolean(payload.authenticated);
104
107
  const username = authenticated ? String(payload.username || "").trim() : "";
108
+ const email = authenticated ? String(payload.email || "").trim().toLowerCase() : "";
109
+ const permissions = authenticated ? Object.freeze(normalizePermissionList(payload.permissions)) : Object.freeze([]);
105
110
 
106
111
  return Object.freeze({
107
112
  authenticated,
108
113
  username,
114
+ email,
115
+ permissions,
109
116
  oauthDefaultProvider,
110
117
  oauthProviders
111
118
  });
@@ -129,6 +136,8 @@ function applyAuthContext(nextState, placementRuntime) {
129
136
  {
130
137
  auth: {
131
138
  authenticated: nextState.authenticated,
139
+ email: nextState.email,
140
+ permissions: nextState.permissions,
132
141
  oauthDefaultProvider: nextState.oauthDefaultProvider,
133
142
  oauthProviders: nextState.oauthProviders
134
143
  }
@@ -157,6 +157,8 @@ class AuthController {
157
157
  reply.code(200).send({
158
158
  authenticated: true,
159
159
  username: authResult.profile.displayName,
160
+ email: authResult.profile.email,
161
+ permissions: Array.isArray(authResult.permissions) ? authResult.permissions : [],
160
162
  csrfToken,
161
163
  ...oauthCatalogPayload
162
164
  });
@@ -170,6 +170,8 @@ test("auth guard runtime only updates placement auth context", async () => {
170
170
  return {
171
171
  authenticated: true,
172
172
  username: "ada",
173
+ email: "ada@example.com",
174
+ permissions: ["settings.allowed"],
173
175
  oauthProviders: [{ id: "github", label: "GitHub" }],
174
176
  oauthDefaultProvider: "github"
175
177
  };
@@ -191,6 +193,8 @@ test("auth guard runtime only updates placement auth context", async () => {
191
193
  });
192
194
  assert.deepEqual(context.auth, {
193
195
  authenticated: true,
196
+ email: "ada@example.com",
197
+ permissions: ["settings.allowed"],
194
198
  oauthDefaultProvider: "github",
195
199
  oauthProviders: [{ id: "github", label: "GitHub" }]
196
200
  });