@jskit-ai/agent-docs 0.1.282 → 0.1.284

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.
Files changed (151) hide show
  1. package/guide/agent/app-extras/assistant.md +14 -2
  2. package/guide/agent/app-extras/realtime.md +38 -1
  3. package/guide/agent/app-setup/authentication.md +64 -14
  4. package/guide/agent/app-setup/console.md +8 -0
  5. package/guide/agent/app-setup/database-layer.md +23 -103
  6. package/guide/agent/app-setup/existing-application-migration.md +105 -72
  7. package/guide/agent/app-setup/multi-homing.md +94 -32
  8. package/guide/agent/app-setup/quickstart.md +1 -1
  9. package/guide/agent/app-setup/run-an-accounts-hub.md +1 -1
  10. package/guide/agent/app-setup/upgrading-jskit.md +8 -3
  11. package/guide/agent/app-setup/users.md +8 -5
  12. package/guide/agent/framework/application-operations.md +1 -1
  13. package/guide/agent/framework/crud-operations.md +63 -45
  14. package/guide/agent/framework/data-access.md +1031 -0
  15. package/guide/agent/framework/sanity-checks.md +26 -27
  16. package/guide/agent/framework/typed-features.md +114 -247
  17. package/guide/agent/index.md +2 -0
  18. package/package.json +6 -3
  19. package/patterns/feature-package/PATTERN.md +25 -17
  20. package/patterns/feature-package/example/booking-engine/package.json +1 -1
  21. package/patterns/feature-package/example/variations/InvoiceRollupFeature.js +6 -7
  22. package/patterns/feature-package/example/variations/invoiceResource.js +15 -0
  23. package/patterns/feature-package/example/variations/invoiceRollupActions.js +4 -4
  24. package/patterns/feature-package/example/variations/ownedTableRepository.js +27 -0
  25. package/patterns/feature-package/example/variations/types.js +1 -1
  26. package/patterns/minimal-foundation/example/AGENTS.md +4 -0
  27. package/patterns/minimal-foundation/example/package.json +4 -4
  28. package/patterns/minimal-foundation/example/server.js +4 -1
  29. package/patterns/shell-foundation/example/AGENTS.md +4 -0
  30. package/patterns/shell-foundation/example/package.json +5 -5
  31. package/patterns/shell-foundation/example/packages/main/package.json +1 -1
  32. package/patterns/shell-foundation/example/server.js +4 -1
  33. package/reference/autogen/KERNEL_MAP.md +2 -1
  34. package/reference/autogen/PATTERN_INDEX.md +70 -59
  35. package/reference/autogen/README.md +1 -1
  36. package/reference/autogen/packages/agent-docs.md +7 -3
  37. package/reference/autogen/packages/agent-runtime.md +48 -11
  38. package/reference/autogen/packages/architecture-inspector.md +6 -2
  39. package/reference/autogen/packages/assistant-core.md +4 -4
  40. package/reference/autogen/packages/assistant-runtime.md +33 -13
  41. package/reference/autogen/packages/auth-provider-local-core.md +3 -1
  42. package/reference/autogen/packages/auth-provider-local-db-core.md +65 -14
  43. package/reference/autogen/packages/auth-provider-oidc-core.md +5 -1
  44. package/reference/autogen/packages/auth-provider-supabase-core.md +1 -1
  45. package/reference/autogen/packages/connectors-core.md +22 -2
  46. package/reference/autogen/packages/console-core.md +9 -5
  47. package/reference/autogen/packages/crud-core.md +38 -173
  48. package/reference/autogen/packages/database-runtime.md +8 -32
  49. package/reference/autogen/packages/http-runtime.md +3 -3
  50. package/reference/autogen/packages/http-web.md +12 -0
  51. package/reference/autogen/packages/kernel.md +25 -2
  52. package/reference/autogen/packages/oidc-issuer-core.md +4 -0
  53. package/reference/autogen/packages/payments-core.md +29 -6
  54. package/reference/autogen/packages/realtime.md +15 -6
  55. package/reference/autogen/packages/resource-core.md +30 -5
  56. package/reference/autogen/packages/resource-crud-core.md +30 -34
  57. package/reference/autogen/packages/resource-runtime.md +198 -0
  58. package/reference/autogen/packages/rewarded-core.md +16 -10
  59. package/reference/autogen/packages/shell-web.md +1 -0
  60. package/reference/autogen/packages/users-core.md +26 -14
  61. package/reference/autogen/packages/workspaces-core.md +17 -10
  62. package/reference/autogen/tooling/config-eslint.md +69 -0
  63. package/reference/autogen/tooling/jskit-catalog.md +40 -1
  64. package/reference/autogen/tooling/jskit-release.md +3 -0
  65. package/skills/jskit/SKILL.md +4 -1
  66. package/skills/jskit/references/app-operations.md +1 -1
  67. package/skills/jskit/references/crud-operations.md +62 -44
  68. package/skills/jskit/references/data-access.md +1026 -0
  69. package/skills/jskit/references/database-layer.md +411 -0
  70. package/skills/jskit/references/existing-application-migration.md +105 -72
  71. package/skills/jskit/references/heuristics/INDEX.md +6 -4
  72. package/skills/jskit/references/heuristics/crud-authoring.md +22 -14
  73. package/skills/jskit/references/heuristics/data-access.md +19 -0
  74. package/skills/jskit/references/heuristics/filters.md +6 -6
  75. package/skills/jskit/references/heuristics/row-policies.md +40 -16
  76. package/skills/jskit/references/heuristics/server-search.md +30 -42
  77. package/skills/jskit/references/heuristics/table-resource-fields.md +78 -0
  78. package/skills/jskit/references/heuristics/typed-features.md +3 -3
  79. package/skills/jskit/references/multi-homing.md +94 -32
  80. package/skills/jskit/references/pattern-index.md +70 -59
  81. package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +4 -0
  82. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +4 -4
  83. package/skills/jskit/references/patterns/app/minimal-foundation/example/server.js +4 -1
  84. package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +4 -0
  85. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +5 -5
  86. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  87. package/skills/jskit/references/patterns/app/shell-foundation/example/server.js +4 -1
  88. package/skills/jskit/references/patterns/assistant/assistant-surface/PATTERN.md +5 -2
  89. package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +3 -2
  90. package/skills/jskit/references/patterns/auth/auth-surface/PATTERN.md +15 -0
  91. package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
  92. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  93. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  94. package/skills/jskit/references/patterns/crud/crud-contract/PATTERN.md +133 -0
  95. package/skills/jskit/references/patterns/crud/crud-contract/example/bookResource.js +74 -0
  96. package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/PATTERN.md +69 -37
  97. package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/example/packages/books/package.json +5 -4
  98. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/server/BooksFeature.js +13 -0
  99. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/shared/bookResource.js +74 -0
  100. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/shared/index.js +1 -0
  101. package/skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md +26 -8
  102. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookEditPage.vue +2 -2
  103. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookListPage.vue +2 -2
  104. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookNewPage.vue +2 -2
  105. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookViewPage.vue +3 -3
  106. package/skills/jskit/references/patterns/database/mysql-application/PATTERN.md +9 -4
  107. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +2 -1
  108. package/skills/jskit/references/patterns/database/mysql-application/example/scripts/prepare-database.js +8 -0
  109. package/skills/jskit/references/patterns/database/postgres-application/PATTERN.md +8 -4
  110. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +2 -1
  111. package/skills/jskit/references/patterns/database/postgres-application/example/scripts/prepare-database.js +8 -0
  112. package/skills/jskit/references/patterns/database/table-resource/PATTERN.md +117 -0
  113. package/skills/jskit/references/patterns/database/table-resource/example/orderResource.js +25 -0
  114. package/skills/jskit/references/patterns/realtime/realtime-application/PATTERN.md +7 -0
  115. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  116. package/skills/jskit/references/patterns/rewards/google-rewarded/PATTERN.md +1 -1
  117. package/skills/jskit/references/patterns/server/feature-package/PATTERN.md +25 -17
  118. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  119. package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupFeature.js +6 -7
  120. package/skills/jskit/references/patterns/server/feature-package/example/variations/invoiceResource.js +15 -0
  121. package/skills/jskit/references/patterns/server/feature-package/example/variations/invoiceRollupActions.js +4 -4
  122. package/skills/jskit/references/patterns/server/feature-package/example/variations/ownedTableRepository.js +27 -0
  123. package/skills/jskit/references/patterns/server/feature-package/example/variations/types.js +1 -1
  124. package/skills/jskit/references/patterns/users/user-administration-server/PATTERN.md +59 -10
  125. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +5 -4
  126. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/server/UsersFeature.js +7 -5
  127. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/index.js +1 -1
  128. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/userCrud.js +21 -0
  129. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +11 -5
  130. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/UsersWorkspaceFeature.js +14 -5
  131. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/workspaceMembersOnly.js +52 -0
  132. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/index.js +1 -1
  133. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/userCrud.js +21 -0
  134. package/skills/jskit/references/patterns/workspaces/workspace-server/PATTERN.md +9 -9
  135. package/skills/jskit/references/patterns/workspaces/workspace-surfaces/PATTERN.md +16 -0
  136. package/skills/jskit/references/patterns/workspaces/workspace-surfaces/example/src/pages/home/workspaces/index.vue +2 -0
  137. package/skills/jskit/references/sanity-checks.md +27 -28
  138. package/skills/jskit/references/typed-features.md +114 -247
  139. package/patterns/feature-package/example/variations/customKnexRepository.js +0 -40
  140. package/reference/autogen/packages/json-rest-api-core.md +0 -66
  141. package/skills/jskit/references/heuristics/crud-repository-mapping.md +0 -140
  142. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/server/BooksFeature.js +0 -13
  143. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/shared/bookResource.js +0 -83
  144. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/shared/index.js +0 -1
  145. package/skills/jskit/references/patterns/crud/resource-contract/PATTERN.md +0 -155
  146. package/skills/jskit/references/patterns/crud/resource-contract/example/bookResource.js +0 -87
  147. package/skills/jskit/references/patterns/server/feature-package/example/variations/customKnexRepository.js +0 -40
  148. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/userResource.js +0 -69
  149. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/userResource.js +0 -56
  150. /package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/example/migrations/20260815000000_books.cjs +0 -0
  151. /package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/example/packages/books/src/server/types.js +0 -0
