@jskit-ai/agent-docs 0.1.257 → 0.1.259

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 (230) hide show
  1. package/guide/agent/app-extras/assistant-conversation.md +88 -35
  2. package/guide/agent/app-extras/assistant.md +28 -28
  3. package/guide/agent/app-setup/authentication.md +36 -17
  4. package/guide/agent/app-setup/database-layer.md +116 -17
  5. package/guide/agent/app-setup/existing-application-migration.md +29 -25
  6. package/guide/agent/app-setup/multi-homing.md +94 -48
  7. package/guide/agent/app-setup/run-an-accounts-hub.md +6 -4
  8. package/guide/agent/framework/client-features.md +496 -0
  9. package/guide/agent/framework/crud-operations.md +5 -5
  10. package/guide/agent/framework/translation.md +4 -3
  11. package/guide/agent/framework/typed-features.md +1104 -0
  12. package/guide/agent/framework/ui-operations.md +2 -2
  13. package/guide/agent/index.md +6 -1
  14. package/package.json +1 -1
  15. package/patterns/feature-package/PATTERN.md +104 -10
  16. package/patterns/feature-package/example/booking-engine/package.json +9 -4
  17. package/patterns/feature-package/example/booking-engine/src/server/BookingEngineFeature.js +24 -0
  18. package/patterns/feature-package/example/booking-engine/src/server/bookingAvailability.js +10 -0
  19. package/patterns/feature-package/example/booking-engine/src/server/bookingEngine.js +29 -0
  20. package/patterns/feature-package/example/booking-engine/src/server/bookingEngineActions.js +26 -0
  21. package/patterns/feature-package/example/booking-engine/src/server/inputSchemas.js +1 -2
  22. package/patterns/feature-package/example/booking-engine/src/server/types.js +12 -0
  23. package/patterns/feature-package/example/variations/AvailabilityEngineFeature.js +19 -0
  24. package/patterns/feature-package/example/variations/InvoiceRollupFeature.js +23 -0
  25. package/patterns/feature-package/example/variations/availabilityEngineActions.js +26 -0
  26. package/patterns/feature-package/example/variations/customKnexRepository.js +32 -26
  27. package/patterns/feature-package/example/variations/invoiceRollupActions.js +26 -0
  28. package/patterns/feature-package/example/variations/orchestratorService.js +24 -19
  29. package/patterns/feature-package/example/variations/types.js +7 -0
  30. package/patterns/minimal-foundation/PATTERN.md +30 -1
  31. package/patterns/minimal-foundation/example/AGENTS.md +14 -0
  32. package/patterns/minimal-foundation/example/bin/develop.js +10 -5
  33. package/patterns/minimal-foundation/example/eslint.config.mjs +21 -2
  34. package/patterns/minimal-foundation/example/package.json +5 -4
  35. package/patterns/minimal-foundation/example/playwright.config.mjs +1 -1
  36. package/patterns/minimal-foundation/example/server/lib/envFile.js +19 -0
  37. package/patterns/minimal-foundation/example/server/lib/loggerOptions.js +15 -0
  38. package/patterns/minimal-foundation/example/server/lib/runtimeEnv.js +17 -17
  39. package/patterns/minimal-foundation/example/server.js +32 -29
  40. package/patterns/minimal-foundation/example/tests/server/smoke.test.js +2 -1
  41. package/patterns/shell-foundation/PATTERN.md +29 -0
  42. package/patterns/shell-foundation/example/AGENTS.md +14 -0
  43. package/patterns/shell-foundation/example/bin/develop.js +10 -5
  44. package/patterns/shell-foundation/example/eslint.config.mjs +21 -2
  45. package/patterns/shell-foundation/example/package.json +6 -5
  46. package/patterns/shell-foundation/example/packages/main/package.json +1 -1
  47. package/patterns/shell-foundation/example/packages/main/src/client/providers/MainClientProvider.js +1 -0
  48. package/patterns/shell-foundation/example/playwright.config.mjs +1 -1
  49. package/patterns/shell-foundation/example/server/lib/envFile.js +19 -0
  50. package/patterns/shell-foundation/example/server/lib/loggerOptions.js +15 -0
  51. package/patterns/shell-foundation/example/server/lib/runtimeEnv.js +17 -17
  52. package/patterns/shell-foundation/example/server.js +32 -29
  53. package/patterns/shell-foundation/example/tests/server/smoke.test.js +2 -1
  54. package/reference/autogen/KERNEL_MAP.md +14 -8
  55. package/reference/autogen/PATTERN_INDEX.md +37 -37
  56. package/reference/autogen/README.md +2 -0
  57. package/reference/autogen/packages/agent-docs.md +70 -26
  58. package/reference/autogen/packages/agent-runtime.md +129 -0
  59. package/reference/autogen/packages/agent.md +149 -0
  60. package/reference/autogen/packages/architecture-inspector.md +97 -44
  61. package/reference/autogen/packages/assistant-core.md +786 -292
  62. package/reference/autogen/packages/assistant-runtime.md +182 -57
  63. package/reference/autogen/packages/assistant-voice-sherpa.md +4 -0
  64. package/reference/autogen/packages/assistant-voice.md +54 -8
  65. package/reference/autogen/packages/auth-core.md +44 -13
  66. package/reference/autogen/packages/auth-provider-local-core.md +86 -34
  67. package/reference/autogen/packages/auth-provider-local-db-core.md +1 -2
  68. package/reference/autogen/packages/auth-provider-oidc-core.md +10 -4
  69. package/reference/autogen/packages/auth-provider-supabase-core.md +52 -66
  70. package/reference/autogen/packages/auth-web.md +19 -11
  71. package/reference/autogen/packages/connectors-catalog.md +71 -43
  72. package/reference/autogen/packages/connectors-core.md +42 -4
  73. package/reference/autogen/packages/console-core.md +27 -14
  74. package/reference/autogen/packages/crud-core.md +178 -170
  75. package/reference/autogen/packages/database-runtime-mysql.md +0 -2
  76. package/reference/autogen/packages/database-runtime-postgres.md +0 -2
  77. package/reference/autogen/packages/database-runtime.md +39 -10
  78. package/reference/autogen/packages/http-runtime.md +79 -57
  79. package/reference/autogen/packages/json-rest-api-core.md +11 -8
  80. package/reference/autogen/packages/kernel.md +144 -83
  81. package/reference/autogen/packages/oidc-issuer-core.md +49 -20
  82. package/reference/autogen/packages/payments-core.md +20 -3
  83. package/reference/autogen/packages/realtime.md +47 -22
  84. package/reference/autogen/packages/resource-core.md +1 -1
  85. package/reference/autogen/packages/resource-crud-core.md +64 -26
  86. package/reference/autogen/packages/rewarded-core.md +47 -36
  87. package/reference/autogen/packages/shell-web.md +7 -10
  88. package/reference/autogen/packages/storage-runtime.md +6 -2
  89. package/reference/autogen/packages/uploads-runtime.md +10 -2
  90. package/reference/autogen/packages/users-core.md +73 -71
  91. package/reference/autogen/packages/workspaces-core.md +121 -106
  92. package/reference/autogen/packages/workspaces-web.md +1 -2
  93. package/reference/autogen/tooling/config-eslint.md +302 -0
  94. package/reference/autogen/tooling/jskit-catalog.md +28 -18
  95. package/reference/autogen/tooling/jskit-release.md +35 -20
  96. package/reference/autogen/tooling/testUtils.md +3 -1
  97. package/skills/jskit/SKILL.md +9 -8
  98. package/skills/jskit/references/app-operations.md +1 -1
  99. package/skills/jskit/references/client-features.md +491 -0
  100. package/skills/jskit/references/crud-form-actions.md +1 -1
  101. package/skills/jskit/references/crud-operations.md +7 -7
  102. package/skills/jskit/references/existing-application-migration.md +31 -27
  103. package/skills/jskit/references/heuristics/INDEX.md +5 -1
  104. package/skills/jskit/references/heuristics/child-cruds.md +1 -1
  105. package/skills/jskit/references/heuristics/client-features.md +66 -0
  106. package/skills/jskit/references/heuristics/client-requests.md +1 -1
  107. package/skills/jskit/references/heuristics/crud-authoring.md +12 -2
  108. package/skills/jskit/references/heuristics/crud-links.md +1 -1
  109. package/skills/jskit/references/heuristics/crud-repository-mapping.md +3 -3
  110. package/skills/jskit/references/heuristics/filters.md +1 -1
  111. package/skills/jskit/references/heuristics/live-actions.md +1 -1
  112. package/skills/jskit/references/heuristics/page-redirects.md +1 -1
  113. package/skills/jskit/references/heuristics/page-scaffolding.md +1 -1
  114. package/skills/jskit/references/heuristics/placements.md +1 -1
  115. package/skills/jskit/references/heuristics/row-policies.md +1 -1
  116. package/skills/jskit/references/heuristics/server-search.md +1 -1
  117. package/skills/jskit/references/heuristics/surfaces.md +1 -1
  118. package/skills/jskit/references/heuristics/typed-features.md +100 -0
  119. package/skills/jskit/references/heuristics/ui-contract.md +1 -1
  120. package/skills/jskit/references/heuristics/ui-testing.md +4 -4
  121. package/skills/jskit/references/material-3.md +2 -2
  122. package/skills/jskit/references/multi-homing.md +96 -50
  123. package/skills/jskit/references/pattern-index.md +37 -37
  124. package/skills/jskit/references/patterns/app/minimal-foundation/PATTERN.md +30 -1
  125. package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +14 -0
  126. package/skills/jskit/references/patterns/app/minimal-foundation/example/bin/develop.js +10 -5
  127. package/skills/jskit/references/patterns/app/minimal-foundation/example/eslint.config.mjs +21 -2
  128. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +5 -4
  129. package/skills/jskit/references/patterns/app/minimal-foundation/example/playwright.config.mjs +1 -1
  130. package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/envFile.js +19 -0
  131. package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/loggerOptions.js +15 -0
  132. package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/runtimeEnv.js +17 -17
  133. package/skills/jskit/references/patterns/app/minimal-foundation/example/server.js +32 -29
  134. package/skills/jskit/references/patterns/app/minimal-foundation/example/tests/server/smoke.test.js +2 -1
  135. package/skills/jskit/references/patterns/app/shell-foundation/PATTERN.md +29 -0
  136. package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +14 -0
  137. package/skills/jskit/references/patterns/app/shell-foundation/example/bin/develop.js +10 -5
  138. package/skills/jskit/references/patterns/app/shell-foundation/example/eslint.config.mjs +21 -2
  139. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +6 -5
  140. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  141. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/src/client/providers/MainClientProvider.js +1 -0
  142. package/skills/jskit/references/patterns/app/shell-foundation/example/playwright.config.mjs +1 -1
  143. package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/envFile.js +19 -0
  144. package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/loggerOptions.js +15 -0
  145. package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/runtimeEnv.js +17 -17
  146. package/skills/jskit/references/patterns/app/shell-foundation/example/server.js +32 -29
  147. package/skills/jskit/references/patterns/app/shell-foundation/example/tests/server/smoke.test.js +2 -1
  148. package/skills/jskit/references/patterns/assistant/assistant-surface/example/src/ApplicationAiFeature.js +4 -2
  149. package/skills/jskit/references/patterns/auth/accounts-hub/PATTERN.md +2 -1
  150. package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +2 -2
  151. package/skills/jskit/references/patterns/auth/accounts-hub/example/server/hubPaths.js +9 -3
  152. package/skills/jskit/references/patterns/auth/auth-surface/PATTERN.md +25 -12
  153. package/skills/jskit/references/patterns/auth/auth-surface/example/tools/preview-identity +7 -1
  154. package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
  155. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  156. package/skills/jskit/references/patterns/connectors/ai-connections/PATTERN.md +16 -1
  157. package/skills/jskit/references/patterns/connectors/ai-connections/example/ai-model.js +12 -3
  158. package/skills/jskit/references/patterns/connectors/ai-connections/example/perplexity-answer.js +15 -4
  159. package/skills/jskit/references/patterns/connectors/api-key-connection/PATTERN.md +9 -1
  160. package/skills/jskit/references/patterns/connectors/api-key-connection/example/connections.js +5 -2
  161. package/skills/jskit/references/patterns/connectors/aws-storage-queries/PATTERN.md +13 -3
  162. package/skills/jskit/references/patterns/connectors/aws-storage-queries/example/s3-transfer.js +14 -3
  163. package/skills/jskit/references/patterns/connectors/calendar-cli/PATTERN.md +8 -0
  164. package/skills/jskit/references/patterns/connectors/calendar-cli/example/knexfile.js +1 -1
  165. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  166. package/skills/jskit/references/patterns/connectors/calendar-cli/example/scripts/calendar.js +8 -4
  167. package/skills/jskit/references/patterns/connectors/event-delivery/PATTERN.md +1 -1
  168. package/skills/jskit/references/patterns/connectors/firebase-messaging/PATTERN.md +10 -0
  169. package/skills/jskit/references/patterns/connectors/firebase-messaging/example/server/notifications.js +8 -0
  170. package/skills/jskit/references/patterns/connectors/google-ads-search/PATTERN.md +18 -7
  171. package/skills/jskit/references/patterns/connectors/google-ads-search/example/ads-setup.js +13 -5
  172. package/skills/jskit/references/patterns/connectors/oauth-connection/PATTERN.md +1 -1
  173. package/skills/jskit/references/patterns/connectors/paddle-catalogue/PATTERN.md +11 -2
  174. package/skills/jskit/references/patterns/connectors/paddle-catalogue/example/create-products.js +5 -2
  175. package/skills/jskit/references/patterns/connectors/public-image/PATTERN.md +10 -1
  176. package/skills/jskit/references/patterns/connectors/public-image/example/logo-url.js +4 -1
  177. package/skills/jskit/references/patterns/connectors/redshift-queries/PATTERN.md +1 -1
  178. package/skills/jskit/references/patterns/connectors/source-scanning/PATTERN.md +13 -2
  179. package/skills/jskit/references/patterns/connectors/source-scanning/example/source-scanner.js +9 -0
  180. package/skills/jskit/references/patterns/crud/json-api-resource-package/PATTERN.md +102 -23
  181. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +3 -2
  182. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/server/types.js +5 -0
  183. package/skills/jskit/references/patterns/crud/resource-contract/PATTERN.md +54 -1
  184. package/skills/jskit/references/patterns/database/mysql-application/PATTERN.md +16 -5
  185. package/skills/jskit/references/patterns/database/mysql-application/example/knexfile.js +2 -2
  186. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
  187. package/skills/jskit/references/patterns/database/mysql-application/example/scripts/prepare-database.js +1 -1
  188. package/skills/jskit/references/patterns/database/postgres-application/PATTERN.md +16 -5
  189. package/skills/jskit/references/patterns/database/postgres-application/example/knexfile.js +2 -2
  190. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
  191. package/skills/jskit/references/patterns/database/postgres-application/example/scripts/prepare-database.js +1 -1
  192. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  193. package/skills/jskit/references/patterns/rewards/google-rewarded/example/GoogleRewardedDeliveryProvider.js +1 -1
  194. package/skills/jskit/references/patterns/rewards/google-rewarded/example/googlePublisherTag.js +5 -11
  195. package/skills/jskit/references/patterns/server/feature-package/PATTERN.md +104 -10
  196. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +9 -4
  197. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/BookingEngineFeature.js +24 -0
  198. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/bookingAvailability.js +10 -0
  199. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/bookingEngine.js +29 -0
  200. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/bookingEngineActions.js +26 -0
  201. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/inputSchemas.js +1 -2
  202. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/types.js +12 -0
  203. package/skills/jskit/references/patterns/server/feature-package/example/variations/AvailabilityEngineFeature.js +19 -0
  204. package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupFeature.js +23 -0
  205. package/skills/jskit/references/patterns/server/feature-package/example/variations/availabilityEngineActions.js +26 -0
  206. package/skills/jskit/references/patterns/server/feature-package/example/variations/customKnexRepository.js +32 -26
  207. package/skills/jskit/references/patterns/server/feature-package/example/variations/invoiceRollupActions.js +26 -0
  208. package/skills/jskit/references/patterns/server/feature-package/example/variations/orchestratorService.js +24 -19
  209. package/skills/jskit/references/patterns/server/feature-package/example/variations/types.js +7 -0
  210. package/skills/jskit/references/patterns/users/user-administration-server/PATTERN.md +16 -1
  211. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +3 -2
  212. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/server/types.js +5 -0
  213. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +4 -3
  214. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/UsersWorkspaceFeature.js +2 -9
  215. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/types.js +5 -0
  216. package/skills/jskit/references/patterns/workspaces/workspace-server/PATTERN.md +42 -17
  217. package/skills/jskit/references/patterns/workspaces/workspace-server/example/packages/main/src/server/WorkspaceInvitationsFeature.js +27 -0
  218. package/skills/jskit/references/patterns/workspaces/workspace-server/example/packages/main/src/server/email/workspaceInviteEmail.js +11 -10
  219. package/skills/jskit/references/patterns/workspaces/workspace-server/example/packages/main/src/server/email/workspaceInviteMailer.js +27 -0
  220. package/skills/jskit/references/translation.md +5 -4
  221. package/skills/jskit/references/typed-features.md +1099 -0
  222. package/skills/jskit/references/ui-operations.md +3 -3
  223. package/patterns/feature-package/example/booking-engine/src/server/BookingEngineProvider.js +0 -33
  224. package/patterns/feature-package/example/booking-engine/src/server/actions.js +0 -24
  225. package/patterns/feature-package/example/variations/AvailabilityEngineProvider.js +0 -31
  226. package/patterns/feature-package/example/variations/InvoiceRollupProvider.js +0 -36
  227. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/BookingEngineProvider.js +0 -33
  228. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/actions.js +0 -24
  229. package/skills/jskit/references/patterns/server/feature-package/example/variations/AvailabilityEngineProvider.js +0 -31
  230. package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupProvider.js +0 -36
