@farm.js/core 0.1.0-beta.16 → 0.1.0-beta.17

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 (215) hide show
  1. package/dist/after.d.mts +25 -0
  2. package/dist/after.d.ts +25 -0
  3. package/dist/agent-runtime.d.mts +96 -0
  4. package/dist/agent-runtime.d.ts +96 -0
  5. package/dist/api/route-manager.d.mts +66 -0
  6. package/dist/api/route-manager.d.ts +66 -0
  7. package/dist/api/runtime.d.mts +3 -0
  8. package/dist/api/runtime.d.ts +3 -0
  9. package/dist/api.d.mts +48 -0
  10. package/dist/api.d.ts +48 -0
  11. package/dist/app-B0tE1I3o.d.ts +306 -0
  12. package/dist/app-Dv2JJb7X.d.mts +306 -0
  13. package/dist/app-markdown.d.mts +24 -0
  14. package/dist/app-markdown.d.ts +24 -0
  15. package/dist/cache.d.mts +192 -0
  16. package/dist/cache.d.ts +192 -0
  17. package/dist/{chunk-AN3PQVKH.mjs → chunk-2FLBZFPG.mjs} +9 -7
  18. package/dist/chunk-2FLBZFPG.mjs.map +1 -0
  19. package/dist/chunk-E257KFBU.mjs +227 -0
  20. package/dist/chunk-E257KFBU.mjs.map +1 -0
  21. package/dist/{chunk-SLDBGSC3.mjs → chunk-JAEAE27K.mjs} +2 -2
  22. package/dist/{chunk-T2KL7VEL.mjs → chunk-PZXBQKCH.mjs} +13 -4
  23. package/dist/chunk-PZXBQKCH.mjs.map +1 -0
  24. package/dist/{chunk-UXUAWNO5.mjs → chunk-RIXKJPGI.mjs} +117 -55
  25. package/dist/chunk-RIXKJPGI.mjs.map +1 -0
  26. package/dist/{chunk-OSWV5IJB.mjs → chunk-T2M5QANG.mjs} +32 -9
  27. package/dist/chunk-T2M5QANG.mjs.map +1 -0
  28. package/dist/{chunk-BWJC5ZOD.mjs → chunk-VFDBC3W7.mjs} +2 -2
  29. package/dist/{chunk-BWJC5ZOD.mjs.map → chunk-VFDBC3W7.mjs.map} +1 -1
  30. package/dist/chunk-recovery-lnQFzcQP.d.mts +26 -0
  31. package/dist/chunk-recovery-lnQFzcQP.d.ts +26 -0
  32. package/dist/client-BT1mFQas.d.mts +447 -0
  33. package/dist/client-Nn0q4eO4.d.ts +447 -0
  34. package/dist/client-cache-CIlyBlmx.d.ts +6 -0
  35. package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
  36. package/dist/client-plugins-278AvYHE.d.mts +2021 -0
  37. package/dist/client-plugins-CTQAkr7R.d.ts +2021 -0
  38. package/dist/client-plugins.d.mts +24 -0
  39. package/dist/client-plugins.d.ts +24 -0
  40. package/dist/client.d.mts +452 -0
  41. package/dist/client.d.ts +452 -0
  42. package/dist/config.d.mts +31 -0
  43. package/dist/config.d.ts +31 -0
  44. package/dist/cron.d.mts +78 -0
  45. package/dist/cron.d.ts +78 -0
  46. package/dist/deferred.d.mts +42 -0
  47. package/dist/deferred.d.ts +42 -0
  48. package/dist/deployment.d.mts +36 -0
  49. package/dist/deployment.d.ts +36 -0
  50. package/dist/{devtools-E4YNCY5J.mjs → devtools-K2ERKGNI.mjs} +3 -3
  51. package/dist/docs.cjs.map +1 -1
  52. package/dist/docs.d.mts +80 -0
  53. package/dist/docs.d.ts +80 -0
  54. package/dist/docs.mjs +3 -3
  55. package/dist/env-types.d.mts +12 -0
  56. package/dist/env-types.d.ts +12 -0
  57. package/dist/env.d.mts +45 -0
  58. package/dist/env.d.ts +45 -0
  59. package/dist/environment/vite.d.mts +22 -0
  60. package/dist/environment/vite.d.ts +22 -0
  61. package/dist/environment.d.mts +18 -0
  62. package/dist/environment.d.ts +18 -0
  63. package/dist/font.d.mts +95 -0
  64. package/dist/font.d.ts +95 -0
  65. package/dist/headers.d.mts +22 -0
  66. package/dist/headers.d.ts +22 -0
  67. package/dist/i18n/client.d.mts +32 -0
  68. package/dist/i18n/client.d.ts +32 -0
  69. package/dist/i18n/index.d.mts +20 -0
  70. package/dist/i18n/index.d.ts +20 -0
  71. package/dist/i18n/server.d.mts +30 -0
  72. package/dist/i18n/server.d.ts +30 -0
  73. package/dist/image/server.d.mts +37 -0
  74. package/dist/image/server.d.ts +37 -0
  75. package/dist/image/sharp.d.mts +7 -0
  76. package/dist/image/sharp.d.ts +7 -0
  77. package/dist/image-config-Duob7wER.d.mts +50 -0
  78. package/dist/image-config-Duob7wER.d.ts +50 -0
  79. package/dist/image.d.mts +39 -0
  80. package/dist/image.d.ts +39 -0
  81. package/dist/index.cjs +293 -58
  82. package/dist/index.cjs.map +1 -1
  83. package/dist/index.d.mts +477 -0
  84. package/dist/index.d.ts +477 -0
  85. package/dist/index.mjs +22 -18
  86. package/dist/index.mjs.map +1 -1
  87. package/dist/integration-api-CHT2OKAf.d.mts +93 -0
  88. package/dist/integration-api-CHT2OKAf.d.ts +93 -0
  89. package/dist/integrations.d.mts +24 -0
  90. package/dist/integrations.d.ts +24 -0
  91. package/dist/internal/build-runtime.cjs +306 -137
  92. package/dist/internal/build-runtime.cjs.map +1 -1
  93. package/dist/internal/build-runtime.d.mts +41 -0
  94. package/dist/internal/build-runtime.d.ts +41 -0
  95. package/dist/internal/build-runtime.mjs +7 -7
  96. package/dist/internal/client-runtime.d.mts +17 -0
  97. package/dist/internal/client-runtime.d.ts +17 -0
  98. package/dist/internal/config-runtime.cjs +140 -1
  99. package/dist/internal/config-runtime.cjs.map +1 -1
  100. package/dist/internal/config-runtime.d.mts +41 -0
  101. package/dist/internal/config-runtime.d.ts +41 -0
  102. package/dist/internal/config-runtime.mjs +2 -2
  103. package/dist/internal/metadata-image-runtime.d.mts +25 -0
  104. package/dist/internal/metadata-image-runtime.d.ts +25 -0
  105. package/dist/internal/production-node-env.d.mts +12 -0
  106. package/dist/internal/production-node-env.d.ts +12 -0
  107. package/dist/internal/production-runtime.d.mts +44 -0
  108. package/dist/internal/production-runtime.d.ts +44 -0
  109. package/dist/island-CfGru1MO.d.mts +9 -0
  110. package/dist/island-CfGru1MO.d.ts +9 -0
  111. package/dist/markdown.d.mts +60 -0
  112. package/dist/markdown.d.ts +60 -0
  113. package/dist/metadata-DmCudMw_.d.mts +22 -0
  114. package/dist/metadata-xghtOlbR.d.ts +22 -0
  115. package/dist/middleware.cjs +116 -98
  116. package/dist/middleware.cjs.map +1 -1
  117. package/dist/middleware.d.mts +171 -0
  118. package/dist/middleware.d.ts +171 -0
  119. package/dist/middleware.mjs +5 -2
  120. package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
  121. package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
  122. package/dist/navigation.d.mts +14 -0
  123. package/dist/navigation.d.ts +14 -0
  124. package/dist/observability.d.mts +335 -0
  125. package/dist/observability.d.ts +335 -0
  126. package/dist/params-BALtrRim.d.ts +15 -0
  127. package/dist/params-ry-lxqmy.d.mts +15 -0
  128. package/dist/plugin-BJDf43dc.d.mts +165 -0
  129. package/dist/plugin-BJDf43dc.d.ts +165 -0
  130. package/dist/plugin.cjs +132 -0
  131. package/dist/plugin.cjs.map +1 -1
  132. package/dist/plugin.d.mts +24 -0
  133. package/dist/plugin.d.ts +24 -0
  134. package/dist/plugin.mjs +4 -4
  135. package/dist/production-runtime-BLxSv9cU.d.ts +79 -0
  136. package/dist/production-runtime-DFN2_RXq.d.mts +79 -0
  137. package/dist/query/client.d.mts +61 -0
  138. package/dist/query/client.d.ts +61 -0
  139. package/dist/query/index.d.mts +90 -0
  140. package/dist/query/index.d.ts +90 -0
  141. package/dist/query/parsers.d.mts +25 -0
  142. package/dist/query/parsers.d.ts +25 -0
  143. package/dist/query/server.d.mts +55 -0
  144. package/dist/query/server.d.ts +55 -0
  145. package/dist/request-Cq5d6qmE.d.mts +6 -0
  146. package/dist/request-LoxDW3lp.d.ts +6 -0
  147. package/dist/request.d.mts +25 -0
  148. package/dist/request.d.ts +25 -0
  149. package/dist/resolver-DJqjLMg_.d.mts +14 -0
  150. package/dist/resolver-IH4RmPEl.d.ts +14 -0
  151. package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
  152. package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
  153. package/dist/router.d.mts +36 -0
  154. package/dist/router.d.ts +36 -0
  155. package/dist/routes.d.mts +226 -0
  156. package/dist/routes.d.ts +226 -0
  157. package/dist/runtime-BA9TOSu1.d.mts +231 -0
  158. package/dist/runtime-Cxpq6xZN.d.mts +27 -0
  159. package/dist/runtime-DTAQ2HDv.d.ts +231 -0
  160. package/dist/runtime-bv63eUiO.d.ts +27 -0
  161. package/dist/server-action-security.d.mts +45 -0
  162. package/dist/server-action-security.d.ts +45 -0
  163. package/dist/server-fn-client.d.mts +33 -0
  164. package/dist/server-fn-client.d.ts +33 -0
  165. package/dist/server-fn-error-DDh14a0V.d.mts +26 -0
  166. package/dist/server-fn-error-DDh14a0V.d.ts +26 -0
  167. package/dist/server-fn.d.mts +121 -0
  168. package/dist/server-fn.d.ts +121 -0
  169. package/dist/server-plugins.d.mts +57 -0
  170. package/dist/server-plugins.d.ts +57 -0
  171. package/dist/server-query-client.d.mts +51 -0
  172. package/dist/server-query-client.d.ts +51 -0
  173. package/dist/server-query.d.mts +37 -0
  174. package/dist/server-query.d.ts +37 -0
  175. package/dist/server.cjs +170 -3
  176. package/dist/server.cjs.map +1 -1
  177. package/dist/server.d.mts +51 -0
  178. package/dist/server.d.ts +51 -0
  179. package/dist/server.mjs +6 -6
  180. package/dist/storage.d.mts +52 -0
  181. package/dist/storage.d.ts +52 -0
  182. package/dist/testing.d.mts +103 -0
  183. package/dist/testing.d.ts +103 -0
  184. package/dist/transport-BmbGTXA5.d.mts +49 -0
  185. package/dist/transport-BmbGTXA5.d.ts +49 -0
  186. package/dist/types-BMxWr97v.d.mts +81 -0
  187. package/dist/types-BMxWr97v.d.ts +81 -0
  188. package/dist/types-D1A6-XvH.d.mts +73 -0
  189. package/dist/types-D1A6-XvH.d.ts +73 -0
  190. package/dist/types-DTzm4TCl.d.mts +78 -0
  191. package/dist/types-DTzm4TCl.d.ts +78 -0
  192. package/dist/utils-B6GaYNJL.d.ts +23 -0
  193. package/dist/utils-CKSHiip6.d.mts +23 -0
  194. package/dist/version.cjs +1 -1
  195. package/dist/version.cjs.map +1 -1
  196. package/dist/version.d.mts +3 -0
  197. package/dist/version.d.ts +3 -0
  198. package/dist/version.mjs +1 -1
  199. package/dist/vite.cjs +140 -2
  200. package/dist/vite.cjs.map +1 -1
  201. package/dist/vite.d.mts +24 -0
  202. package/dist/vite.d.ts +24 -0
  203. package/dist/vite.mjs +4 -4
  204. package/dist/workflows.d.mts +110 -0
  205. package/dist/workflows.d.ts +110 -0
  206. package/package.json +1 -1
  207. package/types/middleware.d.ts +36 -11
  208. package/dist/chunk-AN3PQVKH.mjs.map +0 -1
  209. package/dist/chunk-I4CUBGVF.mjs +0 -93
  210. package/dist/chunk-I4CUBGVF.mjs.map +0 -1
  211. package/dist/chunk-OSWV5IJB.mjs.map +0 -1
  212. package/dist/chunk-T2KL7VEL.mjs.map +0 -1
  213. package/dist/chunk-UXUAWNO5.mjs.map +0 -1
  214. /package/dist/{chunk-SLDBGSC3.mjs.map → chunk-JAEAE27K.mjs.map} +0 -0
  215. /package/dist/{devtools-E4YNCY5J.mjs.map → devtools-K2ERKGNI.mjs.map} +0 -0
