@agent-native/core 0.4.1 → 0.4.3

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 (394) hide show
  1. package/README.md +31 -0
  2. package/dist/adapters/convex/adapter.d.ts +24 -0
  3. package/dist/adapters/convex/adapter.d.ts.map +1 -0
  4. package/dist/adapters/convex/adapter.js +125 -0
  5. package/dist/adapters/convex/adapter.js.map +1 -0
  6. package/dist/adapters/convex/index.d.ts +4 -0
  7. package/dist/adapters/convex/index.d.ts.map +1 -0
  8. package/dist/adapters/convex/index.js +3 -0
  9. package/dist/adapters/convex/index.js.map +1 -0
  10. package/dist/adapters/drizzle/adapter.d.ts +36 -0
  11. package/dist/adapters/drizzle/adapter.d.ts.map +1 -0
  12. package/dist/adapters/drizzle/adapter.js +210 -0
  13. package/dist/adapters/drizzle/adapter.js.map +1 -0
  14. package/dist/adapters/drizzle/index.d.ts +3 -0
  15. package/dist/adapters/drizzle/index.d.ts.map +1 -0
  16. package/dist/adapters/drizzle/index.js +3 -0
  17. package/dist/adapters/drizzle/index.js.map +1 -0
  18. package/dist/adapters/drizzle/schema.d.ts +146 -0
  19. package/dist/adapters/drizzle/schema.d.ts.map +1 -0
  20. package/dist/adapters/drizzle/schema.js +20 -0
  21. package/dist/adapters/drizzle/schema.js.map +1 -0
  22. package/dist/adapters/firestore/adapter.d.ts +3 -2
  23. package/dist/adapters/firestore/adapter.d.ts.map +1 -1
  24. package/dist/adapters/firestore/adapter.js +23 -6
  25. package/dist/adapters/firestore/adapter.js.map +1 -1
  26. package/dist/adapters/supabase/adapter.d.ts +2 -1
  27. package/dist/adapters/supabase/adapter.d.ts.map +1 -1
  28. package/dist/adapters/supabase/adapter.js +4 -1
  29. package/dist/adapters/supabase/adapter.js.map +1 -1
  30. package/dist/adapters/sync/config.d.ts +22 -2
  31. package/dist/adapters/sync/config.d.ts.map +1 -1
  32. package/dist/adapters/sync/config.js +175 -16
  33. package/dist/adapters/sync/config.js.map +1 -1
  34. package/dist/adapters/sync/create-file-sync.d.ts +32 -0
  35. package/dist/adapters/sync/create-file-sync.d.ts.map +1 -0
  36. package/dist/adapters/sync/create-file-sync.js +218 -0
  37. package/dist/adapters/sync/create-file-sync.js.map +1 -0
  38. package/dist/adapters/sync/file-sync.d.ts +40 -6
  39. package/dist/adapters/sync/file-sync.d.ts.map +1 -1
  40. package/dist/adapters/sync/file-sync.js +442 -97
  41. package/dist/adapters/sync/file-sync.js.map +1 -1
  42. package/dist/adapters/sync/index.d.ts +3 -2
  43. package/dist/adapters/sync/index.d.ts.map +1 -1
  44. package/dist/adapters/sync/index.js +3 -1
  45. package/dist/adapters/sync/index.js.map +1 -1
  46. package/dist/adapters/sync/merge.js +3 -2
  47. package/dist/adapters/sync/merge.js.map +1 -1
  48. package/dist/adapters/sync/types.d.ts +36 -2
  49. package/dist/adapters/sync/types.d.ts.map +1 -1
  50. package/dist/adapters/sync/types.js +22 -1
  51. package/dist/adapters/sync/types.js.map +1 -1
  52. package/dist/agent/index.d.ts +3 -0
  53. package/dist/agent/index.d.ts.map +1 -0
  54. package/dist/agent/index.js +2 -0
  55. package/dist/agent/index.js.map +1 -0
  56. package/dist/agent/production-agent.d.ts +16 -0
  57. package/dist/agent/production-agent.d.ts.map +1 -0
  58. package/dist/agent/production-agent.js +158 -0
  59. package/dist/agent/production-agent.js.map +1 -0
  60. package/dist/agent/types.d.ts +40 -0
  61. package/dist/agent/types.d.ts.map +1 -0
  62. package/dist/agent/types.js +2 -0
  63. package/dist/agent/types.js.map +1 -0
  64. package/dist/application-state/emitter.d.ts +10 -0
  65. package/dist/application-state/emitter.d.ts.map +1 -0
  66. package/dist/application-state/emitter.js +18 -0
  67. package/dist/application-state/emitter.js.map +1 -0
  68. package/dist/application-state/handlers.d.ts +20 -0
  69. package/dist/application-state/handlers.d.ts.map +1 -0
  70. package/dist/application-state/handlers.js +94 -0
  71. package/dist/application-state/handlers.js.map +1 -0
  72. package/dist/application-state/index.d.ts +5 -0
  73. package/dist/application-state/index.d.ts.map +1 -0
  74. package/dist/application-state/index.js +9 -0
  75. package/dist/application-state/index.js.map +1 -0
  76. package/dist/application-state/script-helpers.d.ts +17 -0
  77. package/dist/application-state/script-helpers.d.ts.map +1 -0
  78. package/dist/application-state/script-helpers.js +28 -0
  79. package/dist/application-state/script-helpers.js.map +1 -0
  80. package/dist/application-state/store.d.ts +9 -0
  81. package/dist/application-state/store.d.ts.map +1 -0
  82. package/dist/application-state/store.js +93 -0
  83. package/dist/application-state/store.js.map +1 -0
  84. package/dist/cli/create.d.ts.map +1 -1
  85. package/dist/cli/create.js +40 -24
  86. package/dist/cli/create.js.map +1 -1
  87. package/dist/cli/index.js +37 -11
  88. package/dist/cli/index.js.map +1 -1
  89. package/dist/client/AgentPanel.d.ts +53 -0
  90. package/dist/client/AgentPanel.d.ts.map +1 -0
  91. package/dist/client/AgentPanel.js +70 -0
  92. package/dist/client/AgentPanel.js.map +1 -0
  93. package/dist/client/AssistantChat.d.ts +27 -0
  94. package/dist/client/AssistantChat.d.ts.map +1 -0
  95. package/dist/client/AssistantChat.js +165 -0
  96. package/dist/client/AssistantChat.js.map +1 -0
  97. package/dist/client/ErrorBoundary.d.ts +4 -0
  98. package/dist/client/ErrorBoundary.d.ts.map +1 -0
  99. package/dist/client/ErrorBoundary.js +22 -0
  100. package/dist/client/ErrorBoundary.js.map +1 -0
  101. package/dist/client/MultiTabAssistantChat.d.ts +4 -0
  102. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -0
  103. package/dist/client/MultiTabAssistantChat.js +125 -0
  104. package/dist/client/MultiTabAssistantChat.js.map +1 -0
  105. package/dist/client/PoweredByBadge.d.ts +14 -0
  106. package/dist/client/PoweredByBadge.d.ts.map +1 -0
  107. package/dist/client/PoweredByBadge.js +60 -0
  108. package/dist/client/PoweredByBadge.js.map +1 -0
  109. package/dist/client/ProductionAgentPanel.d.ts +6 -0
  110. package/dist/client/ProductionAgentPanel.d.ts.map +1 -0
  111. package/dist/client/ProductionAgentPanel.js +6 -0
  112. package/dist/client/ProductionAgentPanel.js.map +1 -0
  113. package/dist/client/Turnstile.d.ts +35 -0
  114. package/dist/client/Turnstile.d.ts.map +1 -0
  115. package/dist/client/Turnstile.js +77 -0
  116. package/dist/client/Turnstile.js.map +1 -0
  117. package/dist/client/agent-chat-adapter.d.ts +10 -0
  118. package/dist/client/agent-chat-adapter.d.ts.map +1 -0
  119. package/dist/client/agent-chat-adapter.js +235 -0
  120. package/dist/client/agent-chat-adapter.js.map +1 -0
  121. package/dist/client/agent-chat.d.ts +9 -1
  122. package/dist/client/agent-chat.d.ts.map +1 -1
  123. package/dist/client/agent-chat.js +11 -1
  124. package/dist/client/agent-chat.js.map +1 -1
  125. package/dist/client/index.d.ts +13 -1
  126. package/dist/client/index.d.ts.map +1 -1
  127. package/dist/client/index.js +14 -1
  128. package/dist/client/index.js.map +1 -1
  129. package/dist/client/terminal/AgentTerminal.d.ts +35 -0
  130. package/dist/client/terminal/AgentTerminal.d.ts.map +1 -0
  131. package/dist/client/terminal/AgentTerminal.js +346 -0
  132. package/dist/client/terminal/AgentTerminal.js.map +1 -0
  133. package/dist/client/terminal/index.d.ts +7 -0
  134. package/dist/client/terminal/index.d.ts.map +1 -0
  135. package/dist/client/terminal/index.js +7 -0
  136. package/dist/client/terminal/index.js.map +1 -0
  137. package/dist/client/use-agent-chat.d.ts +1 -1
  138. package/dist/client/use-agent-chat.d.ts.map +1 -1
  139. package/dist/client/use-agent-chat.js +1 -1
  140. package/dist/client/use-agent-chat.js.map +1 -1
  141. package/dist/client/use-file-sync-status.d.ts +21 -0
  142. package/dist/client/use-file-sync-status.d.ts.map +1 -0
  143. package/dist/client/use-file-sync-status.js +65 -0
  144. package/dist/client/use-file-sync-status.js.map +1 -0
  145. package/dist/client/use-session.d.ts +16 -0
  146. package/dist/client/use-session.d.ts.map +1 -0
  147. package/dist/client/use-session.js +49 -0
  148. package/dist/client/use-session.js.map +1 -0
  149. package/dist/client/useProductionAgent.d.ts +23 -0
  150. package/dist/client/useProductionAgent.d.ts.map +1 -0
  151. package/dist/client/useProductionAgent.js +137 -0
  152. package/dist/client/useProductionAgent.js.map +1 -0
  153. package/dist/db/create-get-db.d.ts +3 -0
  154. package/dist/db/create-get-db.d.ts.map +1 -0
  155. package/dist/db/create-get-db.js +18 -0
  156. package/dist/db/create-get-db.js.map +1 -0
  157. package/dist/db/index.d.ts +23 -0
  158. package/dist/db/index.d.ts.map +1 -0
  159. package/dist/db/index.js +19 -0
  160. package/dist/db/index.js.map +1 -0
  161. package/dist/db/migrations.d.ts +7 -0
  162. package/dist/db/migrations.d.ts.map +1 -0
  163. package/dist/db/migrations.js +35 -0
  164. package/dist/db/migrations.js.map +1 -0
  165. package/dist/index.browser.d.ts +1 -1
  166. package/dist/index.browser.d.ts.map +1 -1
  167. package/dist/index.browser.js +1 -1
  168. package/dist/index.browser.js.map +1 -1
  169. package/dist/index.d.ts +5 -2
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +6 -2
  172. package/dist/index.js.map +1 -1
  173. package/dist/oauth-tokens/index.d.ts +2 -0
  174. package/dist/oauth-tokens/index.d.ts.map +1 -0
  175. package/dist/oauth-tokens/index.js +2 -0
  176. package/dist/oauth-tokens/index.js.map +1 -0
  177. package/dist/oauth-tokens/store.d.ts +9 -0
  178. package/dist/oauth-tokens/store.d.ts.map +1 -0
  179. package/dist/oauth-tokens/store.js +90 -0
  180. package/dist/oauth-tokens/store.js.map +1 -0
  181. package/dist/router/index.d.ts +3 -0
  182. package/dist/router/index.d.ts.map +1 -0
  183. package/dist/router/index.js +5 -0
  184. package/dist/router/index.js.map +1 -0
  185. package/dist/scripts/core-scripts.d.ts +10 -0
  186. package/dist/scripts/core-scripts.d.ts.map +1 -0
  187. package/dist/scripts/core-scripts.js +15 -0
  188. package/dist/scripts/core-scripts.js.map +1 -0
  189. package/dist/scripts/db/exec.d.ts +11 -0
  190. package/dist/scripts/db/exec.d.ts.map +1 -0
  191. package/dist/scripts/db/exec.js +101 -0
  192. package/dist/scripts/db/exec.js.map +1 -0
  193. package/dist/scripts/db/index.d.ts +2 -0
  194. package/dist/scripts/db/index.d.ts.map +1 -0
  195. package/dist/scripts/db/index.js +6 -0
  196. package/dist/scripts/db/index.js.map +1 -0
  197. package/dist/scripts/db/query.d.ts +10 -0
  198. package/dist/scripts/db/query.d.ts.map +1 -0
  199. package/dist/scripts/db/query.js +112 -0
  200. package/dist/scripts/db/query.js.map +1 -0
  201. package/dist/scripts/db/schema.d.ts +12 -0
  202. package/dist/scripts/db/schema.d.ts.map +1 -0
  203. package/dist/scripts/db/schema.js +140 -0
  204. package/dist/scripts/db/schema.js.map +1 -0
  205. package/dist/scripts/dev/index.d.ts +15 -0
  206. package/dist/scripts/dev/index.d.ts.map +1 -0
  207. package/dist/scripts/dev/index.js +118 -0
  208. package/dist/scripts/dev/index.js.map +1 -0
  209. package/dist/scripts/dev/list-files.d.ts +5 -0
  210. package/dist/scripts/dev/list-files.d.ts.map +1 -0
  211. package/dist/scripts/dev/list-files.js +102 -0
  212. package/dist/scripts/dev/list-files.js.map +1 -0
  213. package/dist/scripts/dev/read-file.d.ts +5 -0
  214. package/dist/scripts/dev/read-file.d.ts.map +1 -0
  215. package/dist/scripts/dev/read-file.js +68 -0
  216. package/dist/scripts/dev/read-file.js.map +1 -0
  217. package/dist/scripts/dev/search-files.d.ts +5 -0
  218. package/dist/scripts/dev/search-files.d.ts.map +1 -0
  219. package/dist/scripts/dev/search-files.js +133 -0
  220. package/dist/scripts/dev/search-files.js.map +1 -0
  221. package/dist/scripts/dev/shell.d.ts +5 -0
  222. package/dist/scripts/dev/shell.d.ts.map +1 -0
  223. package/dist/scripts/dev/shell.js +65 -0
  224. package/dist/scripts/dev/shell.js.map +1 -0
  225. package/dist/scripts/dev/write-file.d.ts +5 -0
  226. package/dist/scripts/dev/write-file.d.ts.map +1 -0
  227. package/dist/scripts/dev/write-file.js +50 -0
  228. package/dist/scripts/dev/write-file.js.map +1 -0
  229. package/dist/scripts/index.d.ts +5 -0
  230. package/dist/scripts/index.d.ts.map +1 -1
  231. package/dist/scripts/index.js +5 -0
  232. package/dist/scripts/index.js.map +1 -1
  233. package/dist/scripts/runner.d.ts +3 -0
  234. package/dist/scripts/runner.d.ts.map +1 -1
  235. package/dist/scripts/runner.js +53 -14
  236. package/dist/scripts/runner.js.map +1 -1
  237. package/dist/server/agent-chat-plugin.d.ts +43 -0
  238. package/dist/server/agent-chat-plugin.d.ts.map +1 -0
  239. package/dist/server/agent-chat-plugin.js +92 -0
  240. package/dist/server/agent-chat-plugin.js.map +1 -0
  241. package/dist/server/auth-plugin.d.ts +6 -0
  242. package/dist/server/auth-plugin.d.ts.map +1 -0
  243. package/dist/server/auth-plugin.js +8 -0
  244. package/dist/server/auth-plugin.js.map +1 -0
  245. package/dist/server/auth.d.ts +75 -0
  246. package/dist/server/auth.d.ts.map +1 -0
  247. package/dist/server/auth.js +499 -0
  248. package/dist/server/auth.js.map +1 -0
  249. package/dist/server/captcha.d.ts +12 -0
  250. package/dist/server/captcha.d.ts.map +1 -0
  251. package/dist/server/captcha.js +43 -0
  252. package/dist/server/captcha.js.map +1 -0
  253. package/dist/server/create-server.d.ts +20 -10
  254. package/dist/server/create-server.d.ts.map +1 -1
  255. package/dist/server/create-server.js +48 -28
  256. package/dist/server/create-server.js.map +1 -1
  257. package/dist/server/default-watcher.d.ts +17 -0
  258. package/dist/server/default-watcher.d.ts.map +1 -0
  259. package/dist/server/default-watcher.js +37 -0
  260. package/dist/server/default-watcher.js.map +1 -0
  261. package/dist/server/file-sync-plugin.d.ts +7 -0
  262. package/dist/server/file-sync-plugin.d.ts.map +1 -0
  263. package/dist/server/file-sync-plugin.js +38 -0
  264. package/dist/server/file-sync-plugin.js.map +1 -0
  265. package/dist/server/google-auth-plugin.d.ts +22 -0
  266. package/dist/server/google-auth-plugin.d.ts.map +1 -0
  267. package/dist/server/google-auth-plugin.js +122 -0
  268. package/dist/server/google-auth-plugin.js.map +1 -0
  269. package/dist/server/index.d.ts +13 -2
  270. package/dist/server/index.d.ts.map +1 -1
  271. package/dist/server/index.js +14 -2
  272. package/dist/server/index.js.map +1 -1
  273. package/dist/server/missing-key.d.ts +9 -5
  274. package/dist/server/missing-key.d.ts.map +1 -1
  275. package/dist/server/missing-key.js +12 -7
  276. package/dist/server/missing-key.js.map +1 -1
  277. package/dist/server/sse.d.ts +18 -8
  278. package/dist/server/sse.d.ts.map +1 -1
  279. package/dist/server/sse.js +90 -19
  280. package/dist/server/sse.js.map +1 -1
  281. package/dist/settings/handlers.d.ts +9 -0
  282. package/dist/settings/handlers.d.ts.map +1 -0
  283. package/dist/settings/handlers.js +29 -0
  284. package/dist/settings/handlers.js.map +1 -0
  285. package/dist/settings/index.d.ts +5 -0
  286. package/dist/settings/index.d.ts.map +1 -0
  287. package/dist/settings/index.js +9 -0
  288. package/dist/settings/index.js.map +1 -0
  289. package/dist/settings/script-helpers.d.ts +9 -0
  290. package/dist/settings/script-helpers.d.ts.map +1 -0
  291. package/dist/settings/script-helpers.js +16 -0
  292. package/dist/settings/script-helpers.js.map +1 -0
  293. package/dist/settings/store.d.ts +7 -0
  294. package/dist/settings/store.d.ts.map +1 -0
  295. package/dist/settings/store.js +88 -0
  296. package/dist/settings/store.js.map +1 -0
  297. package/dist/settings/user-settings.d.ts +21 -0
  298. package/dist/settings/user-settings.d.ts.map +1 -0
  299. package/dist/settings/user-settings.js +35 -0
  300. package/dist/settings/user-settings.js.map +1 -0
  301. package/dist/tailwind.preset.js +1 -1
  302. package/dist/tailwind.preset.js.map +1 -1
  303. package/dist/terminal/cli-registry.d.ts +16 -0
  304. package/dist/terminal/cli-registry.d.ts.map +1 -0
  305. package/dist/terminal/cli-registry.js +42 -0
  306. package/dist/terminal/cli-registry.js.map +1 -0
  307. package/dist/terminal/index.d.ts +9 -0
  308. package/dist/terminal/index.d.ts.map +1 -0
  309. package/dist/terminal/index.js +9 -0
  310. package/dist/terminal/index.js.map +1 -0
  311. package/dist/terminal/pty-server.d.ts +31 -0
  312. package/dist/terminal/pty-server.d.ts.map +1 -0
  313. package/dist/terminal/pty-server.js +252 -0
  314. package/dist/terminal/pty-server.js.map +1 -0
  315. package/dist/terminal/terminal-plugin.d.ts +23 -0
  316. package/dist/terminal/terminal-plugin.d.ts.map +1 -0
  317. package/dist/terminal/terminal-plugin.js +90 -0
  318. package/dist/terminal/terminal-plugin.js.map +1 -0
  319. package/dist/vite/client.d.ts +28 -5
  320. package/dist/vite/client.d.ts.map +1 -1
  321. package/dist/vite/client.js +55 -16
  322. package/dist/vite/client.js.map +1 -1
  323. package/dist/vite/dev-api-server.d.ts +10 -0
  324. package/dist/vite/dev-api-server.d.ts.map +1 -0
  325. package/dist/vite/dev-api-server.js +160 -0
  326. package/dist/vite/dev-api-server.js.map +1 -0
  327. package/dist/vite/index.d.ts +2 -3
  328. package/dist/vite/index.d.ts.map +1 -1
  329. package/dist/vite/index.js +2 -3
  330. package/dist/vite/index.js.map +1 -1
  331. package/package.json +74 -19
  332. package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
  333. package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +3 -3
  334. package/src/templates/default/.agents/skills/files-as-database/SKILL.md +82 -63
  335. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +2 -2
  336. package/src/templates/default/.agents/skills/scripts/SKILL.md +20 -17
  337. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +2 -2
  338. package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +49 -64
  339. package/src/templates/default/.ignore +0 -0
  340. package/src/templates/default/AGENTS.md +129 -28
  341. package/src/templates/default/_gitignore +9 -5
  342. package/src/templates/default/app/entry.client.tsx +4 -0
  343. package/src/templates/default/app/entry.server.tsx +55 -0
  344. package/src/templates/default/app/global.css +95 -0
  345. package/src/templates/default/app/root.tsx +95 -0
  346. package/src/templates/default/app/routes/_index.tsx +62 -0
  347. package/src/templates/default/app/routes.ts +4 -0
  348. package/src/templates/default/app/vite-env.d.ts +6 -0
  349. package/src/templates/default/application-state/.gitkeep +0 -0
  350. package/src/templates/default/components.json +1 -1
  351. package/src/templates/default/data/sync-config.json +1 -0
  352. package/src/templates/default/package.json +7 -8
  353. package/src/templates/default/react-router.config.ts +6 -0
  354. package/src/templates/default/scripts/run.ts +1 -8
  355. package/src/templates/default/server/plugins/agent-chat.ts +1 -0
  356. package/src/templates/default/server/plugins/auth.ts +1 -0
  357. package/src/templates/default/server/plugins/file-sync.ts +1 -0
  358. package/src/templates/default/server/plugins/terminal.ts +1 -0
  359. package/src/templates/default/server/routes/[...page].get.ts +12 -0
  360. package/src/templates/default/server/routes/api/events.get.ts +3 -0
  361. package/src/templates/default/server/routes/api/file-sync/status.get.ts +4 -0
  362. package/src/templates/default/server/routes/api/hello.get.ts +5 -0
  363. package/src/templates/default/tailwind.config.ts +1 -1
  364. package/src/templates/default/tsconfig.json +9 -1
  365. package/src/templates/default/vite.config.ts +4 -1
  366. package/tsconfig.base.json +5 -3
  367. package/dist/adapters/neon/adapter.d.ts +0 -28
  368. package/dist/adapters/neon/adapter.d.ts.map +0 -1
  369. package/dist/adapters/neon/adapter.js +0 -135
  370. package/dist/adapters/neon/adapter.js.map +0 -1
  371. package/dist/adapters/neon/index.d.ts +0 -3
  372. package/dist/adapters/neon/index.d.ts.map +0 -1
  373. package/dist/adapters/neon/index.js +0 -3
  374. package/dist/adapters/neon/index.js.map +0 -1
  375. package/dist/server/production.d.ts +0 -18
  376. package/dist/server/production.d.ts.map +0 -1
  377. package/dist/server/production.js +0 -37
  378. package/dist/server/production.js.map +0 -1
  379. package/dist/vite/express-plugin.d.ts +0 -14
  380. package/dist/vite/express-plugin.d.ts.map +0 -1
  381. package/dist/vite/express-plugin.js +0 -53
  382. package/dist/vite/express-plugin.js.map +0 -1
  383. package/dist/vite/server.d.ts +0 -21
  384. package/dist/vite/server.d.ts.map +0 -1
  385. package/dist/vite/server.js +0 -68
  386. package/dist/vite/server.js.map +0 -1
  387. package/src/templates/default/client/App.tsx +0 -56
  388. package/src/templates/default/client/global.css +0 -75
  389. package/src/templates/default/client/vite-env.d.ts +0 -1
  390. package/src/templates/default/index.html +0 -14
  391. package/src/templates/default/server/index.ts +0 -22
  392. package/src/templates/default/server/node-build.ts +0 -4
  393. package/src/templates/default/vite.config.server.ts +0 -3
  394. /package/src/templates/default/{client → app}/lib/utils.ts +0 -0
