@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
@@ -29,32 +29,6 @@ Exports
29
29
  ### `src/shared/index.js`
30
30
  Exports
31
31
  - `DIALECT_ID`
32
- - `introspectCrudTableSnapshot`
33
-
34
- ### `src/shared/introspectCrudTable.js`
35
- Exports
36
- - `introspectCrudTableSnapshot(knex, { tableName = "", idColumn = "id" } = {})`
37
- Local functions
38
- - `requireKnexRaw(knex)`
39
- - `requireTableName(value)`
40
- - `normalizeRows(rawResult)`
41
- - `normalizeDbSchemaName(rows = [])`
42
- - `toBoolean(value)`
43
- - `toNullableNumber(value)`
44
- - `normalizeColumnDefault(value)`
45
- - `normalizeCurrentTimestampExpression(value)`
46
- - `normalizeOnUpdateExpression(value)`
47
- - `parseEnumValues(columnType = "")`
48
- - `resolveTypeKind(column)`
49
- - `normalizeColumn(row = {})`
50
- - `normalizePrimaryKeyColumns(rows = [])`
51
- - `normalizePrimaryKeyColumnsByTable(rows = [])`
52
- - `normalizeIndexes(rows = [])`
53
- - `normalizeForeignKeys(rows = [])`
54
- - `normalizeCheckConstraints(rows = [])`
55
- - `requireIdColumn(columns, idColumn)`
56
- - `requirePrimaryKeyContainsId(primaryKeyColumns, idColumn)`
57
- - `requireSupportedForeignKeys(foreignKeys, primaryKeyColumnsByTable)`
58
32
 
59
33
  ### patterns
60
34
 
@@ -33,6 +33,7 @@ Exports
33
33
  - `addMissingForeignKey(knex, key)`
34
34
  - `dropForeignKeyIfPresent(knex, key)`
35
35
  - `hasForeignKey(knex, key)`
36
+ - `listForeignKeys(knex)`
36
37
  - `type ForeignKey`
37
38
  Local functions
38
39
  - `findForeignKeyName(knex, { tableName, columnName, parentTable, parentColumn = "id" })`
@@ -66,14 +67,18 @@ Local functions
66
67
  ### `src/server/testDatabases.js`
67
68
  Exports
68
69
  - `RUN_SETTINGS_FILE`
70
+ - `TestDatabaseMissingError`
69
71
  - `countQueries(knex, work)`
72
+ - `createPackageTestKnex(context, { environment })`
70
73
  - `countRuntimeQueries(work)`
71
74
  - `matchesSnapshot(knexConfig, database, snapshot)`
72
75
  - `prepareTestDatabases({ knexConfig, environment, variable = "TEST_DB_NAME", count = 1, seed, schema = {}, appRoot = process.cwd() })`
73
76
  - `requireDisposableDatabase(environment, variable, count = 1, { connected = "" } = {})`
77
+ - `requireTestDatabase(environment)`
74
78
  - `restoreTestDatabase(knexConfig, database, snapshot)`
79
+ - `tableNames(knex)`
75
80
  - `testDatabaseNames(name, count)`
76
- - `testDatabaseRun({ knexConfig, environment, count, schema, appRoot = process.cwd() })`
81
+ - `testDatabaseRun({ knexConfig, environment, count, schema, appRoot = process.cwd(), checkDatabase })`
77
82
  - `testDatabaseSnapshotKey(knexConfig, { appRoot = process.cwd(), schemaFiles = [] } = {})`
78
83
  - `type TestDatabaseSchema`
79
84
  Local functions
@@ -92,7 +97,6 @@ Local functions
92
97
  Exports
93
98
  - `type RuntimeDatabase`
94
99
  - `type RuntimeKnex`
95
- - `type RuntimeTransactionManager`
96
100
  - `type RuntimeKnexTransaction`
97
101
  - `type RuntimeKnexQueryBuilder`
98
102
  - `type RuntimeDatabaseDriver`
@@ -108,8 +112,10 @@ Exports
108
112
  - `resolveDatabaseClientFromEnvironment(env = {}, { allowEmpty = false } = {})`
109
113
  - `resolveDatabaseConnectionFromEnvironment(env = {}, { defaultHost = "localhost", defaultPort = 3306, context = "database runtime" } = {})`
110
114
  - `resolveKnexConnectionFromEnvironment(env = {}, { client = "", defaultHost = "localhost", defaultPort = 3306, context = "database runtime" } = {})`
115
+ - `resolveKnexPool(client)`
111
116
  Local functions