@@ -0,0 +1,24 @@
1
+ import 'vite';
2
+ export { d as defineConfig, ds as farmI18nClientBridgePlugin, f as farmPlugin, dt as rewriteEarlySsrRelativeImports } from './client-plugins-278AvYHE.mjs';
3
+ import './plugin-BJDf43dc.mjs';
4
+ import 'react';
5
+ import 'http';
6
+ import './types-D1A6-XvH.mjs';
7
+ import 'db0';
8
+ import 'unstorage';
9
+ import './integration-api-CHT2OKAf.mjs';
10
+ import '@farming-labs/orm';
11
+ import './types-DTzm4TCl.mjs';
12
+ import '@farming-labs/docs';
13
+ import './markdown.mjs';
14
+ import './observability.mjs';
15
+ import './workflows.mjs';
16
+ import './cron.mjs';
17
+ import './env.mjs';
18
+ import './server-action-security.mjs';
19
+ import './server-fn-error-DDh14a0V.mjs';
20
+ import './image-config-Duob7wER.mjs';
21
+ import './types-BMxWr97v.mjs';
22
+ import './cache.mjs';
23
+ import './route-runtime-DoOHzCAD.mjs';
24
+ import './font.mjs';
package/dist/vite.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import 'vite';
2
+ export { d as defineConfig, ds as farmI18nClientBridgePlugin, f as farmPlugin, dt as rewriteEarlySsrRelativeImports } from './client-plugins-CTQAkr7R.js';
3
+ import './plugin-BJDf43dc.js';
4
+ import 'react';
5
+ import 'http';
6
+ import './types-D1A6-XvH.js';
7
+ import 'db0';
8
+ import 'unstorage';
9
+ import './integration-api-CHT2OKAf.js';
10
+ import '@farming-labs/orm';
11
+ import './types-DTzm4TCl.js';
12
+ import '@farming-labs/docs';
13
+ import './markdown.js';
14
+ import './observability.js';
15
+ import './workflows.js';
16
+ import './cron.js';
17
+ import './env.js';
18
+ import './server-action-security.js';
19
+ import './server-fn-error-DDh14a0V.js';
20
+ import './image-config-Duob7wER.js';
21
+ import './types-BMxWr97v.js';
22
+ import './cache.js';
23
+ import './route-runtime-DoOHzCAD.js';
24
+ import './font.js';
package/dist/vite.mjs CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  farmI18nClientBridgePlugin,
4
4
  farmPlugin,