@@ -198,6 +198,12 @@ Local functions
198
198
  - `releaseNoSubscriptions()`
199
199
  - `assertConversationAccess(conversationAccess, conversationRuntime)`
200
200
 
201
+ ### `src/server/AssistantStoreFeature.js`
202
+ Exports
203
+ - `AssistantStoreFeature`
204
+ Local functions
205
+ - `createAssistantRepositories({ resources, systemContext })`
206
+
201
207
  ### `src/server/conversationOperations.js`
202
208
  Exports
203
209
  - `createConversationOperations({ conversationRuntime, config, workspaceScopeSupport, conversationDataSchema })`
@@ -239,6 +245,7 @@ Exports
239
245
  ### `src/server/index.js`
240
246
  Exports
241
247
  - `AssistantFeature`
248
+ - `AssistantStoreFeature`
242
249
  - `createAssistantActions`
243
250
  - `assistantConversationGoalBodyValidator`
244
251
  - `registerAssistantRoutes`
@@ -294,43 +301,55 @@ Local functions
294
301
 
295
302
  ### `src/server/repositories/assistantConfigRepository.js`
296
303
  Exports
297
- - `createRepository(knex)`
304
+ - `createRepository({ assistantConfig, systemContext })`
298
305
  Local functions
299
306
  - `normalizeTargetSurfaceId(value = "")`
