@happyvertical/smrt-users 0.51.13 → 0.51.14

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.
@@ -3,12 +3,12 @@
3
3
  "sensitiveFieldsExcluded": true,
4
4
  "generatedAt": "1970-01-01T00:00:00.000Z",
5
5
  "packageName": "@happyvertical/smrt-users",
6
- "packageVersion": "0.51.13",
6
+ "packageVersion": "0.51.14",
7
7
  "sourceManifestPath": "dist/manifest.json",
8
8
  "agentDocPath": "AGENTS.md",
9
9
  "sourceHashes": {
10
- "manifest": "b6f7f963e98cbbe554148b5176db34a34d002efed710f97b92a9aaf35b0d52fc",
11
- "packageJson": "d69a2d90d404a1bffd7a895b5951eaf4917a25e403b38dcb1623ad68f1b90264",
10
+ "manifest": "34d2639c51bf646327afea4470649ddf41515beed335a9c185039cc6978b69ab",
11
+ "packageJson": "908695fd991f1415e6bce60bc449775393195b3d0c4c610b52ec9917e8408a18",
12
12
  "agents": "0d011d9fe314ca90141f2fa45a97cdbb34dc34d0bb046357dd6d159c686bc41e",
13
13
  "moduleDoc:agents/permissions.md": "165fd67e4ff87d2e4c810ec8f6d9ef4d1bd7d4acc7e9ee0510020625fe2f5153",
14
14
  "moduleDoc:agents/oidc-provisioning.md": "5efa607ff23b9a693391e0c02670324a8cea4114d4968c9718f10a763da919c6",
@@ -34,14 +34,14 @@
34
34
  "@happyvertical/smrt-types": "workspace:*",
35
35
  "@happyvertical/smrt-ui": "workspace:*",
36
36
  "@happyvertical/sql": "catalog:",
37
- "jose": "^6.2.3",
37
+ "jose": "^6.2.12",
38
38
  "@happyvertical/smrt-vitest": "workspace:*",
39
39
  "@sveltejs/package": "^2.5.8",
40
- "@sveltejs/vite-plugin-svelte": "^7.1.2",
41
- "@types/node": "24.13.2",
40
+ "@sveltejs/vite-plugin-svelte": "^7.3.0",
41
+ "@types/node": "24.13.6",
42
42
  "fast-glob": "^3.3.3",
43
- "svelte": "^5.56.4",
44
- "svelte-check": "^4.7.1",
43
+ "svelte": "^5.57.1",
44
+ "svelte-check": "^4.7.6",
45
45
  "typescript": "5.9.3",
46
46
  "vite": "8.1.4",
47
47
  "vitest": "4.1.10"
@@ -1751,6 +1751,89 @@
1751
1751
  "tags": [],
1752
1752
  "risks": []
1753
1753
  },