@@ -0,0 +1,499 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { defineEventHandler, readBody, getMethod, setResponseHeader, setResponseStatus, getCookie, setCookie, deleteCookie, } from "h3";
5
+ import { createClient } from "@libsql/client";
6
+ // ---------------------------------------------------------------------------
7
+ // Constants
8
+ // ---------------------------------------------------------------------------
9
+ const COOKIE_NAME = "an_session";
10
+ const DEFAULT_MAX_AGE = 60 * 60 * 24 * 30; // 30 days
11
+ // ---------------------------------------------------------------------------
12
+ // Session store — SQL-backed
13
+ // ---------------------------------------------------------------------------
14
+ let _sessionClient;
15
+ let _sessionTableReady = false;
16
+ let sessionMaxAge = DEFAULT_MAX_AGE;
17
+ function getSessionClient() {
18
+ if (!_sessionClient) {
19
+ const url = process.env.DATABASE_URL || "file:./data/app.db";
20
+ if (url.startsWith("file:")) {
21
+ fs.mkdirSync(path.join(process.cwd(), "data"), { recursive: true });
22
+ }
23
+ _sessionClient = createClient({
24
+ url,
25
+ authToken: process.env.DATABASE_AUTH_TOKEN,
26
+ });
27
+ }
28
+ return _sessionClient;
29
+ }
30
+ async function ensureSessionTable() {
31
+ if (_sessionTableReady)
32
+ return;
33
+ const client = getSessionClient();
34
+ await client.execute(`
35
+ CREATE TABLE IF NOT EXISTS sessions (
36
+ token TEXT PRIMARY KEY,
37
+ email TEXT,
38
+ created_at INTEGER NOT NULL
39
+ )
40
+ `);
41
+ // Migration: add email column to existing tables that lack it
42
+ try {
43
+ await client.execute(`ALTER TABLE sessions ADD COLUMN email TEXT`);
44
+ }
45
+ catch {
46
+ // Column already exists — ignore
47
+ }
48
+ _sessionTableReady = true;
49
+ }
50
+ async function pruneExpiredSessions() {
51
+ await ensureSessionTable();
52
+ const client = getSessionClient();
53
+ const cutoff = Date.now() - sessionMaxAge * 1000;
54
+ await client.execute({
55
+ sql: `DELETE FROM sessions WHERE created_at < ?`,
56
+ args: [cutoff],
57
+ });
58
+ }
59
+ /**
60
+ * Create a new session. Optionally associate it with an email address
61
+ * (used by Google OAuth and other identity-aware auth providers).
62
+ */
63
+ export async function addSession(token, email) {
64
+ await ensureSessionTable();
65
+ const client = getSessionClient();
66
+ await client.execute({
67
+ sql: `INSERT OR REPLACE INTO sessions (token, email, created_at) VALUES (?, ?, ?)`,
68
+ args: [token, email ?? null, Date.now()],
69
+ });
70
+ }
71
+ /** Remove a session by token. */
72
+ export async function removeSession(token) {
73
+ await ensureSessionTable();
74
+ const client = getSessionClient();
75
+ await client.execute({
76
+ sql: `DELETE FROM sessions WHERE token = ?`,
77
+ args: [token],
78
+ });
79
+ }
80
+ /**
81
+ * Look up the email associated with a session token.
82
+ * Returns null if the session doesn't exist, is expired, or has no email.
83
+ */
84
+ export async function getSessionEmail(token) {
85
+ await ensureSessionTable();
86
+ const client = getSessionClient();
87
+ const { rows } = await client.execute({
88
+ sql: `SELECT email, created_at FROM sessions WHERE token = ?`,
89
+ args: [token],
90
+ });
91
+ if (rows.length === 0)
92
+ return null;
93
+ const createdAt = rows[0].created_at;
94
+ if (Date.now() - createdAt > sessionMaxAge * 1000) {
95
+ await client.execute({
96
+ sql: `DELETE FROM sessions WHERE token = ?`,
97
+ args: [token],
98
+ });
99
+ return null;
100
+ }
101
+ return rows[0].email ?? null;
102
+ }
103
+ async function hasSession(token) {
104
+ await ensureSessionTable();
105
+ const client = getSessionClient();
106
+ const { rows } = await client.execute({
107
+ sql: `SELECT created_at FROM sessions WHERE token = ?`,
108
+ args: [token],
109
+ });
110
+ if (rows.length === 0)
111
+ return false;
112
+ const createdAt = rows[0].created_at;
113
+ if (Date.now() - createdAt > sessionMaxAge * 1000) {
114
+ await client.execute({
115
+ sql: `DELETE FROM sessions WHERE token = ?`,
116
+ args: [token],
117
+ });
118
+ return false;
119
+ }
120
+ return true;
121
+ }
122
+ // ---------------------------------------------------------------------------
123
+ // Token resolution — supports ACCESS_TOKEN (single) or ACCESS_TOKENS (multi)
124
+ // ---------------------------------------------------------------------------
125
+ function getAccessTokens() {
126
+ const single = process.env.ACCESS_TOKEN;
127
+ const multi = process.env.ACCESS_TOKENS;
128
+ const tokens = [];
129
+ if (single)
130
+ tokens.push(single);
131
+ if (multi) {
132
+ for (const t of multi.split(",")) {
133
+ const trimmed = t.trim();
134
+ if (trimmed && !tokens.includes(trimmed))
135
+ tokens.push(trimmed);
136
+ }
137
+ }
138
+ return tokens;
139
+ }
140
+ // ---------------------------------------------------------------------------
141
+ // Dev mode detection
142
+ // ---------------------------------------------------------------------------
143
+ function isDevMode() {
144
+ return process.env.NODE_ENV !== "production";
145
+ }
146
+ // ---------------------------------------------------------------------------
147
+ // getSession — the auth contract
148
+ // ---------------------------------------------------------------------------
149
+ let customGetSession = null;
150
+ let authDisabledMode = false;
151
+ const DEV_SESSION = { email: "local@localhost" };
152
+ /**
153
+ * Get the current auth session for a request.
154
+ *
155
+ * - In dev mode: always returns { email: "local@localhost" }
156
+ * - In production with built-in auth: returns session if cookie is valid
157
+ * - With custom auth (BYOA): delegates to the custom getSession
158
+ */
159
+ export async function getSession(event) {
160
+ if (isDevMode())
161
+ return DEV_SESSION;
162
+ if (authDisabledMode)
163
+ return DEV_SESSION;
164
+ if (customGetSession)
165
+ return customGetSession(event);
166
+ const cookie = getCookie(event, COOKIE_NAME);
167
+ if (cookie && (await hasSession(cookie))) {
168
+ return { email: "user", token: cookie };
169
+ }
170
+ return null;
171
+ }
172
+ // ---------------------------------------------------------------------------
173
+ // Constant-time token comparison
174
+ // ---------------------------------------------------------------------------
175
+ function safeTokenMatch(input, tokens) {
176
+ const inputBuf = Buffer.from(input);
177
+ for (const token of tokens) {
178
+ const tokenBuf = Buffer.from(token);
179
+ if (inputBuf.length === tokenBuf.length &&
180
+ crypto.timingSafeEqual(inputBuf, tokenBuf)) {
181
+ return true;
182
+ }
183
+ }
184
+ return false;
185
+ }
186
+ // ---------------------------------------------------------------------------
187
+ // Login page HTML
188
+ // ---------------------------------------------------------------------------
189
+ const LOGIN_HTML = `<!DOCTYPE html>
190
+ <html lang="en">
191
+ <head>
192
+ <meta charset="UTF-8">
193
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
194
+ <title>Sign in</title>
195
+ <style>
196
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
197
+ body {
198
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
199
+ background: #0a0a0a;
200
+ color: #e5e5e5;
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ min-height: 100vh;
205
+ }
206
+ .card {
207
+ width: 100%;
208
+ max-width: 360px;
209
+ padding: 2rem;
210
+ background: #141414;
211
+ border: 1px solid rgba(255,255,255,0.08);
212
+ border-radius: 12px;
213
+ }
214
+ h1 { font-size: 1.125rem; font-weight: 600; margin-bottom: 1.5rem; color: #fff; }
215
+ label { display: block; font-size: 0.8125rem; color: #888; margin-bottom: 0.375rem; }
216
+ input {
217
+ width: 100%;
218
+ padding: 0.625rem 0.75rem;
219
+ background: #1e1e1e;
220
+ border: 1px solid rgba(255,255,255,0.12);
221
+ border-radius: 8px;
222
+ color: #e5e5e5;
223
+ font-size: 0.9375rem;
224
+ outline: none;
225
+ transition: border-color 0.15s;
226
+ }
227
+ input:focus { border-color: rgba(255,255,255,0.3); }
228
+ button {
229
+ width: 100%;
230
+ margin-top: 1rem;
231
+ padding: 0.625rem;
232
+ background: #fff;
233
+ color: #000;
234
+ border: none;
235
+ border-radius: 8px;
236
+ font-size: 0.9375rem;
237
+ font-weight: 500;
238
+ cursor: pointer;
239
+ transition: opacity 0.15s;
240
+ }
241
+ button:hover { opacity: 0.85; }
242
+ .error { margin-top: 0.75rem; font-size: 0.8125rem; color: #f87171; display: none; }
243
+ .error.show { display: block; }
244
+ </style>
245
+ </head>
246
+ <body>
247
+ <div class="card">
248
+ <h1>Sign in</h1>
249
+ <form id="form">
250
+ <label for="token">Access token</label>
251
+ <input id="token" type="password" autocomplete="current-password" autofocus placeholder="Enter access token" />
252
+ <button type="submit">Continue</button>
253
+ <p class="error" id="err">Invalid token. Please try again.</p>
254
+ </form>
255
+ </div>
256
+ <script>
257
+ document.getElementById('form').addEventListener('submit', async (e) => {
258
+ e.preventDefault();
259
+ const token = document.getElementById('token').value;
260
+ const res = await fetch('/api/auth/login', {
261
+ method: 'POST',
262
+ headers: { 'Content-Type': 'application/json' },
263
+ body: JSON.stringify({ token }),
264
+ });
265
+ if (res.ok) {
266
+ window.location.reload();
267
+ } else {
268
+ document.getElementById('err').classList.add('show');
269
+ }
270
+ });
271
+ </script>
272
+ </body>
273
+ </html>`;
274
+ // ---------------------------------------------------------------------------
275
+ // mountAuthMiddleware — mounts login/logout/session routes + auth guard
276
+ // ---------------------------------------------------------------------------
277
+ /**
278
+ * Mount auth middleware + login/logout/session routes onto an H3 app.
279
+ *
280
+ * @deprecated Use `autoMountAuth(app, options?)` instead for automatic
281
+ * dev/prod behavior. This function is kept for backwards compatibility
282
+ * when you need explicit control over the access token.
283
+ */
284
+ export function mountAuthMiddleware(app, accessToken) {
285
+ mountAuthRoutes(app, [accessToken]);
286
+ }
287
+ function isPublicPath(url, publicPaths) {
288
+ const p = url.split("?")[0];
289
+ return publicPaths.some((pp) => p === pp || p.startsWith(pp + "/"));
290
+ }
291
+ function mountAuthRoutes(app, accessTokens, publicPaths = []) {
292
+ // POST /api/auth/login
293
+ app.use("/api/auth/login", defineEventHandler(async (event) => {
294
+ if (getMethod(event) !== "POST") {
295
+ setResponseStatus(event, 405);
296
+ return { error: "Method not allowed" };
297
+ }
298
+ const body = await readBody(event);
299
+ if (!body?.token ||
300
+ typeof body.token !== "string" ||
301
+ !safeTokenMatch(body.token, accessTokens)) {
302
+ setResponseStatus(event, 401);
303
+ return { error: "Invalid token" };
304
+ }
305
+ const sessionToken = crypto.randomBytes(32).toString("hex");
306
+ await addSession(sessionToken);
307
+ setCookie(event, COOKIE_NAME, sessionToken, {
308
+ httpOnly: true,
309
+ secure: true,
310
+ sameSite: "lax",
311
+ path: "/",
312
+ maxAge: sessionMaxAge,
313
+ });
314
+ return { ok: true };
315
+ }));
316
+ // POST /api/auth/logout
317
+ app.use("/api/auth/logout", defineEventHandler(async (event) => {
318
+ const cookie = getCookie(event, COOKIE_NAME);
319
+ if (cookie)
320
+ await removeSession(cookie);
321
+ deleteCookie(event, COOKIE_NAME, { path: "/" });
322
+ return { ok: true };
323
+ }));
324
+ // GET /api/auth/session — client session check
325
+ app.use("/api/auth/session", defineEventHandler(async (event) => {
326
+ if (getMethod(event) !== "GET") {
327
+ setResponseStatus(event, 405);
328
+ return { error: "Method not allowed" };
329
+ }
330
+ const session = await getSession(event);
331
+ return session ?? { error: "Not authenticated" };
332
+ }));
333
+ // Auth guard — runs before all other handlers
334
+ app.use(defineEventHandler(async (event) => {
335
+ const url = event.node.req.url ?? "/";
336
+ const p = url.split("?")[0];
337
+ // Skip auth routes
338
+ if (p === "/api/auth/login" ||
339
+ p === "/api/auth/logout" ||
340
+ p === "/api/auth/session") {
341
+ return;
342
+ }
343
+ // Skip public paths
344
+ if (isPublicPath(url, publicPaths)) {
345
+ return;
346
+ }
347
+ // Use getSession() so BYOA custom auth is respected
348
+ const session = await getSession(event);
349
+ if (session) {
350
+ return; // Authenticated
351
+ }
352
+ // Unauthenticated
353
+ if (p.startsWith("/api/")) {
354
+ setResponseStatus(event, 401);
355
+ setResponseHeader(event, "Content-Type", "application/json");
356
+ event.node.res.end(JSON.stringify({ error: "Unauthorized" }));
357
+ return;
358
+ }
359
+ setResponseHeader(event, "Content-Type", "text/html");
360
+ event.node.res.end(LOGIN_HTML);
361
+ }));
362
+ }
363
+ // ---------------------------------------------------------------------------
364
+ // autoMountAuth — the recommended entry point
365
+ // ---------------------------------------------------------------------------
366
+ /**
367
+ * Automatically configure auth based on the environment:
368
+ *
369
+ * - **Dev mode** (`NODE_ENV !== "production"`): Auth is skipped entirely.
370
+ * `getSession()` returns `{ email: "local@localhost" }` for all requests.
371
+ *
372
+ * - **Production with ACCESS_TOKEN/ACCESS_TOKENS set**: Auth middleware is
373
+ * mounted. Unauthenticated requests see a login page. One env var is all
374
+ * you need.
375
+ *
376
+ * - **Production without tokens and AUTH_DISABLED !== "true"**: Refuses to
377
+ * start. Logs a clear error explaining what to do.
378
+ *
379
+ * - **Production with AUTH_DISABLED=true**: Auth is skipped (for apps behind
380
+ * infrastructure-level auth like Cloudflare Access or a VPN).
381
+ *
382
+ * Returns true if auth was mounted, false if skipped.
383
+ */
384
+ export function autoMountAuth(app, options = {}) {
385
+ // In Nitro 3.0 dev mode, the H3 app may not be available yet.
386
+ // In dev mode auth is bypassed anyway, so we can safely skip.
387
+ if (!app) {
388
+ if (isDevMode()) {
389
+ authDisabledMode = false;
390
+ customGetSession = null;
391
+ return false;
392
+ }
393
+ throw new Error("autoMountAuth: H3 app is required. In Nitro plugins, pass nitroApp.h3App.");
394
+ }
395
+ // Reset globals to avoid stale state from prior calls
396
+ customGetSession = null;
397
+ authDisabledMode = false;
398
+ sessionMaxAge = options.maxAge ?? DEFAULT_MAX_AGE;
399
+ const publicPaths = options.publicPaths ?? [];
400
+ if (options.getSession) {
401
+ customGetSession = options.getSession;
402
+ }
403
+ // Dev mode — skip auth entirely
404
+ if (isDevMode()) {
405
+ // Mount a session endpoint that returns the dev stub
406
+ app.use("/api/auth/session", defineEventHandler(async (event) => {
407
+ if (getMethod(event) !== "GET") {
408
+ setResponseStatus(event, 405);
409
+ return { error: "Method not allowed" };
410
+ }
411
+ return DEV_SESSION;
412
+ }));
413
+ // Mount no-op login/logout so client code doesn't break
414
+ app.use("/api/auth/login", defineEventHandler(() => ({ ok: true })));
415
+ app.use("/api/auth/logout", defineEventHandler(() => ({ ok: true })));
416
+ return false;
417
+ }
418
+ // BYOA with custom getSession — skip token check, mount session/guard routes
419
+ if (customGetSession) {
420
+ // Mount session endpoint
421
+ app.use("/api/auth/session", defineEventHandler(async (event) => {
422
+ if (getMethod(event) !== "GET") {
423
+ setResponseStatus(event, 405);
424
+ return { error: "Method not allowed" };
425
+ }
426
+ const session = await getSession(event);
427
+ return session ?? { error: "Not authenticated" };
428
+ }));
429
+ app.use("/api/auth/login", defineEventHandler(() => ({ ok: true })));
430
+ app.use("/api/auth/logout", defineEventHandler(() => ({ ok: true })));
431
+ // Mount auth guard that delegates to custom getSession
432
+ const byoaLoginHtml = options.loginHtml ?? LOGIN_HTML;
433
+ app.use(defineEventHandler(async (event) => {
434
+ const url = event.node.req.url ?? "/";
435
+ const p = url.split("?")[0];
436
+ if (p === "/api/auth/login" ||
437
+ p === "/api/auth/logout" ||
438
+ p === "/api/auth/session") {
439
+ return;
440
+ }
441
+ // Skip public paths
442
+ if (isPublicPath(url, publicPaths)) {
443
+ return;
444
+ }
445
+ const session = await getSession(event);
446
+ if (session)
447
+ return;
448
+ if (p.startsWith("/api/")) {
449
+ setResponseStatus(event, 401);
450
+ setResponseHeader(event, "Content-Type", "application/json");
451
+ event.node.res.end(JSON.stringify({ error: "Unauthorized" }));
452
+ return;
453
+ }
454
+ setResponseHeader(event, "Content-Type", "text/html");
455
+ event.node.res.end(byoaLoginHtml);
456
+ }));
457
+ console.log("[agent-native] Auth enabled — custom getSession provider.");
458
+ return true;
459
+ }
460
+ // Production — check for tokens
461
+ const tokens = getAccessTokens();
462
+ if (tokens.length === 0) {
463
+ // No tokens set — check if auth is explicitly disabled
464
+ if (process.env.AUTH_DISABLED === "true") {
465
+ authDisabledMode = true;
466
+ console.warn("[agent-native] AUTH_DISABLED=true — running in production without auth. " +
467
+ "Ensure this app is behind infrastructure-level auth (Cloudflare Access, VPN, etc.).");
468
+ // Mount session endpoint — getSession() will return DEV_SESSION
469
+ app.use("/api/auth/session", defineEventHandler(async (event) => {
470
+ if (getMethod(event) !== "GET") {
471
+ setResponseStatus(event, 405);
472
+ return { error: "Method not allowed" };
473
+ }
474
+ return DEV_SESSION;
475
+ }));
476
+ app.use("/api/auth/login", defineEventHandler(() => ({ ok: true })));
477
+ app.use("/api/auth/logout", defineEventHandler(() => ({ ok: true })));
478
+ return false;
479
+ }
480
+ // Refuse to start without auth in production
481
+ const msg = "\n" +
482
+ "=".repeat(70) +
483
+ "\n" +
484
+ " ERROR: Running in production without authentication.\n\n" +
485
+ " Set ACCESS_TOKEN=<your-secret> to enable auth, or\n" +
486
+ " set AUTH_DISABLED=true if this app is behind infrastructure auth.\n\n" +
487
+ " For multi-user access: ACCESS_TOKENS=token1,token2,token3\n" +
488
+ "=".repeat(70) +
489
+ "\n";
490
+ console.error(msg);
491
+ process.exit(1);
492
+ }
493
+ // Production with tokens — mount auth
494
+ pruneExpiredSessions().catch(() => { });
495
+ mountAuthRoutes(app, tokens, publicPaths);
496
+ console.log(`[agent-native] Auth enabled — ${tokens.length} access token(s) configured.`);
497
+ return true;
498
+ }
499
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface CaptchaVerifyResult {
2
+ success: boolean;
3
+ errorCodes?: string[];
4
+ }
5
+ /**
6
+ * Verify a Cloudflare Turnstile token server-side.
7
+ *
8
+ * - If no secret key is provided (param or env), returns success (captcha is opt-in).
9
+ * - In dev mode (NODE_ENV !== "production"), always returns success.
10
+ */
11
+ export declare function verifyCaptcha(token: string, secretKey?: string): Promise<CaptchaVerifyResult>;
12
+ //# sourceMappingURL=captcha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/server/captcha.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAKD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAyC9B"}
@@ -0,0 +1,43 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Cloudflare Turnstile — server-side verification
3
+ // ---------------------------------------------------------------------------
4
+ const TURNSTILE_VERIFY_URL = "https://challenges.cloudflare.com/turnstile/v0/siteverify";
5
+ /**
6
+ * Verify a Cloudflare Turnstile token server-side.
7
+ *
8
+ * - If no secret key is provided (param or env), returns success (captcha is opt-in).
9
+ * - In dev mode (NODE_ENV !== "production"), always returns success.
10
+ */
11
+ export async function verifyCaptcha(token, secretKey) {
12
+ // Dev mode — skip captcha
13
+ if (process.env.NODE_ENV !== "production") {
14
+ return { success: true };
15
+ }
16
+ const secret = secretKey ?? process.env.TURNSTILE_SECRET_KEY;
17
+ // No secret configured — captcha is opt-in, allow through
18
+ if (!secret) {
19
+ console.warn("[captcha] TURNSTILE_SECRET_KEY is not set — captcha verification is disabled. " +
20
+ "Set TURNSTILE_SECRET_KEY and VITE_TURNSTILE_SITE_KEY to enable bot protection.");
21
+ return { success: true };
22
+ }
23
+ // No token provided by client
24
+ if (!token) {
25
+ return { success: false, errorCodes: ["missing-input-response"] };
26
+ }
27
+ try {
28
+ const res = await fetch(TURNSTILE_VERIFY_URL, {
29
+ method: "POST",
30
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
31
+ body: new URLSearchParams({ secret, response: token }),
32
+ });
33
+ const data = (await res.json());
34
+ return {
35
+ success: data.success,
36
+ errorCodes: data["error-codes"],
37
+ };
38
+ }
39
+ catch {
40
+ return { success: false, errorCodes: ["network-error"] };
41
+ }
42
+ }
43
+ //# sourceMappingURL=captcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/server/captcha.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kDAAkD;AAClD,8EAA8E;AAO9E,MAAM,oBAAoB,GACxB,2DAA2D,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,SAAkB;IAElB,0BAA0B;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAE7D,0DAA0D;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CACV,gFAAgF;YAC9E,gFAAgF,CACnF,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;SACvD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;SAChC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;IAC3D,CAAC;AACH,CAAC"}
@@ -1,5 +1,4 @@
1
- import express from "express";
2
- import cors from "cors";
1
+ import { createApp, createRouter } from "h3";
3
2
  export interface EnvKeyConfig {
4
3
  /** Environment variable name (e.g. "HUBSPOT_ACCESS_TOKEN") */
5
4
  key: string;
@@ -9,9 +8,9 @@ export interface EnvKeyConfig {
9
8
  required?: boolean;
10
9
  }
11
10
  export interface CreateServerOptions {
12
- /** CORS options. Pass false to disable. Default: enabled with defaults. */
13
- cors?: cors.CorsOptions | false;
14
- /** JSON body parser limit. Default: "50mb" */
11
+ /** CORS options. Ignored (H3 handles CORS via middleware). Default: enabled. */
12
+ cors?: Record<string, unknown> | false;
13
+ /** JSON body parser limit. Kept for API compatibility (H3 uses readBody). */
15
14
  jsonLimit?: string;
16
15
  /** Custom ping message. Default: reads PING_MESSAGE env var, falls back to "pong" */
17
16
  pingMessage?: string;
@@ -21,12 +20,23 @@ export interface CreateServerOptions {
21
20
  envKeys?: EnvKeyConfig[];
22
21
  }
23
22
  /**
24
- * Create a pre-configured Express app with standard agent-native middleware:
25
- * - CORS
26
- * - JSON body parser (50mb limit)
27
- * - URL-encoded body parser
23
+ * Upsert vars into a .env file, preserving existing structure.
24
+ */
25
+ export declare function upsertEnvFile(envPath: string, vars: Array<{
26
+ key: string;
27
+ value: string;
28
+ }>): void;
29
+ export interface CreateServerResult {
30
+ app: ReturnType<typeof createApp>;
31
+ router: ReturnType<typeof createRouter>;
32
+ }
33
+ /**
34
+ * Create a pre-configured H3 app with standard agent-native setup:
35
+ * - CORS headers via middleware
28
36
  * - /api/ping health check
29
37
  * - /api/env-status and /api/env-vars (when envKeys is provided)
38
+ *
39
+ * Returns { app, router } — mount routes on `router`.
30
40
  */
31
- export declare function createServer(options?: CreateServerOptions): express.Express;
41
+ export declare function createServer(options?: CreateServerOptions): CreateServerResult;
32
42
  //# sourceMappingURL=create-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/server/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AAKxB,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAChC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mGAAmG;IACnG,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAuED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,OAAO,CAmEjB"}
1
+ {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/server/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EAKb,MAAM,IAAI,CAAC;AAKZ,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;IACvC,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mGAAmG;IACnG,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AA0BD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1C,IAAI,CA8CN;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAqGpB"}