@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
@@ -66,12 +66,15 @@ Local functions
66
66
  ### `src/server/testDatabases.js`
67
67
  Exports
68
68
  - `RUN_SETTINGS_FILE`
69
+ - `TestDatabaseMissingError`
69
70
  - `countQueries(knex, work)`
70
71
  - `countRuntimeQueries(work)`
71
72
  - `matchesSnapshot(knexConfig, database, snapshot)`
72
73
  - `prepareTestDatabases({ knexConfig, environment, variable = "TEST_DB_NAME", count = 1, seed, schema = {}, appRoot = process.cwd() })`
73
74
  - `requireDisposableDatabase(environment, variable, count = 1, { connected = "" } = {})`
75
+ - `requireTestDatabase(environment)`
74
76
  - `restoreTestDatabase(knexConfig, database, snapshot)`
77
+ - `tableNames(knex)`
75
78
  - `testDatabaseNames(name, count)`
76
79
  - `testDatabaseRun({ knexConfig, environment, count, schema, appRoot = process.cwd() })`
77
80
  - `testDatabaseSnapshotKey(knexConfig, { appRoot = process.cwd(), schemaFiles = [] } = {})`
@@ -92,7 +95,6 @@ Local functions
92
95
  Exports
93
96
  - `type RuntimeDatabase`
94
97
  - `type RuntimeKnex`
95
- - `type RuntimeTransactionManager`
96
98
  - `type RuntimeKnexTransaction`
97
99
  - `type RuntimeKnexQueryBuilder`
98
100
  - `type RuntimeDatabaseDriver`
@@ -108,8 +110,10 @@ Exports
108
110
  - `resolveDatabaseClientFromEnvironment(env = {}, { allowEmpty = false } = {})`
109
111
  - `resolveDatabaseConnectionFromEnvironment(env = {}, { defaultHost = "localhost", defaultPort = 3306, context = "database runtime" } = {})`
110
112
  - `resolveKnexConnectionFromEnvironment(env = {}, { client = "", defaultHost = "localhost", defaultPort = 3306, context = "database runtime" } = {})`
113
+ - `resolveKnexPool(client)`
111
114
  Local functions
112
115
  - `toPositiveInteger(value, fallback)`
116
+ - `setPostgresSessionToUtc(connection, done)`
113
117
 
114
118
  ### `src/shared/dateUtils.js`
115
119
  Exports
@@ -143,6 +147,7 @@ Exports
143
147
  Local functions
144
148
  - `isMysqlDuplicateEntryError(error)`
145
149
  - `isPostgresDuplicateEntryError(error)`
150
+ - `isSqliteDuplicateEntryError(error)`
146
151
 
147
152
  ### `src/shared/index.js`
148
153
  Exports
@@ -160,13 +165,6 @@ Exports
160
165
  - `findDuplicateEntryError`
161
166
  - `isDuplicateEntryError`
162
167
  - `isLostDuplicateInsertRace`
163
- - `DEFAULT_VISIBILITY_COLUMNS`
164
- - `applyVisibility`
165
- - `applyVisibilityOwners`
166
- - `resolveTransaction`
167
- - `resolveQueryOptions`
168
- - `resolveRepoClient`
169
- - `applyForUpdate`
170
168
  - `parseJsonObject`
171
169
  - `stringifyJsonObject`
172
170
  - `normalizeNullableString`
@@ -176,17 +174,10 @@ Exports
176
174
  - `toDbJson`
177
175
  - `isDeadlockError`
178
176
  - `retryDeadlocks`
179
- - `runInTransaction`
180
- - `createWithTransaction`
181
- - `joinOrOpenTransaction`
182
- - `lockScopedRecordId`
177
+ - `retryLostInsertRace`
183
178
 
184
179
  ### `src/shared/repositoryOptions.js`
185
180
  Exports
186
- - `resolveTransaction(options)`
187
- - `resolveQueryOptions(options)`
188
- - `resolveRepoClient(dbClient, options = {})`
189
- - `applyForUpdate(query, options = {})`
190
181
  - `parseJsonObject(value, fallback = {})`
191
182
  - `stringifyJsonObject(value, fallback = "{}")`
192
183
  - `normalizeNullableString(value, { trim = true } = {})`
@@ -196,19 +187,4 @@ Exports
196
187
  - `toDbJson(value)`
197
188
  - `isDeadlockError(error)`