1754
+ {
1755
+ "name": "ResourceGrantCollection",
1756
+ "qualifiedName": "@happyvertical/smrt-users:ResourceGrantCollection",
1757
+ "collection": "resourcegrants",
1758
+ "tableName": "resource_grants",
1759
+ "packageName": "@happyvertical/smrt-users",
1760
+ "extends": "SmrtCollection",
1761
+ "fields": [],
1762
+ "relationships": [],
1763
+ "methods": [
1764
+ "findChildren",
1765
+ "findExact"
1766
+ ],
1767
+ "methodSignatures": [
1768
+ {
1769
+ "name": "findChildren",
1770
+ "async": true,
1771
+ "params": [
1772
+ "parentGrantId: string"
1773
+ ],
1774
+ "returns": "Promise<ResourceGrant[]>"
1775
+ },
1776
+ {
1777
+ "name": "findExact",
1778
+ "async": true,
1779
+ "params": [
1780
+ "tenantId: string",
1781
+ "userId: string",
1782
+ "resourceType: string",
1783
+ "resourceId: string",
1784
+ "permission: string"
1785
+ ],
1786
+ "returns": "Promise<ResourceGrant[]>"
1787
+ }
1788
+ ],
1789
+ "surfaces": [
1790
+ {
1791
+ "kind": "api",
1792
+ "name": "resourcegrants.findExact",
1793
+ "operation": "findExact",
1794
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection",
1795
+ "path": "/resourcegrants/findExact",
1796
+ "method": "POST"
1797
+ },
1798
+ {
1799
+ "kind": "api",
1800
+ "name": "resourcegrants.findChildren",
1801
+ "operation": "findChildren",
1802
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection",
1803
+ "path": "/resourcegrants/findChildren",
1804
+ "method": "POST"
1805
+ },
1806
+ {
1807
+ "kind": "cli",
1808
+ "name": "resourcegrantcollection_findExact",
1809
+ "operation": "findExact",
1810
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection"
1811
+ },
1812
+ {
1813
+ "kind": "cli",
1814
+ "name": "resourcegrantcollection_findChildren",
1815
+ "operation": "findChildren",
1816
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection"
1817
+ },
1818
+ {
1819
+ "kind": "mcp",
1820
+ "name": "resourcegrantcollection_findexact",
1821
+ "operation": "findExact",
1822
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection"
1823
+ },
1824
+ {
1825
+ "kind": "mcp",
1826
+ "name": "resourcegrantcollection_findchildren",
1827
+ "operation": "findChildren",
1828
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection"
1829
+ }
1830
+ ],
1831
+ "relationshipFeatures": [
1832
+ "uuidColumns"
1833
+ ],
1834
+ "tags": [],
1835
+ "risks": []
1836
+ },
1754
1837
  {
1755
1838
  "name": "RoleCollection",
1756
1839
  "qualifiedName": "@happyvertical/smrt-users:RoleCollection",
@@ -5181,6 +5264,169 @@
5181
5264
  "tags": [],
5182
5265
  "risks": []
5183
5266
  },
5267
+ {
5268
+ "name": "ResourceGrant",
5269
+ "qualifiedName": "@happyvertical/smrt-users:ResourceGrant",
5270
+ "collection": "resourcegrants",
5271
+ "tableName": "resource_grants",
5272
+ "packageName": "@happyvertical/smrt-users",
5273
+ "extends": "SmrtObject",
5274
+ "fields": [
5275
+ {
5276
+ "name": "tenantId",
5277
+ "type": "foreignKey",
5278
+ "required": true,
5279
+ "related": "Tenant",
5280
+ "columnType": "UUID"
5281
+ },
5282
+ {
5283
+ "name": "userId",
5284
+ "type": "foreignKey",
5285
+ "required": true,
5286
+ "related": "User",
5287
+ "columnType": "UUID"
5288
+ },
5289
+ {
5290
+ "name": "resourceType",
5291
+ "type": "text",
5292
+ "required": false,
5293
+ "columnType": "TEXT"
5294
+ },
5295
+ {
5296
+ "name": "resourceId",
5297
+ "type": "text",
5298
+ "required": false,
5299
+ "columnType": "TEXT"
5300
+ },
5301
+ {
5302
+ "name": "permission",
5303
+ "type": "text",
5304
+ "required": false,
5305
+ "columnType": "TEXT"
5306
+ },
5307
+ {
5308
+ "name": "effect",
5309
+ "type": "text",
5310
+ "required": false,
5311
+ "columnType": "TEXT"
5312
+ },
5313
+ {
5314
+ "name": "canDelegate",
5315
+ "type": "boolean",
5316
+ "required": false,
5317
+ "columnType": "BOOLEAN",
5318
+ "default": false
5319
+ },
5320
+ {
5321
+ "name": "parentGrantId",
5322
+ "type": "foreignKey",
5323
+ "required": false,
5324
+ "related": "ResourceGrant",
5325
+ "columnType": "UUID"
5326
+ },
5327
+ {
5328
+ "name": "revokedAt",
5329
+ "type": "text",
5330
+ "required": false,
5331
+ "columnType": "TEXT"
5332
+ }
5333
+ ],
5334
+ "relationships": [
5335
+ {
5336
+ "name": "tenantId",
5337
+ "type": "foreignKey",
5338
+ "required": true,
5339
+ "related": "Tenant",
5340
+ "columnType": "UUID"
5341
+ },
5342
+ {
5343
+ "name": "userId",
5344
+ "type": "foreignKey",
5345
+ "required": true,
5346
+ "related": "User",
5347
+ "columnType": "UUID"
5348
+ },
5349
+ {
5350
+ "name": "parentGrantId",
5351
+ "type": "foreignKey",
5352
+ "required": false,
5353
+ "related": "ResourceGrant",
5354
+ "columnType": "UUID"
5355
+ }
5356
+ ],
5357
+ "methods": [
5358
+ "isActive"
5359
+ ],
5360
+ "methodSignatures": [
5361
+ {
5362
+ "name": "isActive",
5363
+ "returns": "boolean"
5364
+ }
5365
+ ],
5366
+ "tenant": {
5367
+ "scoped": true,
5368
+ "mode": "required",
5369
+ "field": "tenantId"
5370
+ },
5371
+ "conflictColumns": [
5372
+ "tenant_id",
5373
+ "slug",
5374
+ "context"
5375
+ ],
5376
+ "surfaces": [
5377
+ {
5378
+ "kind": "cli",
5379
+ "name": "resourcegrant_list",
5380
+ "operation": "list",
5381
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
5382
+ },
5383
+ {
5384
+ "kind": "cli",
5385
+ "name": "resourcegrant_get",
5386
+ "operation": "get",
5387
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
5388
+ },
5389
+ {
5390
+ "kind": "cli",
5391
+ "name": "resourcegrant_create",
5392
+ "operation": "create",
5393
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
5394
+ },
5395
+ {
5396
+ "kind": "cli",
5397
+ "name": "resourcegrant_update",
5398
+ "operation": "update",
5399
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
5400
+ },
5401
+ {
5402
+ "kind": "cli",
5403
+ "name": "resourcegrant_delete",
5404
+ "operation": "delete",
5405
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
5406
+ },
5407
+ {
5408
+ "kind": "cli",
5409
+ "name": "resourcegrant_isActive",
5410
+ "operation": "isActive",
5411
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
5412
+ }
5413
+ ],
5414
+ "withheldSurfaces": [
5415
+ {
5416
+ "kind": "api",
5417
+ "operation": "isActive",
5418
+ "code": "not-included",
5419
+ "reason": "not listed in api.include",
5420
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
5421
+ }
5422
+ ],
5423
+ "relationshipFeatures": [
5424
+ "foreignKey",
5425
+ "uuidColumns"
5426
+ ],
5427
+ "tags": [],
5428
+ "risks": []
5429
+ },
5184
5430
  {
5185
5431
  "name": "Role",
5186
5432
  "qualifiedName": "@happyvertical/smrt-users:Role",
@@ -7788,6 +8034,46 @@
7788
8034
  "operation": "findOrCreate",
7789
8035
  "objectName": "@happyvertical/smrt-users:PermissionCollection"
7790
8036
  },
