@nocobase/app-server 0.11.1-alpha.4 → 2.0.0-beta.1

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 (579) hide show
  1. package/README.md +295 -0
  2. package/dist/application/index.d.ts +128 -0
  3. package/dist/application/index.d.ts.map +1 -0
  4. package/dist/application/index.js +386 -0
  5. package/dist/application/index.js.map +1 -0
  6. package/dist/caching/config.d.ts +2 -0
  7. package/dist/caching/config.d.ts.map +1 -0
  8. package/dist/caching/config.js +2 -0
  9. package/dist/caching/config.js.map +1 -0
  10. package/dist/caching/index.d.ts +5 -0
  11. package/dist/caching/index.d.ts.map +1 -0
  12. package/dist/caching/index.js +4 -0
  13. package/dist/caching/index.js.map +1 -0
  14. package/dist/caching/provider.d.ts +8 -0
  15. package/dist/caching/provider.d.ts.map +1 -0
  16. package/dist/caching/provider.js +14 -0
  17. package/dist/caching/provider.js.map +1 -0
  18. package/dist/caching/token.d.ts +4 -0
  19. package/dist/caching/token.d.ts.map +1 -0
  20. package/dist/caching/token.js +3 -0
  21. package/dist/caching/token.js.map +1 -0
  22. package/dist/config/app-config-types.d.ts +44 -0
  23. package/dist/config/app-config-types.d.ts.map +1 -0
  24. package/dist/config/app-config-types.js +2 -0
  25. package/dist/config/app-config-types.js.map +1 -0
  26. package/dist/config/app-config.d.ts +60 -0
  27. package/dist/config/app-config.d.ts.map +1 -0
  28. package/dist/config/app-config.js +247 -0
  29. package/dist/config/app-config.js.map +1 -0
  30. package/dist/config/context.d.ts +3 -0
  31. package/dist/config/context.d.ts.map +1 -0
  32. package/dist/config/context.js +7 -0
  33. package/dist/config/context.js.map +1 -0
  34. package/dist/config/define-app-config.d.ts +71 -0
  35. package/dist/config/define-app-config.d.ts.map +1 -0
  36. package/dist/config/define-app-config.js +48 -0
  37. package/dist/config/define-app-config.js.map +1 -0
  38. package/dist/config/index.d.ts +13 -0
  39. package/dist/config/index.d.ts.map +1 -0
  40. package/dist/config/index.js +11 -0
  41. package/dist/config/index.js.map +1 -0
  42. package/dist/config/not-configured.d.ts +23 -0
  43. package/dist/config/not-configured.d.ts.map +1 -0
  44. package/dist/config/not-configured.js +31 -0
  45. package/dist/config/not-configured.js.map +1 -0
  46. package/dist/config/paths.d.ts +27 -0
  47. package/dist/config/paths.d.ts.map +1 -0
  48. package/dist/config/paths.js +27 -0
  49. package/dist/config/paths.js.map +1 -0
  50. package/dist/config/placeholder-secret.d.ts +19 -0
  51. package/dist/config/placeholder-secret.d.ts.map +1 -0
  52. package/dist/config/placeholder-secret.js +26 -0
  53. package/dist/config/placeholder-secret.js.map +1 -0
  54. package/dist/config/runtime-environment.d.ts +11 -0
  55. package/dist/config/runtime-environment.d.ts.map +1 -0
  56. package/dist/config/runtime-environment.js +20 -0
  57. package/dist/config/runtime-environment.js.map +1 -0
  58. package/dist/config/types.d.ts +12 -0
  59. package/dist/config/types.d.ts.map +1 -0
  60. package/dist/config/types.js +2 -0
  61. package/dist/config/types.js.map +1 -0
  62. package/dist/config/validation.d.ts +36 -0
  63. package/dist/config/validation.d.ts.map +1 -0
  64. package/dist/config/validation.js +186 -0
  65. package/dist/config/validation.js.map +1 -0
  66. package/dist/config/variables.d.ts +57 -0
  67. package/dist/config/variables.d.ts.map +1 -0
  68. package/dist/config/variables.js +89 -0
  69. package/dist/config/variables.js.map +1 -0
  70. package/dist/database/collections-artifact.d.ts +99 -0
  71. package/dist/database/collections-artifact.d.ts.map +1 -0
  72. package/dist/database/collections-artifact.js +397 -0
  73. package/dist/database/collections-artifact.js.map +1 -0
  74. package/dist/database/collections-directory.d.ts +36 -0
  75. package/dist/database/collections-directory.d.ts.map +1 -0
  76. package/dist/database/collections-directory.js +115 -0
  77. package/dist/database/collections-directory.js.map +1 -0
  78. package/dist/database/collections-doctor.d.ts +43 -0
  79. package/dist/database/collections-doctor.d.ts.map +1 -0
  80. package/dist/database/collections-doctor.js +88 -0
  81. package/dist/database/collections-doctor.js.map +1 -0
  82. package/dist/database/connection-check.d.ts +25 -0
  83. package/dist/database/connection-check.d.ts.map +1 -0
  84. package/dist/database/connection-check.js +65 -0
  85. package/dist/database/connection-check.js.map +1 -0
  86. package/dist/database/connection-selection.d.ts +16 -0
  87. package/dist/database/connection-selection.d.ts.map +1 -0
  88. package/dist/database/connection-selection.js +30 -0
  89. package/dist/database/connection-selection.js.map +1 -0
  90. package/dist/database/define-app-database-config.d.ts +49 -0
  91. package/dist/database/define-app-database-config.d.ts.map +1 -0
  92. package/dist/database/define-app-database-config.js +73 -0
  93. package/dist/database/define-app-database-config.js.map +1 -0
  94. package/dist/database/environment.d.ts +11 -0
  95. package/dist/database/environment.d.ts.map +1 -0
  96. package/dist/database/environment.js +49 -0
  97. package/dist/database/environment.js.map +1 -0
  98. package/dist/database/index.d.ts +17 -0
  99. package/dist/database/index.d.ts.map +1 -0
  100. package/dist/database/index.js +16 -0
  101. package/dist/database/index.js.map +1 -0
  102. package/dist/database/manager.d.ts +16 -0
  103. package/dist/database/manager.d.ts.map +1 -0
  104. package/dist/database/manager.js +83 -0
  105. package/dist/database/manager.js.map +1 -0
  106. package/dist/database/migrator.d.ts +88 -0
  107. package/dist/database/migrator.d.ts.map +1 -0
  108. package/dist/database/migrator.js +143 -0
  109. package/dist/database/migrator.js.map +1 -0
  110. package/dist/database/ownership.d.ts +6 -0
  111. package/dist/database/ownership.d.ts.map +1 -0
  112. package/dist/database/ownership.js +50 -0
  113. package/dist/database/ownership.js.map +1 -0
  114. package/dist/database/plan.d.ts +36 -0
  115. package/dist/database/plan.d.ts.map +1 -0
  116. package/dist/database/plan.js +136 -0
  117. package/dist/database/plan.js.map +1 -0
  118. package/dist/database/provider.d.ts +43 -0
  119. package/dist/database/provider.d.ts.map +1 -0
  120. package/dist/database/provider.js +171 -0
  121. package/dist/database/provider.js.map +1 -0
  122. package/dist/database/resolve-config.d.ts +42 -0
  123. package/dist/database/resolve-config.d.ts.map +1 -0
  124. package/dist/database/resolve-config.js +118 -0
  125. package/dist/database/resolve-config.js.map +1 -0
  126. package/dist/database/seeder.d.ts +50 -0
  127. package/dist/database/seeder.d.ts.map +1 -0
  128. package/dist/database/seeder.js +117 -0
  129. package/dist/database/seeder.js.map +1 -0
  130. package/dist/database/storage.d.ts +10 -0
  131. package/dist/database/storage.d.ts.map +1 -0
  132. package/dist/database/storage.js +37 -0
  133. package/dist/database/storage.js.map +1 -0
  134. package/dist/database/task-config.d.ts +7 -0
  135. package/dist/database/task-config.d.ts.map +1 -0
  136. package/dist/database/task-config.js +19 -0
  137. package/dist/database/task-config.js.map +1 -0
  138. package/dist/database/task-container.d.ts +3 -0
  139. package/dist/database/task-container.d.ts.map +1 -0
  140. package/dist/database/task-container.js +34 -0
  141. package/dist/database/task-container.js.map +1 -0
  142. package/dist/database/tasks.d.ts +104 -0
  143. package/dist/database/tasks.d.ts.map +1 -0
  144. package/dist/database/tasks.js +350 -0
  145. package/dist/database/tasks.js.map +1 -0
  146. package/dist/database/types.d.ts +92 -0
  147. package/dist/database/types.d.ts.map +1 -0
  148. package/dist/database/types.js +2 -0
  149. package/dist/database/types.js.map +1 -0
  150. package/dist/drive/config.d.ts +2 -0
  151. package/dist/drive/config.d.ts.map +1 -0
  152. package/dist/drive/config.js +2 -0
  153. package/dist/drive/config.js.map +1 -0
  154. package/dist/drive/index.d.ts +5 -0
  155. package/dist/drive/index.d.ts.map +1 -0
  156. package/dist/drive/index.js +4 -0
  157. package/dist/drive/index.js.map +1 -0
  158. package/dist/drive/provider.d.ts +9 -0
  159. package/dist/drive/provider.d.ts.map +1 -0
  160. package/dist/drive/provider.js +22 -0
  161. package/dist/drive/provider.js.map +1 -0
  162. package/dist/drive/token.d.ts +4 -0
  163. package/dist/drive/token.d.ts.map +1 -0
  164. package/dist/drive/token.js +3 -0
  165. package/dist/drive/token.js.map +1 -0
  166. package/dist/i18n/index.d.ts +37 -0
  167. package/dist/i18n/index.d.ts.map +1 -0
  168. package/dist/i18n/index.js +44 -0
  169. package/dist/i18n/index.js.map +1 -0
  170. package/dist/id-generator/config.d.ts +2 -0
  171. package/dist/id-generator/config.d.ts.map +1 -0
  172. package/dist/id-generator/config.js +2 -0
  173. package/dist/id-generator/config.js.map +1 -0
  174. package/dist/id-generator/index.d.ts +5 -0
  175. package/dist/id-generator/index.d.ts.map +1 -0
  176. package/dist/id-generator/index.js +4 -0
  177. package/dist/id-generator/index.js.map +1 -0
  178. package/dist/id-generator/provider.d.ts +7 -0
  179. package/dist/id-generator/provider.d.ts.map +1 -0
  180. package/dist/id-generator/provider.js +11 -0
  181. package/dist/id-generator/provider.js.map +1 -0
  182. package/dist/id-generator/token.d.ts +4 -0
  183. package/dist/id-generator/token.d.ts.map +1 -0
  184. package/dist/id-generator/token.js +3 -0
  185. package/dist/id-generator/token.js.map +1 -0
  186. package/dist/index.d.ts +20 -0
  187. package/dist/index.d.ts.map +1 -0
  188. package/dist/index.js +20 -0
  189. package/dist/index.js.map +1 -0
  190. package/dist/jobs/config.d.ts +2 -0
  191. package/dist/jobs/config.d.ts.map +1 -0
  192. package/dist/jobs/config.js +2 -0
  193. package/dist/jobs/config.js.map +1 -0
  194. package/dist/jobs/index.d.ts +4 -0
  195. package/dist/jobs/index.d.ts.map +1 -0
  196. package/dist/jobs/index.js +4 -0
  197. package/dist/jobs/index.js.map +1 -0
  198. package/dist/jobs/provider.d.ts +23 -0
  199. package/dist/jobs/provider.d.ts.map +1 -0
  200. package/dist/jobs/provider.js +55 -0
  201. package/dist/jobs/provider.js.map +1 -0
  202. package/dist/jobs/token.d.ts +8 -0
  203. package/dist/jobs/token.d.ts.map +1 -0
  204. package/dist/jobs/token.js +7 -0
  205. package/dist/jobs/token.js.map +1 -0
  206. package/dist/logging/config.d.ts +16 -0
  207. package/dist/logging/config.d.ts.map +1 -0
  208. package/dist/logging/config.js +26 -0
  209. package/dist/logging/config.js.map +1 -0
  210. package/dist/logging/index.d.ts +5 -0
  211. package/dist/logging/index.d.ts.map +1 -0
  212. package/dist/logging/index.js +5 -0
  213. package/dist/logging/index.js.map +1 -0
  214. package/dist/logging/middleware.d.ts +13 -0
  215. package/dist/logging/middleware.d.ts.map +1 -0
  216. package/dist/logging/middleware.js +128 -0
  217. package/dist/logging/middleware.js.map +1 -0
  218. package/dist/logging/provider.d.ts +9 -0
  219. package/dist/logging/provider.d.ts.map +1 -0
  220. package/dist/logging/provider.js +95 -0
  221. package/dist/logging/provider.js.map +1 -0
  222. package/dist/logging/token.d.ts +4 -0
  223. package/dist/logging/token.d.ts.map +1 -0
  224. package/dist/logging/token.js +3 -0
  225. package/dist/logging/token.js.map +1 -0
  226. package/dist/node/config.d.ts +6 -0
  227. package/dist/node/config.d.ts.map +1 -0
  228. package/dist/node/config.js +2 -0
  229. package/dist/node/config.js.map +1 -0
  230. package/dist/node/index.d.ts +6 -0
  231. package/dist/node/index.d.ts.map +1 -0
  232. package/dist/node/index.js +6 -0
  233. package/dist/node/index.js.map +1 -0
  234. package/dist/node/not-configured-message.d.ts +10 -0
  235. package/dist/node/not-configured-message.d.ts.map +1 -0
  236. package/dist/node/not-configured-message.js +24 -0
  237. package/dist/node/not-configured-message.js.map +1 -0
  238. package/dist/node/proxy.d.ts +25 -0
  239. package/dist/node/proxy.d.ts.map +1 -0
  240. package/dist/node/proxy.js +229 -0
  241. package/dist/node/proxy.js.map +1 -0
  242. package/dist/node/runtime.d.ts +45 -0
  243. package/dist/node/runtime.d.ts.map +1 -0
  244. package/dist/node/runtime.js +176 -0
  245. package/dist/node/runtime.js.map +1 -0
  246. package/dist/node/scope.d.ts +55 -0
  247. package/dist/node/scope.d.ts.map +1 -0
  248. package/dist/node/scope.js +115 -0
  249. package/dist/node/scope.js.map +1 -0
  250. package/dist/node/server.d.ts +80 -0
  251. package/dist/node/server.d.ts.map +1 -0
  252. package/dist/node/server.js +283 -0
  253. package/dist/node/server.js.map +1 -0
  254. package/dist/plugins/define.d.ts +4 -0
  255. package/dist/plugins/define.d.ts.map +1 -0
  256. package/dist/plugins/define.js +45 -0
  257. package/dist/plugins/define.js.map +1 -0
  258. package/dist/plugins/index.d.ts +27 -0
  259. package/dist/plugins/index.d.ts.map +1 -0
  260. package/dist/plugins/index.js +4 -0
  261. package/dist/plugins/index.js.map +1 -0
  262. package/dist/plugins/inspect.d.ts +79 -0
  263. package/dist/plugins/inspect.d.ts.map +1 -0
  264. package/dist/plugins/inspect.js +142 -0
  265. package/dist/plugins/inspect.js.map +1 -0
  266. package/dist/plugins/resolve.d.ts +14 -0
  267. package/dist/plugins/resolve.d.ts.map +1 -0
  268. package/dist/plugins/resolve.js +101 -0
  269. package/dist/plugins/resolve.js.map +1 -0
  270. package/dist/plugins/types.d.ts +91 -0
  271. package/dist/plugins/types.d.ts.map +1 -0
  272. package/dist/plugins/types.js +2 -0
  273. package/dist/plugins/types.js.map +1 -0
  274. package/dist/proxy/http-proxy.d.ts +8 -0
  275. package/dist/proxy/http-proxy.d.ts.map +1 -0
  276. package/dist/proxy/http-proxy.js +59 -0
  277. package/dist/proxy/http-proxy.js.map +1 -0
  278. package/dist/proxy/index.d.ts +3 -0
  279. package/dist/proxy/index.d.ts.map +1 -0
  280. package/dist/proxy/index.js +3 -0
  281. package/dist/proxy/index.js.map +1 -0
  282. package/dist/proxy/origin.d.ts +12 -0
  283. package/dist/proxy/origin.d.ts.map +1 -0
  284. package/dist/proxy/origin.js +61 -0
  285. package/dist/proxy/origin.js.map +1 -0
  286. package/dist/queue/config.d.ts +4 -0
  287. package/dist/queue/config.d.ts.map +1 -0
  288. package/dist/queue/config.js +2 -0
  289. package/dist/queue/config.js.map +1 -0
  290. package/dist/queue/index.d.ts +4 -0
  291. package/dist/queue/index.d.ts.map +1 -0
  292. package/dist/queue/index.js +4 -0
  293. package/dist/queue/index.js.map +1 -0
  294. package/dist/queue/provider.d.ts +24 -0
  295. package/dist/queue/provider.d.ts.map +1 -0
  296. package/dist/queue/provider.js +57 -0
  297. package/dist/queue/provider.js.map +1 -0
  298. package/dist/queue/token.d.ts +9 -0
  299. package/dist/queue/token.d.ts.map +1 -0
  300. package/dist/queue/token.js +8 -0
  301. package/dist/queue/token.js.map +1 -0
  302. package/dist/realtime/index.d.ts +6 -0
  303. package/dist/realtime/index.d.ts.map +1 -0
  304. package/dist/realtime/index.js +6 -0
  305. package/dist/realtime/index.js.map +1 -0
  306. package/dist/realtime/provider.d.ts +10 -0
  307. package/dist/realtime/provider.d.ts.map +1 -0
  308. package/dist/realtime/provider.js +19 -0
  309. package/dist/realtime/provider.js.map +1 -0
  310. package/dist/realtime/service.d.ts +9 -0
  311. package/dist/realtime/service.d.ts.map +1 -0
  312. package/dist/realtime/service.js +347 -0
  313. package/dist/realtime/service.js.map +1 -0
  314. package/dist/realtime/types.d.ts +74 -0
  315. package/dist/realtime/types.d.ts.map +1 -0
  316. package/dist/realtime/types.js +4 -0
  317. package/dist/realtime/types.js.map +1 -0
  318. package/dist/realtime/websocket.d.ts +7 -0
  319. package/dist/realtime/websocket.d.ts.map +1 -0
  320. package/dist/realtime/websocket.js +57 -0
  321. package/dist/realtime/websocket.js.map +1 -0
  322. package/dist/router/api-error.d.ts +171 -0
  323. package/dist/router/api-error.d.ts.map +1 -0
  324. package/dist/router/api-error.js +291 -0
  325. package/dist/router/api-error.js.map +1 -0
  326. package/dist/router/api-limits.d.ts +80 -0
  327. package/dist/router/api-limits.d.ts.map +1 -0
  328. package/dist/router/api-limits.js +281 -0
  329. package/dist/router/api-limits.js.map +1 -0
  330. package/dist/router/cli/derive.d.ts +32 -0
  331. package/dist/router/cli/derive.d.ts.map +1 -0
  332. package/dist/router/cli/derive.js +548 -0
  333. package/dist/router/cli/derive.js.map +1 -0
  334. package/dist/router/cli/index.d.ts +6 -0
  335. package/dist/router/cli/index.d.ts.map +1 -0
  336. package/dist/router/cli/index.js +6 -0
  337. package/dist/router/cli/index.js.map +1 -0
  338. package/dist/router/cli/reference.d.ts +9 -0
  339. package/dist/router/cli/reference.d.ts.map +1 -0
  340. package/dist/router/cli/reference.js +64 -0
  341. package/dist/router/cli/reference.js.map +1 -0
  342. package/dist/router/cli/routes.d.ts +9 -0
  343. package/dist/router/cli/routes.d.ts.map +1 -0
  344. package/dist/router/cli/routes.js +228 -0
  345. package/dist/router/cli/routes.js.map +1 -0
  346. package/dist/router/cli/service.d.ts +50 -0
  347. package/dist/router/cli/service.d.ts.map +1 -0
  348. package/dist/router/cli/service.js +104 -0
  349. package/dist/router/cli/service.js.map +1 -0
  350. package/dist/router/cli/types.d.ts +278 -0
  351. package/dist/router/cli/types.d.ts.map +1 -0
  352. package/dist/router/cli/types.js +18 -0
  353. package/dist/router/cli/types.js.map +1 -0
  354. package/dist/router/duplicate-routes.d.ts +25 -0
  355. package/dist/router/duplicate-routes.d.ts.map +1 -0
  356. package/dist/router/duplicate-routes.js +51 -0
  357. package/dist/router/duplicate-routes.js.map +1 -0
  358. package/dist/router/health.d.ts +7 -0
  359. package/dist/router/health.d.ts.map +1 -0
  360. package/dist/router/health.js +48 -0
  361. package/dist/router/health.js.map +1 -0
  362. package/dist/router/index.d.ts +26 -0
  363. package/dist/router/index.d.ts.map +1 -0
  364. package/dist/router/index.js +29 -0
  365. package/dist/router/index.js.map +1 -0
  366. package/dist/router/openapi/components.d.ts +24 -0
  367. package/dist/router/openapi/components.d.ts.map +1 -0
  368. package/dist/router/openapi/components.js +128 -0
  369. package/dist/router/openapi/components.js.map +1 -0
  370. package/dist/router/openapi/declared.d.ts +19 -0
  371. package/dist/router/openapi/declared.d.ts.map +1 -0
  372. package/dist/router/openapi/declared.js +46 -0
  373. package/dist/router/openapi/declared.js.map +1 -0
  374. package/dist/router/openapi/describe.d.ts +82 -0
  375. package/dist/router/openapi/describe.d.ts.map +1 -0
  376. package/dist/router/openapi/describe.js +207 -0
  377. package/dist/router/openapi/describe.js.map +1 -0
  378. package/dist/router/openapi/docs-routes.d.ts +10 -0
  379. package/dist/router/openapi/docs-routes.d.ts.map +1 -0
  380. package/dist/router/openapi/docs-routes.js +157 -0
  381. package/dist/router/openapi/docs-routes.js.map +1 -0
  382. package/dist/router/openapi/document.d.ts +151 -0
  383. package/dist/router/openapi/document.d.ts.map +1 -0
  384. package/dist/router/openapi/document.js +471 -0
  385. package/dist/router/openapi/document.js.map +1 -0
  386. package/dist/router/openapi/index.d.ts +7 -0
  387. package/dist/router/openapi/index.d.ts.map +1 -0
  388. package/dist/router/openapi/index.js +7 -0
  389. package/dist/router/openapi/index.js.map +1 -0
  390. package/dist/router/openapi/repository-document.d.ts +30 -0
  391. package/dist/router/openapi/repository-document.d.ts.map +1 -0
  392. package/dist/router/openapi/repository-document.js +812 -0
  393. package/dist/router/openapi/repository-document.js.map +1 -0
  394. package/dist/router/openapi/schema.d.ts +30 -0
  395. package/dist/router/openapi/schema.d.ts.map +1 -0
  396. package/dist/router/openapi/schema.js +301 -0
  397. package/dist/router/openapi/schema.js.map +1 -0
  398. package/dist/router/openapi/service.d.ts +101 -0
  399. package/dist/router/openapi/service.d.ts.map +1 -0
  400. package/dist/router/openapi/service.js +162 -0
  401. package/dist/router/openapi/service.js.map +1 -0
  402. package/dist/router/repository-constraints.d.ts +15 -0
  403. package/dist/router/repository-constraints.d.ts.map +1 -0
  404. package/dist/router/repository-constraints.js +14 -0
  405. package/dist/router/repository-constraints.js.map +1 -0
  406. package/dist/router/repository-routes.d.ts +90 -0
  407. package/dist/router/repository-routes.d.ts.map +1 -0
  408. package/dist/router/repository-routes.js +452 -0
  409. package/dist/router/repository-routes.js.map +1 -0
  410. package/dist/router/routes.d.ts +24 -0
  411. package/dist/router/routes.d.ts.map +1 -0
  412. package/dist/router/routes.js +19 -0
  413. package/dist/router/routes.js.map +1 -0
  414. package/dist/runtime/application.d.ts +8 -0
  415. package/dist/runtime/application.d.ts.map +1 -0
  416. package/dist/runtime/application.js +22 -0
  417. package/dist/runtime/application.js.map +1 -0
  418. package/dist/runtime/definition.d.ts +50 -0
  419. package/dist/runtime/definition.d.ts.map +1 -0
  420. package/dist/runtime/definition.js +82 -0
  421. package/dist/runtime/definition.js.map +1 -0
  422. package/dist/runtime/index.d.ts +8 -0
  423. package/dist/runtime/index.d.ts.map +1 -0
  424. package/dist/runtime/index.js +7 -0
  425. package/dist/runtime/index.js.map +1 -0
  426. package/dist/runtime/lifecycle.d.ts +29 -0
  427. package/dist/runtime/lifecycle.d.ts.map +1 -0
  428. package/dist/runtime/lifecycle.js +104 -0
  429. package/dist/runtime/lifecycle.js.map +1 -0
  430. package/dist/runtime/mount.d.ts +4 -0
  431. package/dist/runtime/mount.d.ts.map +1 -0
  432. package/dist/runtime/mount.js +47 -0
  433. package/dist/runtime/mount.js.map +1 -0
  434. package/dist/runtime/scope.d.ts +29 -0
  435. package/dist/runtime/scope.d.ts.map +1 -0
  436. package/dist/runtime/scope.js +48 -0
  437. package/dist/runtime/scope.js.map +1 -0
  438. package/dist/runtime/types.d.ts +55 -0
  439. package/dist/runtime/types.d.ts.map +1 -0
  440. package/dist/runtime/types.js +2 -0
  441. package/dist/runtime/types.js.map +1 -0
  442. package/dist/sample-data/index.d.ts +3 -0
  443. package/dist/sample-data/index.d.ts.map +1 -0
  444. package/dist/sample-data/index.js +3 -0
  445. package/dist/sample-data/index.js.map +1 -0
  446. package/dist/sample-data/registry.d.ts +4 -0
  447. package/dist/sample-data/registry.d.ts.map +1 -0
  448. package/dist/sample-data/registry.js +74 -0
  449. package/dist/sample-data/registry.js.map +1 -0
  450. package/dist/sample-data/token.d.ts +64 -0
  451. package/dist/sample-data/token.d.ts.map +1 -0
  452. package/dist/sample-data/token.js +7 -0
  453. package/dist/sample-data/token.js.map +1 -0
  454. package/dist/secrets/config.d.ts +15 -0
  455. package/dist/secrets/config.d.ts.map +1 -0
  456. package/dist/secrets/config.js +43 -0
  457. package/dist/secrets/config.js.map +1 -0
  458. package/dist/secrets/index.d.ts +6 -0
  459. package/dist/secrets/index.d.ts.map +1 -0
  460. package/dist/secrets/index.js +6 -0
  461. package/dist/secrets/index.js.map +1 -0
  462. package/dist/secrets/provider.d.ts +7 -0
  463. package/dist/secrets/provider.d.ts.map +1 -0
  464. package/dist/secrets/provider.js +10 -0
  465. package/dist/secrets/provider.js.map +1 -0
  466. package/dist/secrets/service.d.ts +64 -0
  467. package/dist/secrets/service.d.ts.map +1 -0
  468. package/dist/secrets/service.js +47 -0
  469. package/dist/secrets/service.js.map +1 -0
  470. package/dist/secrets/table-store.d.ts +34 -0
  471. package/dist/secrets/table-store.d.ts.map +1 -0
  472. package/dist/secrets/table-store.js +118 -0
  473. package/dist/secrets/table-store.js.map +1 -0
  474. package/dist/secrets/token.d.ts +4 -0
  475. package/dist/secrets/token.d.ts.map +1 -0
  476. package/dist/secrets/token.js +3 -0
  477. package/dist/secrets/token.js.map +1 -0
  478. package/dist/session/config.d.ts +10 -0
  479. package/dist/session/config.d.ts.map +1 -0
  480. package/dist/session/config.js +2 -0
  481. package/dist/session/config.js.map +1 -0
  482. package/dist/session/index.d.ts +4 -0
  483. package/dist/session/index.d.ts.map +1 -0
  484. package/dist/session/index.js +4 -0
  485. package/dist/session/index.js.map +1 -0
  486. package/dist/session/provider.d.ts +26 -0
  487. package/dist/session/provider.d.ts.map +1 -0
  488. package/dist/session/provider.js +69 -0
  489. package/dist/session/provider.js.map +1 -0
  490. package/dist/session/token.d.ts +4 -0
  491. package/dist/session/token.d.ts.map +1 -0
  492. package/dist/session/token.js +3 -0
  493. package/dist/session/token.js.map +1 -0
  494. package/dist/spa/config.d.ts +5 -0
  495. package/dist/spa/config.d.ts.map +1 -0
  496. package/dist/spa/config.js +2 -0
  497. package/dist/spa/config.js.map +1 -0
  498. package/dist/spa/content-types.d.ts +2 -0
  499. package/dist/spa/content-types.d.ts.map +1 -0
  500. package/dist/spa/content-types.js +25 -0
  501. package/dist/spa/content-types.js.map +1 -0
  502. package/dist/spa/index.d.ts +9 -0
  503. package/dist/spa/index.d.ts.map +1 -0
  504. package/dist/spa/index.js +9 -0
  505. package/dist/spa/index.js.map +1 -0
  506. package/dist/spa/provider.d.ts +13 -0
  507. package/dist/spa/provider.d.ts.map +1 -0
  508. package/dist/spa/provider.js +90 -0
  509. package/dist/spa/provider.js.map +1 -0
  510. package/dist/spa/routes.d.ts +4 -0
  511. package/dist/spa/routes.d.ts.map +1 -0
  512. package/dist/spa/routes.js +58 -0
  513. package/dist/spa/routes.js.map +1 -0
  514. package/dist/spa/runtime-html.d.ts +14 -0
  515. package/dist/spa/runtime-html.d.ts.map +1 -0
  516. package/dist/spa/runtime-html.js +85 -0
  517. package/dist/spa/runtime-html.js.map +1 -0
  518. package/dist/spa/serve-index.d.ts +9 -0
  519. package/dist/spa/serve-index.d.ts.map +1 -0
  520. package/dist/spa/serve-index.js +12 -0
  521. package/dist/spa/serve-index.js.map +1 -0
  522. package/dist/spa/static-assets.d.ts +7 -0
  523. package/dist/spa/static-assets.d.ts.map +1 -0
  524. package/dist/spa/static-assets.js +90 -0
  525. package/dist/spa/static-assets.js.map +1 -0
  526. package/dist/spa/types.d.ts +23 -0
  527. package/dist/spa/types.d.ts.map +1 -0
  528. package/dist/spa/types.js +2 -0
  529. package/dist/spa/types.js.map +1 -0
  530. package/dist/support/index.d.ts +4 -0
  531. package/dist/support/index.d.ts.map +1 -0
  532. package/dist/support/index.js +4 -0
  533. package/dist/support/index.js.map +1 -0
  534. package/dist/support/paths.d.ts +10 -0
  535. package/dist/support/paths.d.ts.map +1 -0
  536. package/dist/support/paths.js +25 -0
  537. package/dist/support/paths.js.map +1 -0
  538. package/dist/support/redirects.d.ts +3 -0
  539. package/dist/support/redirects.d.ts.map +1 -0
  540. package/dist/support/redirects.js +48 -0
  541. package/dist/support/redirects.js.map +1 -0
  542. package/dist/support/requests.d.ts +2 -0
  543. package/dist/support/requests.d.ts.map +1 -0
  544. package/dist/support/requests.js +13 -0
  545. package/dist/support/requests.js.map +1 -0
  546. package/dist/swagger-ui/LICENSE +202 -0
  547. package/dist/swagger-ui/NOTICE +2 -0
  548. package/dist/swagger-ui/favicon-16x16.png +0 -0
  549. package/dist/swagger-ui/favicon-32x32.png +0 -0
  550. package/dist/swagger-ui/swagger-ui-bundle.js +2 -0
  551. package/dist/swagger-ui/swagger-ui-bundle.js.LICENSE.txt +129 -0
  552. package/dist/swagger-ui/swagger-ui.css +3 -0
  553. package/dist/websocket.d.ts +61 -0
  554. package/dist/websocket.d.ts.map +1 -0
  555. package/dist/websocket.js +371 -0
  556. package/dist/websocket.js.map +1 -0
  557. package/package.json +193 -12
  558. package/LICENSE +0 -661
  559. package/lib/config/cache.d.ts +0 -2
  560. package/lib/config/cache.js +0 -16
  561. package/lib/config/database.d.ts +0 -3
  562. package/lib/config/database.js +0 -25
  563. package/lib/config/index.d.ts +0 -10
  564. package/lib/config/index.js +0 -20
  565. package/lib/config/logger.d.ts +0 -3
  566. package/lib/config/logger.js +0 -11
  567. package/lib/config/plugins.d.ts +0 -3
  568. package/lib/config/plugins.js +0 -8
  569. package/lib/config/resourcer.d.ts +0 -4
  570. package/lib/config/resourcer.js +0 -10
  571. package/lib/index.d.ts +0 -3
  572. package/lib/index.js +0 -21
  573. package/src/config/cache.ts +0 -5
  574. package/src/config/database.ts +0 -21
  575. package/src/config/index.ts +0 -13
  576. package/src/config/logger.ts +0 -6
  577. package/src/config/plugins.ts +0 -3
  578. package/src/config/resourcer.ts +0 -3
  579. package/src/index.ts +0 -10