198
189
  - `retryDeadlocks(run, { retries = 3 } = {})`
199
- - `runInTransaction(knex, callback, options = {})`
200
- - `createWithTransaction(knex)`
201
- - `joinOrOpenTransaction(options, withTransaction, work)`
202
- - `lockScopedRecordId({ trx, tableName, recordId, scopeId, idColumn = "id", scopeColumn = "workspace_id" } = {})`
203
- Local functions
204
- - `requireSqlIdentifier(value, label)`
205
-
206
- ### `src/shared/transactionManager.js`
207
- Exports
208
- - `createTransactionManager({ knex })`
209
-
210
- ### `src/shared/visibility.js`
211
- Exports
212
- - `DEFAULT_VISIBILITY_COLUMNS`
213
- - `applyVisibility(queryBuilder, visibilityContext = {})`
214
- - `applyVisibilityOwners(payload = {}, visibilityContext = {})`
190
+ - `retryLostInsertRace(options, run, ...rest)`
@@ -249,7 +249,7 @@ Exports
249
249
  - `isJsonApiDocumentResult(value)`
250
250
  - `isJsonApiMetaResult(value)`
251
251
  - `jsonApiResultValue(value)`
252
- - `simplifyJsonApiResult(result)`
252
+ - `simplifyJsonApiResult(result, options = {})`
253
253
  - `jsonApiResultOrNull(value)`
254
254
  Local functions
255
255
  - `normalizeJsonApiResultKind(kind = "")`
@@ -289,7 +289,7 @@ Exports
289
289
  - `normalizeCodedEntry(entry)`
290
290
  - `normalizeJsonApiDocument(payload = {})`
291
291
  - `normalizeJsonApiResourceObject(resource = {})`
292
- - `simplifyJsonApiDocument(payload = {})`
292
+ - `simplifyJsonApiDocument(payload = {}, options = {})`
293
293
  Local functions
294
294
  - `normalizeMediaType(contentType = "")`
295
295
  - `normalizeJsonApiResourceArray(value)`
@@ -300,7 +300,7 @@ Local functions
300
300
  - `resolveValidationFieldName(issue)`
301
301
  - `resolveJsonApiValidationSource(issue = {}, validationContext = "")`
302
302
  - `buildJsonApiErrorMeta({ transactionOutcome, params, messageCode, messageParams, fieldErrorCode })`
303
- - `simplifyJsonApiResourceObject(resource = {})`
303
+ - `simplifyJsonApiResourceObject(resource = {}, options = {})`
304
304
 
305
305
  ### `src/shared/validators/operationValidation.js`
306
306
  Exports
@@ -725,6 +725,18 @@ Exports
725
725
  Exports
726
726
  - None
727
727
 
728
+ ### `fixtures/record-action-menu/App.vue`
729
+ Exports
730
+ - None
731
+
732
+ ### `fixtures/record-action-menu/main.js`
733
+ Exports
734
+ - None
735
+
736
+ ### `fixtures/record-action-menu/vite.config.mjs`
737
+ Exports
738
+ - None
739
+
728
740
  ### `fixtures/select-field/App.vue`
729
741
  Exports
730
742
  - None
@@ -17,11 +17,12 @@ Use this on demand; do not load the full index at startup.
17
17
  ### `shared/capabilities/defineProvider.js`
18
18
  Exports
19
19
  - `ARCHITECTURE_ID_PATTERN`
20
- - `defineProvider({ id, requires = {}, optional = {}, provides = {}, setup, boot = null, shutdown = null } = {})`
20
+ - `defineProvider({ id, requires = {}, optional = {}, provides = {}, hints = {}, setup, boot = null, shutdown = null } = {})`
21
21
  - `normalizeArchitectureId(value, label)`
22
22
  - `type ProviderDefinition`
23
23
  Local functions
24
24
  - `normalizeCapabilityMap(value, label)`
25
+ - `normalizeHints(value, requires, providerId)`
25
26
  - `assertDistinctLocalNames(maps)`
26
27
  - `normalizeLifecycleMethod(value, label)`
27
28
 
@@ -540,6 +541,8 @@ Local functions
540
541
  - `isSurfaceRootRecord(record)`
541
542
  - `hostsChildViews(record)`
542
543
  - `hashScrollMargin(hash)`