8037
+ {
8038
+ "kind": "api",
8039
+ "name": "resourcegrants.findExact",
8040
+ "operation": "findExact",
8041
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection",
8042
+ "path": "/resourcegrants/findExact",
8043
+ "method": "POST"
8044
+ },
8045
+ {
8046
+ "kind": "api",
8047
+ "name": "resourcegrants.findChildren",
8048
+ "operation": "findChildren",
8049
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection",
8050
+ "path": "/resourcegrants/findChildren",
8051
+ "method": "POST"
8052
+ },
8053
+ {
8054
+ "kind": "cli",
8055
+ "name": "resourcegrantcollection_findExact",
8056
+ "operation": "findExact",
8057
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection"
8058
+ },
8059
+ {
8060
+ "kind": "cli",
8061
+ "name": "resourcegrantcollection_findChildren",
8062
+ "operation": "findChildren",
8063
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection"
8064
+ },
8065
+ {
8066
+ "kind": "mcp",
8067
+ "name": "resourcegrantcollection_findexact",
8068
+ "operation": "findExact",
8069
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection"
8070
+ },
8071
+ {
8072
+ "kind": "mcp",
8073
+ "name": "resourcegrantcollection_findchildren",
8074
+ "operation": "findChildren",
8075
+ "objectName": "@happyvertical/smrt-users:ResourceGrantCollection"
8076
+ },
7791
8077
  {
7792
8078
  "kind": "api",
7793
8079
  "name": "roles.findSystemRoles",
@@ -9606,6 +9892,42 @@
9606
9892
  "operation": "get",
9607
9893
  "objectName": "@happyvertical/smrt-users:Permission"
9608
9894
  },