@@ -19,7 +19,7 @@ Exports
19
19
  - `ACCOUNTS_TABLE`
20
20
  - `AccountError`
21
21
  - `LOCK_AFTER_FAILURES`
22
- - `createAccountStore(knex, { now = () => new Date() } = {})`
22
+ - `createAccountStore({ knex, now })`
23
23
  - `isEmail(value)`
24
24
  - `normalizeEmail(value)`
25
25
  - `passwordProblem(password)`
@@ -33,8 +33,8 @@ Local functions
33
33
  ### `src/server/adapter.js`
34
34
  Exports
35
35
  - `MODELS_TABLE`
36
- - `createKnexAdapterClass(knex, { now = () => new Date() } = {})`
37
- - `deleteExpiredModels(knex, { now = () => new Date() } = {})`
36
+ - `createKnexAdapterClass({ knex, now })`
37
+ - `deleteExpiredModels({ knex, now })`
38
38
  Local functions
39
39
  - `toDate(value)`
40
40
  - `isExpired(row, now)`
@@ -43,7 +43,7 @@ Local functions
43
43
  Exports
44
44
  - `CLIENTS_TABLE`
45
45
  - `RegistrationError`
46
- - `createClientStore(knex, { now = () => new Date() } = {})`
46
+ - `createClientStore({ knex, now })`
47
47
  - `isDevelopmentOrigin(origin, patterns)`