300
307
  - `buildScopeKey(targetSurfaceId, workspaceId = null)`
301
- - `mapConfigRow(row = {})`
308
+ - `mapConfigRecord(record = {})`
302
309
  - `createDefaultRecord({ targetSurfaceId = "", workspaceId = null } = {})`
303
310
 
311
+ ### `src/server/repositories/assistantResources.js`
312
+ Exports
313
+ - `assistantConfigResource`
314
+ - `assistantConversationsResource`
315
+ - `assistantMessagesResource`
316
+ - `assistantTurnRequestsResource`
317
+ Local functions
318
+ - `textField(definition = {})`
319
+ - `dateTimeField(definition = {})`
320
+
304
321
  ### `src/server/repositories/conversationsRepository.js`
305
322
  Exports
306
- - `createRepository(knex)`
323
+ - `createRepository({ conversations, systemContext })`
307
324
  Local functions
308
325
  - `normalizeRequiredSurfaceId(value)`
309
- - `mapConversationRow(row = {})`
326
+ - `mapConversationRecord(record = {})`
310
327
  - `normalizeCursorPagination(pagination = {}, { defaultLimit = 20, maxLimit = 200 } = {})`
311
- - `createConversationBaseQuery(client)`
328
+ - `rethrowLockError(error)`
329
+ - `conversationChanges(patch)`
312
330
 
313
331
  ### `src/server/repositories/messagesRepository.js`
314
332
  Exports
315
- - `createRepository(knex)`
333
+ - `createRepository({ messages, conversations, systemContext })`
316
334
  Local functions
317
- - `mapMessageRow(row = {})`
335
+ - `mapMessageRecord(record = {})`
318
336
  - `normalizePagination(pagination = {}, { defaultPage = 1, defaultPageSize = 200, maxPageSize = 500 } = {})`
319
- - `resolveNextSequence(client, conversationId)`
337
+ - `isNewer(a, b)`
320
338
 
321
339
  ### `src/server/repositories/repositoryPersistenceUtils.js`
322
340
  Exports
323
- - `applyWorkspaceScope(query, columnName, workspaceId)`
324
- - `normalizeDbWorkspaceId(value)`
325
341
  - `normalizeInputRecordId(value)`
326
342
  - `parseJsonObject`
327
343
  - `stringifyJsonObject(value)`
328
344
  - `toIso(value)`
329
- - `resolveInsertedId(insertResult)`
345
+ - `toWrittenDateTime(value = null)`
330
346
 
331
347
  ### `src/server/repositories/turnRequestsRepository.js`
332
348
  Exports
333
- - `createRepository(knex)`
349
+ - `createRepository({ turnRequests, systemContext })`
350
+ Local functions
351
+ - `scopeKey(scope)`
352
+ - `mapTurnRequestRecord(record)`
334
353
 
335
354
  ### `src/server/services/assistantConfigService.js`
336
355
  Exports
@@ -340,7 +359,7 @@ Exports
340
359
 
341
360
  ### `src/server/services/chatService.js`
342
361
  Exports
343
- - `createChatService({ conversationRuntime, aiClientFactory, turnRequests, attachments, transcriptService, serviceToolCatalog, assistantConfigService, personContextPrompt, appConfig, workspaceScopeSupport })`
362
+ - `createChatService({ conversationRuntime, aiClientFactory, turnRequests, attachments, transcriptService, serviceToolCatalog, assistantConfigService, personContextPrompt, appConfig, workspaceScopeSupport, logger = silentLogger })`
344
363
  - `type AssistantAiClientFactory`
345
364
  - `type AssistantAttachments`
346
365
  - `type AssistantConfigService`
@@ -449,6 +468,7 @@ Exports
449
468
  - `type ConversationsRepository`
450
469
  - `type MessagesRepository`
451
470
  - `type TurnRequestsRepository`
471
+ - `type AssistantRepositories`
452
472
  - `type WorkspaceScopeSupport`
453
473
  - `type ConversationAccess`
454
474
  - `type AssistantAttachments`
@@ -59,11 +59,12 @@ Local functions
59
59
  ### `src/server/lib/emailConfirmation.js`
60
60
  Exports
61
61
  - `CONFIRMATION_TOKEN_TTL_SECONDS`
62
- - `createLocalEmailConfirmation({ backend, config, confirmationSender, firstAccountSetup, invitationContextResolver, profileProjector, sessions })`
62
+ - `createLocalEmailConfirmation({ backend, config, confirmationSender, firstAccountSetup, invitationContextResolver, passwords, profileProjector, sessions })`
63
63
  - `createLoggedConfirmationSender(logger)`
64
64
  Local functions
65
65
  - `emailTakenError()`
66
66
  - `confirmationInvalidError()`
67
+ - `confirmationPasswordInvalidError()`
67
68
 
68
69
  ### `src/server/lib/fileBackend.js`
69
70
  Exports
@@ -243,6 +244,7 @@ Exports
243
244
  ### `test-support/emailConfirmationScenario.js`
244
245
  Exports
245
246
  - `exerciseEmailConfirmation(t, service, storedRegistrations)`
247
+ - `exerciseRegistrationTakeover(service)`
246
248
  Local functions
