@sixthsummit/ship-api 0.0.0-stage → 4.1.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 (556) hide show
  1. package/CHANGELOG.md +605 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +4 -0
  4. package/README.md +58 -2
  5. package/cli/commands/add.js +537 -0
  6. package/cli/commands/contract.js +2 -0
  7. package/cli/commands/create.js +250 -0
  8. package/cli/commands/dev.js +227 -0
  9. package/cli/commands/doctor.js +286 -0
  10. package/cli/commands/generate.js +937 -0
  11. package/cli/commands/graph.js +2 -0
  12. package/cli/commands/migrate-orm.js +1171 -0
  13. package/cli/commands/update.js +37 -0
  14. package/cli/ship-api.js +285 -0
  15. package/lib/app/auth/AuthProvider.d.ts +91 -0
  16. package/lib/app/auth/AuthProvider.d.ts.map +1 -0
  17. package/lib/app/auth/AuthProvider.js +13 -0
  18. package/lib/app/auth/AuthProvider.js.map +1 -0
  19. package/lib/app/auth/adapters/firebase.d.ts +79 -0
  20. package/lib/app/auth/adapters/firebase.d.ts.map +1 -0
  21. package/lib/app/auth/adapters/firebase.js +122 -0
  22. package/lib/app/auth/adapters/firebase.js.map +1 -0
  23. package/lib/app/auth/adapters/jwtCookie.d.ts +55 -0
  24. package/lib/app/auth/adapters/jwtCookie.d.ts.map +1 -0
  25. package/lib/app/auth/adapters/jwtCookie.js +120 -0
  26. package/lib/app/auth/adapters/jwtCookie.js.map +1 -0
  27. package/lib/app/auth/index.d.ts +8 -0
  28. package/lib/app/auth/index.d.ts.map +1 -0
  29. package/lib/app/auth/index.js +7 -0
  30. package/lib/app/auth/index.js.map +1 -0
  31. package/lib/app/auth/jwt/AuthFlow.d.ts +94 -0
  32. package/lib/app/auth/jwt/AuthFlow.d.ts.map +1 -0
  33. package/lib/app/auth/jwt/AuthFlow.js +127 -0
  34. package/lib/app/auth/jwt/AuthFlow.js.map +1 -0
  35. package/lib/app/auth/jwt/DrizzleRefreshTokenStore.d.ts +80 -0
  36. package/lib/app/auth/jwt/DrizzleRefreshTokenStore.d.ts.map +1 -0
  37. package/lib/app/auth/jwt/DrizzleRefreshTokenStore.js +134 -0
  38. package/lib/app/auth/jwt/DrizzleRefreshTokenStore.js.map +1 -0
  39. package/lib/app/auth/jwt/JwtSigner.d.ts +123 -0
  40. package/lib/app/auth/jwt/JwtSigner.d.ts.map +1 -0
  41. package/lib/app/auth/jwt/JwtSigner.js +118 -0
  42. package/lib/app/auth/jwt/JwtSigner.js.map +1 -0
  43. package/lib/app/auth/jwt/RefreshTokenStore.d.ts +97 -0
  44. package/lib/app/auth/jwt/RefreshTokenStore.d.ts.map +1 -0
  45. package/lib/app/auth/jwt/RefreshTokenStore.js +122 -0
  46. package/lib/app/auth/jwt/RefreshTokenStore.js.map +1 -0
  47. package/lib/app/auth/permissionDefinition.d.ts +20 -0
  48. package/lib/app/auth/permissionDefinition.d.ts.map +1 -0
  49. package/lib/app/auth/permissionDefinition.js +2 -0
  50. package/lib/app/auth/permissionDefinition.js.map +1 -0
  51. package/lib/app/context/RequestContext.d.ts +59 -0
  52. package/lib/app/context/RequestContext.d.ts.map +1 -0
  53. package/lib/app/context/RequestContext.js +25 -0
  54. package/lib/app/context/RequestContext.js.map +1 -0
  55. package/lib/app/db/QueryOptions.d.ts +82 -0
  56. package/lib/app/db/QueryOptions.d.ts.map +1 -0
  57. package/lib/app/db/QueryOptions.js +37 -0
  58. package/lib/app/db/QueryOptions.js.map +1 -0
  59. package/lib/app/db/baseFields.d.ts +60 -0
  60. package/lib/app/db/baseFields.d.ts.map +1 -0
  61. package/lib/app/db/baseFields.js +54 -0
  62. package/lib/app/db/baseFields.js.map +1 -0
  63. package/lib/app/db/buildWhere.d.ts +22 -0
  64. package/lib/app/db/buildWhere.d.ts.map +1 -0
  65. package/lib/app/db/buildWhere.js +75 -0
  66. package/lib/app/db/buildWhere.js.map +1 -0
  67. package/lib/app/db/client.d.ts +111 -0
  68. package/lib/app/db/client.d.ts.map +1 -0
  69. package/lib/app/db/client.js +99 -0
  70. package/lib/app/db/client.js.map +1 -0
  71. package/lib/app/db/tenantScoped.d.ts +59 -0
  72. package/lib/app/db/tenantScoped.d.ts.map +1 -0
  73. package/lib/app/db/tenantScoped.js +54 -0
  74. package/lib/app/db/tenantScoped.js.map +1 -0
  75. package/lib/app/db/transaction.d.ts +58 -0
  76. package/lib/app/db/transaction.d.ts.map +1 -0
  77. package/lib/app/db/transaction.js +106 -0
  78. package/lib/app/db/transaction.js.map +1 -0
  79. package/lib/app/health/HealthCheck.d.ts +121 -0
  80. package/lib/app/health/HealthCheck.d.ts.map +1 -0
  81. package/lib/app/health/HealthCheck.js +151 -0
  82. package/lib/app/health/HealthCheck.js.map +1 -0
  83. package/lib/app/health/redisHealthCheck.d.ts +14 -0
  84. package/lib/app/health/redisHealthCheck.d.ts.map +1 -0
  85. package/lib/app/health/redisHealthCheck.js +21 -0
  86. package/lib/app/health/redisHealthCheck.js.map +1 -0
  87. package/lib/app/lifecycle/Bootstrapper.d.ts +92 -0
  88. package/lib/app/lifecycle/Bootstrapper.d.ts.map +1 -0
  89. package/lib/app/lifecycle/Bootstrapper.js +99 -0
  90. package/lib/app/lifecycle/Bootstrapper.js.map +1 -0
  91. package/lib/app/registry/routes.d.ts +89 -0
  92. package/lib/app/registry/routes.d.ts.map +1 -0
  93. package/lib/app/registry/routes.js +72 -0
  94. package/lib/app/registry/routes.js.map +1 -0
  95. package/lib/app/services/DrizzleEntityService.d.ts +123 -0
  96. package/lib/app/services/DrizzleEntityService.d.ts.map +1 -0
  97. package/lib/app/services/DrizzleEntityService.js +342 -0
  98. package/lib/app/services/DrizzleEntityService.js.map +1 -0
  99. package/lib/app/services/RedisProvider.d.ts +52 -0
  100. package/lib/app/services/RedisProvider.d.ts.map +1 -0
  101. package/lib/app/services/RedisProvider.js +75 -0
  102. package/lib/app/services/RedisProvider.js.map +1 -0
  103. package/lib/app/services/cache/Cache.d.ts +70 -0
  104. package/lib/app/services/cache/Cache.d.ts.map +1 -0
  105. package/lib/app/services/cache/Cache.js +18 -0
  106. package/lib/app/services/cache/Cache.js.map +1 -0
  107. package/lib/app/services/cache/InMemoryCache.d.ts +35 -0
  108. package/lib/app/services/cache/InMemoryCache.d.ts.map +1 -0
  109. package/lib/app/services/cache/InMemoryCache.js +76 -0
  110. package/lib/app/services/cache/InMemoryCache.js.map +1 -0
  111. package/lib/app/services/cache/RedisCache.d.ts +99 -0
  112. package/lib/app/services/cache/RedisCache.d.ts.map +1 -0
  113. package/lib/app/services/cache/RedisCache.js +150 -0
  114. package/lib/app/services/cache/RedisCache.js.map +1 -0
  115. package/lib/app/services/cache/cached.d.ts +30 -0
  116. package/lib/app/services/cache/cached.d.ts.map +1 -0
  117. package/lib/app/services/cache/cached.js +38 -0
  118. package/lib/app/services/cache/cached.js.map +1 -0
  119. package/lib/app/services/cache/index.d.ts +5 -0
  120. package/lib/app/services/cache/index.d.ts.map +1 -0
  121. package/lib/app/services/cache/index.js +4 -0
  122. package/lib/app/services/cache/index.js.map +1 -0
  123. package/lib/app/services/cron/defineCron.d.ts +57 -0
  124. package/lib/app/services/cron/defineCron.d.ts.map +1 -0
  125. package/lib/app/services/cron/defineCron.js +15 -0
  126. package/lib/app/services/cron/defineCron.js.map +1 -0
  127. package/lib/app/services/cron/index.d.ts +2 -0
  128. package/lib/app/services/cron/index.d.ts.map +1 -0
  129. package/lib/app/services/cron/index.js +2 -0
  130. package/lib/app/services/cron/index.js.map +1 -0
  131. package/lib/app/services/hooks/LifecycleHooks.d.ts +61 -0
  132. package/lib/app/services/hooks/LifecycleHooks.d.ts.map +1 -0
  133. package/lib/app/services/hooks/LifecycleHooks.js +85 -0
  134. package/lib/app/services/hooks/LifecycleHooks.js.map +1 -0
  135. package/lib/app/services/jobs/JobsManager.d.ts +67 -0
  136. package/lib/app/services/jobs/JobsManager.d.ts.map +1 -0
  137. package/lib/app/services/jobs/JobsManager.js +121 -0
  138. package/lib/app/services/jobs/JobsManager.js.map +1 -0
  139. package/lib/app/services/jobs/bullBoard.d.ts +72 -0
  140. package/lib/app/services/jobs/bullBoard.d.ts.map +1 -0
  141. package/lib/app/services/jobs/bullBoard.js +96 -0
  142. package/lib/app/services/jobs/bullBoard.js.map +1 -0
  143. package/lib/app/services/jobs/defineJob.d.ts +81 -0
  144. package/lib/app/services/jobs/defineJob.d.ts.map +1 -0
  145. package/lib/app/services/jobs/defineJob.js +49 -0
  146. package/lib/app/services/jobs/defineJob.js.map +1 -0
  147. package/lib/app/services/jobs/index.d.ts +4 -0
  148. package/lib/app/services/jobs/index.d.ts.map +1 -0
  149. package/lib/app/services/jobs/index.js +4 -0
  150. package/lib/app/services/jobs/index.js.map +1 -0
  151. package/lib/app/services/rateLimit/InMemorySlidingWindowBackend.d.ts +23 -0
  152. package/lib/app/services/rateLimit/InMemorySlidingWindowBackend.d.ts.map +1 -0
  153. package/lib/app/services/rateLimit/InMemorySlidingWindowBackend.js +51 -0
  154. package/lib/app/services/rateLimit/InMemorySlidingWindowBackend.js.map +1 -0
  155. package/lib/app/services/rateLimit/RateLimitBackend.d.ts +41 -0
  156. package/lib/app/services/rateLimit/RateLimitBackend.d.ts.map +1 -0
  157. package/lib/app/services/rateLimit/RateLimitBackend.js +19 -0
  158. package/lib/app/services/rateLimit/RateLimitBackend.js.map +1 -0
  159. package/lib/app/services/rateLimit/RedisSlidingWindowBackend.d.ts +16 -0
  160. package/lib/app/services/rateLimit/RedisSlidingWindowBackend.d.ts.map +1 -0
  161. package/lib/app/services/rateLimit/RedisSlidingWindowBackend.js +80 -0
  162. package/lib/app/services/rateLimit/RedisSlidingWindowBackend.js.map +1 -0
  163. package/lib/app/services/rateLimit/index.d.ts +4 -0
  164. package/lib/app/services/rateLimit/index.d.ts.map +1 -0
  165. package/lib/app/services/rateLimit/index.js +3 -0
  166. package/lib/app/services/rateLimit/index.js.map +1 -0
  167. package/lib/app/services/storage/DiskStorageAdapter.d.ts +62 -0
  168. package/lib/app/services/storage/DiskStorageAdapter.d.ts.map +1 -0
  169. package/lib/app/services/storage/DiskStorageAdapter.js +295 -0
  170. package/lib/app/services/storage/DiskStorageAdapter.js.map +1 -0
  171. package/lib/app/services/storage/GCSStorageAdapter.d.ts +44 -0
  172. package/lib/app/services/storage/GCSStorageAdapter.d.ts.map +1 -0
  173. package/lib/app/services/storage/GCSStorageAdapter.js +133 -0
  174. package/lib/app/services/storage/GCSStorageAdapter.js.map +1 -0
  175. package/lib/app/services/storage/S3StorageAdapter.d.ts +57 -0
  176. package/lib/app/services/storage/S3StorageAdapter.d.ts.map +1 -0
  177. package/lib/app/services/storage/S3StorageAdapter.js +162 -0
  178. package/lib/app/services/storage/S3StorageAdapter.js.map +1 -0
  179. package/lib/app/services/storage/StorageService.d.ts +88 -0
  180. package/lib/app/services/storage/StorageService.d.ts.map +1 -0
  181. package/lib/app/services/storage/StorageService.js +18 -0
  182. package/lib/app/services/storage/StorageService.js.map +1 -0
  183. package/lib/app/services/storage/index.d.ts +5 -0
  184. package/lib/app/services/storage/index.d.ts.map +1 -0
  185. package/lib/app/services/storage/index.js +4 -0
  186. package/lib/app/services/storage/index.js.map +1 -0
  187. package/lib/app/utils/ContextValidators.d.ts +46 -0
  188. package/lib/app/utils/ContextValidators.d.ts.map +1 -0
  189. package/lib/app/utils/ContextValidators.js +81 -0
  190. package/lib/app/utils/ContextValidators.js.map +1 -0
  191. package/lib/app/utils/defineEnv.d.ts +80 -0
  192. package/lib/app/utils/defineEnv.d.ts.map +1 -0
  193. package/lib/app/utils/defineEnv.js +95 -0
  194. package/lib/app/utils/defineEnv.js.map +1 -0
  195. package/lib/client.d.ts +139 -0
  196. package/lib/client.d.ts.map +1 -0
  197. package/lib/client.js +98 -0
  198. package/lib/client.js.map +1 -0
  199. package/lib/contract/application.d.ts +3 -0
  200. package/lib/contract/application.d.ts.map +1 -0
  201. package/lib/contract/application.js +2 -0
  202. package/lib/contract/application.js.map +1 -0
  203. package/lib/contract/client.d.ts +3 -0
  204. package/lib/contract/client.d.ts.map +1 -0
  205. package/lib/contract/client.js +3 -0
  206. package/lib/contract/client.js.map +1 -0
  207. package/lib/contract/index.d.ts +3 -0
  208. package/lib/contract/index.d.ts.map +1 -0
  209. package/lib/contract/index.js +3 -0
  210. package/lib/contract/index.js.map +1 -0
  211. package/lib/contract/manifest.d.ts +3 -0
  212. package/lib/contract/manifest.d.ts.map +1 -0
  213. package/lib/contract/manifest.js +2 -0
  214. package/lib/contract/manifest.js.map +1 -0
  215. package/lib/contract/openapi.d.ts +3 -0
  216. package/lib/contract/openapi.d.ts.map +1 -0
  217. package/lib/contract/openapi.js +3 -0
  218. package/lib/contract/openapi.js.map +1 -0
  219. package/lib/contract/project.d.ts +3 -0
  220. package/lib/contract/project.d.ts.map +1 -0
  221. package/lib/contract/project.js +3 -0
  222. package/lib/contract/project.js.map +1 -0
  223. package/lib/contract/schema.d.ts +3 -0
  224. package/lib/contract/schema.d.ts.map +1 -0
  225. package/lib/contract/schema.js +3 -0
  226. package/lib/contract/schema.js.map +1 -0
  227. package/lib/drizzle/index.d.ts +3 -0
  228. package/lib/drizzle/index.d.ts.map +1 -0
  229. package/lib/drizzle/index.js +3 -0
  230. package/lib/drizzle/index.js.map +1 -0
  231. package/lib/hono/auth.d.ts +6 -0
  232. package/lib/hono/auth.d.ts.map +1 -0
  233. package/lib/hono/auth.js +54 -0
  234. package/lib/hono/auth.js.map +1 -0
  235. package/lib/hono/index.d.ts +4 -0
  236. package/lib/hono/index.d.ts.map +1 -0
  237. package/lib/hono/index.js +4 -0
  238. package/lib/hono/index.js.map +1 -0
  239. package/lib/http/app/createApp.d.ts +132 -0
  240. package/lib/http/app/createApp.d.ts.map +1 -0
  241. package/lib/http/app/createApp.js +215 -0
  242. package/lib/http/app/createApp.js.map +1 -0
  243. package/lib/http/app/devRoutes.d.ts +31 -0
  244. package/lib/http/app/devRoutes.d.ts.map +1 -0
  245. package/lib/http/app/devRoutes.js +145 -0
  246. package/lib/http/app/devRoutes.js.map +1 -0
  247. package/lib/http/app/errors.d.ts +45 -0
  248. package/lib/http/app/errors.d.ts.map +1 -0
  249. package/lib/http/app/errors.js +93 -0
  250. package/lib/http/app/errors.js.map +1 -0
  251. package/lib/http/app/health.d.ts +66 -0
  252. package/lib/http/app/health.d.ts.map +1 -0
  253. package/lib/http/app/health.js +104 -0
  254. package/lib/http/app/health.js.map +1 -0
  255. package/lib/http/errors/AppError.d.ts +10 -0
  256. package/lib/http/errors/AppError.d.ts.map +1 -0
  257. package/lib/http/errors/AppError.js +19 -0
  258. package/lib/http/errors/AppError.js.map +1 -0
  259. package/lib/http/errors/AuthenticationError.d.ts +8 -0
  260. package/lib/http/errors/AuthenticationError.d.ts.map +1 -0
  261. package/lib/http/errors/AuthenticationError.js +10 -0
  262. package/lib/http/errors/AuthenticationError.js.map +1 -0
  263. package/lib/http/errors/AuthorizationError.d.ts +8 -0
  264. package/lib/http/errors/AuthorizationError.d.ts.map +1 -0
  265. package/lib/http/errors/AuthorizationError.js +10 -0
  266. package/lib/http/errors/AuthorizationError.js.map +1 -0
  267. package/lib/http/errors/BadRequestError.d.ts +8 -0
  268. package/lib/http/errors/BadRequestError.d.ts.map +1 -0
  269. package/lib/http/errors/BadRequestError.js +10 -0
  270. package/lib/http/errors/BadRequestError.js.map +1 -0
  271. package/lib/http/errors/ConflictError.d.ts +8 -0
  272. package/lib/http/errors/ConflictError.d.ts.map +1 -0
  273. package/lib/http/errors/ConflictError.js +10 -0
  274. package/lib/http/errors/ConflictError.js.map +1 -0
  275. package/lib/http/errors/InternalServerError.d.ts +8 -0
  276. package/lib/http/errors/InternalServerError.d.ts.map +1 -0
  277. package/lib/http/errors/InternalServerError.js +10 -0
  278. package/lib/http/errors/InternalServerError.js.map +1 -0
  279. package/lib/http/errors/NotFoundError.d.ts +8 -0
  280. package/lib/http/errors/NotFoundError.d.ts.map +1 -0
  281. package/lib/http/errors/NotFoundError.js +10 -0
  282. package/lib/http/errors/NotFoundError.js.map +1 -0
  283. package/lib/http/errors/RateLimitError.d.ts +13 -0
  284. package/lib/http/errors/RateLimitError.d.ts.map +1 -0
  285. package/lib/http/errors/RateLimitError.js +16 -0
  286. package/lib/http/errors/RateLimitError.js.map +1 -0
  287. package/lib/http/errors/ServiceUnavailableError.d.ts +8 -0
  288. package/lib/http/errors/ServiceUnavailableError.d.ts.map +1 -0
  289. package/lib/http/errors/ServiceUnavailableError.js +10 -0
  290. package/lib/http/errors/ServiceUnavailableError.js.map +1 -0
  291. package/lib/http/errors/ValidationError.d.ts +9 -0
  292. package/lib/http/errors/ValidationError.d.ts.map +1 -0
  293. package/lib/http/errors/ValidationError.js +12 -0
  294. package/lib/http/errors/ValidationError.js.map +1 -0
  295. package/lib/http/errors/index.d.ts +11 -0
  296. package/lib/http/errors/index.d.ts.map +1 -0
  297. package/lib/http/errors/index.js +12 -0
  298. package/lib/http/errors/index.js.map +1 -0
  299. package/lib/http/middleware/apiKey.d.ts +9 -0
  300. package/lib/http/middleware/apiKey.d.ts.map +1 -0
  301. package/lib/http/middleware/apiKey.js +71 -0
  302. package/lib/http/middleware/apiKey.js.map +1 -0
  303. package/lib/http/middleware/csrf.d.ts +63 -0
  304. package/lib/http/middleware/csrf.d.ts.map +1 -0
  305. package/lib/http/middleware/csrf.js +169 -0
  306. package/lib/http/middleware/csrf.js.map +1 -0
  307. package/lib/http/middleware/httpLogger.d.ts +39 -0
  308. package/lib/http/middleware/httpLogger.d.ts.map +1 -0
  309. package/lib/http/middleware/httpLogger.js +118 -0
  310. package/lib/http/middleware/httpLogger.js.map +1 -0
  311. package/lib/http/middleware/idempotency.d.ts +48 -0
  312. package/lib/http/middleware/idempotency.d.ts.map +1 -0
  313. package/lib/http/middleware/idempotency.js +180 -0
  314. package/lib/http/middleware/idempotency.js.map +1 -0
  315. package/lib/http/middleware/rateLimit.d.ts +105 -0
  316. package/lib/http/middleware/rateLimit.d.ts.map +1 -0
  317. package/lib/http/middleware/rateLimit.js +84 -0
  318. package/lib/http/middleware/rateLimit.js.map +1 -0
  319. package/lib/http/middleware/requireAuth.d.ts +58 -0
  320. package/lib/http/middleware/requireAuth.d.ts.map +1 -0
  321. package/lib/http/middleware/requireAuth.js +63 -0
  322. package/lib/http/middleware/requireAuth.js.map +1 -0
  323. package/lib/http/middleware/requirePermission.d.ts +23 -0
  324. package/lib/http/middleware/requirePermission.d.ts.map +1 -0
  325. package/lib/http/middleware/requirePermission.js +50 -0
  326. package/lib/http/middleware/requirePermission.js.map +1 -0
  327. package/lib/http/middleware/resolveTenant.d.ts +41 -0
  328. package/lib/http/middleware/resolveTenant.d.ts.map +1 -0
  329. package/lib/http/middleware/resolveTenant.js +17 -0
  330. package/lib/http/middleware/resolveTenant.js.map +1 -0
  331. package/lib/http/streaming/sse.d.ts +31 -0
  332. package/lib/http/streaming/sse.d.ts.map +1 -0
  333. package/lib/http/streaming/sse.js +11 -0
  334. package/lib/http/streaming/sse.js.map +1 -0
  335. package/lib/http/streaming/streamLLM.d.ts +94 -0
  336. package/lib/http/streaming/streamLLM.d.ts.map +1 -0
  337. package/lib/http/streaming/streamLLM.js +94 -0
  338. package/lib/http/streaming/streamLLM.js.map +1 -0
  339. package/lib/http/utils/authCookies.d.ts +74 -0
  340. package/lib/http/utils/authCookies.d.ts.map +1 -0
  341. package/lib/http/utils/authCookies.js +102 -0
  342. package/lib/http/utils/authCookies.js.map +1 -0
  343. package/lib/http/utils/clientIp.d.ts +85 -0
  344. package/lib/http/utils/clientIp.d.ts.map +1 -0
  345. package/lib/http/utils/clientIp.js +249 -0
  346. package/lib/http/utils/clientIp.js.map +1 -0
  347. package/lib/http/utils/index.d.ts +4 -0
  348. package/lib/http/utils/index.d.ts.map +1 -0
  349. package/lib/http/utils/index.js +5 -0
  350. package/lib/http/utils/index.js.map +1 -0
  351. package/lib/http/utils/metaTags.d.ts +49 -0
  352. package/lib/http/utils/metaTags.d.ts.map +1 -0
  353. package/lib/http/utils/metaTags.js +32 -0
  354. package/lib/http/utils/metaTags.js.map +1 -0
  355. package/lib/http/utils/publicSuffix.d.ts +34 -0
  356. package/lib/http/utils/publicSuffix.d.ts.map +1 -0
  357. package/lib/http/utils/publicSuffix.js +276 -0
  358. package/lib/http/utils/publicSuffix.js.map +1 -0
  359. package/lib/http/utils/uploads.d.ts +92 -0
  360. package/lib/http/utils/uploads.d.ts.map +1 -0
  361. package/lib/http/utils/uploads.js +126 -0
  362. package/lib/http/utils/uploads.js.map +1 -0
  363. package/lib/http/utils/validate.d.ts +41 -0
  364. package/lib/http/utils/validate.d.ts.map +1 -0
  365. package/lib/http/utils/validate.js +55 -0
  366. package/lib/http/utils/validate.js.map +1 -0
  367. package/lib/http/utils/webhooks.d.ts +63 -0
  368. package/lib/http/utils/webhooks.d.ts.map +1 -0
  369. package/lib/http/utils/webhooks.js +133 -0
  370. package/lib/http/utils/webhooks.js.map +1 -0
  371. package/lib/http/ws/auth.d.ts +46 -0
  372. package/lib/http/ws/auth.d.ts.map +1 -0
  373. package/lib/http/ws/auth.js +123 -0
  374. package/lib/http/ws/auth.js.map +1 -0
  375. package/lib/index.d.ts +80 -0
  376. package/lib/index.d.ts.map +1 -0
  377. package/lib/index.js +61 -0
  378. package/lib/index.js.map +1 -0
  379. package/lib/kernel/index.d.ts +3 -0
  380. package/lib/kernel/index.d.ts.map +1 -0
  381. package/lib/kernel/index.js +3 -0
  382. package/lib/kernel/index.js.map +1 -0
  383. package/lib/libraries/.gitkeep +0 -0
  384. package/lib/libraries/ai/CHANGELOG.md +17 -0
  385. package/lib/libraries/ai/README.md +164 -0
  386. package/lib/libraries/ai/adapters/AnthropicAdapter.ts +382 -0
  387. package/lib/libraries/ai/adapters/LLMProvider.ts +76 -0
  388. package/lib/libraries/ai/adapters/OpenAIAdapter.ts +466 -0
  389. package/lib/libraries/ai/experimental/index.ts +20 -0
  390. package/lib/libraries/ai/index.ts +128 -0
  391. package/lib/libraries/ai/library.json +19 -0
  392. package/lib/libraries/ai/loop/agentLoop.ts +377 -0
  393. package/lib/libraries/ai/prompts/definePrompt.ts +0 -0
  394. package/lib/libraries/ai/rag/retrieveAndAnswer.ts +177 -0
  395. package/lib/libraries/ai/streaming/streamLLM.ts +94 -0
  396. package/lib/libraries/ai/structured/completeStructured.ts +143 -0
  397. package/lib/libraries/ai/tokens/Tokenizer.ts +216 -0
  398. package/lib/libraries/ai/tools/defineTool.ts +208 -0
  399. package/lib/libraries/ai/types.ts +260 -0
  400. package/lib/libraries/chunking/ChunkingService.ts +103 -0
  401. package/lib/libraries/chunking/README.md +104 -0
  402. package/lib/libraries/chunking/docs/api-reference.md +549 -0
  403. package/lib/libraries/chunking/docs/best-practices.md +321 -0
  404. package/lib/libraries/chunking/docs/code-organization.md +538 -0
  405. package/lib/libraries/chunking/docs/configuration.md +418 -0
  406. package/lib/libraries/chunking/docs/index.md +236 -0
  407. package/lib/libraries/chunking/docs/quick-start.md +298 -0
  408. package/lib/libraries/chunking/docs/strategies.md +407 -0
  409. package/lib/libraries/chunking/docs/summary.md +258 -0
  410. package/lib/libraries/chunking/docs/troubleshooting.md +527 -0
  411. package/lib/libraries/chunking/index.ts +17 -0
  412. package/lib/libraries/chunking/library.json +16 -0
  413. package/lib/libraries/chunking/strategies/ChunkingStrategy.ts +13 -0
  414. package/lib/libraries/chunking/strategies/FixedLengthChunkingStrategy.ts +88 -0
  415. package/lib/libraries/chunking/strategies/SemanticChunkingStrategy.ts +389 -0
  416. package/lib/libraries/chunking/strategies/SlidingWindowChunkingStrategy.ts +258 -0
  417. package/lib/libraries/chunking/types/index.ts +63 -0
  418. package/lib/libraries/email/EmailService.ts +591 -0
  419. package/lib/libraries/email/README.md +777 -0
  420. package/lib/libraries/email/TemplateRegistry.ts +148 -0
  421. package/lib/libraries/email/TemplateRenderer.ts +273 -0
  422. package/lib/libraries/email/index.ts +4 -0
  423. package/lib/libraries/email/initializeEmailService.ts +60 -0
  424. package/lib/libraries/email/library.json +12 -0
  425. package/lib/libraries/email/types/EmailAddress.ts +4 -0
  426. package/lib/libraries/email/types/EmailAttachment.ts +11 -0
  427. package/lib/libraries/email/types/EmailTag.ts +9 -0
  428. package/lib/libraries/email/types/EmailTemplate.ts +124 -0
  429. package/lib/libraries/email/types/SendBatchEmailsOptions.ts +9 -0
  430. package/lib/libraries/email/types/SendBatchEmailsResult.ts +9 -0
  431. package/lib/libraries/email/types/SendEmailOptions.ts +33 -0
  432. package/lib/libraries/email/types/SendEmailResult.ts +9 -0
  433. package/lib/libraries/email/types/index.ts +8 -0
  434. package/lib/libraries/weaviate/QueryBuilder.ts +292 -0
  435. package/lib/libraries/weaviate/README.md +284 -0
  436. package/lib/libraries/weaviate/Weaviate.ts +1419 -0
  437. package/lib/libraries/weaviate/WeaviateConfig.ts +268 -0
  438. package/lib/libraries/weaviate/docs/.gitkeep +1 -0
  439. package/lib/libraries/weaviate/docs/API_REFERENCE.md +1067 -0
  440. package/lib/libraries/weaviate/docs/CONFIGURATION.md +320 -0
  441. package/lib/libraries/weaviate/docs/ERROR_HANDLING.md +271 -0
  442. package/lib/libraries/weaviate/docs/MULTI_TENANCY.md +348 -0
  443. package/lib/libraries/weaviate/docs/PERFORMANCE.md +602 -0
  444. package/lib/libraries/weaviate/docs/PLUGIN_DEVELOPMENT.md +547 -0
  445. package/lib/libraries/weaviate/docs/QUICK_START.md +443 -0
  446. package/lib/libraries/weaviate/docs/README.md +269 -0
  447. package/lib/libraries/weaviate/docs/SCHEMA_GUIDE.md +630 -0
  448. package/lib/libraries/weaviate/docs/WEAVIATE_README.md +520 -0
  449. package/lib/libraries/weaviate/errors/WeaviateError.ts +92 -0
  450. package/lib/libraries/weaviate/errors/index.ts +1 -0
  451. package/lib/libraries/weaviate/index.ts +35 -0
  452. package/lib/libraries/weaviate/library.json +26 -0
  453. package/lib/libraries/weaviate/plugins/index.ts +2 -0
  454. package/lib/libraries/weaviate/schemas/SchemaRegistry.ts +284 -0
  455. package/lib/libraries/weaviate/schemas/index.ts +2 -0
  456. package/lib/libraries/weaviate/types/BM25SearchOptions.ts +9 -0
  457. package/lib/libraries/weaviate/types/ExtendedWeaviateClient.ts +7 -0
  458. package/lib/libraries/weaviate/types/HybridSearchOptions.ts +11 -0
  459. package/lib/libraries/weaviate/types/MultiTenancy.ts +81 -0
  460. package/lib/libraries/weaviate/types/Plugin.ts +17 -0
  461. package/lib/libraries/weaviate/types/SchemaConfig.ts +25 -0
  462. package/lib/libraries/weaviate/types/SearchMethod.ts +8 -0
  463. package/lib/libraries/weaviate/types/SearchOptions.ts +16 -0
  464. package/lib/libraries/weaviate/types/SearchRequest.ts +19 -0
  465. package/lib/libraries/weaviate/types/SearchResult.ts +16 -0
  466. package/lib/libraries/weaviate/types/SearchableField.ts +87 -0
  467. package/lib/libraries/weaviate/types/VectorIndexConfig.ts +19 -0
  468. package/lib/libraries/weaviate/types/VectorSearchOptions.ts +18 -0
  469. package/lib/libraries/weaviate/types/VectorizerConfig.ts +8 -0
  470. package/lib/libraries/weaviate/types/index.ts +29 -0
  471. package/lib/libraries/weaviate/utils/TenantContextManager.ts +94 -0
  472. package/lib/modules/accounts/index.ts +47 -0
  473. package/lib/modules/accounts/module.json +15 -0
  474. package/lib/modules/accounts/permissions.ts +33 -0
  475. package/lib/modules/accounts/routes.ts +200 -0
  476. package/lib/modules/accounts/schema.ts +219 -0
  477. package/lib/modules/accounts/services/AccountService.ts +44 -0
  478. package/lib/modules/accounts/validation/schemas.ts +70 -0
  479. package/lib/modules/oauth/adapters/GmailOAuthAdapter.ts +35 -0
  480. package/lib/modules/oauth/adapters/GoogleOAuthAdapter.ts +278 -0
  481. package/lib/modules/oauth/adapters/MicrosoftOAuthAdapter.ts +269 -0
  482. package/lib/modules/oauth/adapters/MockOAuthAdapter.ts +138 -0
  483. package/lib/modules/oauth/adapters/OAuthAdapter.ts +211 -0
  484. package/lib/modules/oauth/adapters/OAuthAdapterRegistry.ts +77 -0
  485. package/lib/modules/oauth/adapters/OutlookOAuthAdapter.ts +38 -0
  486. package/lib/modules/oauth/index.ts +79 -0
  487. package/lib/modules/oauth/module.json +23 -0
  488. package/lib/modules/oauth/permissions.ts +39 -0
  489. package/lib/modules/oauth/routes.ts +497 -0
  490. package/lib/modules/oauth/schema.ts +127 -0
  491. package/lib/modules/oauth/services/OAuthConnectionService.ts +147 -0
  492. package/lib/modules/oauth/state.ts +234 -0
  493. package/lib/modules/oauth/stateJtiCache.ts +85 -0
  494. package/lib/modules/oauth/verifyIdToken.ts +178 -0
  495. package/lib/modules/outbox/EventEmitter.ts +106 -0
  496. package/lib/modules/outbox/OutboxDrainer.ts +163 -0
  497. package/lib/modules/outbox/handlers/EventHandler.ts +115 -0
  498. package/lib/modules/outbox/index.ts +43 -0
  499. package/lib/modules/outbox/module.json +15 -0
  500. package/lib/modules/outbox/permissions.ts +36 -0
  501. package/lib/modules/outbox/routes.ts +219 -0
  502. package/lib/modules/outbox/schema.ts +207 -0
  503. package/lib/modules/outbox/services/OutboxEventService.ts +223 -0
  504. package/lib/observability/logger.d.ts +30 -0
  505. package/lib/observability/logger.d.ts.map +1 -0
  506. package/lib/observability/logger.js +110 -0
  507. package/lib/observability/logger.js.map +1 -0
  508. package/lib/observability/metrics.d.ts +3 -0
  509. package/lib/observability/metrics.d.ts.map +1 -0
  510. package/lib/observability/metrics.js +3 -0
  511. package/lib/observability/metrics.js.map +1 -0
  512. package/lib/observability/otel.d.ts +3 -0
  513. package/lib/observability/otel.d.ts.map +1 -0
  514. package/lib/observability/otel.js +3 -0
  515. package/lib/observability/otel.js.map +1 -0
  516. package/lib/observability/safeErrorFields.d.ts +14 -0
  517. package/lib/observability/safeErrorFields.d.ts.map +1 -0
  518. package/lib/observability/safeErrorFields.js +14 -0
  519. package/lib/observability/safeErrorFields.js.map +1 -0
  520. package/lib/observability/tracing.d.ts +3 -0
  521. package/lib/observability/tracing.d.ts.map +1 -0
  522. package/lib/observability/tracing.js +3 -0
  523. package/lib/observability/tracing.js.map +1 -0
  524. package/lib/package.json +4 -0
  525. package/lib/testing.d.ts +3 -0
  526. package/lib/testing.d.ts.map +1 -0
  527. package/lib/testing.js +3 -0
  528. package/lib/testing.js.map +1 -0
  529. package/package.json +193 -3
  530. package/templates/default/.claude/agents/qa-brief.md +106 -0
  531. package/templates/default/.claude/commands/sherpa-brief.md +23 -0
  532. package/templates/default/.cursor/rules/api.mdc +80 -0
  533. package/templates/default/.cursor/rules/commits.mdc +88 -0
  534. package/templates/default/.cursor/rules/security.mdc +92 -0
  535. package/templates/default/.cursor/rules/testing.mdc +123 -0
  536. package/templates/default/.cursor/rules/typescript.mdc +86 -0
  537. package/templates/default/.env.example +79 -0
  538. package/templates/default/.github/workflows/sherpa-brief.yml +180 -0
  539. package/templates/default/AGENTS.md +166 -0
  540. package/templates/default/CLAUDE.md +17 -0
  541. package/templates/default/README.md +97 -0
  542. package/templates/default/_gitignore +27 -0
  543. package/templates/default/docker-compose.yml +83 -0
  544. package/templates/default/drizzle.config.ts +34 -0
  545. package/templates/default/eslint.config.mjs +106 -0
  546. package/templates/default/package.json +57 -0
  547. package/templates/default/ship-api.config.ts +21 -0
  548. package/templates/default/src/client.ts +34 -0
  549. package/templates/default/src/config/modules.ts +23 -0
  550. package/templates/default/src/db/schema.ts +26 -0
  551. package/templates/default/src/environment.ts +81 -0
  552. package/templates/default/src/index.test.ts +53 -0
  553. package/templates/default/src/index.ts +11 -0
  554. package/templates/default/src/instrumentation.ts +13 -0
  555. package/templates/default/src/server.ts +90 -0
  556. package/templates/default/tsconfig.json +24 -0