48
48
  - `validateRegistrationMetadata(body)`
49
49
  Local functions
@@ -52,11 +52,17 @@ Local functions
52
52
  - `globToRegExp(pattern)`
53
53
  - `assertOnlyValue(body, field, value)`
54
54
 
55
+ ### `src/server/clock.js`
56
+ Exports
57
+ - `systemClock()`
58
+
55
59
  ### `src/server/config.js`
56
60
  Exports
61
+ - `DEV_AUTH_SECRET_HEADER`
57
62
  - `HubConfigError`
58
63
  - `isLoopbackHostname(hostname)`
59
64
  - `resolveHubConfig(env = {}, { appRoot = "" } = {})`
65
+ - `resolveHubDevAuth(env)`
60
66
  Local functions
61
67
  - `text(value)`
62
68
  - `resolveIssuer(env, isProduction)`
@@ -80,12 +86,12 @@ Exports
80
86
 
81
87
  ### `src/server/emailTokens.js`
82
88
  Exports
83
- - `createEmailTokenStore(knex, { now = () => new Date() } = {})`
89
+ - `createEmailTokenStore({ knex, now })`
84
90
 
85
91
  ### `src/server/google.js`
86
92
  Exports
87
93
  - `GOOGLE_ENDPOINTS`
88
- - `createGoogleSignIn({ google, issuer, Adapter, endpoints = GOOGLE_ENDPOINTS, fetchImpl = globalThis.fetch })`
94
+ - `createGoogleSignIn({ google, issuer, Adapter, endpoints, fetchImpl })`
89
95
 