247
249
  - `linkToken(result)`
248
250
 
@@ -14,38 +14,85 @@ Use this on demand; do not load the full index at startup.
14
14
 
15
15
  ### src
16
16
 
17
+ ### `src/server/lib/dateTimes.js`
18
+ Exports
19
+ - `nowIso()`
20
+ - `toDate(value)`
21
+
17
22
  ### `src/server/lib/dbBackend.js`
18
23
  Exports
19
24
  - `LOCAL_AUTH_DB_TABLES`
20
- - `createLocalDbBackend({ knex, transactionManager })`
25
+ - `LOCAL_AUTH_INFRASTRUCTURE_TABLES`
26
+ - `createLocalDbBackend({ resources, identities, context })`
27
+ - `createLocalDbOwners({ resources, identities, context })`
28
+ - `type LocalAuthHandles`
21
29
  Local functions
22
- - `nowIso()`
23
- - `toDate(value)`
24
30
  - `requiredDateTime(value, fallback = nowIso())`
25
31
  - `optionalDateTime(value)`
26
32
  - `readDateTime(value, fallback = "")`
27
- - `readPassword(row)`
33
+ - `text(value)`
34
+ - `readPassword(record)`
28
35
  - `writePassword(password = {})`
29
- - `mapUser(row)`
30
- - `mapSession(row)`
31
- - `mapRecovery(row)`
36
+ - `mapUser(record)`
37
+ - `mapSession(record)`
38
+ - `mapRecovery(record)`
39
+ - `mapOAuthAttempt(record)`
40
+ - `mapSignInFailures(record)`
41
+ - `mapRegistration(record)`
42
+ - `registrationRecord(input = {})`
43
+ - `userRecord(input = {})`
44
+ - `sessionRecord(input = {})`
45
+ - `recoveryRecord(input = {})`
46
+ - `oauthAttemptRecord(input = {})`
47
+ - `findOne(handle, field, value, options)`
48
+ - `findById(handle, id, options)`
49
+ - `deleteById(handle, id, options)`
50
+ - `replaceFailures(failures, email, attributes, options)`
51
+ - `patchExisting(handle, id, changes, options)`
52
+ - `userRecords(users, options)`
53
+ - `sessionRecords(sessions, options)`
54
+ - `recoveryRecords(recovery, options)`
55
+ - `oauthAttemptRecords(attempts, options)`
56
+ - `signInFailureRecords(failures, options)`
57
+ - `registrationRecords(registrations, options)`
58
+ - `createRecords(resources, identities, options)`
59
+
60
+ ### `src/server/lib/identityStore.js`
61
+ Exports
62
+ - `IDENTITIES_TABLE`
63
+ - `createIdentityStore({ database })`
64
+ - `type IdentityStore`
65
+ Local functions
32
66
  - `mapIdentity(row)`
33
- - `mapOAuthAttempt(row)`
34
- - `mapSignInFailures(row)`
35
- - `mapRegistration(row)`
36
- - `registrationRow(record = {})`
37
- - `userInsert(input = {})`
38
- - `sessionInsert(input = {})`
39
- - `recoveryInsert(input = {})`
40
67
 
41
68
  ### `src/server/lib/index.js`
42
69
  Exports
43
70
  - `createLocalDbBackend`
71
+ - `createLocalDbOwners`
44
72
  - `LOCAL_AUTH_DB_TABLES`
73
+ - `LOCAL_AUTH_INFRASTRUCTURE_TABLES`
74
+
75
+ ### `src/server/lib/localAuthResources.js`
76
+ Exports
77
+ - `LOCAL_AUTH_RESOURCES`
78
+ - `localAuthOAuthAttemptResource`
79
+ - `localAuthRecoveryResource`
80
+ - `localAuthRegistrationResource`
81
+ - `localAuthSessionResource`
82
+ - `localAuthSignInFailureResource`
83
+ - `localAuthUserResource`
45
84
 
46
85
  ### `src/server/providers/AuthLocalDatabaseBackendProvider.js`
47
86
  Exports
48
87
  - `AuthLocalDatabaseBackendProvider`
88
+ Local functions
89
+ - `textRecordId(value)`
90
+
91
+ ### `src/server/types.js`
92
+ Exports
93
+ - `type AuthLocalAccounts`
94
+ - `type AuthLocalSessions`
95
+ - `type AuthLocalRecovery`
49
96
 
50
97
  ### migrations
51
98
 
@@ -60,3 +107,7 @@ Exports
60
107
  ### `migrations/auth_local_db_protection.cjs`
61
108
  Exports
62
109
  - None
110
+
111
+ ### `migrations/auth_local_db_users_email_verified.cjs`
112
+ Exports
113
+ - None
@@ -39,6 +39,7 @@ Exports
39
39
  - `adoptOidcAccounts`
40
40
  - `exportLocalAccounts`
41
41
  - `createOidcAuthService`
42
+ - `OIDC_CLIENT_INFRASTRUCTURE_TABLES`
42
43
  - `createOidcStore`
43
44
 
44
45
  ### `src/server/lib/issuer.js`
@@ -79,8 +80,10 @@ Local functions
79
80
 
80
81
  ### `src/server/lib/store.js`
81
82
  Exports
83
+ - `OIDC_CLIENT_INFRASTRUCTURE_TABLES`
82
84
  - `TABLES`
83
- - `createOidcStore({ knex, now = Date.now })`
85
+ - `createOidcStore({ database, profiles, now = Date.now })`
86
+ - `type OidcKnownUsers`
84
87
  Local functions
85
88
  - `toDate(value)`
86
89
  - `isExpired(value, now)`
@@ -141,6 +144,7 @@ Exports
141
144
  Local functions