9895
+ {
9896
+ "kind": "cli",
9897
+ "name": "resourcegrant_list",
9898
+ "operation": "list",
9899
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
9900
+ },
9901
+ {
9902
+ "kind": "cli",
9903
+ "name": "resourcegrant_get",
9904
+ "operation": "get",
9905
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
9906
+ },
9907
+ {
9908
+ "kind": "cli",
9909
+ "name": "resourcegrant_create",
9910
+ "operation": "create",
9911
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
9912
+ },
9913
+ {
9914
+ "kind": "cli",
9915
+ "name": "resourcegrant_update",
9916
+ "operation": "update",
9917
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
9918
+ },
9919
+ {
9920
+ "kind": "cli",
9921
+ "name": "resourcegrant_delete",
9922
+ "operation": "delete",
9923
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
9924
+ },
9925
+ {
9926
+ "kind": "cli",
9927
+ "name": "resourcegrant_isActive",
9928
+ "operation": "isActive",
9929
+ "objectName": "@happyvertical/smrt-users:ResourceGrant"
9930
+ },
9609
9931
  {
9610
9932
  "kind": "api",
9611
9933
  "name": "roles.list",
@@ -10219,12 +10541,12 @@
10219
10541
  ],
10220
10542
  "prompts": [],
10221
10543
  "relationshipsV2": {
10222
- "foreignKeyFields": 22,
10544
+ "foreignKeyFields": 25,
10223
10545
  "crossPackageRefFields": 1,
10224
10546
  "junctionCollections": 0,
10225
10547
  "hierarchicalObjects": 0,
10226
10548
  "polymorphicAssociations": 0,
10227
- "uuidColumns": 82
10549
+ "uuidColumns": 90
10228
10550
  },