90
96
  ### `src/server/http.js`
91
97
  Exports
@@ -97,24 +103,36 @@ Exports
97
103
  - `parseCookies(header)`
98
104
  - `serializeCookie(name, value, { maxAge, secure, path = "/", httpOnly = true, sameSite = "Lax" })`
99
105
 
106
+ ### `src/server/hub.js`
107
+ Exports
108
+ - `createHub({ knex, config, devAuth, logger, mailer, now, googleEndpoints, fetchImpl })`
109
+
100
110
  ### `src/server/hubRoutes.js`
101
111
  Exports
102
112
  - `registerHubRoutes(app, hub)`
113
+ - `type HubRouteSupport`
103
114
  Local functions
104
115
  - `accountView(account)`
105
116
  - `appView(row)`
106
117
  - `isLoopbackRequest(request)`
118
+ - `createHubRouteSupport(hub)`
119
+ - `registerInteractionRoutes(app, hub, support)`
120
+ - `registerSignInRoutes(app, hub, support)`
121
+ - `registerAccountRoutes(app, hub, support)`
122
+ - `registerGoogleRoutes(app, hub, support)`
123
+ - `registerAdminRoutes(app, hub, support)`
124
+ - `registerDevelopmentRoutes(app, hub, support)`
107
125
 
108
126
  ### `src/server/hubSessions.js`
109
127
  Exports
110
- - `createHubSessionStore(knex, { now = () => new Date() } = {})`
111
- - `createSettingStore(knex)`
128
+ - `createHubSessionStore({ knex, now })`
129
+ - `createSettingStore({ knex })`
112
130
  - `hubSessionCookieName(config)`
113
131
 
114
132
  ### `src/server/importAccounts.js`
115
133
  Exports
116
134
  - `describeImport(result, { apply })`
117
- - `importAccounts({ knex, text, apply = false, now })`
135
+ - `importAccounts({ knex, text, apply = false, now = systemClock })`
118
136
  Local functions
119
137
  - `parseLine(line)`
120
138
  - `samePassword(existing, row)`
@@ -134,7 +152,7 @@ Exports
134
152
  ### `src/server/issuer.js`
135
153
  Exports
136
154
  - `HUB_GLOBAL_PATHS`
137
- - `createOidcIssuer({ knex, env = process.env, logger = console, mailer = null, now = () => new Date(), appRoot = "", googleEndpoints = GOOGLE_ENDPOINTS, fetchImpl = globalThis.fetch })`
155
+ - `createOidcIssuer({ knex, env, logger, mailer, now = systemClock, appRoot = "", googleEndpoints = GOOGLE_ENDPOINTS, fetchImpl = globalThis.fetch })`
138
156
  Local functions
139
157
  - `isHubPath(url)`
140
158
  - `bearerToken(request)`
@@ -145,26 +163,26 @@ Local functions
145
163
  ### `src/server/mailer.js`
146
164
  Exports
147
165
  - `composeMessage({ heading, body, actionLabel, actionUrl, footer })`
148
- - `createMailer({ mail, logger, isProduction, fetchImpl = globalThis.fetch })`
166
+ - `createMailer({ mail, logger, isProduction, fetchImpl })`
149
167
 
150
168
  ### `src/server/oidcProvider.js`
151
169
  Exports
152
170
  - `ACTIVE_STATUSES`
153
171
  - `HUB_SCOPES`
154
- - `createOidcProvider({ config, jwks, Adapter, accounts, clients, hasHubSession, onEndSession })`
172
+ - `createOidcProvider({ config, jwks, Adapter, accounts, clients, hasHubSession })`
155
173
  Local functions
156
174
  - `interactionPath(uid)`
157
175
  - `interactionsPolicy(hasHubSession)`
158
176
 
159
177
  ### `src/server/previewIdentity.js`
160
178
  Exports
161
- - `executePreviewIdentityRequest(request, { env = process.env, fetchImpl = globalThis.fetch } = {})`
162
- - `runPreviewIdentityCommand({ env = process.env, fetchImpl = globalThis.fetch, stdin = process.stdin, stdout = process.stdout } = {})`
179
+ - `DEFAULT_PREVIEW_IDENTITY_PROTOCOL`
180
+ - `executePreviewIdentityRequest(request, { env, fetchImpl = globalThis.fetch, protocol = DEFAULT_PREVIEW_IDENTITY_PROTOCOL, localHostnames = [] })`
181
+ - `runPreviewIdentityCommand({ env, fetchImpl = globalThis.fetch, stdin = process.stdin, stdout = process.stdout, protocol = DEFAULT_PREVIEW_IDENTITY_PROTOCOL, localHostnames = [] })`
163
182
  Local functions
164
- - `failure(requestId, code, message, statusCode = 400)`
183
+ - `failure(protocol, requestId, code, message, statusCode = 400)`
165
184
  - `readInput(stream)`
166
- - `localOrigin(value)`
167
- - `setCookies(response)`
185
+ - `localOrigin(value, localHostnames)`
168
186
 
169
187
  ### `src/server/providers/OidcIssuerProvider.js`
170
188
  Exports
@@ -172,11 +190,21 @@ Exports
172
190
 
173
191
  ### `src/server/rateLimits.js`
174
192
  Exports
175
- - `createRateLimiter(knex, { now = () => new Date() } = {})`
193
+ - `createRateLimiter({ knex, now })`
176
194
 
177
195
  ### `src/server/signingKeys.js`
178
196
  Exports
179
- - `createSigningKeyStore(knex, { secret, now = () => new Date() })`
197
+ - `createSigningKeyStore({ knex, secret, now })`
198
+
199
+ ### `src/server/types.js`
200
+ Exports
201
+ - `type AuthOidcIssuer`
202
+ - `type HubConfig`
203
+ - `type HubAdapterClass`
204
+ - `type Hub`
205
+ - `type HubMailer`
206
+ - `type HubClock`
207
+ - `type GoogleEndpoints`
180
208
 
181
209
  ### bin
182
210
 
@@ -186,6 +214,7 @@ Exports
186
214
  Local functions
187
215
  - `loadDotEnv()`
188
216
  - `withKnex(work)`
217
+ - `previewIdentityHost(args)`
189
218
  - `main(argv)`
190
219
 
191
220
  ### migrations
@@ -198,4 +227,4 @@ Exports
198
227
 
199
228
  ### `patterns/accounts-hub/example/server/hubPaths.js`
200
229
  Exports
201
- - `hubGlobalUiPaths(runtimeGlobalUiPaths = [])`
230
+ - `hubGlobalUiPaths(runtimeGlobalUiPaths)`
@@ -51,7 +51,9 @@ Exports
51
51
 