142
145
  - `createDatabase()`
143
146
  - `createProfileProjector(knex)`
147
+ - `createUsersProfiles(knex)`
144
148
 
145
149
  ### `test-support/mockIssuer.js`
146
150
  Exports
@@ -163,7 +163,7 @@ Local functions
163
163
  ### `src/server/lib/profileModes.js`
164
164
  Exports
165
165
  - `PROVIDER_MODE_PROFILES`
166
- - `createUsersModeProfiles(identity)`
166
+ - `createUsersModeProfiles({ profileProjector, userProfiles, userSettings })`
167
167
  Local functions
168
168
  - `createProviderProfileProjector()`
169
169
 
@@ -28,6 +28,27 @@ Local functions
28
28
  - `connectionMatches(connection, integration, providerId, registration)`
29
29
  - `callbackMatches(connection, provider, registration)`
30
30
 
31
+ ### `src/server/connectionStore.js`
32
+ Exports
33
+ - `createConnectionStore({ resources, systemContext, protection })`
34
+ - `requireProtection(protection)`
35
+ Local functions
36
+ - `hash(value)`
37
+
38
+ ### `src/server/ConnectionStoreFeature.js`
39
+ Exports
40
+ - `CONNECTION_STORE_FEATURE`
41
+ - `CONNECTION_STORE_SYSTEM_SCOPE`
42
+ - `createConnectionStoreFeature({ protection })`
43
+
44
+ ### `src/server/connectorResources.js`
45
+ Exports
46
+ - `CONNECTOR_TABLES`
47
+ - `connectorAuthorizationAttemptResource`
48
+ - `connectorConnectionResource`
49
+ Local functions
50
+ - `key(column)`
51
+
31
52
  ### `src/server/ConnectorsFeature.js`
32
53
  Exports
33
54
  - `createConnectorsFeature(options)`
@@ -68,8 +89,6 @@ Exports
68
89
  ### `src/server/knexConnectionStore.js`
69
90
  Exports
70
91
  - `createKnexConnectionStore({ knex, protection })`
71
- Local functions
72
- - `hash(value)`
73
92
 
74
93
  ### `src/server/providerRequests.js`
75
94
  Exports
@@ -86,6 +105,7 @@ Local functions
86
105
  ### `src/server/storage.js`
87
106
  Exports
88
107
  - `createCredentialProtection`
108
+ - `createConnectionStoreFeature`
89
109
  - `createKnexConnectionStore`
90
110
 
91
111
  ### `src/server/types.js`
@@ -30,7 +30,7 @@ Exports
30
30
 
31
31
  ### `src/server/consoleRuntime.js`
32
32
  Exports
33
- - `createConsoleRuntime({ database })`
33
+ - `createConsoleRuntime({ consoleSettingsRepository })`
34
34
 
35
35
  ### `src/server/consoleSettings/consoleService.js`
36
36
  Exports
@@ -42,10 +42,9 @@ Exports
42
42
 
43
43
  ### `src/server/consoleSettings/consoleSettingsRepository.js`
44
44
  Exports
45
- - `createRepository({ knex })`
45
+ - `createRepository({ consoleSettings })`
46
46
  Local functions
47
- - `nowDb()`
48
- - `mapSingletonRow(row)`
47
+ - `mapSingletonRecord(record)`
49
48
 
50
49
  ### `src/server/consoleSettings/consoleSettingsRoutes.js`
51
50
  Exports
@@ -62,6 +61,7 @@ Local functions
62
61
  ### `src/server/types.js`
63
62
  Exports
64
63
  - `type ConsoleCore`
64
+ - `type ConsoleSettings`
65
65
  - `type ConsoleService`
66
66
  - `type ConsoleSettingsRepository`
67
67
  - `type ConsoleSettingsService`
@@ -72,7 +72,11 @@ Exports
72
72
 
73
73
  ### `src/shared/resources/consoleSettingsResource.js`
74
74
  Exports
75
- - `consoleSettingsResource`
75
+ - `consoleSettingsContract`
76
+
77
+ ### `src/shared/resources/consoleSettingsTableResource.js`
78
+ Exports
79
+ - `consoleSettingsTableResource`
76
80
 
77
81
  ### migrations
78
82
 
@@ -14,27 +14,34 @@ Use this on demand; do not load the full index at startup.
14
14
 
15
15
  ### src
16
16
 
17
- ### `src/server/createCrudServiceFromResource.js`
18
- Exports
19
- - `createCrudServiceFromResource(resource, { context = "crudService" } = {})`
20
-
21
17
  ### `src/server/createHooksToCollectChildren.js`
22
18
  Exports
23
19
  - `createHooksToCollectChildren(options = {})`
24
20
  Local functions
25
21
  - `normalizeOwnerKey(value)`
26
22
  - `readParentId(record)`
27
- - `toDefaultChildCallOptions({ callOptions = {} } = {})`
23
+ - `passCallOptions({ callOptions = {} } = {})`
24
+ - `explainForeignKeyFilterError(error, context, childForeignKey)`
28
25
  - `resolveListChildrenHandler(options = {}, { context = "createHooksToCollectChildren" } = {})`
29
26
  - `resolveGetChildOwnerId(options = {}, { context = "createHooksToCollectChildren" } = {})`
30
27
  - `resolveChildrenContainerKey(hookContext = {}, options = {})`
31
28
 
32
- ### `src/server/defineCrudJsonApiFeature.js`
29
+ ### `src/server/crudContracts.js`
33
30
  Exports
