@jskit-ai/agent-docs 0.1.283 → 0.1.285

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 (152) 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 +76 -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 +134 -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 +17 -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 +1207 -0
  15. package/guide/agent/framework/sanity-checks.md +26 -27
  16. package/guide/agent/framework/typed-features.md +117 -248
  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 +3 -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 +69 -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 +45 -175
  48. package/reference/autogen/packages/database-runtime-mysql.md +0 -26
  49. package/reference/autogen/packages/database-runtime.md +11 -33
  50. package/reference/autogen/packages/http-runtime.md +3 -3
  51. package/reference/autogen/packages/http-web.md +12 -0
  52. package/reference/autogen/packages/kernel.md +27 -2
  53. package/reference/autogen/packages/oidc-issuer-core.md +4 -0
  54. package/reference/autogen/packages/payments-core.md +28 -6
  55. package/reference/autogen/packages/realtime.md +15 -6
  56. package/reference/autogen/packages/resource-core.md +32 -5
  57. package/reference/autogen/packages/resource-crud-core.md +30 -34
  58. package/reference/autogen/packages/resource-runtime.md +220 -0
  59. package/reference/autogen/packages/rewarded-core.md +16 -10
  60. package/reference/autogen/packages/shell-web.md +1 -0
  61. package/reference/autogen/packages/users-core.md +33 -14
  62. package/reference/autogen/packages/workspaces-core.md +17 -10
  63. package/reference/autogen/tooling/config-eslint.md +74 -0
  64. package/reference/autogen/tooling/jskit-catalog.md +50 -1
  65. package/reference/autogen/tooling/jskit-release.md +5 -0
  66. package/skills/jskit/SKILL.md +4 -1
  67. package/skills/jskit/references/app-operations.md +1 -1
  68. package/skills/jskit/references/crud-operations.md +62 -44
  69. package/skills/jskit/references/data-access.md +1202 -0
  70. package/skills/jskit/references/database-layer.md +411 -0
  71. package/skills/jskit/references/existing-application-migration.md +134 -72
  72. package/skills/jskit/references/heuristics/INDEX.md +6 -4
  73. package/skills/jskit/references/heuristics/crud-authoring.md +26 -15
  74. package/skills/jskit/references/heuristics/data-access.md +19 -0
  75. package/skills/jskit/references/heuristics/filters.md +6 -6
  76. package/skills/jskit/references/heuristics/row-policies.md +40 -16
  77. package/skills/jskit/references/heuristics/server-search.md +30 -42
  78. package/skills/jskit/references/heuristics/table-resource-fields.md +78 -0
  79. package/skills/jskit/references/heuristics/typed-features.md +3 -3
  80. package/skills/jskit/references/multi-homing.md +94 -32
  81. package/skills/jskit/references/pattern-index.md +70 -59
  82. package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +4 -0
  83. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +4 -4
  84. package/skills/jskit/references/patterns/app/minimal-foundation/example/server.js +4 -1
  85. package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +4 -0
  86. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +5 -5
  87. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  88. package/skills/jskit/references/patterns/app/shell-foundation/example/server.js +4 -1
  89. package/skills/jskit/references/patterns/assistant/assistant-surface/PATTERN.md +5 -2
  90. package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +3 -2
  91. package/skills/jskit/references/patterns/auth/auth-surface/PATTERN.md +15 -0
  92. package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
  93. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  94. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  95. package/skills/jskit/references/patterns/crud/crud-contract/PATTERN.md +133 -0
  96. package/skills/jskit/references/patterns/crud/crud-contract/example/bookResource.js +74 -0
  97. package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/PATTERN.md +69 -37
  98. package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/example/packages/books/package.json +5 -4
  99. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/server/BooksFeature.js +13 -0
  100. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/shared/bookResource.js +74 -0
  101. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/shared/index.js +1 -0
  102. package/skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md +26 -8
  103. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookEditPage.vue +2 -2
  104. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookListPage.vue +2 -2
  105. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookNewPage.vue +2 -2
  106. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookViewPage.vue +3 -3
  107. package/skills/jskit/references/patterns/database/mysql-application/PATTERN.md +9 -4
  108. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +2 -1
  109. package/skills/jskit/references/patterns/database/mysql-application/example/scripts/prepare-database.js +8 -0
  110. package/skills/jskit/references/patterns/database/postgres-application/PATTERN.md +8 -4
  111. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +2 -1
  112. package/skills/jskit/references/patterns/database/postgres-application/example/scripts/prepare-database.js +8 -0
  113. package/skills/jskit/references/patterns/database/table-resource/PATTERN.md +120 -0
  114. package/skills/jskit/references/patterns/database/table-resource/example/orderResource.js +25 -0
  115. package/skills/jskit/references/patterns/realtime/realtime-application/PATTERN.md +7 -0
  116. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  117. package/skills/jskit/references/patterns/rewards/google-rewarded/PATTERN.md +1 -1
  118. package/skills/jskit/references/patterns/server/feature-package/PATTERN.md +25 -17
  119. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  120. package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupFeature.js +6 -7
  121. package/skills/jskit/references/patterns/server/feature-package/example/variations/invoiceResource.js +15 -0
  122. package/skills/jskit/references/patterns/server/feature-package/example/variations/invoiceRollupActions.js +4 -4
  123. package/skills/jskit/references/patterns/server/feature-package/example/variations/ownedTableRepository.js +27 -0
  124. package/skills/jskit/references/patterns/server/feature-package/example/variations/types.js +1 -1
  125. package/skills/jskit/references/patterns/users/user-administration-server/PATTERN.md +63 -10
  126. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +5 -4
  127. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/server/UsersFeature.js +7 -5
  128. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/index.js +1 -1
  129. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/userCrud.js +21 -0
  130. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +11 -5
  131. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/UsersWorkspaceFeature.js +14 -5
  132. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/workspaceMembersOnly.js +52 -0
  133. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/index.js +1 -1
  134. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/userCrud.js +21 -0
  135. package/skills/jskit/references/patterns/workspaces/workspace-server/PATTERN.md +9 -9
  136. package/skills/jskit/references/patterns/workspaces/workspace-surfaces/PATTERN.md +16 -0
  137. package/skills/jskit/references/patterns/workspaces/workspace-surfaces/example/src/pages/home/workspaces/index.vue +2 -0
  138. package/skills/jskit/references/sanity-checks.md +27 -28
  139. package/skills/jskit/references/typed-features.md +117 -248
  140. package/patterns/feature-package/example/variations/customKnexRepository.js +0 -40
  141. package/reference/autogen/packages/json-rest-api-core.md +0 -66
  142. package/skills/jskit/references/heuristics/crud-repository-mapping.md +0 -140
  143. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/server/BooksFeature.js +0 -13
  144. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/shared/bookResource.js +0 -83
  145. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/shared/index.js +0 -1
  146. package/skills/jskit/references/patterns/crud/resource-contract/PATTERN.md +0 -155
  147. package/skills/jskit/references/patterns/crud/resource-contract/example/bookResource.js +0 -87
  148. package/skills/jskit/references/patterns/server/feature-package/example/variations/customKnexRepository.js +0 -40
  149. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/userResource.js +0 -69
  150. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/userResource.js +0 -56
  151. /package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/example/migrations/20260815000000_books.cjs +0 -0
  152. /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,89 @@ 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