544
+ - `canReach(browserWindow, { left = 0, top = 0 })`
545
+ - `whenDrawn(isDrawn, position)`
543
546
  - `isLazyRouteComponent(component)`
544
547
  - `preloadOpeningRouteComponents(router, fallbackRoute)`
545
548
 
@@ -635,6 +638,7 @@ Local functions
635
638
  Exports
636
639
  - `resolveActor(context, request)`
637
640
  - `resolveActorId(context, request)`
641
+ - `resolveAuditActorId(context, request)`
638
642
  - `resolveRequest(context)`
639
643
  - `emptyInputValidator`
640
644
 
@@ -667,6 +671,7 @@ Exports
667
671
  Local functions
668
672
  - `resolveContextScope(context = {})`
669
673
  - `resolveVisibilityScope(visibilityContext = {})`
674
+ - `resolveRequestWorkspaceId(context)`
670
675
  - `resolveEventScope(context = {})`
671
676
  - `resolveValue(value, execution)`
672
677
  - `normalizeRealtime(value, execution)`
@@ -736,12 +741,15 @@ Exports
736
741
 
737
742
  ### `server/features/defineFeature.js`
738
743
  Exports
739
- - `defineFeature({ id, domain = id, requires = {}, optional = {}, provides = {}, setup = () => ({}), actions = [], actionDefaults = {}, boot = null, shutdown = null } = {})`
744
+ - `defineFeature({ id, domain = id, requires = {}, optional = {}, provides = {}, hints = {}, setup = () => ({}), actions = [], actionDefaults = {}, boot = null, shutdown = null, owns = undefined, systemScope = undefined } = {})`
740
745
  - `type FeatureDefinition`
741
746
  Local functions
742
747
  - `normalizeActionFactory(value, featureId)`
743
748
  - `applyActionDefaults(actions, defaults, featureId)`
744
749
  - `withoutActionCatalogue(dependencies)`
750
+ - `normalizeOwns(owns, featureId)`
751
+ - `normalizeSystemScope(systemScope, featureId)`
752
+ - `resourceDependencies({ resourceRuntime }, { featureId, owns, systemScope })`
745
753
 
746
754
  ### `server/features/index.js`
747
755
  Exports
@@ -798,6 +806,7 @@ Exports
798
806
  - `createCachedResponseSerializerFactory`
799
807
  - `createActionRouteScope`
800
808
  - `registerSecurityHeaders`
809
+ - `resolveTrustedProxies`
801
810
 
802
811
  ### `server/http/lib/actionRouteScope.js`
803
812
  Exports
@@ -912,6 +921,14 @@ Local functions
912
921
  - `resolveContentSecurityPolicyHeaders(settings)`
913
922
  - `resolveSecurityHeaders({ config, env })`
914
923
 
924
+ ### `server/http/trustedProxies.js`
925
+ Exports
926
+ - `DEFAULT_TRUSTED_PROXIES`
927
+ - `resolveTrustedProxies(env)`
928
+ - `type RuntimeEnv`
929
+ Local functions
930
+ - `isProxyRange(entry)`
931
+
915
932
  ### `server/i18n.js`
916
933
  Exports
917
934
  - `createServerI18n({ appRoot = "", catalogs = [] } = {})`
@@ -989,6 +1006,7 @@ Exports
989
1006
  ### `server/runtime/errors.js`
990
1007
  Exports
991
1008
  - `isAppError(error)`
1009
+ - `hideDatabaseError(error)`
992
1010
  - `isDomainError(error)`
993
1011
  - `createValidationError(fieldErrors)`
994
1012
  - `AppError`
@@ -996,6 +1014,9 @@ Exports
996
1014
  - `DomainValidationError`
997
1015
  - `ConflictError`
998
1016
  - `NotFoundError`
1017
+ Local functions
1018
+ - `isDriverError(error)`
1019
+ - `findDatabaseError(error)`
999
1020
 
1000
1021
  ### `server/runtime/EventProvider.js`
1001
1022
  Exports
@@ -1017,6 +1038,7 @@ Exports
1017
1038
  Exports
1018
1039
  - `AppError`
1019
1040
  - `createValidationError`
1041
+ - `hideDatabaseError`
1020
1042
  - `parsePositiveInteger`
1021
1043
  - `requireAuth`
1022
1044
  - `BootstrapProvider`
@@ -1142,6 +1164,7 @@ Exports
1142
1164
  - `type ProviderDefinition`