52
52
  ### `src/server/readiness.js`
53
53
  Exports
54
- - `createPaymentReadiness({ adapter, catalogue, scope, inspectApplication })`
54
+ - `createPaymentReadiness({ adapter, catalogue, scope, inspectApplication = inspectNoApplicationEvidence })`
55
+ Local functions
56
+ - `inspectNoApplicationEvidence()`
55
57
 
56
58
  ### `src/server/service.js`
57
59
  Exports
@@ -74,11 +76,26 @@ Local functions
74
76
  - `id(value)`
75
77
  - `invalid()`
76
78
 
79
+ ### `src/server/types.js`
80
+ Exports
81
+ - `type PaymentCatalogue`
82
+ - `type PaymentCheckoutService`
83
+ - `type PaymentReadiness`
84
+ - `type PaymentService`
85
+ - `type PaymentConfiguration`
86
+ - `type PaymentMerchantScope`
87
+ - `type PaymentAccountScope`
88
+ - `type PaymentAccountState`
89
+ - `type PaymentAccountTransaction`
90
+ - `type PaymentCatalogueState`
91
+ - `type PaymentStore`
92
+ - `type PaymentProviderPage`
93
+ - `type PaymentProviderPrice`
94
+ - `type PaymentProviderAdapter`
95
+
77
96
  ### `src/shared/configuration.js`
78
97
  Exports
79
98
  - `validatePaymentConfiguration(document)`
80
- Local functions
81
- - `configurationError(message, fieldErrors, { messageCode, messageParams = {} })`
82
99
 
83
100
  ### migrations
84
101
 
@@ -43,7 +43,7 @@ Exports
43
43
  - `RealtimeClientProvider`
44
44
  - `resolveRealtimeClientConfig({ env = {}, mobile = null } = {})`
45
45
  Local functions
46
- - `createRealtimeClient({ config, loggerInput } = {})`
46
+ - `createRealtimeClient({ config, logger: appLogger })`
47
47
  - `trackServedClientBuild(socket, logger)`
48
48
 
49
49
  ### `src/client/runtime.js`
@@ -54,47 +54,65 @@ Exports
54
54
 
55
55
  ### `src/server/realtimeAudience.js`
56
56
  Exports
57
+ - `authenticationRequiredError()`
57
58
  - `createAudienceContributors()`
58
59
  - `createSocketRequest(socket)`
59
- - `realtimeAuthenticationRequired(authService = null)`
60
- - `revalidateSocket({ socket, authService, audiences = null, request, authenticateRequest })`
61
- - `registerSocketAudienceBootstrap({ io, logger, authService = null, audiences = null })`
62
- - `resolveAudienceTargets(audience, event, { database = null, logger })`
60
+ - `realtimeAuthenticationRequired(authService)`
61
+ - `revalidateSocket({ socket, authService, audiences, request, authenticateRequest })`
62
+ - `registerSocketAudienceBootstrap({ io, logger, authService, audiences })`
63
+ - `resolveAudienceTargets(audience, event, { database, logger })`
64
+ - `type AuthService`
65
+ - `type RuntimeDatabase`
66
+ - `type RuntimeLogger`
67
+ - `type ActorRoomsResolver`
68
+ - `type AudienceContributors`
63
69
  Local functions
64
- - `normalizeArray(value)`
70
+ - `flattenEntries(value)`
65
71
  - `roomForUser(userId)`
66
72
  - `roomForWorkspace(workspaceId)`
67
73
  - `roomForWorkspaceUser(workspaceId, userId)`
68
- - `resolveScopeWorkspaceId(scope = {})`
69
- - `resolveScopeUserId(scope = {})`
70
- - `roomForScope(scope = {})`
74
+ - `resolveScopeWorkspaceId(scope)`
75
+ - `resolveScopeUserId(scope)`
76
+ - `roomForScope(scope)`
71
77
  - `applyAudiencePreset(preset, { event, rooms, flags, logger })`
72
78
  - `addAudienceRooms(selection, state)`
73
79
  - `collectUserIds(rows)`
74
80
  - `parseCookieHeader(value = "")`
75
- - `resolveSocketAuthentication(authService, socket, request = createSocketRequest(socket), authenticateRequest = (value) => authService.authenticateRequest(value, { refreshSession: false }))`
76
- - `authenticationRequiredError()`
81
+ - `authenticateWithoutRefresh(authService)`
82
+ - `resolveSocketAuthentication(authService, socket, request = createSocketRequest(socket), authenticateRequest = authenticateWithoutRefresh(authService))`
77
83
  - `sessionRefreshRequiredError()`
78
84
  - `rememberSocketActorId(socket, actorId)`
79
85
  - `registerSocketAuthentication({ io, logger, authService })`
80
86
  - `joinContributedRooms(socket, actorId, audiences)`
81
87
 
88
+ ### `src/server/realtimeCapability.js`
89
+ Exports
90
+ - `createRealtimeCapability({ io, logger, authService, database, events, appRoot, redis })`
91
+ - `type AuthService`
92
+ - `type RuntimeDatabase`
93
+ - `type RuntimeAppRoot`
94
+ - `type RuntimeEvents`
95
+ - `type RuntimeLogger`
96
+
82
97
  ### `src/server/realtimeDelivery.js`
83
98
  Exports
84
- - `createRealtimeDelivery({ io, database = null, logger, authService = null, audiences = null })`
99
+ - `createRealtimeDelivery({ io, database, logger, authService, audiences: { mayContribute, resolveActorRooms } })`
100
+ - `matchesRealtimeEvent(event)`
101
+ - `type AuthService`
102
+ - `type ActorRoomsResolver`
103
+ - `type AudienceContributors`
85
104
  Local functions
86
105
  - `publicRealtimePayload(event)`
87
- - `sharedWithinPass(load, keyOf = (value) => value)`
88
- - `createPassChecks(authService, audiences)`
106
+ - `valueAsKey(value)`
107
+ - `sharedWithinPass(load, keyOf = valueAsKey)`
108
+ - `createPassChecks(authService, resolveActorRooms)`
89
109
 
90
110
  ### `src/server/RealtimeProvider.js`
91
111
  Exports
92
112
  - `RealtimeProvider`
93
113
  Local functions
94
- - `parseDebugFlag(value, fallback = null)`
114
+ - `parseDebugFlag(value, fallback)`
95
115
  - `debugEnabled(config, env)`
96
- - `authenticationRequiredError()`
97
- - `createRealtimeCapability({ io })`
98
116
 
99
117
  ### `src/server/runtime.js`
100
118
  Exports
@@ -102,12 +120,12 @@ Exports
102
120
  - `closeSocketIoServer(io)`
103
121
  - `REDIS_URL_ENV_KEY`
104
122
  - `REDIS_NAMESPACE_ENV_KEY`