+ - `requireSessionConditions(onlyIf)`
35
+ - `requireIdPrefix(idPrefix)`
36
+ - `readPassword(record)`
28
37
  - `writePassword(password = {})`
29
- - `mapUser(row)`
30
- - `mapSession(row)`
31
- - `mapRecovery(row)`
38
+ - `mapUser(record)`
39
+ - `mapSession(record)`
40
+ - `mapRecovery(record)`
41
+ - `mapOAuthAttempt(record)`
42
+ - `mapSignInFailures(record)`
43
+ - `mapRegistration(record)`
44
+ - `registrationRecord(input = {})`
45
+ - `userRecord(input = {})`
46
+ - `sessionRecord(input = {})`
47
+ - `recoveryRecord(input = {})`
48
+ - `oauthAttemptRecord(input = {})`
49
+ - `findOne(handle, field, value, options)`
50
+ - `findById(handle, id, options)`
51
+ - `deleteById(handle, id, options)`
52
+ - `replaceFailures(failures, email, attributes, options)`
53
+ - `patchExisting(handle, id, changes, options)`
54
+ - `userRecords(users, options)`
55
+ - `sessionRecords(sessions, options)`
56
+ - `recoveryRecords(recovery, options)`
57
+ - `oauthAttemptRecords(attempts, options)`
58
+ - `signInFailureRecords(failures, options)`
59
+ - `registrationRecords(registrations, options)`
60
+ - `createRecords(resources, identities, options)`
61
+
62
+ ### `src/server/lib/identityStore.js`
63
+ Exports
64
+ - `IDENTITIES_TABLE`
65
+ - `createIdentityStore({ database })`
66
+ - `type IdentityStore`
67
+ Local functions
32
68
  - `mapIdentity(row)`