1143
1165
  - `type FeatureSetupContext`
1144
1166
  - `type FeatureDefinition`
1167
+ - `type ResourceRuntime`
1145
1168
  - `type ActionPolicy`
1146
1169
  - `type ActionPolicyExecution`
1147
1170
 
@@ -89,6 +89,7 @@ Exports
89
89
 
90
90
  ### `src/server/emailTokens.js`
91
91
  Exports
92
+ - `EMAIL_TOKENS_TABLE`
92
93
  - `createEmailTokenStore({ knex, now })`
93
94
 
94
95
  ### `src/server/google.js`
@@ -165,6 +166,7 @@ Exports
165
166
  - `HUB_GLOBAL_PATHS`
166
167
  - `createOidcIssuer`
167
168
  - `runPreviewIdentityCommand`
169
+ - `OIDC_ISSUER_INFRASTRUCTURE_TABLES`
168
170
 
169
171
  ### `src/server/issuer.js`
170
172
  Exports
@@ -207,10 +209,12 @@ Exports
207
209
 
208
210
  ### `src/server/rateLimits.js`
209
211
  Exports
212
+ - `RATE_LIMITS_TABLE`
210
213
  - `createRateLimiter({ knex, now })`
211
214
 
212
215
  ### `src/server/signingKeys.js`
213
216
  Exports
217
+ - `SIGNING_KEYS_TABLE`
214
218
  - `createSigningKeyStore({ knex, secret, now })`
215
219
 
216
220
  ### `src/server/types.js`
@@ -30,20 +30,39 @@ Exports
30
30
  - `PaymentError`
31
31
  - `fingerprint(value)`
32
32
 
33
- ### `src/server/knexStore.js`
33
+ ### `src/server/paddle.js`
34
+ Exports
35
+ - `createPaddlePaymentAdapter({ apiKey, webhookSecret, environment, priceBindings, taxCategory, historicalPriceBindings = {}, client = new Paddle(apiKey, { environment: environment === "live" ? Environment.production : Environment.sandbox }) })`
36
+ Local functions
37
+ - `invalid()`
38
+
39
+ ### `src/server/paymentResources.js`
34
40
  Exports
35
- - `createKnexPaymentStore({ knex })`
41
+ - `PAYMENT_TABLES`
42
+ - `paymentAccountResource`
43
+ - `paymentCatalogueResource`
44
+ - `paymentCustomerResource`
45
+ - `paymentEntryResource`
46
+ Local functions
47
+ - `key(column)`
48
+
49
+ ### `src/server/paymentStore.js`
50
+ Exports
51
+ - `createPaymentStore({ resources, systemContext })`
36
52
  Local functions
37
53
  - `empty()`
54
+ - `emptyCatalogue()`
38
55
  - `merchant(scope)`
39
56
  - `identifier(value)`
40
57
  - `accountKey(scope)`
58
+ - `customerKey(scope, customerId)`
59
+ - `entryKey(account, reference)`
41
60
 
42
- ### `src/server/paddle.js`
61
+ ### `src/server/PaymentStoreFeature.js`
43
62
  Exports
44
- - `createPaddlePaymentAdapter({ apiKey, webhookSecret, environment, priceBindings, taxCategory, historicalPriceBindings = {}, client = new Paddle(apiKey, { environment: environment === "live" ? Environment.production : Environment.sandbox }) })`
45
- Local functions
46
- - `invalid()`
63
+ - `PAYMENT_STORE_FEATURE`
64
+ - `PAYMENT_STORE_SYSTEM_SCOPE`
65
+ - `PaymentStoreFeature`
47
66
 
48
67
  ### `src/server/priceBindings.js`
49
68
  Exports
@@ -69,6 +88,10 @@ Local functions
69
88
  - `once(tx, key, input, work)`
70
89
  - `grant(tx, { reference: id, units: quantity, expiresAt }, now)`
71
90
 
91
+ ### `src/server/storage.js`
92
+ Exports
93
+ - `PaymentStoreFeature`
94
+
72
95
  ### `src/server/stripe.js`
73
96
  Exports
74
97
  - `createStripePaymentAdapter({ apiKey, webhookSecret, environment, providerAccountId, priceBindings, historicalPriceBindings = {}, client = new Stripe(apiKey, { maxNetworkRetries: 0 }) })`
