@happyvertical/smrt-users 0.40.14 → 0.40.16
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/README.md +12 -12
- package/dist/chunks/{TerminalAuthService-aZ6nXdl_.js → TerminalAuthService-Bql_pr2_.js} +2 -2
- package/dist/chunks/{TerminalAuthService-aZ6nXdl_.js.map → TerminalAuthService-Bql_pr2_.js.map} +1 -1
- package/dist/index.js +3 -3
- package/dist/manifest.json +2 -2
- package/dist/smrt-knowledge.json +4 -4
- package/dist/sveltekit.js +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ await resolver.hasPermission(user.id, tenant.id, 'articles.create');
|
|
|
37
37
|
|
|
38
38
|
### Manifest-derived permission catalog
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
s-m-r-t objects now contribute permissions automatically based on their public
|
|
41
41
|
surface area.
|
|
42
42
|
|
|
43
43
|
```typescript
|
|
@@ -151,7 +151,7 @@ export default defineConfig({
|
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
Custom permissions merge with manifest-derived permissions by slug. If the same
|
|
154
|
-
slug is registered with conflicting metadata,
|
|
154
|
+
slug is registered with conflicting metadata, s-m-r-t throws so the mismatch is
|
|
155
155
|
visible early.
|
|
156
156
|
|
|
157
157
|
### Runtime permission registration
|
|
@@ -185,7 +185,7 @@ try {
|
|
|
185
185
|
|
|
186
186
|
### Postgres RLS enforcement
|
|
187
187
|
|
|
188
|
-
For Postgres,
|
|
188
|
+
For Postgres, s-m-r-t can generate and apply row-level security policies directly
|
|
189
189
|
from the permission catalog.
|
|
190
190
|
|
|
191
191
|
```typescript
|
|
@@ -310,7 +310,7 @@ await destroySessionCookie(event, { db }); // logout
|
|
|
310
310
|
|
|
311
311
|
### OIDC login with Kanidm or Dex
|
|
312
312
|
|
|
313
|
-
Kanidm and Dex both work through the generic
|
|
313
|
+
Kanidm and Dex both work through the generic s-m-r-t OIDC flow. Configure one or
|
|
314
314
|
more providers under `packages.users.auth.oidc.providers`, then add login and
|
|
315
315
|
callback route handlers.
|
|
316
316
|
|
|
@@ -371,8 +371,8 @@ JWKS-signed ID token, falling back to the OIDC UserInfo endpoint when the ID
|
|
|
371
371
|
token omits required profile claims like `email`. Temporary transaction cookies
|
|
372
372
|
are HMAC-signed with the provider `clientSecret` when present; public clients
|
|
373
373
|
can pass `transactionCookieSecret` to the route helpers. On success it creates
|
|
374
|
-
or reuses a
|
|
375
|
-
records `lastLoginAt`, and sets the standard
|
|
374
|
+
or reuses a s-m-r-t `Profile`, links an `OidcIdentity`, creates or reuses a `User`,
|
|
375
|
+
records `lastLoginAt`, and sets the standard s-m-r-t session cookie.
|
|
376
376
|
|
|
377
377
|
The typed [OIDC provisioning decision matrix](../profiles/src/testing/oidcProvisioningDecisionMatrix.ts)
|
|
378
378
|
is the canonical behavior contract shared with Profiles. Its executable rows
|
|
@@ -432,7 +432,7 @@ global `Person` for a verified email; resolver reuse is rejected unless
|
|
|
432
432
|
`null` still rejects login, a supplied Profile must be the already-linked
|
|
433
433
|
Profile and cannot rebind it, and stable-link owner/canonical-Person checks
|
|
434
434
|
still apply. The resolver receives a separate frozen claims snapshot; retry
|
|
435
|
-
locks, identity lookups, and persistence retain
|
|
435
|
+
locks, identity lookups, and persistence retain s-m-r-t's immutable internal
|
|
436
436
|
snapshot.
|
|
437
437
|
|
|
438
438
|
An invitation or approval workflow that pre-provisions both the canonical
|
|
@@ -471,7 +471,7 @@ The authorizer runs after protocol validation and inside the provisioning
|
|
|
471
471
|
transaction. It receives frozen normalized claims, the transaction-bound `db`,
|
|
472
472
|
and a `UserCollection` bound to that same transaction. Return both selected
|
|
473
473
|
objects only after application authorization; `undefined` uses the fail-closed
|
|
474
|
-
default and `null` rejects.
|
|
474
|
+
default and `null` rejects. s-m-r-t reloads and verifies the selected IDs rather
|
|
475
475
|
than trusting the returned objects: `email_verified` must be exactly `true`,
|
|
476
476
|
the Profile must be the unique canonical global `Person` for the claim email,
|
|
477
477
|
exactly one User must own it, and that User must have the same normalized email.
|
|
@@ -482,7 +482,7 @@ writes must use only the supplied handles and be idempotent. Supplying both
|
|
|
482
482
|
the same Profile.
|
|
483
483
|
|
|
484
484
|
When userinfo supplies a missing email, its `email_verified` value travels with
|
|
485
|
-
that email as one source-bound pair.
|
|
485
|
+
that email as one source-bound pair. s-m-r-t never borrows a verification flag
|
|
486
486
|
from the ID token for a userinfo address, or from userinfo for an ID-token
|
|
487
487
|
address.
|
|
488
488
|
|
|
@@ -508,9 +508,9 @@ email claims on independent database handles. SQLite and DuckDB also acquire a
|
|
|
508
508
|
database-URL transaction lock because one adapter cannot safely overlap
|
|
509
509
|
unrelated root transactions; PostgreSQL deadlock and serialization failures use
|
|
510
510
|
a bounded transaction retry. Owner-authorized binding uses the same contract:
|
|
511
|
-
pass the DuckDB root handle and let
|
|
511
|
+
pass the DuckDB root handle and let s-m-r-t serialize the callback transaction.
|
|
512
512
|
New OIDC Profiles use non-semantic unique slugs,
|
|
513
|
-
so equal IdP display names cannot overwrite one another through
|
|
513
|
+
so equal IdP display names cannot overwrite one another through s-m-r-t's
|
|
514
514
|
natural-key upsert.
|
|
515
515
|
Existing installations must run `smrt db:status`, `smrt db:migrate`, then
|
|
516
516
|
`smrt db:status` before deploying this users version; legacy identities reserve
|
|
@@ -555,7 +555,7 @@ when initialization or recovery is needed. OIDC `iss` and `sub` are preserved as
|
|
|
555
555
|
case-sensitive identifiers (trim is used only to reject blank claims), so
|
|
556
556
|
whitespace-distinct subjects never reuse one another.
|
|
557
557
|
|
|
558
|
-
With `postgresRls: true`,
|
|
558
|
+
With `postgresRls: true`, s-m-r-t opens a request-scoped Postgres transaction,
|
|
559
559
|
loads the session, resolves permissions, and sets session variables used by the
|
|
560
560
|
generated RLS helpers:
|
|
561
561
|
|