33
- - `mapOAuthAttempt(row)`
34
- - `mapSignInFailures(row)`
35
- - `mapRegistration(row)`
36
- - `registrationRow(record = {})`
37
- - `userInsert(input = {})`
38
- - `sessionInsert(input = {})`
39
- - `recoveryInsert(input = {})`
40
69
 
41
70
  ### `src/server/lib/index.js`
42
71
  Exports
43
72
  - `createLocalDbBackend`
73
+ - `createLocalDbOwners`
44
74
  - `LOCAL_AUTH_DB_TABLES`
75
+ - `LOCAL_AUTH_INFRASTRUCTURE_TABLES`
76
+
77
+ ### `src/server/lib/localAuthResources.js`
78
+ Exports
79
+ - `LOCAL_AUTH_RESOURCES`
80
+ - `localAuthOAuthAttemptResource`
81
+ - `localAuthRecoveryResource`
82
+ - `localAuthRegistrationResource`
83
+ - `localAuthSessionResource`
84
+ - `localAuthSignInFailureResource`
85
+ - `localAuthUserResource`
86
+ Local functions
87
+ - `idStartsWith(query, prefix, { column })`
45
88
 
46
89
  ### `src/server/providers/AuthLocalDatabaseBackendProvider.js`
47
90
  Exports
48
91
  - `AuthLocalDatabaseBackendProvider`
92
+ Local functions
93
+ - `textRecordId(value)`
94
+
95
+ ### `src/server/types.js`
96
+ Exports
97
+ - `type AuthLocalAccounts`
98
+ - `type AuthLocalSessions`
99
+ - `type AuthLocalRecovery`
49
100
 
50
101
  ### migrations
51
102
 
@@ -60,3 +111,7 @@ Exports
60
111
  ### `migrations/auth_local_db_protection.cjs`
61
112
  Exports
62
113
  - None
114
+
115
+ ### `migrations/auth_local_db_users_email_verified.cjs`
116
+ Exports
117
+ - 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,35 @@ 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
+ - `builtOnce(build)`
39
+ - `assertKnownOptions(options)`
40
+ - `assertPermissionNames(permissions, actions)`
41
+ - `assertServiceOperations(service, operations)`
42
+ - `normalizeAccess(crud = {})`
37
43
  - `normalizeScope(scope = {})`
44
+ - `routeOwnership(ownership)`
45
+ - `crudOwns(crud, owns, ownerRepository)`
38
46
  - `assertWorkspaceScope(scope, ownershipFilter)`
39
47
  - `normalizeFeatureRequirements(requires = {})`
40
48
  - `operationsFromResource(resource)`
@@ -42,25 +50,11 @@ Local functions
42
50
  - `resolveActionPermission(actionName, { access, workspaceScoped, permissions })`
43
51
  - `projectEnabledServiceOperations(service, operations)`
44
52
 
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
53
  ### `src/server/jsonApiModule/actions.js`
61
54
  Exports
62
55
  - `assertCrudOperationName(operation = "")`
63
- - `createCrudJsonApiActions({ namespace, resource, repository, service, surface, permissionForOperation, operations, scopeInputValidator, scopeInputKeys, listFilterQueryValidator, operationLifecycle, operationInputs, actions, dependencies, realtimeAudience, servedOverHttp })`
56
+ - `createCrudJsonApiActionDefinitions({ namespace, resource, surface, permissionForOperation, operations, scopeInputValidator, listFilterQueryValidator, operationInputs, actions, servedOverHttp })`
57
+ - `createCrudJsonApiActions({ namespace, resource, repository, service, scopeInputKeys, operationLifecycle, dependencies: actionDependencies, realtimeAudience, definitions: builtDefinitions, ...definitionOptions })`
64
58
  - `normalizeCrudOperationLifecycle(value)`
65
59
  Local functions
66
60
  - `resolveCrudActionChannels(permission, servedOverHttp)`
@@ -89,16 +83,11 @@ Local functions
89
83
  Exports
90
84
  - `buildCrudCustomActionId(namespace, name, definition)`
91
85
 
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
86
  ### `src/server/jsonApiModule/routes.js`
100
87
  Exports
101
- - `registerCrudJsonApiRoutes(router, { namespace, resource, routeBase, relativePath, surface, ownershipFilter, access, internal, operations, actions, operationInputs, listFilterQueryValidator, routeParamsValidator, scopeInput })`
88
+ - `createCrudJsonApiRoutes({ namespace, resource, routeBase, relativePath, surface, ownershipFilter, access, internal, operations, actions, operationInputs, listFilterQueryValidator, routeParamsValidator, scopeInput })`
89
+ - `registerCrudJsonApiRoutes(router, options)`
90
+ - `registerCrudRoutes(router, routes)`
102
91
  Local functions