5
5
  rewriteEarlySsrRelativeImports
6
- } from "./chunk-OSWV5IJB.mjs";
6
+ } from "./chunk-T2M5QANG.mjs";
7
7
  import "./chunk-LGHEOHBU.mjs";
8
8
  import "./chunk-FRPWCMMG.mjs";
9
9
  import "./chunk-53MVSX3R.mjs";
@@ -15,7 +15,7 @@ import "./chunk-USWZZUEH.mjs";
15
15
  import "./chunk-XMFTIVJH.mjs";
16
16
  import "./chunk-7HO6AEOP.mjs";
17
17
  import "./chunk-USLFXFFH.mjs";
18
- import "./chunk-I4CUBGVF.mjs";
18
+ import "./chunk-E257KFBU.mjs";
19
19
  import "./chunk-7MABZJIM.mjs";
20
20
  import "./chunk-YW7OBE6Q.mjs";
21
21
  import "./chunk-74YTBPTY.mjs";
@@ -27,9 +27,9 @@ import "./chunk-7FBJLMQH.mjs";
27
27
  import "./chunk-XIVV5IWN.mjs";
28
28
  import "./chunk-GXASWWJU.mjs";
29
29
  import "./chunk-K4667E2Q.mjs";
30
+ import "./chunk-T4QJQK76.mjs";
30
31
  import "./chunk-MIUW47JX.mjs";