34
- - `defineCrudJsonApiFeature({ resource, id = "", capability = "", surface, ownershipFilter = "", relativePath = "", internal = false, routes = true, listFilterQueryValidator = null, searchSchema = null, permissions = null, scope = {}, requires = {}, decorateRepository = null, decorateService = null, operationLifecycle = {}, operationInputs = {}, actions = {}, operations = undefined, realtimeAudience = "event_scope" })`
31
+ - `CrudContractsProvider`
32
+ - `createCrudContracts()`
33
+
34
+ ### `src/server/defineCrudFeature.js`
35
+ Exports
36
+ - `defineCrudFeature(feature)`
35
37
  Local functions
36
- - `normalizeAccess(resource = {})`
38
+ - `assertKnownOptions(options)`
39
+ - `assertPermissionNames(permissions, actions)`
40
+ - `assertServiceOperations(service, operations)`
41
+ - `normalizeAccess(crud = {})`
37
42
  - `normalizeScope(scope = {})`
43
+ - `routeOwnership(ownership)`
44
+ - `crudOwns(crud, owns, ownerRepository)`
38
45
  - `assertWorkspaceScope(scope, ownershipFilter)`
39
46
  - `normalizeFeatureRequirements(requires = {})`
40
47
  - `operationsFromResource(resource)`
@@ -42,21 +49,6 @@ Local functions
42
49
  - `resolveActionPermission(actionName, { access, workspaceScoped, permissions })`
43
50
  - `projectEnabledServiceOperations(service, operations)`
44
51
 
45
- ### `src/server/fieldAccess.js`
46
- Exports
47
- - `createCrudFieldAccessRuntime(resource = {}, { context = "crudFieldAccess" } = {})`
48
- - `createFieldAccessForRoleMatrix(matrix = {}, { context = "crudFieldAccess" } = {})`
49
- Local functions
50
- - `normalizeFieldSet(value, { context = "crudFieldAccess", label = "field list" } = {})`
51
- - `resolveFieldSet(resolver, input = {}, { context = "crudFieldAccess", label = "field list" } = {})`
52
- - `resolveWriteMode(fieldAccess = {}, { context = "crudFieldAccess" } = {})`
53
- - `buildOutputFieldRules(resource)`
54
- - `resolveRoleFromFieldAccessInput(input)`
55
- - `resolveActionFromFieldAccessInput(input)`
56
- - `resolveOperationPolicyValue(operationPolicy, input = {}, action = "*")`
57
- - `resolveRoleMatrixPolicy(matrix = {}, operation = "readable", input = {})`
58
- - `applyReadableFieldPolicyToRecord(record, allowedFields, outputRules, { context = "crudFieldAccess" } = {})`
59
-
60
52
  ### `src/server/jsonApiModule/actions.js`
61
53
  Exports
62
54
  - `assertCrudOperationName(operation = "")`
@@ -89,13 +81,6 @@ Local functions
89
81
  Exports
90
82
  - `buildCrudCustomActionId(namespace, name, definition)`
91
83
 
92
- ### `src/server/jsonApiModule/repository.js`
93
- Exports
94
- - `createCrudJsonApiRepository({ api, resource, resourceScopeName })`
95
- - `type WriteReturning`
96
- Local functions
97
- - `writeReturning(options, fallback = "full")`
98
-
99
84
  ### `src/server/jsonApiModule/routes.js`
100
85
  Exports
101
86
  - `registerCrudJsonApiRoutes(router, { namespace, resource, routeBase, relativePath, surface, ownershipFilter, access, internal, operations, actions, operationInputs, listFilterQueryValidator, routeParamsValidator, scopeInput })`
@@ -106,10 +91,15 @@ Local functions
106
91
 
107
92
  ### `src/server/jsonApiModule/service.js`
108
93
  Exports
109
- - `createCrudJsonApiService({ repository })`
110
- - `repositoryCallOptions(options = {})`
94
+ - `createCrudService({ repository, crud })`
111
95
  Local functions
96
+ - `documentNotFound()`
112
97
  - `requireDocument(document)`
98
+ - `isNotFound(error)`
99
+ - `recordOutput(crud)`
100
+ - `contractShape(crud)`
101
+ - `includedShape({ attributes, relationships }, labelKey = "")`
102
+ - `documentShapes(crud)`
113
103
 
114
104
  ### `src/server/jsonApiResourceContract.js`
115
105
  Exports
@@ -117,6 +107,8 @@ Exports
117
107
  - `resolveJsonApiFieldsetContract(resource)`
118
108
  - `resolveJsonApiRelationshipEntries(definition = null)`
119
109
  - `resolveSchemaFieldDefinitions(definition = null)`
110
+ Local functions
111
+ - `includeFieldsOf(label, names)`
120
112
 
121
113
  ### `src/server/listFilterJsonRest.js`
122
114
  Exports
@@ -180,130 +172,16 @@ Local functions
180
172
  - `buildJsonApiFieldsetValueDefinition({ allowedFields = [] } = {})`
181
173
  - `resolveCrudListUsesOrderedCursor(list = {})`
182
174
 
183
- ### `src/server/lookupPathSupport.js`
184
- Exports
185
- - `normalizeLookupOwnershipFilter(value, { context })`
186
- - `requireCrudLookupNamespace(value = "", { context = "crudLookup" } = {})`
187
- - `resolveCrudLookupToken(namespace = "", { context = "crudLookup" } = {})`
188
-
189
- ### `src/server/lookups.js`
190
- Exports
191
- - `resolveCrudLookupToken`
192
- - `createCrudLookup(repository, { context = "crudLookup", ownershipFilter = "" } = {})`
193
-
194
175
  ### `src/server/normalizeOptionalText.js`
195
176
  Exports
196
177
  - `normalizeOptionalText(value)`
197
178
 