@@ -65,19 +65,20 @@ Exports
65
65
 
66
66
  ### `src/server/realtimeAudience.js`
67
67
  Exports
68
+ - `actionsNeedingAudienceScope(actions)`
68
69
  - `authenticationRequiredError()`
69
70
  - `createAudienceContributors()`
70
71
  - `createSocketRequest(socket)`
71
72
  - `realtimeAuthenticationRequired(authService)`
72
73
  - `revalidateSocket({ socket, authService, audiences, request, authenticateRequest })`
73
74
  - `registerSocketAudienceBootstrap({ io, logger, authService, audiences })`
74
- - `resolveAudienceTargets(audience, event, { database, logger })`
75
+ - `resolveAudienceTargets(audience, event, { logger, audienceScope })`
75
76
  - `type AuthService`
76
- - `type RuntimeDatabase`
77
77
  - `type RuntimeLogger`
78
78
  - `type ActorRoomsResolver`
79
79
  - `type ActorsRoomsResolver`
80
80
  - `type AudienceContributors`
81
+ - `type RealtimeAudienceScope`
81
82
  Local functions
82
83
  - `flattenEntries(value)`
83
84
  - `roomForUser(userId)`
@@ -88,7 +89,8 @@ Local functions
88
89
  - `roomForScope(scope)`
89
90
  - `applyAudiencePreset(preset, { event, rooms, flags, logger })`
90
91
  - `addAudienceRooms(selection, state)`
91
- - `collectUserIds(rows)`
92
+ - `audienceReadOptions(event, audienceScope)`
93
+ - `readsInScope(entry)`
92
94
  - `parseCookieHeader(value = "")`
93
95
  - `authenticateWithoutRefresh(authService)`
94
96
  - `resolveSocketAuthentication(authService, socket, request = createSocketRequest(socket), authenticateRequest = authenticateWithoutRefresh(authService))`
@@ -97,18 +99,24 @@ Local functions
97
99
  - `registerSocketAuthentication({ io, logger, authService })`
98
100
  - `joinContributedRooms(socket, actorId, audiences)`
99
101
 
102
+ ### `src/server/RealtimeAudienceScopeFeature.js`
103
+ Exports
104
+ - `RealtimeAudienceScopeFeature`
105
+ - `type SystemContextFactory`
106
+ Local functions
107
+ - `audienceScopeFor(systemContext)`
108
+
100
109
  ### `src/server/realtimeCapability.js`
101
110
  Exports
102
- - `createRealtimeCapability({ io, logger, authService, database, events, appRoot, redis })`
111
+ - `createRealtimeCapability({ io, logger, authService, events, appRoot, audienceScope, redis })`
103
112
  - `type AuthService`
104
- - `type RuntimeDatabase`
105
113
  - `type RuntimeAppRoot`
106
114
  - `type RuntimeEvents`
107
115
  - `type RuntimeLogger`
108
116
 
109
117
  ### `src/server/realtimeDelivery.js`
110
118
  Exports
111
- - `createRealtimeDelivery({ io, database, logger, authService, audiences: { mayContribute, resolveActorsRooms } })`
119
+ - `createRealtimeDelivery({ io, logger, authService, audiences: { mayContribute, resolveActorsRooms }, audienceScope })`
112
120
  - `matchesRealtimeEvent(event)`
113
121
  - `type AuthService`
114
122
  - `type ActorRoomsResolver`
@@ -153,6 +161,7 @@ Exports
153
161
  - `type ActorRoomsResolver`
154
162
  - `type ActorsRoomsResolver`
155
163
  - `type AudienceContributors`
164
+ - `type RealtimeAudienceScope`
156
165
  - `type RealtimeAudienceContributor`
157
166
 
158
167
  ### `src/shared/servedClientBuild.js`
@@ -14,13 +14,38 @@ Use this on demand; do not load the full index at startup.
14
14
 
15
15
  ### src
16
16
 
17
- ### `src/shared/resource.js`
17
+ ### `src/shared/apiContract.js`
18
18
  Exports
19
19
  - `createSchemaDefinition(schema, mode = "patch", { context = "schema definition" } = {})`
20
- - `defineResource(resource = {})`
20
+ - `defineApiContract(contract = {})`
21
21
  - `normalizeSchemaDefinitionLike(value, { context = "schema definition", defaultMode = "patch" } = {})`
22
22
  Local functions