10229
10551
  "agentDoc": "# @happyvertical/smrt-users\n\nMulti-tenant identity, RBAC, hierarchical tenants, sessions, and SvelteKit auth.\n\n## Modules\n\nRead only the module relevant to the change; protocol and provisioning details\nare not prerequisites for unrelated user-package work.\n\n| Module | Scope | Module doc |\n|---|---|---|\n| `src/services/PermissionResolver.ts` | permission precedence, inherited memberships, guards, RLS, role seeding | [agents/permissions.md](agents/permissions.md) |\n| `src/services/OidcLoginService.ts`, collections and OIDC handlers | identity reconciliation, transaction boundaries, migration readiness | [agents/oidc-provisioning.md](agents/oidc-provisioning.md) |\n| `src/services/MobileAuthService.ts` | mobile handshake, bearer sessions, bootstrap extension boundary | [agents/mobile-auth.md](agents/mobile-auth.md) |\n| `src/retention.ts` | expired session/token/CLI-auth reaping and retention sweep wiring | [agents/retention.md](agents/retention.md) |\n\n## Models and authority\n\n- Users are global; tenant access comes through Membership (unique user/tenant).\n User email is normalized and globally unique through readonly nullable\n `emailKey`. `profileId` is a unique cross-package reference: at most one User\n owns each non-null Profile.\n- Tenant uses STI and a materialized hierarchy, maximum depth 10.\n `createChild()` calculates paths; `moveToParent()` updates all descendants.\n- Role with `tenantId = null` is available to all tenants; `isSystem` prevents\n deletion. `inheritsToDescendants` is opt-in. Seed owner/admin/member/viewer\n through `RoleCollection.seedSystemRoles()` at application initialization.\n- Group roles apply only in their own tenant. Use `getGroupIdsForTenant()`,\n never cross-tenant `getGroupIds()`, for authorization.\n- Upward visibility is opt-in and read-only: `permissions.ancestorRead`\n ({ roles, collections, maxDepth? }) lets a DESCENDANT membership contribute\n declared `<collection>.read` at an ancestor, only when no membership resolved\n there, intersected with BOTH the role's own catalog grants and the\n principal's effective permissions in that descendant, and only for SYSTEM\n roles (a tenant-scoped role sharing a declared slug is ignored). Off by default, never\n write, never lateral, and never row visibility — sibling rows stay scoped by\n tenancy/RLS. Read the permissions module before changing it.\n- Membership DENY always wins. Direct inactive membership blocks inherited\n authority; a direct active membership pins resolution instead of unioning it\n with ancestors. Read the permissions module before changing these rules.\n- AccessRequest has no generated API/MCP/CLI operations; access it through\n `AccessRequestService`. Its JSON field is `requestContext`, not reserved\n slug-scoping `context`.\n\n## Security boundaries\n\n- Generated REST/MCP operations on identity/RBAC models are list/get only.\n Route authentication does not authorize authority mutations, and these models\n are not tenant-scoped. Use permission-gated services or explicitly checked\n consumer handlers. CLI remains a local-operator surface. Preserve the\n registry assertions in `security-audit-1400.test.ts`.\n- Resource guards take the resource tenant, not the session tenant. Omit a\n session membership when targeting a different tenant; mismatches fail closed.\n `loadSessionContext().tenantAuthorization` must be checked by required-tenant\n consumers: null membership can represent inherited authority.\n- Sessions use secure UUIDs; TTL is seconds (default seven days). Access marks\n expired sessions EXPIRED. Magic-link tokens are single use.\n- Tenant switching verifies active membership before writing and rotates the\n session ID for non-null targets, revoking the old session. Persist the returned\n `SwitchTenantResult.sessionId`; `switchSessionTenant()` updates the cookie and\n preserves its security settings. Failed switches mutate nothing; null clears\n do not rotate. `SessionCollection.setSessionTenant()` is unguarded and must\n never receive an untrusted tenant ID.\n- OIDC provisioning is atomic and fail-closed. Preserve exact issuer/subject\n identifiers, claim-source email verification, unique global Person ownership,\n and transaction-bound reconciliation. Read the OIDC module and canonical\n scenario matrix before changing any provisioning path.\n\n## Entry points and validation\n\n`src/sveltekit/` owns `createSessionHandler`, `createSessionCookie`,\n`destroySessionCookie`, and `switchSessionTenant`. Use README integration examples\nrather than copying application setup into these instructions.\n\nFrom the repository root:\n\n```bash\npnpm --filter @happyvertical/smrt-users test\npnpm --filter @happyvertical/smrt-users typecheck\npnpm --filter @happyvertical/smrt-users test:postgres\n```\n\nStart with the relevant test file via `test -- src/__tests__/<file>.test.ts`.\nRun `test:postgres` for RLS, principal context, OIDC, or terminal-auth database\nchanges. `typecheck` includes Svelte accessibility checks; plain `tsc` is\ninsufficient. Follow root knowledge freshness checks before shipping.\n",
10230
10552
  "moduleDocs": [
package/dist/sveltekit.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as decodeOidcTransaction, E as resolveOidcProviderConfig, S as OidcLoginService, T as getUsersOidcConfig, _ as readMobileBearerToken, a as TerminalAuthRateLimitError, g as MobileAuthService, h as MobileAuthError, i as TerminalAuthError, m as withSessionPermissionContext, o as TerminalAuthService, s as OperationPermissionError, v as validateMobileRedirectUri, w as encodeOidcTransaction, x as OidcLoginError, y as SessionService } from "./chunks/TerminalAuthService-jJc-uqDc.js";
1
+ import { C as decodeOidcTransaction, E as resolveOidcProviderConfig, S as OidcLoginService, T as getUsersOidcConfig, _ as readMobileBearerToken, a as TerminalAuthRateLimitError, g as MobileAuthService, h as MobileAuthError, i as TerminalAuthError, m as withSessionPermissionContext, o as TerminalAuthService, s as OperationPermissionError, v as validateMobileRedirectUri, w as encodeOidcTransaction, x as OidcLoginError, y as SessionService } from "./chunks/TerminalAuthService-DgAU4Fz1.js";
2
2
  import { DiscoveryArtifactValidationError, SMRT_APP_RESULT_CONTRACT, SMRT_APP_RESULT_SCHEMA, SMRT_APP_RESULT_VERSION, SMRT_DISCOVERY_CONFORMANCE_ARTIFACT_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_VERSION, SMRT_MCP_RESULT_METADATA_KEY, canonicalizeDiscoveryArtifact, createDiscoveryConformanceArtifact, deriveCommandRequirements, validateDiscoveryConformanceArtifact } from "./app-contract.js";