198
- ### `src/server/repositorySupport.js`
199
- Exports
200
- - `DEFAULT_LIST_LIMIT`
201
- - `MAX_LIST_LIMIT`
202
- - `normalizeCrudListLimit(value, { fallback = DEFAULT_LIST_LIMIT, max = MAX_LIST_LIMIT } = {})`
203
- - `normalizeCrudListCursor(cursor = null, { allowEmpty = true } = {})`
204
- - `requireCrudTableName(tableName, { context = "crudRepository" } = {})`
205
- - `deriveRepositoryMappingFromResource(resource = {}, { context = "crudRepository" } = {})`
206
- - `applyCrudListQueryFilters(query, { idColumn = "id", cursor = "", applyCursor = true, q = "", searchColumns = [], parentFilters = {}, parentFilterColumns = {} } = {})`
207
- - `mapRecordRow(row, fieldKeys = [], overrides = {}, { recordIdKeys = [], serializerByKey = {} } = {})`
208
- - `buildWritePayload(sourcePayload = {}, fieldKeys = [], overrides = {}, { serializerByKey = {} } = {})`
209
- - `resolveColumnName(fieldKey, overrides = {})`
210
- - `resolveCrudIdColumn(idColumn, { fallback = "id" } = {})`
211
- - `buildRepositoryColumnMetadata({ outputKeys = [], writeKeys = [], columnOverrides = {}, fieldStorageByKey = {} } = {})`
212
- Local functions
213
- - `resolveOptionalFieldDefinitions(definition, options = {})`
214
- - `requireFieldDefinitions(definition, { context = "crudRepository", schemaLabel = "schema definition", defaultMode = "patch" } = {})`
215
- - `resolveFieldDefinitionType(definition)`
216
- - `definitionIncludesStringType(definition = {})`
217
- - `definitionIncludesDateTimeType(definition = {})`
218
- - `definitionIncludesRecordIdType(definition = {})`
219
-
220
- ### `src/server/resourceRuntime/compiledRuntime.js`
179
+ ### `src/server/removedApi.js`
221
180
  Exports
222
- - `buildCompiledCrudRepositoryRuntime(resource, repositoryOptions)`
223
- Local functions
224
- - `requireCrudRepositoryOptions(value)`
225
- - `resolveRepositoryDefaults(resource, repositoryMapping, { context })`
226
- - `normalizeCrudVirtualFieldHandlers(virtualFields = {}, repositoryMapping, { context })`
227
- - `resolveRecordOutputValidator(resource, { context })`
228
- - `resolveOperationBodyValidator(resource, operationKey, { context })`
229
- - `normalizeCrudRepositoryOperationStage(stage, stageLabel, { context })`
230
- - `normalizeCrudRepositoryOperationConfig(config, operationKey, { context })`
231
- - `normalizeCrudRepositoryOperations(sourceOperations, { context })`
232
-
233
- ### `src/server/resourceRuntime/index.js`
234
- Exports
235
- - `createCrudResourceRuntime(resource, knex, repositoryOptions = {})`
236
- - `type RuntimeKnex`
237
- Local functions
238
- - `requireCrudRecordId(value, { context })`
239
- - `resolveCrudRepositoryCall(runtime, knex, callOptions)`
240
- - `applyCrudRepositoryReadLock(dbQuery, callOptions)`
241
- - `listRecords(runtime, knex, query, callOptions)`
242
- - `findRecordById(runtime, knex, recordId, callOptions)`
243
- - `listRecordsByIds(runtime, knex, ids, callOptions)`
244
- - `createRecord(runtime, knex, payload, callOptions)`
245
- - `updateRecordById(runtime, knex, recordId, patch, callOptions)`
246
- - `deleteRecordById(runtime, knex, recordId, callOptions)`
247
-
248
- ### `src/server/resourceRuntime/listControls.js`
249
- Exports
250
- - `resolveListRuntimeConfig(list = {}, fallbackSearchColumns, { idColumn })`
251
- - `encodeOrderedListCursor(row, orderBy)`
252
- - `applyOrderedListCursorFilter(query, { orderBy, cursor })`
253
- - `enforceCrudRepositoryListControls(dbQuery, { idColumn, limit, orderBy })`
254
- Local functions
255
- - `normalizeSearchColumns(searchColumns, fallbackColumns)`
256
- - `normalizeListOrderDirection(value = LIST_ORDER_DIRECTION_ASC)`
257
- - `normalizeListOrderNulls(value = LIST_ORDER_NULLS_LAST)`
258
- - `normalizeListOrderBy(orderBy, { idColumn })`
259
- - `encodeOrderedListCursorValue(value = null)`
260
- - `decodeOrderedListCursorValue(value = null)`
261
- - `decodeOrderedListCursor(cursor, orderBy)`
262
- - `applyOrderedListCursorEquality(query, descriptor = {}, value = null)`
263
- - `applyOrderedListCursorAfterBranch(query, descriptor = {}, value = null)`
264
- - `canApplyOrderedListCursorAfterBranch(descriptor = {}, value = null)`
265
- - `appendOrderedListCursorBranches(query, orderBy = [], cursorValues = [], index = 0, { useOr = false } = {})`
266
- - `applyOrderedListControls(dbQuery, orderBy)`
267
-
268
- ### `src/server/resourceRuntime/lookupHydration.js`
269
- Exports
270
- - `buildCrudLookupRuntime(resource, { outputKeys, context })`
271
- - `hydrateCrudLookupRecords(records, runtime, { include, mode, repositoryOptions, callOptions })`
272
- - `type LookupRuntime`
273
- Local functions
274
- - `normalizeLookupRelationEntry(entry, outputKeys)`
275
- - `normalizeLookupDefaultInclude(value)`
276
- - `normalizeLookupMaxDepth(value)`
277
- - `resolveLookupRuntimeDefaults(resource)`
278
- - `normalizeLookupIdentifier(value)`
279
- - `normalizeIncludePaths(include, defaultInclude)`
280
- - `resolveChildIncludeFromPaths(paths)`
281
- - `shouldHydrateByMode(entry, mode)`
282
- - `buildLookupHydrationPlan(runtime, include, { mode, includeWasExplicit, skippedNamespaces })`
283
- - `resolveLookupResolver(repositoryOptions, callOptions, { context })`
284
- - `resolveLookupDepthRuntime(runtime, repositoryOptions, callOptions)`
285
- - `buildLookupGroupKey(relation)`
286
- - `normalizeLookupRelationValues(records, entries, childIncludeByKey)`
287
- - `resolveGroupChildInclude(group)`
288
- - `normalizeLookup(provider, relation, { context })`
289
- - `resolveLookupVisibilityContext(provider, relation, callOptions, { context })`
290
- - `buildLookupRecordMap(records, valueKey)`
291
- - `buildLookupCollectionMap(records, foreignKey)`
292
- - `resolveLookupVisitedNamespaces(runtime, callOptions)`
293
-
294
- ### `src/server/resourceRuntime/operationStages.js`
295
- Exports
296
- - `applyCrudRepositoryVirtualProjections(dbQuery, runtime, { knex, tableName })`
297
- - `applyConfiguredQueryStage(dbQuery, stage, stageContext, { context, stageKey })`
298
- - `applyConfiguredObjectStage(payload, stage, stageContext, { context, stageKey })`
299
- - `buildCrudRepositoryActionContextBase(runtime, callOptions)`
300
- Local functions
301
- - `isCrudRepositoryQueryBuilder(value)`
302
-
303
- ### `src/server/resourceRuntime/recordValidation.js`
304
- Exports
305
- - `normalizeRepositoryInputPayload(runtime, payload, operationKey)`
306
- - `normalizeRepositoryOutputRecord(runtime, record, { operation })`
181
+ - `LEGACY_REPOSITORY_METHODS`
182
+ - `LEGACY_SERVICE_METHODS`
183
+ - `rejectLegacyMethods(target, legacyMethods, label)`
184
+ - `withRemovedProperties(target, removed, label)`
307
185
 