103
92
  - `buildScopeInput(scopeInput, request)`
104
93
  - `buildCustomActionInput(scopeInput, route, request)`
@@ -106,10 +95,16 @@ Local functions
106
95
 
107
96
  ### `src/server/jsonApiModule/service.js`
108
97
  Exports
109
- - `createCrudJsonApiService({ repository })`
110
- - `repositoryCallOptions(options = {})`
98
+ - `createCrudService({ repository, crud })`
111
99
  Local functions
100
+ - `documentNotFound()`
112
101
  - `requireDocument(document)`
102
+ - `isNotFound(error)`
103
+ - `recordOutput(crud)`
104
+ - `contractShape(crud)`
105
+ - `includedShape({ attributes, relationships }, labelKey = "")`
106
+ - `documentShapes(crud)`
107
+ - `contractShapes(crud)`
113
108
 
114
109
  ### `src/server/jsonApiResourceContract.js`
115
110
  Exports
@@ -117,6 +112,8 @@ Exports
117
112
  - `resolveJsonApiFieldsetContract(resource)`
118
113
  - `resolveJsonApiRelationshipEntries(definition = null)`
119
114
  - `resolveSchemaFieldDefinitions(definition = null)`
115
+ Local functions
116
+ - `includeFieldsOf(label, names)`
120
117
 
121
118
  ### `src/server/listFilterJsonRest.js`
122
119
  Exports
@@ -180,130 +177,16 @@ Local functions
180
177
  - `buildJsonApiFieldsetValueDefinition({ allowedFields = [] } = {})`
181
178
  - `resolveCrudListUsesOrderedCursor(list = {})`
182
179
 
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
180
  ### `src/server/normalizeOptionalText.js`
195
181
  Exports
196
182
  - `normalizeOptionalText(value)`
197
183
 
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`
184
+ ### `src/server/removedApi.js`
221
185
  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 })`
186
+ - `LEGACY_REPOSITORY_METHODS`
187
+ - `LEGACY_SERVICE_METHODS`
188
+ - `rejectLegacyMethods(target, legacyMethods, label)`
189
+ - `withRemovedProperties(target, removed, label)`
307
190
 
308
191
  ### `src/server/routeContracts.js`
309
192
  Exports
@@ -328,20 +211,10 @@ Exports
328
211
  - `buildCrudRecordChangedEvent({ namespace, operation, entityId, audience })`
329
212
  - `resolveCrudJsonApiEntityIdFromResult({ result } = {})`
330
213
 
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
214
  ### `src/server/types.js`
343
215
  Exports
344
- - `type CrudResourceDefinition`
216
+ - `type TableResource`
217
+ - `type CrudContract`
345
218
  - `type CrudRepository`
346
219
  - `type CrudService`
347
220
  - `type CrudJsonApiResult`
@@ -351,30 +224,27 @@ Exports
351
224
  - `type CrudLifecycleContext`
352
225
  - `type CrudLifecycleHooks`
353
226
  - `type CrudOperationLifecycle`
354
- - `type CrudRecordRepository`
355
- - `type CompiledCrudRepositoryRuntime`
356
- - `type CrudLookupRepository`
357
- - `type CrudFieldAccess`
358
- - `type CrudServiceRuntime`
359
227
 
360
228
  ### patterns
361
229
 
362
- ### `patterns/json-api-resource-package/example/migrations/20260815000000_books.cjs`
230
+ ### `patterns/crud-feature-package/example/migrations/20260815000000_books.cjs`
363
231
  Exports
364
232
  - None
365
233
 
366
- ### `patterns/json-api-resource-package/example/packages/books/src/server/BooksFeature.js`
234
+ ### `patterns/crud-feature-package/example/packages/books/src/server/BooksFeature.js`
367
235
  Exports
368
236
  - `BooksFeature`
369
237
 
370
- ### `patterns/json-api-resource-package/example/packages/books/src/server/types.js`
238
+ ### `patterns/crud-feature-package/example/packages/books/src/server/types.js`
371
239
  Exports
372
240
  - `type AppBooks`
373
241
 
374
- ### `patterns/json-api-resource-package/example/packages/books/src/shared/bookResource.js`
242
+ ### `patterns/crud-feature-package/example/packages/books/src/shared/bookResource.js`
375
243
  Exports
244
+ - `bookCrud`
376
245
  - `bookResource`
377
246
 
378
- ### `patterns/json-api-resource-package/example/packages/books/src/shared/index.js`
247
+ ### `patterns/crud-feature-package/example/packages/books/src/shared/index.js`
379
248
  Exports
249
+ - `bookCrud`
380
250
  - `bookResource`