105
- - `resolveRealtimeRedisUrl(env = {})`
106
- - `resolveRealtimeRedisNamespace(env = {})`
107
- - `configureSocketIoRedisAdapter(io, { redisUrl = "", redisNamespace = "", logger = console, createRedisAdapter = createSocketIoRedisAdapter, createRedisConnection = createRedisClient } = {})`
108
- - `closeSocketIoRedisConnections({ pubClient = null, subClient = null } = {})`
123
+ - `resolveRealtimeRedisUrl(env)`
124
+ - `resolveRealtimeRedisNamespace(env)`
125
+ - `configureSocketIoRedisAdapter(io, { redisUrl = "", redisNamespace = "", logger, createRedisAdapter = createSocketIoRedisAdapter, createRedisConnection = createRedisClient })`
126
+ - `closeSocketIoRedisConnections({ pubClient, subClient })`
127
+ - `countConnectedClients(io)`
109
128
  Local functions
110
- - `toRequestPathname(urlValue)`
111
129
  - `registerSocketIoUpgradeHandoff(fastify)`
112
130
  - `resolveHttpServer({ httpServer = null, fastify = null } = {})`
113
131
  - `buildSocketIoRedisAdapterKey(redisNamespace = "")`
@@ -116,6 +134,13 @@ Local functions
116
134
  Exports
117
135
  - `announceServedClientBuild({ io, appRoot, logger })`
118
136
 
137
+ ### `src/server/types.js`
138
+ Exports
139
+ - `type RuntimeRealtime`
140
+ - `type ActorRoomsResolver`
141
+ - `type AudienceContributors`
142
+ - `type RealtimeAudienceContributor`
143
+
119
144
  ### `src/shared/servedClientBuild.js`
120
145
  Exports
121
146
  - `SERVED_CLIENT_BUILD_EVENT`
@@ -20,7 +20,7 @@ Exports
20
20
  - `defineResource(resource = {})`
21
21
  - `normalizeSchemaDefinitionLike(value, { context = "schema definition", defaultMode = "patch" } = {})`
22
22
  Local functions
23
- - `resolveDefaultOperationSchemaMode(sectionName, operation = {})`
23
+ - `resolveDefaultOperationSchemaMode(sectionName, operation)`
24
24
  - `normalizeOperationDefinition(operationName, operation = null, resourceMessages = null)`
25
25
  - `normalizeResourceOperations(operations = null, resourceMessages = null)`
26
26
  - `requireResourceNamespace(value, { context = "defineResource resource.namespace" } = {})`
@@ -21,15 +21,14 @@ Exports
21
21
  - `CRUD_FIELD_WRITE_SERIALIZER_DATETIME_UTC`
22
22
  - `CRUD_LOOKUP_FORM_CONTROL_AUTOCOMPLETE`
23
23
  - `CRUD_LOOKUP_FORM_CONTROL_SELECT`
24
- - `checkCrudLookupFormControl(value, { context = "crud field ui.formControl", defaultValue = CRUD_LOOKUP_FORM_CONTROL_AUTOCOMPLETE } = {})`
25
24
  - `resolveCrudFieldSchemaProperties(value, { context = "crud resource field definitions" } = {})`
26
25
  - `normalizeCrudFieldStorageConfig(fieldDefinition = {}, { context = "crud field storage", fieldKey = "" } = {})`
27
26
  - `buildCrudOperationSchemaFields(fields = {}, operationName = "")`
28
- - `buildCrudFieldContractMap(resource = {}, { context = "crud resource field contract" } = {})`
29
- - `resolveCrudFieldContractEntry(resource = {}, fieldKey = "", options = {})`
27
+ - `buildCrudFieldContractMap(resource, { context = "crud resource field contract" } = {})`
30
28
  Local functions
31
29
  - `cloneStructuredFieldMetadata(value = {})`
32
30
  - `mergeFieldContractEntry(target, source, { context = "crud field contract", fieldKey = "" } = {})`
31
+ - `resolveCrudFieldOperations(fieldDefinition)`
33
32
 
34
33
  ### `src/shared/crudListFilters.js`
35
34
  Exports
@@ -49,10 +48,52 @@ Exports
49
48
  - `CRUD_LIST_FILTER_INVALID_VALUES_REJECT`
50
49
  - `CRUD_LIST_FILTER_INVALID_VALUES_DISCARD`
51
50
  - `INVALID_CRUD_LIST_FILTER_QUERY_VALUE`
51
+ - `normalizeCrudListFilterInvalidValues`
52
+ - `parseCrudListRangeQueryExpression`
53
+ - `formatCrudListRangeQueryExpression`
54
+ - `createCrudListFilterEmptyValue`
55
+ - `createCrudListFilterInitialValue`
56
+ - `isCrudListFilterMultiValue`
57
+ - `isCrudListFilterStructuredValue`
58
+ - `normalizeCrudListFilterUiValue`
59
+ - `areCrudListFilterUiValuesEqual`
60
+ - `hasCrudListFilterUiValue`
61
+ - `listCrudListFilterChipValues`
62
+ - `formatCrudListFilterDefaultChipLabel`
63
+ - `formatCrudListFilterQueryValue`
64
+ - `parseCrudListFilterQueryValue`
65
+ - `defineCrudListFilters(definitions = {})`
66
+ - `resolveCrudListFilterQueryKeys(definition = {})`
67
+ - `resolveCrudListFilterOptionLabel(definition = {}, value = "", { fallback = "" } = {})`
68
+ Local functions
69
+ - `normalizeCrudListFilterOption(rawOption = null, { context = "filter option" } = {})`
70
+ - `normalizeCrudListFilterOptions(rawOptions = [], { context = "filter options" } = {})`
71
+ - `normalizeCrudListFilterPresenceOptions(rawOptions = [])`
72
+ - `normalizeCrudListFilterLookup(rawLookup = null)`
73
+ - `resolveCrudListFilterOptionSet(rawDefinition = {}, type = "")`
74
+ - `normalizeCrudListFilterDefinition(rawKey = "", rawDefinition = null)`
75
+
76
+ ### `src/shared/crudListFilterValues.js`
77
+ Exports
78
+ - `CRUD_LIST_FILTER_TYPE_FLAG`
79
+ - `CRUD_LIST_FILTER_TYPE_ENUM`
80
+ - `CRUD_LIST_FILTER_TYPE_ENUM_MANY`
81
+ - `CRUD_LIST_FILTER_TYPE_RECORD_ID`
82
+ - `CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY`
83
+ - `CRUD_LIST_FILTER_TYPE_DATE`
84
+ - `CRUD_LIST_FILTER_TYPE_DATE_RANGE`
85
+ - `CRUD_LIST_FILTER_TYPE_NUMBER_RANGE`
86
+ - `CRUD_LIST_FILTER_TYPE_PRESENCE`
87
+ - `CRUD_LIST_FILTER_TYPES`
88
+ - `CRUD_LIST_FILTER_PRESENCE_PRESENT`
89
+ - `CRUD_LIST_FILTER_PRESENCE_MISSING`
90
+ - `CRUD_LIST_FILTER_PRESENCE_OPTIONS`
91
+ - `CRUD_LIST_FILTER_INVALID_VALUES_REJECT`
92
+ - `CRUD_LIST_FILTER_INVALID_VALUES_DISCARD`
93
+ - `INVALID_CRUD_LIST_FILTER_QUERY_VALUE`
52
94
  - `normalizeCrudListFilterInvalidValues(value = "")`