112
117
  - `toPositiveInteger(value, fallback)`
118
+ - `setPostgresSessionToUtc(connection, done)`
113
119
 
114
120
  ### `src/shared/dateUtils.js`
115
121
  Exports
@@ -143,6 +149,7 @@ Exports
143
149
  Local functions
144
150
  - `isMysqlDuplicateEntryError(error)`
145
151
  - `isPostgresDuplicateEntryError(error)`
152
+ - `isSqliteDuplicateEntryError(error)`
146
153
 
147
154
  ### `src/shared/index.js`
148
155
  Exports
@@ -160,13 +167,6 @@ Exports
160
167
  - `findDuplicateEntryError`
161
168
  - `isDuplicateEntryError`
162
169
  - `isLostDuplicateInsertRace`
163
- - `DEFAULT_VISIBILITY_COLUMNS`
164
- - `applyVisibility`
165
- - `applyVisibilityOwners`
166
- - `resolveTransaction`
167
- - `resolveQueryOptions`
168
- - `resolveRepoClient`
169
- - `applyForUpdate`
170
170
  - `parseJsonObject`
171
171
  - `stringifyJsonObject`
172
172
  - `normalizeNullableString`
@@ -176,17 +176,10 @@ Exports
176
176
  - `toDbJson`
177
177
  - `isDeadlockError`
178
178
  - `retryDeadlocks`
179
- - `runInTransaction`
180
- - `createWithTransaction`
181
- - `joinOrOpenTransaction`
182
- - `lockScopedRecordId`
179
+ - `retryLostInsertRace`
183
180
 
184
181
  ### `src/shared/repositoryOptions.js`
185
182
  Exports
186
- - `resolveTransaction(options)`
187
- - `resolveQueryOptions(options)`
188
- - `resolveRepoClient(dbClient, options = {})`
189
- - `applyForUpdate(query, options = {})`
190
183
  - `parseJsonObject(value, fallback = {})`
191
184
  - `stringifyJsonObject(value, fallback = "{}")`
192
185
  - `normalizeNullableString(value, { trim = true } = {})`
@@ -196,19 +189,4 @@ Exports
196
189
  - `toDbJson(value)`
197
190
  - `isDeadlockError(error)`
198
191
  - `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 = {})`