23
23
  - `resolveDefaultOperationSchemaMode(sectionName, operation)`
24
- - `normalizeOperationDefinition(operationName, operation = null, resourceMessages = null)`
25
- - `normalizeResourceOperations(operations = null, resourceMessages = null)`
26
- - `requireResourceNamespace(value, { context = "defineResource resource.namespace" } = {})`
24
+ - `normalizeOperationDefinition(operationName, operation = null, contractMessages = null)`
25
+ - `normalizeContractOperations(operations = null, contractMessages = null)`
26
+ - `requireContractNamespace(value, { context = "defineApiContract namespace" } = {})`
27
+
28
+ ### `src/shared/callOptions.js`
29
+ Exports
30
+ - `passedOn(options)`
31
+
32
+ ### `src/shared/tableResource.js`
33
+ Exports
34
+ - `OWNERSHIP_KINDS`
35
+ - `defineTableResource(definition)`
36
+ - `RECORD_TIMESTAMPS`
37
+ - `isTableResource(value)`
38
+ - `resourceNameFromNamespace(namespace = "")`
39
+ - `storedTimestamps(schema, names = RECORD_TIMESTAMPS)`
40
+ Local functions
41
+ - `expandLookupField(fieldKey, fieldDefinition)`
42
+ - `normalizeTableSchema(schema)`
43
+ - `requireText(value, label)`
44
+ - `requireOwnership(value)`
45
+ - `requireLockVersionField(lockVersionField, schema)`
46
+
47
+ ### patterns
48
+
49
+ ### `patterns/table-resource/example/orderResource.js`
50
+ Exports
51
+ - `orderResource`
@@ -14,6 +14,29 @@ Use this on demand; do not load the full index at startup.
14
14
 
15
15
  ### src
16
16
 
17
+ ### `src/shared/crudContract.js`
18
+ Exports
19
+ - `defineCrudContract(resource, config)`
20
+ - `isCrudContract(value)`
21
+ Local functions
22
+ - `buildCrudRecordIdFieldDefinition()`
23
+ - `resolveConfiguredLookupContainerKey(config)`
24
+ - `buildDerivedCrudRecordOutputDefinition(source)`
25
+ - `buildDerivedCrudBodyDefinition(source, operationName = "patch", bodyMode = "patch")`
26
+ - `buildCrudDeleteOutputDefinition()`
27
+ - `requireCrudOperationName(value = "")`
28
+ - `resolveCrudOperationNames(operations)`
29
+ - `resolveFirstPresentValue(source = {}, keys = [])`
30
+ - `resolveExplicitCrudSchemaDefinition(config, keys, { context, defaultMode })`
31
+ - `buildCrudListOutputDefinition(resolveRecordOutputDefinition, config)`
32
+ - `createCrudRecordOutputDefinitionResolver(source)`
33
+ - `refuseStampedField(resourceName, where, field)`
34
+ - `resolveCrudBodyDefinition(spec, source)`
35
+ - `resolveCrudOutputDefinition(spec, resolveRecordOutputDefinition, config)`
36
+ - `buildCrudOperations(source, namespace, operationNames)`
37
+ - `normalizeContractFields(resource, fields)`
38
+ - `requireContractConfig(config)`
39
+
17
40
  ### `src/shared/crudFieldContract.js`
18
41
  Exports
19
42
  - `CRUD_FIELD_STORAGE_COLUMN`
@@ -21,14 +44,15 @@ Exports
21
44
  - `CRUD_FIELD_WRITE_SERIALIZER_DATETIME_UTC`
22
45
  - `CRUD_LOOKUP_FORM_CONTROL_AUTOCOMPLETE`
23
46
  - `CRUD_LOOKUP_FORM_CONTROL_SELECT`
24
- - `resolveCrudFieldSchemaProperties(value, { context = "crud resource field definitions" } = {})`
47
+ - `resolveCrudFieldSchemaProperties(value, { context = "crud contract field definitions" } = {})`
25
48
  - `normalizeCrudFieldStorageConfig(fieldDefinition = {}, { context = "crud field storage", fieldKey = "" } = {})`
