@happyvertical/smrt-users 0.38.22 → 0.38.23

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/AGENTS.md CHANGED
@@ -180,6 +180,9 @@ the package root).
180
180
  - **Hooks**: `resolveUser` (invite-gating; default provisions via
181
181
  `getOrCreateFromOidc`), `resolveTenantId`, `buildExtras` (bootstrap
182
182
  `extras`; model JSON must use `toPublicJSON({ permissions })` — #1822).
183
+ `buildExtras` is the only app-domain bootstrap extension point. Never emit
184
+ app fields such as `dashboard` at the response top level: they are outside
185
+ `MobileSessionBootstrap` and the Kotlin decoder ignores them.
183
186
  - **Guard** wraps `withSessionPermissionContext`, so
184
187
  `assertOperationPermission`, tenancy context, and Postgres RLS all see the
185
188
  bearer caller; `OperationPermissionError` maps to 403 with a
package/README.md CHANGED
@@ -495,8 +495,17 @@ TenantService supports three modes: `flexible` (no auto-create), `personal` (aut
495
495
  | `switchSessionTenant` | Change tenant context for current session |
496
496
  | `beginOidcLogin`, `completeOidcLogin` | Low-level SvelteKit helpers for custom OIDC login routes |
497
497
  | `createOidcLoginHandler`, `createOidcCallbackHandler` | Ready-to-use SvelteKit route handlers for OIDC login and callback |
498
+ | `createMobileAuthHandlers` | Mountable `/api/mobile` PKCE, bearer session, bootstrap, logout, and route-guard handlers |
499
+ | `resolveMobileUploadDedupKey` | Resolves `clientCaptureId` with `Idempotency-Key` fallback for app-owned multipart routes |
498
500
  | `SessionLocals` | Type for `event.locals` (extend in `app.d.ts`) |
499
501
 
502
+ `createMobileAuthHandlers({ buildExtras })` places app-domain bootstrap data
503
+ under `MobileSessionBootstrap.extras`. Do not add app fields at the response
504
+ top level: they are outside the shared contract and the Kotlin client ignores
505
+ unknown top-level keys. Multipart ingestion remains app-owned; follow
506
+ [`mobile-upload-contract.md`](../../docs/content/architecture/mobile-upload-contract.md)
507
+ for authentication, deduplication, and status semantics.
508
+
500
509
  ### Types & Constants
501
510
 
502
511
  | Export | Description |