@@ -0,0 +1,215 @@
1
+ import { Hono } from "hono";
2
+ import { cors } from "hono/cors";
3
+ import { routeRegistry, } from "../../app/registry/routes.js";
4
+ import { AUTH_META, getMetaTag, IDEMPOTENCY_META, PERMISSION_META, RATE_LIMIT_META, SCHEMA_META, } from "../utils/metaTags.js";
5
+ import { registerHealthRoutes } from "./health.js";
6
+ /**
7
+ * `Hono<AppEnv>` factory with route-method interception.
8
+ *
9
+ * Every `app.get/post/put/patch/delete` call is wrapped: the wrapper walks
10
+ * the passed handlers, reads any framework metadata tags, pushes a
11
+ * `RouteEntry` to the registry, then delegates to Hono's real method.
12
+ *
13
+ * User code looks identical to plain Hono — no `defineRoute` ceremony, no
14
+ * decorators, no codegen. The metadata is captured invisibly.
15
+ *
16
+ * Routes registered without `validate` / `requireAuth` are still captured —
17
+ * just schema-less / anonymous, which is *correct*: agents see exactly what's
18
+ * there, including unprotected endpoints (which the `ship-reviewer` agent
19
+ * can flag as convention violations).
20
+ */
21
+ export function createApp(opts = {}) {
22
+ const registry = opts.registry ?? routeRegistry;
23
+ const app = new Hono();
24
+ if (opts.cors) {
25
+ validateCorsOptions(opts.cors);
26
+ const corsOpts = {
27
+ origin: opts.cors.origin,
28
+ };
29
+ if (opts.cors.allowMethods)
30
+ corsOpts.allowMethods = Array.from(opts.cors.allowMethods);
31
+ if (opts.cors.allowHeaders)
32
+ corsOpts.allowHeaders = Array.from(opts.cors.allowHeaders);
33
+ if (opts.cors.exposeHeaders)
34
+ corsOpts.exposeHeaders = Array.from(opts.cors.exposeHeaders);
35
+ if (opts.cors.maxAge !== undefined)
36
+ corsOpts.maxAge = opts.cors.maxAge;
37
+ if (opts.cors.credentials !== undefined)
38
+ corsOpts.credentials = opts.cors.credentials;
39
+ app.use("*", cors(corsOpts));
40
+ }
41
+ // Mounted before route interception (so they stay out of the route
42
+ // registry) and before any consumer middleware (Hono runs handlers in
43
+ // registration order and these respond without calling `next`).
44
+ if (opts.health !== false) {
45
+ registerHealthRoutes(app, opts.health ?? {});
46
+ }
47
+ interceptRouteMethods(app, registry);
48
+ return app;
49
+ }
50
+ /**
51
+ * `Hono<AppEnv>` factory for a **module sub-app** — the building block of the
52
+ * v4 mount-at-root composition.
53
+ *
54
+ * A module's `defineXxxRoutes(createModuleApp("xxx"), deps)` builds its own
55
+ * bounded route chain on a fresh app, which the consumer mounts onto the root
56
+ * with `root.route("/", buildXxxApp(deps))`. Splitting each module into its
57
+ * own sub-app (rather than chaining every module's routes onto one app) keeps
58
+ * each TypeScript route-type instantiation bounded, so the `hc()` typed client
59
+ * scales to many modules without `tsc` blowing its instantiation budget.
60
+ *
61
+ * Identical to `createApp` except:
62
+ * - it wires **no CORS** and is not meant to be the server root (global
63
+ * cross-cutting middleware — `cors`, `httpLogger`, `registerErrorHandlers`
64
+ * — belong on the root app the sub-app is mounted onto, never here);
65
+ * - every captured `RouteEntry` is stamped with `module`, lighting up the
66
+ * Module column in `/dev/routes` and the `module` filter in `list_routes`;
67
+ * - `app.onError`, `app.notFound`, and global `app.use("*", …)` are
68
+ * **guarded** — they throw at dev time, because a sub-app error/not-found
69
+ * handler silently shadows the root's uniform AppError shape and global
70
+ * sub-app middleware breaks the root-wraps-everything ordering. (Per-route
71
+ * middleware — `requireAuth`/`requirePermission`/`validate` passed as route
72
+ * handlers — and **path-scoped** `app.use("/x/*", …)` are still allowed.)
73
+ *
74
+ * Because module sub-apps register their **absolute** paths (`/accounts`,
75
+ * `/accounts/:id`) and are mounted at the root (`route("/", …)`), the registry
76
+ * records the same absolute paths it always has — `execute_route`,
77
+ * `find_route_collisions`, and `/dev/routes` need no prefix math.
78
+ */
79
+ export function createModuleApp(moduleName, opts = {}) {
80
+ const registry = opts.registry ?? routeRegistry;
81
+ const app = new Hono();
82
+ interceptRouteMethods(app, registry, moduleName);
83
+ guardCrossCuttingMethods(app, moduleName);
84
+ return app;
85
+ }
86
+ /**
87
+ * Make a module sub-app fail fast when a developer reaches for a cross-cutting
88
+ * concern that belongs on the root. `onError` / `notFound` / global `use("*")`
89
+ * all "work" on a sub-app but silently break the contract — a sub-app
90
+ * `onError` shadows `registerErrorHandlers`' uniform error shape, and global
91
+ * sub-app middleware doesn't wrap sibling modules. We throw at dev time so the
92
+ * mistake surfaces as a clear error, not a production surprise.
93
+ *
94
+ * Hono reads the stored `errorHandler` / `notFoundHandler` properties at
95
+ * request time (never the public methods), and `.route()` merges a sub-app's
96
+ * pre-built routes without calling these — so overriding the methods only
97
+ * intercepts the developer's call, never Hono's internals.
98
+ */
99
+ function guardCrossCuttingMethods(app, moduleName) {
100
+ const reject = (method, why) => {
101
+ throw new Error(`createModuleApp("${moduleName}"): ${method} is not allowed on a module sub-app — ${why} ` +
102
+ `Put it on the root app you mount this sub-app onto (the one from ` +
103
+ `\`createApp(...)\`, mounted via \`root.route("/", build${capitalize(moduleName)}App(deps))\`), not here.`);
104
+ };
105
+ const methods = app;
106
+ methods.onError = () => reject("app.onError(...)", "a sub-app error handler silently shadows the root's uniform AppError JSON shape (registerErrorHandlers).");
107
+ methods.notFound = () => reject("app.notFound(...)", "a sub-app not-found handler shadows the root's 404 handling.");
108
+ const originalUse = app.use.bind(app);
109
+ methods.use = (...args) => {
110
+ // Global middleware = path-less (`use(mw)`) or wildcard (`use("*", mw)`).
111
+ // That's the cross-cutting footgun; path-scoped `use("/x/*", mw)` is fine.
112
+ const first = args[0];
113
+ if (typeof first !== "string" || first === "*") {
114
+ reject('app.use("*", ...)', "cross-cutting middleware (httpLogger/request-context, cors) must wrap every module from the root.");
115
+ }
116
+ return originalUse(...args);
117
+ };
118
+ }
119
+ function capitalize(s) {
120
+ return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1);
121
+ }
122
+ /**
123
+ * Wrap `app.get/post/put/patch/delete` so each registration pushes a
124
+ * `RouteEntry` to `registry` before delegating to Hono's real method. When
125
+ * `moduleName` is supplied (sub-apps via `createModuleApp`) the entry is
126
+ * tagged with it. User code looks like plain Hono — the capture is invisible.
127
+ */
128
+ function interceptRouteMethods(app, registry, moduleName) {
129
+ const methods = [
130
+ { name: "get", verb: "GET" },
131
+ { name: "post", verb: "POST" },
132
+ { name: "put", verb: "PUT" },
133
+ { name: "patch", verb: "PATCH" },
134
+ { name: "delete", verb: "DELETE" },
135
+ ];
136
+ for (const { name, verb } of methods) {
137
+ const original = app[name].bind(app);
138
+ app[name] = (path, ...handlers) => {
139
+ const entry = buildRouteEntry(verb, path, handlers);
140
+ if (moduleName !== undefined)
141
+ entry.module = moduleName;
142
+ registry.add(entry);
143
+ // Hono's overloaded `app.METHOD` accepts varargs of MiddlewareHandler
144
+ // followed by the final handler. Forward as-is.
145
+ return original(path, ...handlers);
146
+ };
147
+ }
148
+ }
149
+ /**
150
+ * Reject the `origin: '*'` + `credentials: true` combo at construction
151
+ * time. This combination is invalid per the CORS spec — browsers
152
+ * refuse it — but the framework defends against it explicitly so a
153
+ * misconfigured deployment fails on boot rather than at runtime when
154
+ * a non-compliant HTTP client (or a tool that ignores the response
155
+ * `Access-Control-*` headers) reveals the bypass.
156
+ */
157
+ function validateCorsOptions(opts) {
158
+ if (opts.credentials !== true)
159
+ return;
160
+ const origin = opts.origin;
161
+ if (origin === "*") {
162
+ throw new Error("createApp: cors.origin: '*' is incompatible with credentials: true. " +
163
+ "Pass an explicit allowlist (string[] of origins) instead.");
164
+ }
165
+ if (Array.isArray(origin) && origin.length === 1 && origin[0] === "*") {
166
+ throw new Error("createApp: cors.origin: ['*'] is incompatible with credentials: true. " +
167
+ "Pass an explicit allowlist (string[] of origins) instead.");
168
+ }
169
+ if (Array.isArray(origin) && origin.includes("*")) {
170
+ throw new Error("createApp: cors.origin contains '*' alongside other entries, which " +
171
+ "is ambiguous under credentials: true. Pass only explicit origins.");
172
+ }
173
+ }
174
+ function buildRouteEntry(method, path, handlers) {
175
+ const entry = {
176
+ method,
177
+ path,
178
+ auth: { required: false },
179
+ permissions: [],
180
+ schemas: {},
181
+ };
182
+ for (const handler of handlers) {
183
+ const schema = getMetaTag(handler, SCHEMA_META);
184
+ if (schema)
185
+ entry.schemas[schema.target] = schema.schema;
186
+ const auth = getMetaTag(handler, AUTH_META);
187
+ if (auth) {
188
+ entry.auth = {
189
+ required: auth.required,
190
+ provider: auth.providerName,
191
+ };
192
+ }
193
+ const permission = getMetaTag(handler, PERMISSION_META);
194
+ if (permission) {
195
+ // Multiple `requirePermission(...)` middlewares on one route → union.
196
+ for (const slug of permission.permissions) {
197
+ if (!entry.permissions.includes(slug))
198
+ entry.permissions.push(slug);
199
+ }
200
+ }
201
+ const rateLimit = getMetaTag(handler, RATE_LIMIT_META);
202
+ if (rateLimit) {
203
+ entry.rateLimit = {
204
+ windowMs: rateLimit.windowMs,
205
+ max: rateLimit.max,
206
+ scope: rateLimit.scope,
207
+ };
208
+ }
209
+ const idempotency = getMetaTag(handler, IDEMPOTENCY_META);
210
+ if (idempotency)
211
+ entry.idempotent = true;
212
+ }
213
+ return entry;
214
+ }
215
+ //# sourceMappingURL=createApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createApp.js","sourceRoot":"","sources":["../../../src/http/app/createApp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Hono } from "hono";
2
+ import { type RouteRegistry } from "../../app/registry/routes.js";
3
+ /**
4
+ * `registerDevRoutes(app, opts?)` — mounts `/dev/routes` (HTML index) +
5
+ * `/dev/routes.json` (JSON dump) backed by the framework `RouteRegistry`.
6
+ *
7
+ * Recovers the human-discoverability we deliberately gave up by deferring
8
+ * Scalar `/docs` / OpenAPI to v4.x. For internal devs joining the project
9
+ * mid-stream the HTML index is "what routes does this app actually serve,
10
+ * with what auth requirements, with what request schemas?" — answered
11
+ * from runtime data, never stale.
12
+ *
13
+ * **Production safety**: gated by `opts.enabled` (default true only when
14
+ * `WORKER_MODE === "local"` or `NODE_ENV` is `local` / `dev` / `development`).
15
+ * Pass `enabled: true` to force-enable in other environments — e.g.,
16
+ * staging behind an admin gateway. Production should NOT enable this; the
17
+ * registry data is purely useful, not authenticated.
18
+ */
19
+ export interface RegisterDevRoutesOptions {
20
+ /** Override the default registry. */
21
+ registry?: RouteRegistry;
22
+ /**
23
+ * Force enable / disable. Default: enabled when `WORKER_MODE === "local"`
24
+ * or `NODE_ENV` is `local` / `dev` / `development`.
25
+ */
26
+ enabled?: boolean;
27
+ /** Mount path prefix. Default `""` (routes at `/dev/routes` + `/dev/routes.json`). */
28
+ prefix?: string;
29
+ }
30
+ export declare function registerDevRoutes(app: Hono, opts?: RegisterDevRoutesOptions): void;
31
+ //# sourceMappingURL=devRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devRoutes.d.ts","sourceRoot":"","sources":["../../../src/http/app/devRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,wBAAwB;IACvC,qCAAqC;IACrC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,GAAE,wBAA6B,GAAG,IAAI,CAkBtF"}
@@ -0,0 +1,145 @@
1
+ import { routeRegistry as defaultRegistry, } from "../../app/registry/routes.js";
2
+ function isDevEnvByDefault() {
3
+ if (process.env.WORKER_MODE === "local")
4
+ return true;
5
+ const env = process.env.NODE_ENV ?? "";
6
+ return env === "local" || env === "dev" || env === "development";
7
+ }
8
+ const STYLE = `
9
+ * { box-sizing: border-box; }
10
+ body { font: 14px/1.5 ui-sans-serif, system-ui, sans-serif; margin: 24px; color: #111; }
11
+ h1 { font-size: 18px; margin: 0 0 16px; }
12
+ table { width: 100%; border-collapse: collapse; font-size: 13px; }
13
+ th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid #e5e5e5; vertical-align: top; }
14
+ th { background: #f7f7f7; font-weight: 600; }
15
+ tr:hover { background: #fafafa; }
16
+ .method { display: inline-block; padding: 2px 6px; border-radius: 3px; font-weight: 600; font-size: 11px; color: #fff; }
17
+ .m-GET { background: #2962ff; }
18
+ .m-POST { background: #00897b; }
19
+ .m-PUT { background: #ef6c00; }
20
+ .m-PATCH { background: #6a1b9a; }
21
+ .m-DELETE { background: #c62828; }
22
+ .m-WS { background: #455a64; }
23
+ .m-OPTIONS, .m-HEAD { background: #757575; }
24
+ .path { font-family: ui-monospace, "SF Mono", Menlo, monospace; }
25
+ .tag { display: inline-block; padding: 1px 6px; margin-right: 4px; border-radius: 3px; background: #eef; color: #335; font-size: 11px; }
26
+ .deprecated { opacity: 0.55; }
27
+ .muted { color: #888; }
28
+ .empty { padding: 24px; text-align: center; color: #888; }
29
+ small.summary { color: #555; }
30
+ `;
31
+ function escapeHtml(s) {
32
+ return s
33
+ .replace(/&/g, "&amp;")
34
+ .replace(/</g, "&lt;")
35
+ .replace(/>/g, "&gt;")
36
+ .replace(/"/g, "&quot;")
37
+ .replace(/'/g, "&#39;");
38
+ }
39
+ function methodClass(method) {
40
+ return `m-${escapeHtml(method)}`;
41
+ }
42
+ function renderEntry(entry) {
43
+ const method = `<span class="method ${methodClass(entry.method)}">${escapeHtml(entry.method)}</span>`;
44
+ const path = `<span class="path">${escapeHtml(entry.path)}</span>`;
45
+ const module = entry.module ? escapeHtml(entry.module) : `<span class="muted">—</span>`;
46
+ const auth = entry.auth.required
47
+ ? `<strong>required</strong>${entry.auth.provider ? ` <span class="muted">(${escapeHtml(entry.auth.provider)})</span>` : ""}`
48
+ : `<span class="muted">none</span>`;
49
+ const permissions = entry.permissions.length === 0
50
+ ? `<span class="muted">—</span>`
51
+ : entry.permissions.map((p) => `<span class="tag">${escapeHtml(p)}</span>`).join("");
52
+ const schemas = Object.keys(entry.schemas)
53
+ .filter((k) => Boolean(entry.schemas[k]))
54
+ .map((k) => `<span class="tag">${escapeHtml(k)}</span>`)
55
+ .join("");
56
+ const policy = [];
57
+ if (entry.rateLimit) {
58
+ policy.push(`<span class="tag">rate-limit ${entry.rateLimit.max}/${Math.round(entry.rateLimit.windowMs / 1000)}s</span>`);
59
+ }
60
+ if (entry.idempotent)
61
+ policy.push(`<span class="tag">idempotent</span>`);
62
+ if (entry.deprecated)
63
+ policy.push(`<span class="tag" style="background:#fdd;color:#900">deprecated</span>`);
64
+ const rowClass = entry.deprecated ? "deprecated" : "";
65
+ return `<tr class="${rowClass}">
66
+ <td>${method}</td>
67
+ <td>${path}</td>
68
+ <td>${module}</td>
69
+ <td>${auth}</td>
70
+ <td>${permissions || `<span class="muted">—</span>`}</td>
71
+ <td>${schemas || `<span class="muted">—</span>`}</td>
72
+ <td>${policy.join(" ") || `<span class="muted">—</span>`}</td>
73
+ </tr>`;
74
+ }
75
+ function renderHtml(entries) {
76
+ const summary = `${entries.length} route${entries.length === 1 ? "" : "s"} registered`;
77
+ const rows = entries.length === 0
78
+ ? `<tr><td colspan="7" class="empty">No routes registered yet.</td></tr>`
79
+ : entries.map(renderEntry).join("\n");
80
+ return `<!doctype html>
81
+ <html lang="en">
82
+ <head>
83
+ <meta charset="utf-8">
84
+ <title>ShipAPI · /dev/routes</title>
85
+ <style>${STYLE}</style>
86
+ </head>
87
+ <body>
88
+ <h1>Routes <small class="summary">— ${summary}</small></h1>
89
+ <table>
90
+ <thead>
91
+ <tr>
92
+ <th>Method</th><th>Path</th><th>Module</th><th>Auth</th>
93
+ <th>Permissions</th><th>Schemas</th><th>Policy</th>
94
+ </tr>
95
+ </thead>
96
+ <tbody>${rows}</tbody>
97
+ </table>
98
+ </body>
99
+ </html>`;
100
+ }
101
+ /**
102
+ * Convert Zod schemas to JSON Schema for the JSON dump so external tooling
103
+ * (the MCP server, generated SDKs, dev-time debug consumers) can introspect
104
+ * request shapes without a Zod runtime. Uses Zod v4's native
105
+ * `z.toJSONSchema()` (the older `zod-to-json-schema` package doesn't
106
+ * understand Zod v4's internal schema shape). Failed conversions degrade
107
+ * to a presence flag so a malformed schema doesn't break the whole route.
108
+ */
109
+ async function serializeSchemasForJson(entries) {
110
+ const { z } = await import("zod");
111
+ return entries.map((e) => {
112
+ const out = {};
113
+ for (const [key, schema] of Object.entries(e.schemas)) {
114
+ if (!schema)
115
+ continue;
116
+ try {
117
+ out[key] = z.toJSONSchema(schema);
118
+ }
119
+ catch {
120
+ // Schema couldn't be serialized (unsupported types, recursion);
121
+ // surface as a presence flag so consumers know it exists.
122
+ out[key] = { _present: true };
123
+ }
124
+ }
125
+ return { ...e, schemas: out };
126
+ });
127
+ }
128
+ export function registerDevRoutes(app, opts = {}) {
129
+ const enabled = opts.enabled ?? isDevEnvByDefault();
130
+ if (!enabled)
131
+ return; // intentionally a no-op so production deploys don't expose the route table
132
+ const registry = opts.registry ?? defaultRegistry;
133
+ const prefix = opts.prefix ?? "";
134
+ app.get(`${prefix}/dev/routes`, (c) => {
135
+ const entries = registry.list();
136
+ const html = renderHtml(entries);
137
+ return c.html(html);
138
+ });
139
+ app.get(`${prefix}/dev/routes.json`, async (c) => {
140
+ const entries = registry.list();
141
+ const routes = await serializeSchemasForJson(entries);
142
+ return c.json({ ok: true, count: entries.length, routes });
143
+ });
144
+ }
145
+ //# sourceMappingURL=devRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devRoutes.js","sourceRoot":"","sources":["../../../src/http/app/devRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { Env, Hono } from "hono";
2
+ import { logger as defaultLogger } from "../../observability/logger.js";
3
+ /**
4
+ * `registerErrorHandlers(app, opts?)` — wires `app.onError` and `app.notFound`
5
+ * so AppError throws from anywhere in the request chain produce a consistent
6
+ * JSON shape. Replaces v3's `ErrorHandlerMiddleware`.
7
+ *
8
+ * Response shape (matches v3 for transition compat):
9
+ * {
10
+ * success: false,
11
+ * error: { code, message, details? },
12
+ * stack?: string, // development only
13
+ * name?: string, // development only
14
+ * }
15
+ *
16
+ * - `AppError` subclasses → status from `error.statusCode`, `code` from
17
+ * `error.code`. `ValidationError.details` flows through.
18
+ * - `HTTPException` (Hono native) → its status + a generic "HTTP_<status>"
19
+ * code; lets framework code throw `HTTPException` without having to
20
+ * wrap in AppError.
21
+ * - Anything else → 500 with `INTERNAL_SERVER_ERROR`. The original message
22
+ * is logged but NOT exposed (avoid leaking internals to clients).
23
+ *
24
+ * 404s are routed through `app.notFound`, which throws a `NotFoundError`
25
+ * so the same handler shape applies.
26
+ */
27
+ export interface ErrorResponseShape {
28
+ success: false;
29
+ error: {
30
+ code: string;
31
+ message: string;
32
+ details?: unknown;
33
+ };
34
+ stack?: string;
35
+ name?: string;
36
+ }
37
+ export interface RegisterErrorHandlersOptions {
38
+ /** Override the framework default pino logger. */
39
+ logger?: typeof defaultLogger;
40
+ /** Force dev-mode debug fields (`stack`, `name`) in responses. Default
41
+ * is `process.env.NODE_ENV === "development"`. */
42
+ exposeStack?: boolean;
43
+ }
44
+ export declare function registerErrorHandlers<E extends Env>(app: Hono<E>, opts?: RegisterErrorHandlersOptions): void;
45
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/http/app/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGtC,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKxE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,4BAA4B;IAC3C,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,aAAa,CAAC;IAC9B;uDACmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA4BD,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,GAAG,EACjD,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EACZ,IAAI,GAAE,4BAAiC,GACtC,IAAI,CAqEN"}
@@ -0,0 +1,93 @@
1
+ import { HTTPException } from "hono/http-exception";
2
+ import { logger as defaultLogger } from "../../observability/logger.js";
3
+ import { AppError } from "../errors/AppError.js";
4
+ import { NotFoundError } from "../errors/NotFoundError.js";
5
+ import { ValidationError } from "../errors/ValidationError.js";
6
+ function isDevelopment() {
7
+ return process.env.NODE_ENV === "development";
8
+ }
9
+ function buildResponse(err, exposeStack) {
10
+ const body = {
11
+ success: false,
12
+ error: {
13
+ code: err.code,
14
+ message: err.message,
15
+ },
16
+ };
17
+ if (err instanceof ValidationError && err.details !== undefined) {
18
+ body.error.details = err.details;
19
+ }
20
+ if (exposeStack) {
21
+ body.stack = err.stack;
22
+ body.name = err.name;
23
+ }
24
+ return body;
25
+ }
26
+ // Generic over the `Hono<E>` Env so consumers can pass a typed app
27
+ // (e.g. `Hono<AppEnv>`) without a cast. The error-handler logic only
28
+ // reads from `c.req` and `c.error` — nothing that depends on a
29
+ // specific Env shape — so widening the parameter is safe.
30
+ export function registerErrorHandlers(app, opts = {}) {
31
+ const log = opts.logger ?? defaultLogger;
32
+ const exposeStack = opts.exposeStack ?? isDevelopment();
33
+ app.notFound((c) => {
34
+ const path = c.req.path;
35
+ const method = c.req.method;
36
+ const err = new NotFoundError(`Route ${method} ${path} not found`);
37
+ const body = buildResponse(err, exposeStack);
38
+ return c.json(body, err.statusCode);
39
+ });
40
+ app.onError((err, c) => {
41
+ if (err instanceof AppError) {
42
+ // Operational errors are expected — log at warn (4xx) or error (5xx).
43
+ const fields = {
44
+ method: c.req.method,
45
+ path: c.req.path,
46
+ status: err.statusCode,
47
+ code: err.code,
48
+ err,
49
+ };
50
+ if (err.statusCode >= 500)
51
+ log.error(fields, "http.error");
52
+ else
53
+ log.warn(fields, "http.error");
54
+ const body = buildResponse(err, exposeStack);
55
+ return c.json(body, err.statusCode);
56
+ }
57
+ if (err instanceof HTTPException) {
58
+ // Hono native — thrown by router (e.g., `c.throw(403)`).
59
+ const body = {
60
+ success: false,
61
+ error: {
62
+ code: `HTTP_${err.status}`,
63
+ message: err.message || `HTTP ${err.status}`,
64
+ },
65
+ };
66
+ if (exposeStack) {
67
+ body.stack = err.stack;
68
+ body.name = err.name;
69
+ }
70
+ log.warn({ method: c.req.method, path: c.req.path, status: err.status }, "http.error");
71
+ return c.json(body, err.status);
72
+ }
73
+ // Unknown error — log full details, return safe 500 to client.
74
+ log.error({
75
+ method: c.req.method,
76
+ path: c.req.path,
77
+ err,
78
+ }, "http.error.unhandled");
79
+ const body = {
80
+ success: false,
81
+ error: {
82
+ code: "INTERNAL_SERVER_ERROR",
83
+ message: "An unexpected error occurred",
84
+ },
85
+ };
86
+ if (exposeStack && err instanceof Error) {
87
+ body.stack = err.stack;
88
+ body.name = err.name;
89
+ }
90
+ return c.json(body, 500);
91
+ });
92
+ }
93
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/http/app/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { Hono } from "hono";
2
+ import { type HealthCheckRegistry } from "../../app/health/HealthCheck.js";
3
+ /**
4
+ * `registerHealthRoutes(app, opts?)` — wires `/livez` and `/readyz`.
5
+ *
6
+ * `createApp()` calls this for you (opt out with `createApp({ health: false })`),
7
+ * so most apps never call it directly. Calling it on an app that already has
8
+ * the routes mounts nothing (see below).
9
+ *
10
+ * - `GET /livez` always 200 with `{ ok: true }`. Process up. Used by the
11
+ * orchestrator's restart trigger.
12
+ * - `GET /readyz` runs every check in the registry. 200 with
13
+ * `{ ok: true, checks: [{ name, ok, latencyMs }] }` when all pass; 503 with
14
+ * the same shape (and `ok: false` plus a generic per-check `error` of
15
+ * `"timeout"` or `"unavailable"`) when any fail. The raw error never reaches
16
+ * the response body — the endpoint is unauthenticated and database errors
17
+ * can name hosts and users. Failures are logged server-side at warn level
18
+ * with the check name, the `error` string a check returned (as `reason`,
19
+ * truncated), and for a thrown error its `code` / `name` / `syscall` only.
20
+ *
21
+ * There is deliberately no `/healthz`: Google Cloud Run's front end intercepts
22
+ * that path and it never reaches the container.
23
+ *
24
+ * Replaces v3's `InitHealthCheckRoute` + `InitWarmupCheckRoute`. The
25
+ * dual-endpoint pattern is the Kubernetes / GCP / Fly convention.
26
+ */
27
+ export interface RegisterHealthRoutesOptions {
28
+ /**
29
+ * Registry to query. Defaults to the framework-wide singleton — modules
30
+ * register their checks against it via `healthCheckRegistry.add(...)`.
31
+ */
32
+ registry?: HealthCheckRegistry;
33
+ /** Override the per-check timeout used by `/readyz`. Default 3_000 ms. */
34
+ readyzTimeoutMs?: number;
35
+ /** Mount path prefix. Default `""` (routes mount at `/livez` + `/readyz`). */
36
+ prefix?: string;
37
+ }
38
+ /** One entry of the public `/readyz` body. */
39
+ export interface ReadyzCheck {
40
+ name: string;
41
+ ok: boolean;
42
+ latencyMs: number;
43
+ /** Present only when `ok` is false. Never the raw error text. */
44
+ error?: "timeout" | "unavailable";
45
+ }
46
+ export interface ReadyzBody {
47
+ ok: boolean;
48
+ checks: ReadyzCheck[];
49
+ }
50
+ /** Whether `/livez` + `/readyz` are already mounted on this app instance. */
51
+ export declare function hasHealthRoutes(app: object): boolean;
52
+ /**
53
+ * Mount `/livez` + `/readyz` on `app`, once per app instance.
54
+ *
55
+ * On an app that already has them (every `createApp()` app unless it passed
56
+ * `health: false`), this never mounts a second copy and never throws. A
57
+ * `registry` or `readyzTimeoutMs` passed to the later call is applied to the
58
+ * routes already mounted, so an app that wires its own registry this way keeps
59
+ * the readiness checks it had before `createApp` mounted the routes. That late
60
+ * configuration is deprecated: it logs a warning once per app, and will be
61
+ * removed in the next major version — pass it to `createApp({ health })`. A
62
+ * different `prefix` cannot be honoured without mounting again; it is ignored
63
+ * with a warning (configure it with `createApp({ health: { prefix } })`).
64
+ */
65
+ export declare function registerHealthRoutes(app: Hono, opts?: RegisterHealthRoutesOptions): void;
66
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/http/app/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AAOzC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,KAAK,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAcD,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,GAAE,2BAAgC,GAAG,IAAI,CA4C5F"}