26
- - `buildCrudOperationSchemaFields(fields = {}, operationName = "")`
27
- - `buildCrudFieldContractMap(resource, { context = "crud resource field contract" } = {})`
49
+ - `buildCrudOperationSchemaFields(fields = {}, operationName = "", fieldOperations = {})`
50
+ - `buildCrudFieldContractMap(contract, { context = "crud contract field contract" } = {})`
51
+ - `normalizeCrudFieldOperations(fieldKey, entry)`
28
52
  Local functions
29
53
  - `cloneStructuredFieldMetadata(value = {})`
30
54
  - `mergeFieldContractEntry(target, source, { context = "crud field contract", fieldKey = "" } = {})`
31
- - `resolveCrudFieldOperations(fieldDefinition)`
55
+ - `resolveCrudFieldOperations(fieldOperations, stamped)`
32
56
 
33
57
  ### `src/shared/crudListFilters.js`
34
58
  Exports
@@ -129,7 +153,6 @@ Local functions
129
153
  ### `src/shared/crudLookup.js`
130
154
  Exports
131
155
  - `DEFAULT_CRUD_LOOKUP_CONTAINER_KEY`
132
- - `expandCrudLookupFields(schema)`
133
156
  - `normalizeCrudLookupApiPath(value = "")`
134
157
  - `normalizeCrudLookupNamespace(value = "")`
135
158
  - `resolveCrudLookupApiPathFromNamespace(value = "")`
@@ -141,8 +164,6 @@ Exports
141
164
  - `resolveCrudParentFilterKeys(resource = {})`
142
165
  - `resolveCrudLookupFieldKeyFromRouteParam(resource = {}, routeParamKey = "", { allowKeys = [] } = {})`
143
166
  Local functions
144
- - `usesCrudLookupShorthand(fieldDefinition)`
145
- - `expandCrudLookupField(fieldKey, fieldDefinition)`
146
167
  - `resolveCrudLookupFieldEntries(resource = {}, { allowKeys = [] } = {})`
147
168
  - `resolveCrudLookupCreateSchemaKeys(resource)`
148
169
 
@@ -152,34 +173,9 @@ Exports
152
173
  - `requireCrudNamespace(namespace, { context = "requireCrudNamespace" } = {})`
153
174
  - `resolveCrudRecordChangedEvent(namespace = "")`
154
175
 
155
- ### `src/shared/crudResource.js`
156
- Exports
157
- - `defineCrudResource(resource = {})`
158
- Local functions
159
- - `buildCrudRecordIdFieldDefinition()`
160
- - `resolveConfiguredLookupContainerKey(resource)`
161
- - `resolveFieldEntries(resource, operationName = "output")`
162
- - `buildDerivedCrudRecordOutputDefinition(resource = {})`
163
- - `buildDerivedCrudBodyDefinition(resource = {}, operationName = "patch", bodyMode = "patch")`
164
- - `buildCrudDeleteOutputDefinition()`
165
- - `requireCrudOperationName(value = "", { context = "crud operation name" } = {})`
166
- - `requireCrudOperationSpec(operationName = "")`
167
- - `resolveCrudOperationNames(resource = {})`
168
- - `resolveFirstPresentValue(source = {}, keys = [])`
169
- - `resolveExplicitCrudSchemaDefinition(crudConfig = {}, keys = [], { context = "defineCrudResource schema definition", defaultMode = "patch" } = {})`
170
- - `buildCrudListOutputDefinition(resolveRecordOutputDefinition, crudConfig = {})`
171
- - `createCrudRecordOutputDefinitionResolver(resource = {}, crudConfig = {})`
172
- - `resolveCrudBodyDefinition(spec, resource = {}, crudConfig = {})`
173
- - `resolveCrudOutputDefinition(spec, resolveRecordOutputDefinition, crudConfig = {})`
174
- - `buildCrudOperationDefinition(operationName, { namespace = "", resource = {}, crudConfig = {}, resolveRecordOutputDefinition } = {})`
175
- - `buildDefaultCrudOperations(resource = {})`
176
- - `mergeCrudOperationDefinition(baseDefinition, overrideDefinition)`
177
- - `mergeCrudOperations(defaultOperations = {}, overrides = {})`
178
- - `requireCrudLockVersionField(resource)`
179
- - `withExpandedCrudLookups(resource)`
180
-
181
176
  ### patterns
182
177
 
183
- ### `patterns/resource-contract/example/bookResource.js`
178
+ ### `patterns/crud-contract/example/bookResource.js`
184
179
  Exports
180
+ - `bookCrud`
185
181
  - `bookResource`