31
32
  import "./chunk-P7QDS5AT.mjs";
32
- import "./chunk-T4QJQK76.mjs";
33
33
  import "./chunk-E6EPN5BT.mjs";
34
34
  import "./chunk-QGOHVJ6J.mjs";
35
35
  import "./chunk-ARRYKOI5.mjs";
@@ -43,7 +43,7 @@ import "./chunk-J4FNJ5IU.mjs";
43
43
  import "./chunk-HMRFYJK6.mjs";
44
44
  import "./chunk-RHIFZZUI.mjs";
45
45
  import "./chunk-LM2YNO4U.mjs";
46
- import "./chunk-BWJC5ZOD.mjs";
46
+ import "./chunk-VFDBC3W7.mjs";
47
47
  import "./chunk-B3FFOIWS.mjs";
48
48
  import "./chunk-ITN462YM.mjs";
49
49
  import "./chunk-3HIVDX7J.mjs";
@@ -0,0 +1,110 @@
1
+ type FarmWorkflowSchedule = string | string[];
2
+ interface FarmWorkflowsUserConfig {
3
+ /** Enable or disable Farm workflow discovery. Enabled by default. */
4
+ enabled?: boolean;
5
+ /** Directory or directories to scan for workflow modules. */
6
+ dir?: string | string[];
7
+ /** Alias for dir. */
8
+ dirs?: string[];
9
+ /** HTTP route used for manual and URL-based cron invocation. */
10
+ route?: string;
11
+ /** Environment variable that stores the optional runner secret. */
12
+ secretEnv?: string;
13
+ /** Inline runner secret. Prefer secretEnv for deployed apps. */
14
+ secret?: string;
15
+ }
16
+ interface FarmWorkflowsResolvedConfig {
17
+ enabled: boolean;
18
+ dirs: string[];
19
+ route: string;
20
+ secretEnv: string;
21
+ secret?: string;
22
+ }
23
+ interface FarmWorkflowLogger {
24
+ info: (...args: unknown[]) => void;
25
+ warn: (...args: unknown[]) => void;
26
+ error: (...args: unknown[]) => void;
27
+ }
28
+ interface FarmWorkflowRunContext<TPayload = unknown> {
29
+ id: string;
30
+ name: string;
31
+ payload: TPayload;
32
+ scheduledTime?: number | string;
33
+ request?: Request;
34
+ event?: unknown;
35
+ env: Record<string, string | undefined>;
36
+ data: Map<string, unknown>;
37
+ log: FarmWorkflowLogger;
38
+ }
39
+ interface FarmWorkflowDefinition<TPayload = unknown, TResult = unknown> {
40
+ kind?: "farm-workflow";
41
+ id?: string;
42
+ description?: string;
43
+ schedule?: FarmWorkflowSchedule;
44
+ timezone?: string;
45
+ run: (ctx: FarmWorkflowRunContext<TPayload>) => TResult | Promise<TResult>;
46
+ }
47
+ interface FarmCronDefinition<TPayload = unknown, TResult = unknown> extends FarmWorkflowDefinition<TPayload, TResult> {
48
+ schedule: FarmWorkflowSchedule;
49
+ }
50
+ interface FarmDiscoveredWorkflow {
51
+ id: string;
52
+ filePath: string;
53
+ description?: string;
54
+ schedule: string[];
55
+ timezone?: string;
56
+ routePath: string;
57
+ }
58
+ interface PreparedFarmWorkflows {
59
+ workflows: FarmDiscoveredWorkflow[];
60
+ tasks: Record<string, {
61
+ handler: string;
62
+ description: string;
63
+ }>;
64
+ scheduledTasks: Record<string, string | string[]>;
65
+ handlerPath?: string;
66
+ manifestPath?: string;
67
+ }
68
+ interface FarmWorkflowHTTPHandlerOptions {
69
+ workflows: FarmDiscoveredWorkflow[];
70
+ config: FarmWorkflowsResolvedConfig;
71
+ loadModule: (workflow: FarmDiscoveredWorkflow) => Promise<Record<string, any>>;
72
+ }
73
+ declare const DEFAULT_FARM_WORKFLOW_DIRS: string[];
74
+ declare const DEFAULT_FARM_WORKFLOW_ROUTE = "/api/_farm/workflows";
75
+ declare const DEFAULT_FARM_WORKFLOW_SECRET_ENV = "CRON_SECRET";
76
+ declare function defineWorkflow<const TPayload = unknown, TResult = unknown>(definition: FarmWorkflowDefinition<TPayload, TResult>): FarmWorkflowDefinition<TPayload, TResult>;
77
+ declare function defineTask<const TPayload = unknown, TResult = unknown>(definition: FarmWorkflowDefinition<TPayload, TResult>): FarmWorkflowDefinition<TPayload, TResult>;
78
+ /**
79
+ * @deprecated Configure `cron` in `farm.config.ts` and point it at an API route.
80
+ */
81
+ declare function defineCron<const TPayload = unknown, TResult = unknown>(definition: FarmCronDefinition<TPayload, TResult>): FarmCronDefinition<TPayload, TResult>;
82
+ declare function resolveWorkflowsConfig(workflows: FarmWorkflowsUserConfig | boolean | undefined): FarmWorkflowsResolvedConfig;
83
+ declare function discoverFarmWorkflows(config: {
84
+ root?: string;
85
+ workflows?: FarmWorkflowsResolvedConfig | FarmWorkflowsUserConfig | boolean;
86
+ }, options?: {
87
+ loadModule?: (filePath: string) => Promise<Record<string, any>>;
88
+ }): Promise<FarmDiscoveredWorkflow[]>;
89
+ declare function createFarmWorkflowRequestHandler(options: FarmWorkflowHTTPHandlerOptions): (request: Request) => Promise<Response | null>;
90
+ declare function runFarmWorkflowModule(module: Record<string, any>, context: {
91
+ id: string;
92
+ name?: string;
93
+ payload?: unknown;
94
+ scheduledTime?: number | string;
95
+ request?: Request;
96
+ event?: unknown;
97
+ env?: Record<string, string | undefined>;
98
+ }): Promise<unknown>;
99
+ declare function prepareFarmWorkflowsForNitro(config: {
100
+ root?: string;
101
+ distDir?: string;
102
+ workflows?: FarmWorkflowsResolvedConfig | FarmWorkflowsUserConfig | boolean;
103
+ }): Promise<PreparedFarmWorkflows>;
104
+ declare function createFarmWorkflowVercelCrons(workflows: FarmDiscoveredWorkflow[]): Array<{
105
+ path: string;
106
+ schedule: string;
107
+ }>;
108
+ declare function applyFarmWorkflowVercelCrons(vercelConfig: Record<string, any>, workflows: FarmDiscoveredWorkflow[]): Record<string, any>;
109
+
110
+ export { DEFAULT_FARM_WORKFLOW_DIRS, DEFAULT_FARM_WORKFLOW_ROUTE, DEFAULT_FARM_WORKFLOW_SECRET_ENV, type FarmCronDefinition, type FarmDiscoveredWorkflow, type FarmWorkflowDefinition, type FarmWorkflowHTTPHandlerOptions, type FarmWorkflowLogger, type FarmWorkflowRunContext, type FarmWorkflowSchedule, type FarmWorkflowsResolvedConfig, type FarmWorkflowsUserConfig, type PreparedFarmWorkflows, applyFarmWorkflowVercelCrons, createFarmWorkflowRequestHandler, createFarmWorkflowVercelCrons, defineCron, defineTask, defineWorkflow, discoverFarmWorkflows, prepareFarmWorkflowsForNitro, resolveWorkflowsConfig, runFarmWorkflowModule };
@@ -0,0 +1,110 @@
1
+ type FarmWorkflowSchedule = string | string[];
2
+ interface FarmWorkflowsUserConfig {
3
+ /** Enable or disable Farm workflow discovery. Enabled by default. */
4
+ enabled?: boolean;
5
+ /** Directory or directories to scan for workflow modules. */
6
+ dir?: string | string[];
7
+ /** Alias for dir. */
8
+ dirs?: string[];
9
+ /** HTTP route used for manual and URL-based cron invocation. */
10
+ route?: string;
11
+ /** Environment variable that stores the optional runner secret. */
12
+ secretEnv?: string;
13
+ /** Inline runner secret. Prefer secretEnv for deployed apps. */
14
+ secret?: string;
15
+ }
16
+ interface FarmWorkflowsResolvedConfig {
17
+ enabled: boolean;
18
+ dirs: string[];
19
+ route: string;
20
+ secretEnv: string;
21
+ secret?: string;
22
+ }
23
+ interface FarmWorkflowLogger {
24
+ info: (...args: unknown[]) => void;
25
+ warn: (...args: unknown[]) => void;
26
+ error: (...args: unknown[]) => void;
27
+ }
28
+ interface FarmWorkflowRunContext<TPayload = unknown> {
29
+ id: string;
30
+ name: string;
31
+ payload: TPayload;
32
+ scheduledTime?: number | string;
33
+ request?: Request;
34
+ event?: unknown;
35
+ env: Record<string, string | undefined>;
36
+ data: Map<string, unknown>;
37
+ log: FarmWorkflowLogger;
38
+ }
39
+ interface FarmWorkflowDefinition<TPayload = unknown, TResult = unknown> {
40
+ kind?: "farm-workflow";
41
+ id?: string;
42
+ description?: string;
43
+ schedule?: FarmWorkflowSchedule;
44
+ timezone?: string;
45
+ run: (ctx: FarmWorkflowRunContext<TPayload>) => TResult | Promise<TResult>;
46
+ }
47
+ interface FarmCronDefinition<TPayload = unknown, TResult = unknown> extends FarmWorkflowDefinition<TPayload, TResult> {
48
+ schedule: FarmWorkflowSchedule;
49
+ }
50
+ interface FarmDiscoveredWorkflow {
51
+ id: string;
52
+ filePath: string;
53
+ description?: string;
54
+ schedule: string[];
55
+ timezone?: string;
56
+ routePath: string;
57
+ }
58
+ interface PreparedFarmWorkflows {
59
+ workflows: FarmDiscoveredWorkflow[];
60
+ tasks: Record<string, {
61
+ handler: string;
62
+ description: string;
63
+ }>;
64
+ scheduledTasks: Record<string, string | string[]>;
65
+ handlerPath?: string;
66
+ manifestPath?: string;
67
+ }
68
+ interface FarmWorkflowHTTPHandlerOptions {
69
+ workflows: FarmDiscoveredWorkflow[];
70
+ config: FarmWorkflowsResolvedConfig;
71
+ loadModule: (workflow: FarmDiscoveredWorkflow) => Promise<Record<string, any>>;
72
+ }
73
+ declare const DEFAULT_FARM_WORKFLOW_DIRS: string[];
74
+ declare const DEFAULT_FARM_WORKFLOW_ROUTE = "/api/_farm/workflows";
75
+ declare const DEFAULT_FARM_WORKFLOW_SECRET_ENV = "CRON_SECRET";
76
+ declare function defineWorkflow<const TPayload = unknown, TResult = unknown>(definition: FarmWorkflowDefinition<TPayload, TResult>): FarmWorkflowDefinition<TPayload, TResult>;
77
+ declare function defineTask<const TPayload = unknown, TResult = unknown>(definition: FarmWorkflowDefinition<TPayload, TResult>): FarmWorkflowDefinition<TPayload, TResult>;
78
+ /**
79
+ * @deprecated Configure `cron` in `farm.config.ts` and point it at an API route.
80
+ */
81
+ declare function defineCron<const TPayload = unknown, TResult = unknown>(definition: FarmCronDefinition<TPayload, TResult>): FarmCronDefinition<TPayload, TResult>;
82
+ declare function resolveWorkflowsConfig(workflows: FarmWorkflowsUserConfig | boolean | undefined): FarmWorkflowsResolvedConfig;
83
+ declare function discoverFarmWorkflows(config: {
84
+ root?: string;
85
+ workflows?: FarmWorkflowsResolvedConfig | FarmWorkflowsUserConfig | boolean;
86
+ }, options?: {
87
+ loadModule?: (filePath: string) => Promise<Record<string, any>>;
88
+ }): Promise<FarmDiscoveredWorkflow[]>;
89
+ declare function createFarmWorkflowRequestHandler(options: FarmWorkflowHTTPHandlerOptions): (request: Request) => Promise<Response | null>;
90
+ declare function runFarmWorkflowModule(module: Record<string, any>, context: {
91
+ id: string;
92
+ name?: string;
93
+ payload?: unknown;
94
+ scheduledTime?: number | string;
95
+ request?: Request;
96
+ event?: unknown;
97
+ env?: Record<string, string | undefined>;
98
+ }): Promise<unknown>;
99
+ declare function prepareFarmWorkflowsForNitro(config: {
100
+ root?: string;
101
+ distDir?: string;
102
+ workflows?: FarmWorkflowsResolvedConfig | FarmWorkflowsUserConfig | boolean;
103
+ }): Promise<PreparedFarmWorkflows>;
104
+ declare function createFarmWorkflowVercelCrons(workflows: FarmDiscoveredWorkflow[]): Array<{
105
+ path: string;
106
+ schedule: string;
107
+ }>;
108
+ declare function applyFarmWorkflowVercelCrons(vercelConfig: Record<string, any>, workflows: FarmDiscoveredWorkflow[]): Record<string, any>;
109
+
110
+ export { DEFAULT_FARM_WORKFLOW_DIRS, DEFAULT_FARM_WORKFLOW_ROUTE, DEFAULT_FARM_WORKFLOW_SECRET_ENV, type FarmCronDefinition, type FarmDiscoveredWorkflow, type FarmWorkflowDefinition, type FarmWorkflowHTTPHandlerOptions, type FarmWorkflowLogger, type FarmWorkflowRunContext, type FarmWorkflowSchedule, type FarmWorkflowsResolvedConfig, type FarmWorkflowsUserConfig, type PreparedFarmWorkflows, applyFarmWorkflowVercelCrons, createFarmWorkflowRequestHandler, createFarmWorkflowVercelCrons, defineCron, defineTask, defineWorkflow, discoverFarmWorkflows, prepareFarmWorkflowsForNitro, resolveWorkflowsConfig, runFarmWorkflowModule };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farm.js/core",
3
- "version": "0.1.0-beta.16",
3
+ "version": "0.1.0-beta.17",
4
4
  "description": "Core Farm.js framework for modern integrated apps",