package/README.md ADDED
@@ -0,0 +1,295 @@
1
+ # `@nocobase/app-server`
2
+
3
+ ## Ordinary and recurring jobs
4
+
5
+ `JobExecutorServiceProvider` and `jobExecutorServiceToken` from `@nocobase/app-server/jobs` compose both `JobExecutor` and `ScheduleExecutor` from `@nocobase/jobs`. The provider lazily creates one service from the application's `jobs` configuration, application name, storage paths and logger. Owners set up their executors; the provider starts no worker by itself and shuts down all ordinary and schedule executors when the application stops. Repeated shutdown is safe, including executors their owners already stopped.
6
+
7
+ Resolve the existing token and call `getJobExecutor(scope, name?)` for ordinary one-off tasks or `getScheduleExecutor(scope, name?)` for recurring rules. Use the package name as the scope. Both select the named configuration, then `jobs.default`, then built-in single-process memory under `app.paths.storage('jobs')`. An invalid configured default rejects. The namespace defaults to `app.appName`; configure Redis before running multiple instances. Built-in fallback warns outside `develop` and `development`. Omitted, `default`, and unknown configuration names share the executor selected by the same resolved key and scope. Ordinary and Schedule executors remain separate.
8
+
9
+ For ordinary tasks, extend `Job` from `@nocobase/jobs` with a payload-only constructor and an explicit own stable `static jobName`. Register every class with `registerJob` before consumer `setup()`, then submit with `addJob(new JobClass(payload))`. A producer-only executor first calls `setup({ consume: false })`. Submission rejects before setup starts and waits if setup is still in progress. Its receipt confirms backend acceptance, not completion. Each task attempt creates a fresh class instance from a strict JSON payload snapshot; there is no job factory, global service container or dependency injection into this constructor. Executor settings come from the selected configuration, not method overrides.
10
+
11
+ Ordinary task identity is connection or storage path, namespace and scope, like Schedule's, so renaming a configuration key does not strand pending tasks; ordinary tasks still never share a queue or file with Schedule. Ordinary memory snapshots use separate pending-only files and are saved at shutdown; a forced exit can lose new work or replay work completed since the last snapshot. Scheduler plugin behavior is unchanged. See the [jobs package guide](../../libs/jobs/README.md) for examples, persistence identities, local attempt events and cooperative shutdown.
12
+
13
+ ## Queues
14
+
15
+ Background work goes to the jobs service above by default; queues are for what it does not have — delays, priorities, deduplicating job IDs, batches, rate limits and several handlers per message. `QueueServiceProvider` and `queueServiceToken` from `@nocobase/app-server/queue` compose the application's `QueueService` from `@nocobase/queue`. Add the provider before plugin providers with `app.addServiceProvider(QueueServiceProvider, { nodeEnv })`. It creates the service lazily from the `queue` configuration section, with `app.appName` as the default namespace, `app.paths.storage('queue')` for memory state files, and the `queue` logger. `start()` calls `setup()` after every provider has booted, and `shutdown()` releases the service. `AppQueueConfig` types `server/config/queue.ts`.
16
+
17
+ Plugins resolve `queueServiceToken`, register backend factories in `register()`, register handlers with `consumer(queue).consume()` in `boot()`, publish after setup, and await their unregister functions in `shutdown()` before releasing what the handlers use. Without `queue.default`, queues run on the built-in memory configuration, which warns outside `develop` and `development`. A `queue` section in the former `connections`/`worker`/`jobs` format is ignored with one warning. See the [queue package guide](../../libs/queue/README.md) for configuration keys, delivery, retries, cancellation and shutdown.
18
+
19
+ ## Standalone proxy
20
+
21
+ `defineStandaloneServer()` accepts an optional `proxy: ({ application }) => ({ match, target })` factory, evaluated after application startup. `match(pathname)` chooses requests before the application's public base path adapter; `target()` returns the current upstream HTTP(S) origin or `null`. Both `create()` and `start()` configure this boundary. Applications without a proxy retain their normal routing.
22
+
23
+ The listener applies the same rule to HTTP and WebSocket upgrades. It preserves request paths, query strings, public Host, Origin, cookies and authorization, forwards the protocol through `X-Forwarded-Proto`, streams HTTP bodies without decompressing them, and tunnels the upstream WebSocket handshake and connection. Configure the outer reverse proxy to preserve the public Host and set trustworthy protocol headers. Returning `null` yields 503; connection failures yield 502. Reading a target does not start an upstream, and changes apply to new requests and connections. Proxy connections are disposed with the standalone scope; upgraded connections are closed before HTTP shutdown drains.
24
+
25
+ ## Repository API routes
26
+
27
+ `defineRepositoryApiRoutes()` exposes explicitly configured Collection Repository
28
+ methods as API route contributions. Importing or declaring a contribution does
29
+ not resolve services or query the database. The application resolves
30
+ `databaseManagerToken` when it creates the router.
31
+
32
+ ```ts
33
+ import { defineRepositoryApiRoutes } from '@nocobase/app-server/router';
34
+ import path from 'node:path';
35
+ import { defineServerPlugin } from '@nocobase/app-server/plugins';
36
+
37
+ const repositoryRoutes = defineRepositoryApiRoutes({
38
+ repositories: [
39
+ {
40
+ name: 'orders',
41
+ actions: {
42
+ findMany: { maxLimit: 100 },
43
+ findOne: {},
44
+ count: {},
45
+ exists: {},
46
+ createOne: {},
47
+ updateOne: {},
48
+ deleteOne: {},
49
+ aggregate: {},
50
+ groupBy: {},
51
+ },
52
+ policy: {
53
+ read: true,
54
+ create: { scope: true, fields: ['id', 'status'] },
55
+ update: { scope: true, fields: ['status'] },
56
+ delete: true,
57
+ },
58
+ },
59
+ {
60
+ name: 'salesOrders',
61
+ collection: 'orders',
62
+ actions: {
63
+ findMany: { maxLimit: 100 },
64
+ findOne: {},
65
+ },
66
+ policy: { read: true, create: false, update: false, delete: false },
67
+ },
68
+ ],
69
+ });
70
+
71
+ export default defineServerPlugin({
72
+ baseDir: path.resolve(import.meta.dirname, '..'),
73
+ packageName: '@nocobase/app-plugin-orders',
74
+ routes: [repositoryRoutes],
75
+ });
76
+ ```
77
+
78
+ Register the plugin in the target application's existing `server/plugins.ts`.
79
+ Applications may also include the contribution directly in their route array.
80
+ The Collection must already exist; this helper does not create schema or run
81
+ migrations. No repositories are exposed automatically.
82
+
83
+ Each entry requires `name` and an explicit `actions` object. `collection` defaults
84
+ to `name`; optional `connection` selects a configured database connection. Names
85
+ must be unique camelCase path segments, such as `salesOrders`. Empty action objects expose
86
+ nothing. `actions.findMany.maxLimit` defaults to 100 and is both the default and maximum
87
+ `findMany` limit. A limit of zero returns an empty list.
88
+
89
+ Action values must be configuration objects: `{}` enables an endpoint with defaults,
90
+ while an omitted action registers no endpoint. Boolean values and the former action
91
+ arrays are rejected. Unknown configuration keys fail at declaration time. Configure
92
+ pagination only in `actions.findMany.maxLimit`.
93
+
94
+ Every entry declares a `policy`, and it governs every action of that exposure.
95
+ It is a Repository Policy from `@nocobase/db`: `read`, `create`, `update` and
96
+ `delete`, each `true`, `false`, or a rule node. All four are required — an
97
+ exposure with a half-written Policy reads as configured while leaving the rest
98
+ open — so the shape is spelled out rather than defaulted. `buildRepositoryPolicy`
99
+ denies each node you do not mention, which is the compact way to write one.
100
+
101
+ ```ts
102
+ import { buildRepositoryPolicy } from '@nocobase/db';
103
+
104
+ defineRepositoryApiRoutes({
105
+ repositories: [
106
+ {
107
+ name: 'projects',
108
+ policy: buildRepositoryPolicy(
109
+ (policy) =>
110
+ policy
111
+ .read((read) => read.scope(true).fields('id', 'name', 'status'))
112
+ .create((create) =>
113
+ create
114
+ .scope(true)
115
+ .fields('id', 'name', 'status')
116
+ .relation('tasks', (tasks) =>
117
+ tasks.create((task) => task.fields('id', 'title')),
118
+ ),
119
+ )
120
+ .update((update) =>
121
+ update
122
+ .scope(true)
123
+ .fields('name', 'status')
124
+ .relation('tasks', (tasks) =>
125
+ tasks
126
+ .update((task) => task.fields('title'))
127
+ .connect((edge) =>
128
+ edge.through((through) => through.fields('role')),
129
+ ),
130
+ ),
131
+ ),
132
+ // `delete` is not mentioned, so deleting is refused.
133
+ ),
134
+ actions: { findMany: {}, createOne: {}, updateOne: {} },
135
+ },
136
+ ],
137
+ });
138
+ ```
139
+
140
+ A node that is `false` refuses that operation with 403 before the request body
141
+ is read, so an empty or malformed payload is reported as forbidden rather than
142
+ as invalid input. A node with no `fields` is not the same thing: it accepts no
143
+ caller-supplied field while still allowing a create composed entirely of
144
+ `defaults`. Missing `fields` and `relations` each mean "nothing". There are no
145
+ wildcards and no implicit merges. Each nested `create` and `update` carries its
146
+ own field and relation rules, relation `upsert` requires both branches, and
147
+ many-to-many `create`, `connect` and `set` may allow a join payload with
148
+ `through: { fields: ['role'] }`. A `create` node's relations accept only
149
+ `create` and `connect`, because a create performs nothing else.
150
+
151
+ `read` governs reading everywhere it happens, which includes the record a write
152
+ returns: a `select` naming a field outside `read.fields` is refused rather than
153
+ quietly trimmed, and omitting `select` trims the result to what `read` allows.
154
+
155
+ ### Scoping a Policy to the caller
156
+
157
+ Declare `policy` as a function of a principal and pass a resolver:
158
+
159
+ ```ts
160
+ defineRepositoryApiRoutes<Session>({
161
+ principal: (context) => context.get('auth'),
162
+ repositories: [
163
+ {
164
+ name: 'projects',
165
+ policy: (session) => ({
166
+ read: { scope: { ownerId: session.userId }, fields: ['id', 'name'] },
167
+ create: {
168
+ scope: { ownerId: session.userId },
169
+ fields: ['name'],
170
+ defaults: { ownerId: session.userId },
171
+ },
172
+ update: { scope: { ownerId: session.userId }, fields: ['name'] },
173
+ delete: false,
174
+ }),
175
+ actions: { findMany: {}, createOne: {}, updateOne: {} },
176
+ },
177
+ ],
178
+ });
179
+ ```
180
+
181
+ The resolver is the application's: this router installs no authentication and
182
+ does not know how a request carries identity. It runs once per request; a
183
+ resolver returning `undefined` or `null` refuses the request with 403
184
+ `PRINCIPAL_REQUIRED` rather than binding a Policy built from a principal that is
185
+ not there. Declaring a Policy function without a resolver fails at declaration.
186
+
187
+ The two shapes differ in when they are checked. A fixed Policy is normalized
188
+ once, when the routes are defined, so a malformed one fails where it is written.
189
+ A Policy function cannot be — it is evaluated per request, and so is its
190
+ validation. Such a failure is `INVALID_POLICY`, and it propagates to the host
191
+ error handler as a server error rather than a 400, because a Policy is
192
+ server-owned and its mistakes are the server's.
193
+
194
+ `ref()` is rejected at declaration: a reference resolves against a
195
+ `withPolicies` map, and these routes bind one Policy per exposure. Write the
196
+ relation's rules out, or bind the Policies on the connection.
197
+
198
+ HTTP input cannot supply a Policy. `readInput` validates the body key by key
199
+ against a per-action allowlist and neither `policy` nor `scope` appears on any
200
+ of them, so both are refused with 400. `WRITE_FORBIDDEN`,
201
+ `FIELD_WRITE_FORBIDDEN` and `RELATION_WRITE_FORBIDDEN` return 403 with a
202
+ diagnostic `path` and `details`; `READ_FORBIDDEN`, `FIELD_READ_FORBIDDEN`,
203
+ `RELATION_READ_FORBIDDEN` and `SCOPE_VIOLATION` return 403;
204
+ `RECORD_OUTSIDE_SCOPE` returns 409. The entire mutation is checked before any
205
+ write. A scope that simply does not match is a different thing and never reaches
206
+ those codes: it is a 404 or an empty result, so forbidden and absent stay
207
+ indistinguishable.
208
+
209
+ Internal `db.repository()` calls are unaffected — they bind no Policy, as
210
+ before. The method-level `writePolicy` option remains available there for a
211
+ single call; it is no longer part of a route declaration. User authentication
212
+ and database cascades remain separate concerns. See the
213
+ [Policy quick start](../../libs/db/docs/zh-CN/repository/policy-quick-start.md).
214
+
215
+ The application adds `/api` under its deployment mount path. Each action uses `POST /api/{name}/{action}`, such as `POST /api/salesOrders/findMany`, with a JSON object containing Repository options. An exposure name is a camelCase path segment matching `/^[a-z][a-zA-Z0-9]*$/`; `defineRepositoryApiRoutes` throws for any other name, and for `auth`, `healthz` and `swagger`, which the application already answers under `/api`. The name shares the first path segment with plugin namespaces, so do not give an exposure the name of a plugin's namespace.
216
+
217
+ The following is an independent HTTP client's call to those server routes, not code to put in a server route handler. A Node script must supply an absolute API URL; replace the example host and mount path with the target application's actual API base URL and provide whatever authentication that application requires.
218
+
219
+ ```ts
220
+ import { createApiClient } from '@nocobase/api-client';
221
+
222
+ const api = createApiClient({ baseURL: 'https://example.com/main/api' });
223
+ const orders = api.repository<{ id: string; status: string }>('orders');
224
+
225
+ const records = await orders.findMany({
226
+ filter: { status: 'draft' },
227
+ limit: 20,
228
+ });
229
+
230
+ for await (const record of orders.findMany({
231
+ filter: { status: 'draft' },
232
+ limit: 20,
233
+ })) {
234
+ console.log(record);
235
+ }
236
+ const result = await orders.createOne({
237
+ values: { id: 'order-1', status: 'draft' },
238
+ });
239
+ ```
240
+
241
+ Inside a NocoBase React component or custom Hook, obtain this client with `useApiClient()` from `@nocobase/app-client` instead of creating another instance. Non-React application client code can resolve `apiClientToken` through `app.services.resolve(apiClientToken)` or receive the client explicitly. These paths reuse the application's configured `api.baseURL`; the Repository calls are otherwise the same. See [frontend API usage](../app-skills/skills/nocobase-app-development/references/frontend/references/api.md) for examples. Server code accessing its own database uses `db.repository()` as described above.
242
+
243
+ Supported actions are `findMany`, `findOne`, `count`, `exists`, `createOne`,
244
+ `updateOne`, `deleteOne`, `aggregate`, and `groupBy`. Unconfigured names and actions have no route.
245
+ Responses use `{ data: result }`, including complete mutation results (`record`,
246
+ `createdTargets`, and optional `version`). Missing `findOne` records return
247
+ `{ data: null }`, which the client converts to `undefined`. Delete success also
248
+ returns JSON (`{ data: { deleted: true } }`), not an empty 204 response.
249
+
250
+ `findMany()` also supports asynchronous iteration. Awaiting the query sends
251
+ `Accept: application/json` and returns the complete array. Iterating it sends
252
+ `Accept: application/x-ndjson`; the route consumes the database query as an
253
+ `AsyncIterable` and returns framed `record`, `error`, and `end` lines. The same
254
+ query instance supports only one consumption mode. Stopping iteration cancels
255
+ the response and closes the database iterator.
256
+
257
+ The adapter requires `application/json`, limits request bodies to 1 MiB, checks
258
+ the options envelope, and delegates AST, field, and mutation validation to the
259
+ Repository. JSON shorthand and AST inputs are supported; JavaScript builder
260
+ callbacks and client-supplied `context` are not. `idempotencyKey` is currently
261
+ rejected as an unsupported option rather than silently ignored. `ifVersion` is
262
+ forwarded for updates and deletes.
263
+
264
+ Every failure uses the standard error body, `{ error: { code, status, reason, domain, message, requestId } }`, with domain `app`. Input errors return 400 `INVALID_ARGUMENT`, record-not-found errors return 404 `NOT_FOUND`, and version or single-record cardinality conflicts return 409 `ABORTED`, each with the Repository error code as `reason`. Malformed JSON returns 400, non-JSON content returns 415 and oversized bodies return 413 with reason `BODY_TOO_LARGE`, all with status `INVALID_ARGUMENT`. Unexpected and database-configuration errors propagate to the host error handler, which answers an opaque 500 `INTERNAL`.
265
+
266
+ This basic adapter deliberately does **not** install authentication or
267
+ authorization. Configured endpoints accept anonymous requests and have no field
268
+ or record permission filtering. Exposure configuration is not a permission
269
+ policy. No application endpoints are enabled merely by importing this helper.
270
+
271
+ ## Repository aggregate endpoints
272
+
273
+ Add `aggregate` and `groupBy` to an exposure's `actions` to enable
274
+ `POST /{name}/aggregate` and `POST /{name}/groupBy`. Neither endpoint is enabled
275
+ implicitly. As with other Repository actions, the contribution installs no
276
+ access policy: the owning application or plugin must guard its declared routes.
277
+
278
+ `aggregate` accepts a required Aggregate AST and an optional `filter`. `groupBy` also requires a non-empty `by` array and accepts `having` and `sort` over grouped fields and aggregate aliases. Envelopes must be JSON objects; unknown options, callbacks, database context, and pagination are unsupported. Repository validates AST versions, expressions, aliases and field capabilities and answers an invalid input with status 400 in the standard error body, the Repository error code as `reason` and domain `app`. The 1 MiB body limit also applies to both actions.
279
+
280
+ `maxLimit` applies only to `findMany`. Aggregations operate over all matching
281
+ rows, and `groupBy` returns all matching groups without pagination. Responses
282
+ are `{ data: aggregateObject }` or `{ data: groupObjects }`. BigInt scalar results
283
+ become decimal strings without precision loss. See the
284
+ [`@nocobase/api-client` examples](../../libs/api-client/README.md#aggregate-and-grouped-queries)
285
+ for the JSON Aggregate, Filter and Sort AST contracts.
286
+
287
+ ## Plugin resource directories
288
+
289
+ Every Server plugin declares an absolute `baseDir`. In `server/plugin.ts`, use `baseDir: path.resolve(import.meta.dirname, '..')`; the same declaration in `dist/server/plugin.js` points to `dist`. Migrations and Seeds resolve only against that directory. The `queue: { jobs }` contribution is deprecated: it is accepted and ignored, each plugin declaring it is reported once at startup and as a `SERVER_QUEUE_JOBS_DEPRECATED` inspection warning, and `createPluginJobLocations()` returns an empty list. The runtime does not try a second source or build directory and does not infer the choice from `NODE_ENV` or the application command. Source and publish exports must load the matching plugin declaration.
290
+
291
+ `rootDir` remains the package root: the resolver walks upward from `baseDir` to a `package.json` whose name matches `packageName`. Inspection includes both directories and the resolved contribution paths, so an installed copy cannot silently borrow another copy's metadata. Missing `baseDir` is an API error; update all Server plugin declarations when upgrading.
292
+
293
+ ## Request constraints for Repository routes
294
+
295
+ Trusted middleware can call `addRepositoryRequestConstraint(context, { repository, action, collection, connection?, policy })` from `@nocobase/app-server/router`. `policy` is a complete Repository policy; constraints only intersect the route's static or principal-derived policy. All constraints accumulate for the current request, and repository/action/collection/connection mismatches return 403. Request JSON cannot supply a constraint. Without middleware, existing route behavior is unchanged. Business applications should use the authorization plugin's `db.authorizeRepository` instead of resolving grants themselves.
@@ -0,0 +1,128 @@
1
+ import type { AppRuntimeLogging } from '../logging/config.js';
2
+ import { Hono, type ExecutionContext } from 'hono';
3
+ import type { AppConfigAccessor } from '../config/index.js';
4
+ import type { AppPaths } from '../config/index.js';
5
+ import { type AppHttpMiddleware, type AppRouteContribution } from '../router/index.js';
6
+ import { type ApiForwardedRoutes } from '../router/openapi/document.js';
7
+ import { ServiceContainer, type ServiceProviderLifecycle, type ServiceResolver } from '@nocobase/service-provider';
8
+ import type { AppWebSocketHandler } from '@nocobase/app-websocket';
9
+ import { type AppServerPluginLocales, type ResolvedAppServerPlugins } from '../plugins/index.js';
10
+ import type { AppDatabaseTaskContributions } from '../database/types.js';
11
+ export type ApplicationFetchHandler = (request: Request, env?: unknown, executionContext?: ExecutionContext) => Response | Promise<Response>;
12
+ export type ApplicationWebSocketFactory = (container: ServiceResolver) => AppWebSocketHandler;
13
+ export type ApplicationConfig = AppConfigAccessor;
14
+ export interface ApplicationOptions<TConfig extends ApplicationConfig = ApplicationConfig> {
15
+ readonly config: TConfig;
16
+ readonly mode?: 'standalone' | 'embedded';
17
+ readonly paths: AppPaths;
18
+ readonly websocket?: ApplicationWebSocketFactory;
19
+ readonly runtimeLogging?: AppRuntimeLogging;
20
+ /** Where console log records go; see `AppScope.consoleLogStream`. */
21
+ readonly consoleLogStream?: 'stdout' | 'stderr';
22
+ readonly strictStartup?: boolean;
23
+ }
24
+ export type ApplicationServiceProviderConstructor<TConfig extends ApplicationConfig = ApplicationConfig, TArguments extends readonly unknown[] = []> = new (app: Application<TConfig>, ...args: TArguments) => ServiceProviderLifecycle;
25
+ export interface ApplicationRuntimeContributions<TConfig extends ApplicationConfig = ApplicationConfig> {
26
+ readonly plugins: ResolvedAppServerPlugins;
27
+ readonly serviceProviders: readonly ApplicationServiceProviderConstructor<TConfig>[];
28
+ readonly routes: readonly AppRouteContribution<Application<TConfig>>[];
29
+ readonly locales?: AppServerPluginLocales;
30
+ }
31
+ export interface AddRoutesOptions {
32
+ /** Names the contribution, such as a plugin's package name, when start reports a duplicate API route. */
33
+ readonly owner?: string;
34
+ }
35
+ /**
36
+ * A composed NocoBase server application.
37
+ *
38
+ * The HTTP router is an application service, not the application itself.
39
+ * Application owns its resolved config, paths, service container and provider lifecycle,
40
+ * while fetch and websocket form its framework-neutral host boundary.
41
+ */
42
+ export declare class Application<TConfig extends ApplicationConfig = ApplicationConfig> {
43
+ readonly strictStartup: boolean;
44
+ readonly runtimeLogging: AppRuntimeLogging | undefined;
45
+ readonly consoleLogStream: 'stdout' | 'stderr' | undefined;
46
+ readonly config: TConfig;
47
+ readonly mode: 'standalone' | 'embedded';
48
+ readonly paths: AppPaths;
49
+ readonly container: ServiceContainer;
50
+ readonly fetch: ApplicationFetchHandler;
51
+ readonly websocket: AppWebSocketHandler;
52
+ private readonly providerRegistry;
53
+ private readonly websocketFactory;
54
+ private readonly usesDefaultWebSocket;
55
+ private serviceProvidersRegistered;
56
+ private routesRegistered;
57
+ private apiRouterValue;
58
+ private readonly httpMiddleware;
59
+ private readonly routes;
60
+ private startPromise;
61
+ private websocketHandler;
62
+ private appPackageName;
63
+ /** Defaults match an application that registered no server plugins. */
64
+ private databaseTaskContributionsValue;
65
+ private readonly localeContributions;
66
+ private applicationLocales;
67
+ /** Plugins still declaring the removed `queue: { jobs }` contribution. */
68
+ private readonly queueJobPlugins;
69
+ constructor(options: ApplicationOptions<TConfig>);
70
+ get appName(): string;
71
+ get publicBasePath(): string;
72
+ get router(): Hono;
73
+ /**
74
+ * The router every `/api` contribution is mounted into, once the application has started and registered its routes.
75
+ * The API document is generated from it, and `inspectApiRoutes(app)` reads it.
76
+ */
77
+ get apiRouter(): Hono | undefined;
78
+ /**
79
+ * The routes behind runtime dispatchers that plugins registered with the API documentation service, inspected by
80
+ * `inspectApiRoutes(app)` and documented along with `apiRouter`'s own. Empty when the application has no API
81
+ * documentation service.
82
+ */
83
+ get forwardedApiRoutes(): ApiForwardedRoutes;
84
+ addServiceProvider<TArguments extends readonly unknown[]>(Provider: ApplicationServiceProviderConstructor<TConfig, TArguments>, ...args: TArguments): void;
85
+ addServiceProviders(Providers: readonly ApplicationServiceProviderConstructor<TConfig>[]): void;
86
+ get databaseTaskContributions(): AppDatabaseTaskContributions;
87
+ addServerPlugins(serverPlugins: ResolvedAppServerPlugins): void;
88
+ addRuntimeContributions(runtime: ApplicationRuntimeContributions<TConfig>): void;
89
+ addApplicationLocales(locales: AppServerPluginLocales): void;
90
+ /**
91
+ * Adds a route contribution. `owner` names what contributed it, such as a plugin's package name, in the error that a
92
+ * duplicate API route raises at start; contributions added without one are named by their position.
93
+ */
94
+ addRoutes(routes: AppRouteContribution<Application<TConfig>>, options?: AddRoutesOptions): void;
95
+ addHttpMiddleware(middleware: AppHttpMiddleware<Application<TConfig>>): void;
96
+ registerProviders(): void;
97
+ start(): Promise<void>;
98
+ shutdown(): Promise<void>;
99
+ private getWebSocketHandler;
100
+ private startServiceProviders;
101
+ /**
102
+ * Builds the sample data services registered, once every provider is ready, so that a sample may go through any
103
+ * plugin's services. A sample that fails is logged and recorded as skipped rather than failing the start.
104
+ */
105
+ private buildSampleData;
106
+ /** Warns once per plugin whose `queue: { jobs }` contribution is no longer loaded. */
107
+ private reportQueueJobPlugins;
108
+ /**
109
+ * Refuses to start on a configuration that breaks a rule its sections declare. It runs here rather than when the
110
+ * runtime is resolved, so commands that only read the configuration, such as `config init` and `config check`, still
111
+ * load it and can report what is wrong.
112
+ */
113
+ private validateConfig;
114
+ /**
115
+ * Registers each plugin's locale loaders against its package name and brings the runtime up.
116
+ *
117
+ * Only the default language is read here; another one is imported the first time a request asks for it.
118
+ */
119
+ private registerLocales;
120
+ private registerRoutes;
121
+ /**
122
+ * The document's title and version, from the application's `package.json` or else its name, and its server: the
123
+ * public base path the API is served under.
124
+ */
125
+ private describeApiDocument;
126
+ private assertRoutesMutable;
127
+ }
128
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"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"}