192
+ - `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,13 @@ 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
+ - `capabilityKey(value)`
21
+ - `defineProvider({ id, requires = {}, optional = {}, provides = {}, hints = {}, setup, boot = null, shutdown = null } = {})`
21
22
  - `normalizeArchitectureId(value, label)`
22
23
  - `type ProviderDefinition`
23
24
  Local functions
24
25
  - `normalizeCapabilityMap(value, label)`
26
+ - `normalizeHints(value, requires, providerId)`
25
27
  - `assertDistinctLocalNames(maps)`
26
28
  - `normalizeLifecycleMethod(value, label)`
27
29
 
@@ -540,6 +542,8 @@ Local functions
540
542
  - `isSurfaceRootRecord(record)`
541
543
  - `hostsChildViews(record)`
542
544
  - `hashScrollMargin(hash)`
545
+ - `canReach(browserWindow, { left = 0, top = 0 })`
546
+ - `whenDrawn(isDrawn, position)`
543
547
  - `isLazyRouteComponent(component)`
544
548
  - `preloadOpeningRouteComponents(router, fallbackRoute)`
545
549
 
@@ -635,6 +639,7 @@ Local functions
635
639
  Exports
636
640
  - `resolveActor(context, request)`
637
641
  - `resolveActorId(context, request)`
642
+ - `resolveAuditActorId(context, request)`
638
643
  - `resolveRequest(context)`
639
644
  - `emptyInputValidator`
640
645
 
@@ -667,6 +672,7 @@ Exports
667
672
  Local functions
668
673
  - `resolveContextScope(context = {})`
669
674
  - `resolveVisibilityScope(visibilityContext = {})`
675
+ - `resolveRequestWorkspaceId(context)`
670
676
  - `resolveEventScope(context = {})`
671
677
  - `resolveValue(value, execution)`
672
678
  - `normalizeRealtime(value, execution)`
@@ -720,6 +726,7 @@ Local functions
720
726
 
721
727
  ### `server/actions/registry.js`
722
728
  Exports
729
+ - `contributedVersionKeys(taken, contributor)`
723
730
  - `createActionRegistry({ contributors, events, logger, policy })`
724
731
  - `type ActionPolicy`
725
732
  - `type RuntimeEvents`
@@ -736,12 +743,15 @@ Exports
736
743
 
737
744
  ### `server/features/defineFeature.js`
738
745
  Exports
739
- - `defineFeature({ id, domain = id, requires = {}, optional = {}, provides = {}, setup = () => ({}), actions = [], actionDefaults = {}, boot = null, shutdown = null } = {})`
746
+ - `defineFeature({ id, domain = id, requires = {}, optional = {}, provides = {}, hints = {}, setup = () => ({}), actions = [], actionDefaults = {}, boot = null, shutdown = null, owns = undefined, systemScope = undefined } = {})`
740
747
  - `type FeatureDefinition`
741
748
  Local functions
742
749
  - `normalizeActionFactory(value, featureId)`
743
750
  - `applyActionDefaults(actions, defaults, featureId)`
744
751
  - `withoutActionCatalogue(dependencies)`
752
+ - `normalizeOwns(owns, featureId)`
753
+ - `normalizeSystemScope(systemScope, featureId)`
754
+ - `resourceDependencies({ resourceRuntime }, { featureId, owns, systemScope })`
745
755
 
746
756
  ### `server/features/index.js`
747
757
  Exports
@@ -798,6 +808,7 @@ Exports
798
808
  - `createCachedResponseSerializerFactory`
799
809
  - `createActionRouteScope`
800
810
  - `registerSecurityHeaders`
811
+ - `resolveTrustedProxies`
801
812
 
802
813
  ### `server/http/lib/actionRouteScope.js`
803
814
  Exports
@@ -912,6 +923,14 @@ Local functions
912
923
  - `resolveContentSecurityPolicyHeaders(settings)`
913
924
  - `resolveSecurityHeaders({ config, env })`
914
925
 
926
+ ### `server/http/trustedProxies.js`
927
+ Exports
928
+ - `DEFAULT_TRUSTED_PROXIES`
929
+ - `resolveTrustedProxies(env)`
930
+ - `type RuntimeEnv`
931
+ Local functions
932
+ - `isProxyRange(entry)`
933
+
915
934
  ### `server/i18n.js`
916
935
  Exports
917
936
  - `createServerI18n({ appRoot = "", catalogs = [] } = {})`
@@ -989,6 +1008,7 @@ Exports
989
1008
  ### `server/runtime/errors.js`
990
1009
  Exports
991
1010
  - `isAppError(error)`
1011
+ - `hideDatabaseError(error)`
992
1012
  - `isDomainError(error)`
993
1013
  - `createValidationError(fieldErrors)`
994
1014
  - `AppError`
@@ -996,6 +1016,9 @@ Exports
996
1016
  - `DomainValidationError`
997
1017
  - `ConflictError`
998
1018
  - `NotFoundError`
1019
+ Local functions
1020
+ - `isDriverError(error)`
1021
+ - `findDatabaseError(error)`
999
1022
 
1000
1023
  ### `server/runtime/EventProvider.js`
1001
1024
  Exports
@@ -1017,6 +1040,7 @@ Exports
1017
1040
  Exports
1018
1041
  - `AppError`
1019
1042
  - `createValidationError`
1043
+ - `hideDatabaseError`
1020
1044
  - `parsePositiveInteger`
1021
1045
  - `requireAuth`
1022
1046
  - `BootstrapProvider`
@@ -1142,6 +1166,7 @@ Exports
1142
1166
  - `type ProviderDefinition`
1143
1167
  - `type FeatureSetupContext`
1144
1168
  - `type FeatureDefinition`
1169
+ - `type ResourceRuntime`
1145
1170
  - `type ActionPolicy`
1146
1171
  - `type ActionPolicyExecution`
1147
1172
 
@@ -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,38 @@ 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_SYSTEM_SCOPE`
64
+ - `PaymentStoreFeature`
47
65
 
48
66
  ### `src/server/priceBindings.js`
49
67
  Exports
@@ -69,6 +87,10 @@ Local functions
69
87
  - `once(tx, key, input, work)`
70
88
  - `grant(tx, { reference: id, units: quantity, expiresAt }, now)`
71
89
 
90
+ ### `src/server/storage.js`
91
+ Exports
92
+ - `PaymentStoreFeature`
93
+
72
94
  ### `src/server/stripe.js`
73
95
  Exports
74
96
  - `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,40 @@ 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
+ - `requireNames(value, label)`
47
+ - `requireForeignKeys(foreignKeys, schema)`
48
+
49
+ ### patterns
50
+
51
+ ### `patterns/table-resource/example/orderResource.js`
52
+ Exports
53
+ - `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`