5
5
  "keywords": [
6
6
  "@farm.js/core",
@@ -136,11 +136,13 @@ declare module "@farm.js/core/middleware" {
136
136
  */
137
137
  export interface RateLimitConfig {
138
138
  /** Maximum number of requests */
139
- max: number;
140
- /** Time window in milliseconds */
141
- windowMs: number;
139
+ requests: number;
140
+ /** Fixed window such as `500ms`, `10s`, `1m`, or `1h`. */
141
+ window: string;
142
142
  /** Optional custom key generator */
143
143
  keyGenerator?: (ctx: MiddlewareContext) => string;
144
+ /** Optional response customization when the limit is exceeded. */
145
+ onLimit?: (ctx: MiddlewareContext) => void | Response | Promise<void | Response>;
144
146
  /** Optional custom storage */
145
147
  storage?: RateLimitStorage;
146
148
  }
@@ -148,19 +150,33 @@ declare module "@farm.js/core/middleware" {
148
150
  /**
149
151
  * Rate limit storage interface
150
152
  */
153
+ export interface RateLimitIncrementResult {
154
+ count: number;
155
+ resetAt: number;
156
+ }
157
+
151
158
  export interface RateLimitStorage {
152
- get(key: string): Promise<number | undefined>;
153
- set(key: string, value: number, ttlMs: number): Promise<void>;
154
- increment(key: string): Promise<number>;
159
+ increment(
160
+ key: string,
161
+ windowMs: number,
162
+ ): RateLimitIncrementResult | Promise<RateLimitIncrementResult>;
163
+ get?(key: string): RateLimitIncrementResult | null | Promise<RateLimitIncrementResult | null>;
164
+ }
165
+
166
+ export interface MemoryRateLimitStorageOptions {
167
+ maxEntries?: number;
155
168
  }
156
169
 
157
170
  /**
158
171
  * Rate limit status
159
172
  */
160
173
  export interface RateLimitStatus {
174
+ requests: number;
175
+ limit: number;
161
176
  remaining: number;
162
- reset: number;
163
- total: number;
177
+ resetIn: number | null;
178
+ resetAt: Date | null;
179
+ isLimited: boolean;
164
180
  }
165
181
 
166
182
  /**
@@ -206,12 +222,21 @@ declare module "@farm.js/core/middleware" {
206
222
  /**
207
223
  * Create a new middleware chain
208
224
  */
209
- export function middleware(config?: MiddlewareConfig): MiddlewareChain;
225
+ export function middleware(basePath?: string): MiddlewareChain;
210
226
 
211
227
  /**
212
- * Get rate limit status for current request
228
+ * Get rate limit status for a key
213
229
  */
214
- export function getRateLimitStatus(ctx: MiddlewareContext): RateLimitStatus | undefined;
230
+ export function getRateLimitStatus(
231
+ key: string,
232
+ limit: number,
233
+ storage?: RateLimitStorage,
234
+ ): Promise<RateLimitStatus>;
235
+
236
+ /** Create an atomic, process-local fixed-window rate-limit store. */
237
+ export function memoryRateLimitStorage(options?: MemoryRateLimitStorageOptions): RateLimitStorage;
238
+
239
+ export class UnsupportedRateLimitStorageError extends TypeError {}
215
240
 
216
241
  /**
217
242
  * Create a middleware context from request/response