53
95
  - `parseCrudListRangeQueryExpression(value = null)`
54
96
  - `formatCrudListRangeQueryExpression(startValue = "", endValue = "", { collapseExact = false } = {})`
55
- - `defineCrudListFilters(definitions = {})`
56
97
  - `createCrudListFilterEmptyValue(filter = {})`
57
98
  - `createCrudListFilterInitialValue(filter = {})`
58
99
  - `isCrudListFilterMultiValue(filter = {})`
@@ -61,11 +102,10 @@ Exports
61
102
  - `areCrudListFilterUiValuesEqual(filter = {}, currentValue, expectedValue)`
62
103
  - `hasCrudListFilterUiValue(filter = {}, rawValue)`
63
104
  - `listCrudListFilterChipValues(filter = {}, rawValue)`
64
- - `formatCrudListFilterDefaultChipLabel(filter = {}, rawValue, { resolveAtomicValue = null } = {})`
105
+ - `formatCrudListFilterDefaultChipLabel(filter = {}, rawValue, { resolveAtomicValue: resolveAtomicLabel = atomicValueText } = {})`
65
106
  - `formatCrudListFilterQueryValue(filter = {}, value)`
66
107
  - `parseCrudListFilterQueryValue(filter = {}, value, { invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
67
- - `resolveCrudListFilterQueryKeys(definition = {})`
68
- - `resolveCrudListFilterOptionLabel(definition = {}, value = "", { fallback = "" } = {})`
108
+ - `normalizeCrudListFilterType(value = "")`
69
109
  Local functions
70
110
  - `firstCrudListFilterValue(value)`
71
111
  - `isPrimitiveCrudListFilterInput(value)`
@@ -79,21 +119,16 @@ Local functions
79
119
  - `normalizeCrudListDateRangeUiValue(rawValue)`
80
120
  - `normalizeCrudListNumberRangeUiValue(rawValue)`
81
121
  - `matchCrudListFilterValues(currentValue, expectedValue)`
82
- - `rejectInvalidCrudListFilterValue({ invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
122
+ - `rejectInvalidCrudListFilterValue(invalidValues)`
83
123
  - `normalizeCrudListDateRangeQueryValue(value)`
84
124
  - `normalizeCrudListNumberRangeQueryValue(value)`
85
125
  - `parseCrudListFilterMultiQueryValue(value, normalizeEntry, { invalidValues })`
86
- - `normalizeCrudListFilterType(value = "")`
87
- - `normalizeCrudListFilterOption(rawOption = null, { context = "filter option" } = {})`
88
- - `normalizeCrudListFilterOptions(rawOptions = [], { context = "filter options" } = {})`
89
- - `normalizeCrudListFilterPresenceOptions(rawOptions = [])`
90
- - `normalizeCrudListFilterLookup(rawLookup = null)`
91
- - `resolveCrudListFilterOptionSet(rawDefinition = {}, type = "")`
92
- - `normalizeCrudListFilterDefinition(rawKey = "", rawDefinition = null)`
126
+ - `atomicValueText(value)`
93
127
 
94
128
  ### `src/shared/crudLookup.js`
95
129
  Exports
96
130
  - `DEFAULT_CRUD_LOOKUP_CONTAINER_KEY`
131
+ - `expandCrudLookupFields(schema)`
97
132
  - `normalizeCrudLookupApiPath(value = "")`
98
133
  - `normalizeCrudLookupNamespace(value = "")`
99
134
  - `resolveCrudLookupApiPathFromNamespace(value = "")`
@@ -104,10 +139,11 @@ Exports
104
139
  - `resolveCrudLookupFieldKeys(resource = {}, { allowKeys = [] } = {})`
105
140
  - `resolveCrudParentFilterKeys(resource = {})`
106
141
  - `resolveCrudLookupFieldKeyFromRouteParam(resource = {}, routeParamKey = "", { allowKeys = [] } = {})`
107
- - `resolveCrudParentFilterFieldKeyFromRouteParam(resource = {}, routeParamKey = "")`
108
142
  Local functions
143
+ - `usesCrudLookupShorthand(fieldDefinition)`
144
+ - `expandCrudLookupField(fieldKey, fieldDefinition)`
109
145
  - `resolveCrudLookupFieldEntries(resource = {}, { allowKeys = [] } = {})`
110
- - `resolveCrudLookupCreateSchemaKeys(resource = {})`
146
+ - `resolveCrudLookupCreateSchemaKeys(resource)`
111
147
 
112
148
  ### `src/shared/crudNamespaceSupport.js`
113
149
  Exports
@@ -119,25 +155,27 @@ Exports
119
155
  Exports
120
156
  - `defineCrudResource(resource = {})`
121
157
  Local functions
122
- - `createCrudRecordIdFieldDefinition()`
123
- - `resolveConfiguredLookupContainerKey(resource = {})`
124
- - `resolveFieldEntries(resource = {}, operationName = "output")`
125
- - `createDerivedCrudRecordOutputDefinition(resource = {})`
126
- - `createDerivedCrudBodyDefinition(resource = {}, operationName = "patch", bodyMode = "patch")`
127
- - `createCrudDeleteOutputDefinition()`
158
+ - `buildCrudRecordIdFieldDefinition()`
159
+ - `resolveConfiguredLookupContainerKey(resource)`
160
+ - `resolveFieldEntries(resource, operationName = "output")`
161
+ - `buildDerivedCrudRecordOutputDefinition(resource = {})`
162
+ - `buildDerivedCrudBodyDefinition(resource = {}, operationName = "patch", bodyMode = "patch")`
163
+ - `buildCrudDeleteOutputDefinition()`
128
164
  - `requireCrudOperationName(value = "", { context = "crud operation name" } = {})`
129
165
  - `requireCrudOperationSpec(operationName = "")`
130
166
  - `resolveCrudOperationNames(resource = {})`
131
167
  - `resolveFirstPresentValue(source = {}, keys = [])`
132
168
  - `resolveExplicitCrudSchemaDefinition(crudConfig = {}, keys = [], { context = "defineCrudResource schema definition", defaultMode = "patch" } = {})`
133
- - `createCrudListOutputDefinition(resolveRecordOutputDefinition, crudConfig = {})`
169
+ - `buildCrudListOutputDefinition(resolveRecordOutputDefinition, crudConfig = {})`
134
170
  - `createCrudRecordOutputDefinitionResolver(resource = {}, crudConfig = {})`
135
171
  - `resolveCrudBodyDefinition(spec, resource = {}, crudConfig = {})`
136
172
  - `resolveCrudOutputDefinition(spec, resolveRecordOutputDefinition, crudConfig = {})`
137
- - `createCrudOperationDefinition(operationName, { namespace = "", resource = {}, crudConfig = {}, resolveRecordOutputDefinition } = {})`
138
- - `createDefaultCrudOperations(resource = {})`
173
+ - `buildCrudOperationDefinition(operationName, { namespace = "", resource = {}, crudConfig = {}, resolveRecordOutputDefinition } = {})`
174
+ - `buildDefaultCrudOperations(resource = {})`
139
175
  - `mergeCrudOperationDefinition(baseDefinition, overrideDefinition)`
140
176
  - `mergeCrudOperations(defaultOperations = {}, overrides = {})`
177
+ - `requireCrudLockVersionField(resource)`
178
+ - `withExpandedCrudLookups(resource)`
141
179
 
142
180
  ### patterns
143
181
 
@@ -14,16 +14,6 @@ Use this on demand; do not load the full index at startup.
14
14
 
15
15
  ### src
16
16
 
17
- ### `src/server/actions.js`
18
- Exports
19
- - `ACTION_CURRENT`
20
- - `ACTION_START`
21
- - `ACTION_GRANT`
22
- - `ACTION_CLOSE`
23
- - `createRewardedActions({ rewarded } = {})`
24
- Local functions
25
- - `changedEvent({ entity, operation, entityId, event })`
26
-
27
17
  ### `src/server/inputSchemas.js`
28
18
  Exports
29
19
  - `currentQueryInputValidator`
@@ -35,15 +25,19 @@ Exports
35
25
  - `grantRewardOutputValidator`
36
26
  - `closeSessionOutputValidator`
37
27
  Local functions
38
- - `createGateStateOutputValidator({ includeSession = false } = {})`
28
+ - `buildGateStateOutputValidator({ includeSession = false } = {})`
39
29
 
40
- ### `src/server/registerRoutes.js`
30
+ ### `src/server/rewardedActions.js`
41
31
  Exports
42
- - `registerRoutes(router, { routeOwnershipFilter = "workspace_user", routeSurface = "app", routeRelativePath = "rewarded" } = {})`
32
+ - `ACTION_CURRENT`
33
+ - `ACTION_START`
34
+ - `ACTION_GRANT`
35
+ - `ACTION_CLOSE`
36
+ - `createRewardedActions({ rewarded })`
43
37
  Local functions
44
- - `createWorkflowResponses(outputValidator)`
38
+ - `changedEvent({ entity, operation, entityId, event })`
45
39
 
46
- ### `src/server/RewardedCoreProvider.js`
40
+ ### `src/server/RewardedCoreFeature.js`
47
41
  Exports
48
42
  - `RewardedCoreFeature`
49
43
 
@@ -53,41 +47,54 @@ Exports
53
47
  - `RewardedRulesFeature`
54
48
  - `RewardedUnlockReceiptsFeature`
55
49
  - `RewardedWatchSessionsFeature`
50
+
51
+ ### `src/server/rewardedRoutes.js`
52
+ Exports
53
+ - `registerRewardedRoutes(router)`
56
54
  Local functions
57
- - `workspaceScope()`
55
+ - `buildWorkflowResponses(outputValidator)`
58
56
 
59
57
  ### `src/server/service.js`
60
58
  Exports
61
- - `createService({ authorizeGrant, rewardedRulesRepository, rewardedProviderConfigsRepository, rewardedWatchSessionsRepository, rewardedUnlockReceiptsRepository } = {})`
59
+ - `createService({ grantPolicy, rewardedRulesRepository, rewardedProviderConfigsRepository, rewardedWatchSessionsRepository, rewardedUnlockReceiptsRepository })`
60
+ - `type CrudRepository`
61
+ - `type RewardedRepositoryOptions`
62
62
  Local functions
63
- - `resolveActionUser(context, input)`
64
- - `normalizeRecordList(document = null)`
65
- - `normalizeRecord(document = null)`
66
- - `normalizeGateKey(value = "")`
67
- - `normalizeSurface(value = "", { fallback = REWARDED_SURFACE } = {})`
68
- - `toIsoOrNull(value = null)`
69
- - `parseDate(value = null)`
63
+ - `normalizeRecordList(document)`
64
+ - `normalizeRecord(document)`
65
+ - `normalizeKeyword(value, fallback)`
66
+ - `toIsoOrNull(value)`
67
+ - `parseDate(value)`
70
68
  - `addMinutes(date, minutes)`
71
69
  - `startOfUtcDay(date)`
72
70
  - `requireActor(context, input)`
73
- - `requireWorkspaceSlug(input = {})`
74
- - `requireGateKey(input = {})`
75
- - `formatRule(rule = null)`
76
- - `formatProviderConfig(record = null)`
77
- - `formatWatchSession(record = null)`
78
- - `formatUnlockReceipt(record = null)`
79
- - `isFutureDate(value = null, now = new Date())`
71
+ - `requireWorkspaceSlug(input)`
72
+ - `requireGateKey(input)`
73
+ - `formatRule(rule)`
74
+ - `formatProviderConfig(record)`
75
+ - `formatWatchSession(record)`
76
+ - `formatUnlockReceipt(record)`
77
+ - `isFutureDate(value, now)`
80
78
 
81
79
  ### `src/server/support/requireRewardedUnlock.js`
82
80
  Exports
83
81
  - `requireRewardedUnlock(rewardedService, input = {}, { context = null, requireConfigured = false, errorCode = "", errorMessage = "" } = {})`
84
82
  Local functions
85
- - `normalizeReason(value = "")`
86
- - `isUnlockSatisfied(gateState = null)`
83
+ - `normalizeReason(value)`
84
+ - `isUnlockSatisfied(gateState)`
87
85
  - `hasBooleanGateFlag(gateState, key)`
88
- - `assertWellFormedGateState(gateState = null)`
89
- - `isConfigurationBypassAllowed(gateState = null, requireConfigured = false)`
90
- - `createRewardedGateError(gateState = null, { errorCode = "", errorMessage = "" } = {})`
86
+ - `assertWellFormedGateState(gateState)`
87
+ - `isConfigurationBypassAllowed(gateState, requireConfigured)`
88
+ - `buildRewardedGateError(gateState, { errorCode, errorMessage })`
89
+
90
+ ### `src/server/types.js`
91
+ Exports
92
+ - `type RewardedCore`
93
+ - `type RewardedProviderConfigs`
94
+ - `type RewardedRules`
95
+ - `type RewardedUnlockReceipts`
96
+ - `type RewardedWatchSessions`
97
+ - `type RewardedGrantPolicy`
91
98
 
92
99
  ### `src/shared/index.js`
93
100
  Exports
@@ -114,6 +121,10 @@ Exports
114
121
 
115
122
  ### migrations
116
123
 
124
+ ### `migrations/constraints/rewarded_foreign_keys.cjs`
125
+ Exports
126
+ - None
127
+
117
128
  ### `migrations/rewarded_provider_configs_initial.cjs`
118
129
  Exports
119
130
  - None