308
186
  ### `src/server/routeContracts.js`
309
187
  Exports
@@ -328,20 +206,10 @@ Exports
328
206
  - `buildCrudRecordChangedEvent({ namespace, operation, entityId, audience })`
329
207
  - `resolveCrudJsonApiEntityIdFromResult({ result } = {})`
330
208
 
331
- ### `src/server/serviceMethods.js`
332
- Exports
333
- - `createCrudServiceRuntime(resource = {}, { context = "crudService" } = {})`
334
- - `crudServiceListRecords(runtime, repository, fieldAccess = {}, query = {}, options = {})`
335
- - `crudServiceGetRecord(runtime, repository, fieldAccess = {}, recordId, options = {})`
336
- - `crudServiceCreateRecord(runtime, repository, fieldAccess = {}, payload = {}, options = {})`
337
- - `crudServiceUpdateRecord(runtime, repository, fieldAccess = {}, recordId, payload = {}, options = {})`
338
- - `crudServiceDeleteRecord(runtime, repository, fieldAccess = {}, recordId, options = {})`
339
- Local functions
340
- - `splitCrudListRepositoryCall(query = {}, options = {})`
341
-
342
209
  ### `src/server/types.js`
343
210
  Exports
344
- - `type CrudResourceDefinition`
211
+ - `type TableResource`
212
+ - `type CrudContract`
345
213
  - `type CrudRepository`
346
214
  - `type CrudService`
347
215
  - `type CrudJsonApiResult`
@@ -351,30 +219,27 @@ Exports
351
219
  - `type CrudLifecycleContext`
352
220
  - `type CrudLifecycleHooks`
353
221
  - `type CrudOperationLifecycle`
354
- - `type CrudRecordRepository`
355
- - `type CompiledCrudRepositoryRuntime`
356
- - `type CrudLookupRepository`
357
- - `type CrudFieldAccess`
358
- - `type CrudServiceRuntime`
359
222
 
360
223
  ### patterns
361
224
 
362
- ### `patterns/json-api-resource-package/example/migrations/20260815000000_books.cjs`
225
+ ### `patterns/crud-feature-package/example/migrations/20260815000000_books.cjs`
363
226
  Exports
364
227
  - None
365
228
 
366
- ### `patterns/json-api-resource-package/example/packages/books/src/server/BooksFeature.js`
229
+ ### `patterns/crud-feature-package/example/packages/books/src/server/BooksFeature.js`
367
230
  Exports
368
231
  - `BooksFeature`
369
232
 
370
- ### `patterns/json-api-resource-package/example/packages/books/src/server/types.js`
233
+ ### `patterns/crud-feature-package/example/packages/books/src/server/types.js`
371
234
  Exports
372
235
  - `type AppBooks`
373
236
 
374
- ### `patterns/json-api-resource-package/example/packages/books/src/shared/bookResource.js`
237
+ ### `patterns/crud-feature-package/example/packages/books/src/shared/bookResource.js`
375
238
  Exports
239
+ - `bookCrud`
376
240
  - `bookResource`
377
241
 
378
- ### `patterns/json-api-resource-package/example/packages/books/src/shared/index.js`
242
+ ### `patterns/crud-feature-package/example/packages/books/src/shared/index.js`
379
243
  Exports
244
+ - `bookCrud`
380
245
  - `bookResource`