3
3
  import { ObjectRegistry, createClassNamePredicate, resolveCustomActionMetadata, resolveEffectiveActionMetadata } from "@happyvertical/smrt-core";
4
4
  import { createLogger } from "@happyvertical/logger";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-users",
3
- "version": "0.51.13",
3
+ "version": "0.51.14",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Multi-tenant user management for the SMRT framework - users, tenants, roles, permissions, groups",
6
6
  "type": "module",
@@ -38,7 +38,7 @@
38
38
  "AGENTS.md"
39
39
  ],
40
40
  "peerDependencies": {
41
- "svelte": "^5.56.4"
41
+ "svelte": "^5.57.1"
42
42
  },
43
43
  "peerDependenciesMeta": {
44
44
  "svelte": {
@@ -47,24 +47,24 @@
47
47
  },
48
48
  "dependencies": {
49
49
  "@happyvertical/logger": "^0.89.12",
50
- "@happyvertical/smrt-config": "0.51.13",
51
- "@happyvertical/smrt-core": "0.51.13",
52
- "@happyvertical/smrt-mobile-contract": "0.51.13",
53
- "@happyvertical/smrt-profiles": "0.51.13",
54
- "@happyvertical/smrt-tenancy": "0.51.13",
55
- "@happyvertical/smrt-types": "0.51.13",
56
- "@happyvertical/smrt-ui": "0.51.13",
50
+ "@happyvertical/smrt-config": "0.51.14",
51
+ "@happyvertical/smrt-core": "0.51.14",
52
+ "@happyvertical/smrt-mobile-contract": "0.51.14",
53
+ "@happyvertical/smrt-profiles": "0.51.14",
54
+ "@happyvertical/smrt-tenancy": "0.51.14",
55
+ "@happyvertical/smrt-types": "0.51.14",
56
+ "@happyvertical/smrt-ui": "0.51.14",
57
57
  "@happyvertical/sql": "^0.89.12",
58
- "jose": "^6.2.3"
58
+ "jose": "^6.2.12"
59
59
  },
60
60
  "devDependencies": {
61
- "@happyvertical/smrt-vitest": "0.51.13",
61
+ "@happyvertical/smrt-vitest": "0.51.14",
62
62
  "@sveltejs/package": "^2.5.8",
63
- "@sveltejs/vite-plugin-svelte": "^7.1.2",
64
- "@types/node": "24.13.2",
63
+ "@sveltejs/vite-plugin-svelte": "^7.3.0",
64
+ "@types/node": "24.13.6",
65
65
  "fast-glob": "^3.3.3",
66
- "svelte": "^5.56.4",
67
- "svelte-check": "^4.7.1",
66
+ "svelte": "^5.57.1",
67
+ "svelte-check": "^4.7.6",
68
68
  "typescript": "5.9.3",
69
69
  "vite": "8.1.4",
70
70
  "vitest": "4.1.10"
@@ -96,7 +96,7 @@
96
96
  "clean": "rm -rf dist",
97
97
  "dev": "npm run build:watch",
98
98
  "test": "vitest run",
99
- "test:postgres": "node ../../scripts/run-with-ci-postgres.mjs -- pnpm exec vitest run src/__tests__/permission-postgres-rls.test.ts src/__tests__/principal-permission-context-postgres.test.ts src/__tests__/oidc-provisioning-postgres.test.ts src/__tests__/legacy-user-profile-backfill-postgres.test.ts src/__tests__/terminal-auth-postgres.test.ts",
99
+ "test:postgres": "node ../../scripts/run-with-ci-postgres.mjs -- pnpm exec vitest run src/__tests__/permission-postgres-rls.test.ts src/__tests__/principal-permission-context-postgres.test.ts src/__tests__/oidc-provisioning-postgres.test.ts src/__tests__/legacy-user-profile-backfill-postgres.test.ts src/__tests__/terminal-auth-postgres.test.ts src/__tests__/resource-grant-postgres.test.ts",
100
100
  "typecheck": "tsc --noEmit && node ../../scripts/svelte-check-a11y.mjs --tsconfig ./tsconfig.svelte.json",
101
101
  "check": "pnpm exec svelte-check --tsconfig ./tsconfig.svelte.json",
102
102
  "verify:pack": "node ../../scripts/verify-package-types-exports.js ."