@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,104 @@
1
+ import { healthCheckRegistry as defaultRegistry, } from "../../app/health/HealthCheck.js";
2
+ import { logger } from "../../observability/logger.js";
3
+ import { safeErrorFields } from "../../observability/safeErrorFields.js";
4
+ /** Longest returned `error` string copied into the readiness failure log. */
5
+ const MAX_LOGGED_REASON_LENGTH = 200;
6
+ /** Apps that already have the health routes mounted, keyed by app instance. */
7
+ const mountedHealthRoutes = new WeakMap();
8
+ /** Whether `/livez` + `/readyz` are already mounted on this app instance. */
9
+ export function hasHealthRoutes(app) {
10
+ return mountedHealthRoutes.has(app);
11
+ }
12
+ /**
13
+ * Mount `/livez` + `/readyz` on `app`, once per app instance.
14
+ *
15
+ * On an app that already has them (every `createApp()` app unless it passed
16
+ * `health: false`), this never mounts a second copy and never throws. A
17
+ * `registry` or `readyzTimeoutMs` passed to the later call is applied to the
18
+ * routes already mounted, so an app that wires its own registry this way keeps
19
+ * the readiness checks it had before `createApp` mounted the routes. That late
20
+ * configuration is deprecated: it logs a warning once per app, and will be
21
+ * removed in the next major version — pass it to `createApp({ health })`. A
22
+ * different `prefix` cannot be honoured without mounting again; it is ignored
23
+ * with a warning (configure it with `createApp({ health: { prefix } })`).
24
+ */
25
+ export function registerHealthRoutes(app, opts = {}) {
26
+ const existing = mountedHealthRoutes.get(app);
27
+ if (existing) {
28
+ applyToMountedRoutes(existing, opts);
29
+ return;
30
+ }
31
+ const state = {
32
+ registry: opts.registry ?? defaultRegistry,
33
+ timeoutMs: opts.readyzTimeoutMs,
34
+ prefix: opts.prefix ?? "",
35
+ };
36
+ app.get(`${state.prefix}/livez`, (c) => c.json({ ok: true }, 200));
37
+ app.get(`${state.prefix}/readyz`, async (c) => {
38
+ const failures = [];
39
+ const result = await state.registry.runAll({
40
+ timeoutMs: state.timeoutMs,
41
+ onCheckFailure: (failure) => failures.push(failure),
42
+ });
43
+ if (!result.ok) {
44
+ logger.warn({ checks: failures.map(describeFailure) }, "Readiness check failed");
45
+ }
46
+ const timedOut = new Set(failures.filter((f) => f.timedOut).map((f) => f.name));
47
+ const body = {
48
+ ok: result.ok,
49
+ checks: result.checks.map((check) => check.ok
50
+ ? { name: check.name, ok: true, latencyMs: check.latencyMs }
51
+ : {
52
+ name: check.name,
53
+ ok: false,
54
+ latencyMs: check.latencyMs,
55
+ error: timedOut.has(check.name) ? "timeout" : "unavailable",
56
+ }),
57
+ };
58
+ return c.json(body, result.ok ? 200 : 503);
59
+ });
60
+ mountedHealthRoutes.set(app, state);
61
+ }
62
+ function applyToMountedRoutes(state, opts) {
63
+ const updated = [];
64
+ if (opts.registry !== undefined && opts.registry !== state.registry) {
65
+ state.registry = opts.registry;
66
+ updated.push("registry");
67
+ }
68
+ if (opts.readyzTimeoutMs !== undefined && opts.readyzTimeoutMs !== state.timeoutMs) {
69
+ state.timeoutMs = opts.readyzTimeoutMs;
70
+ updated.push("readyzTimeoutMs");
71
+ }
72
+ if (opts.prefix !== undefined && opts.prefix !== state.prefix) {
73
+ logger.warn({ mountedPrefix: state.prefix, ignoredPrefix: opts.prefix }, "registerHealthRoutes: health routes are already mounted on this app (createApp mounts them by default); " +
74
+ "the prefix is ignored. Configure it with createApp({ health: { prefix } }) instead");
75
+ }
76
+ if (updated.length > 0 && !state.deprecationWarned) {
77
+ state.deprecationWarned = true;
78
+ logger.warn({ updated }, "registerHealthRoutes: configuring health routes after createApp is deprecated and will be removed " +
79
+ "in the next major version. Pass these options to createApp({ health: { ... } }) instead");
80
+ }
81
+ logger.debug({ updated }, "registerHealthRoutes: health routes are already mounted on this app; not mounting them again");
82
+ }
83
+ /**
84
+ * Log-safe summary of a failed check.
85
+ *
86
+ * - A check that *returned* `{ ok: false, error }` wrote that string itself, so
87
+ * it is logged as `reason`, truncated to {@link MAX_LOGGED_REASON_LENGTH}
88
+ * characters. App authors must keep secrets out of it (documented).
89
+ * - A *thrown* error keeps only its `code`, `name` and `syscall` — never the
90
+ * message, which for database and network errors can contain the host,
91
+ * port, user or database name.
92
+ */
93
+ function describeFailure(failure) {
94
+ const summary = { name: failure.name, timedOut: failure.timedOut };
95
+ if (failure.reason !== undefined) {
96
+ summary.reason = truncate(failure.reason, MAX_LOGGED_REASON_LENGTH);
97
+ return summary;
98
+ }
99
+ return { ...summary, ...safeErrorFields(failure.error) };
100
+ }
101
+ function truncate(value, max) {
102
+ return value.length <= max ? value : `${value.slice(0, max)}…`;
103
+ }
104
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/http/app/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Base error class for application-specific errors
3
+ */
4
+ export declare class AppError extends Error {
5
+ readonly statusCode: number;
6
+ readonly code: string;
7
+ readonly isOperational: boolean;
8
+ constructor(message: string, statusCode?: number, code?: string, isOperational?: boolean);
9
+ }
10
+ //# sourceMappingURL=AppError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/AppError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAGrC,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAY,EACxB,IAAI,GAAE,MAAgC,EACtC,aAAa,GAAE,OAAc;CAahC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Base error class for application-specific errors
3
+ */
4
+ export class AppError extends Error {
5
+ statusCode;
6
+ code;
7
+ isOperational;
8
+ constructor(message, statusCode = 500, code = "INTERNAL_SERVER_ERROR", isOperational = true) {
9
+ super(message);
10
+ this.statusCode = statusCode;
11
+ this.code = code;
12
+ this.isOperational = isOperational;
13
+ // Maintains proper stack trace for where our error was thrown (only available on V8)
14
+ if (Error.captureStackTrace) {
15
+ Error.captureStackTrace(this, AppError);
16
+ }
17
+ }
18
+ }
19
+ //# sourceMappingURL=AppError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppError.js","sourceRoot":"","sources":["../../../src/http/errors/AppError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,UAAU,CAAS;IACnB,IAAI,CAAS;IACb,aAAa,CAAU;IAEvC,YACE,OAAe,EACf,aAAqB,GAAG,EACxB,OAAe,uBAAuB,EACtC,gBAAyB,IAAI;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,qFAAqF;QACrF,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when authentication is required or fails
4
+ */
5
+ export declare class AuthenticationError extends AppError {
6
+ constructor(message?: string);
7
+ }
8
+ //# sourceMappingURL=AuthenticationError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/AuthenticationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,GAAE,MAAkC;CAGxD"}
@@ -0,0 +1,10 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when authentication is required or fails
4
+ */
5
+ export class AuthenticationError extends AppError {
6
+ constructor(message = "Authentication required") {
7
+ super(message, 401, "AUTHENTICATION_ERROR");
8
+ }
9
+ }
10
+ //# sourceMappingURL=AuthenticationError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationError.js","sourceRoot":"","sources":["../../../src/http/errors/AuthenticationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,UAAkB,yBAAyB;QACrD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when user lacks sufficient permissions
4
+ */
5
+ export declare class AuthorizationError extends AppError {
6
+ constructor(message?: string);
7
+ }
8
+ //# sourceMappingURL=AuthorizationError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/AuthorizationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,GAAE,MAAmC;CAGzD"}
@@ -0,0 +1,10 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when user lacks sufficient permissions
4
+ */
5
+ export class AuthorizationError extends AppError {
6
+ constructor(message = "Insufficient permissions") {
7
+ super(message, 403, "AUTHORIZATION_ERROR");
8
+ }
9
+ }
10
+ //# sourceMappingURL=AuthorizationError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationError.js","sourceRoot":"","sources":["../../../src/http/errors/AuthorizationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,UAAkB,0BAA0B;QACtD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown for general bad request scenarios
4
+ */
5
+ export declare class BadRequestError extends AppError {
6
+ constructor(message?: string);
7
+ }
8
+ //# sourceMappingURL=BadRequestError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BadRequestError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/BadRequestError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,GAAE,MAAsB;CAG5C"}
@@ -0,0 +1,10 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown for general bad request scenarios
4
+ */
5
+ export class BadRequestError extends AppError {
6
+ constructor(message = "Bad request") {
7
+ super(message, 400, "BAD_REQUEST_ERROR");
8
+ }
9
+ }
10
+ //# sourceMappingURL=BadRequestError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BadRequestError.js","sourceRoot":"","sources":["../../../src/http/errors/BadRequestError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,UAAkB,aAAa;QACzC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when there's a conflict with existing resources
4
+ */
5
+ export declare class ConflictError extends AppError {
6
+ constructor(message?: string);
7
+ }
8
+ //# sourceMappingURL=ConflictError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConflictError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/ConflictError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,GAAE,MAA4B;CAGlD"}
@@ -0,0 +1,10 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when there's a conflict with existing resources
4
+ */
5
+ export class ConflictError extends AppError {
6
+ constructor(message = "Resource conflict") {
7
+ super(message, 409, "CONFLICT_ERROR");
8
+ }
9
+ }
10
+ //# sourceMappingURL=ConflictError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConflictError.js","sourceRoot":"","sources":["../../../src/http/errors/ConflictError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,UAAkB,mBAAmB;QAC/C,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown for internal server errors
4
+ */
5
+ export declare class InternalServerError extends AppError {
6
+ constructor(message?: string);
7
+ }
8
+ //# sourceMappingURL=InternalServerError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalServerError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/InternalServerError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,GAAE,MAAgC;CAGtD"}
@@ -0,0 +1,10 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown for internal server errors
4
+ */
5
+ export class InternalServerError extends AppError {
6
+ constructor(message = "Internal server error") {
7
+ super(message, 500, "INTERNAL_SERVER_ERROR");
8
+ }
9
+ }
10
+ //# sourceMappingURL=InternalServerError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalServerError.js","sourceRoot":"","sources":["../../../src/http/errors/InternalServerError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,UAAkB,uBAAuB;QACnD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,uBAAuB,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when a requested resource is not found
4
+ */
5
+ export declare class NotFoundError extends AppError {
6
+ constructor(message?: string);
7
+ }
8
+ //# sourceMappingURL=NotFoundError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotFoundError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/NotFoundError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,GAAE,MAA6B;CAGnD"}
@@ -0,0 +1,10 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when a requested resource is not found
4
+ */
5
+ export class NotFoundError extends AppError {
6
+ constructor(message = "Resource not found") {
7
+ super(message, 404, "NOT_FOUND_ERROR");
8
+ }
9
+ }
10
+ //# sourceMappingURL=NotFoundError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotFoundError.js","sourceRoot":"","sources":["../../../src/http/errors/NotFoundError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,UAAkB,oBAAoB;QAChD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when a rate-limit ceiling is exceeded.
4
+ *
5
+ * Mapped to 429 by `registerErrorHandlers`. The `retryAfterSec` field is
6
+ * surfaced as the `Retry-After` response header by the rate-limit
7
+ * middleware itself (set before throwing).
8
+ */
9
+ export declare class RateLimitError extends AppError {
10
+ readonly retryAfterSec: number;
11
+ constructor(retryAfterSec: number, message?: string);
12
+ }
13
+ //# sourceMappingURL=RateLimitError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimitError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/RateLimitError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,SAAgB,aAAa,EAAE,MAAM,CAAC;gBAE1B,aAAa,EAAE,MAAM,EAAE,OAAO,SAAsB;CAIjE"}
@@ -0,0 +1,16 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when a rate-limit ceiling is exceeded.
4
+ *
5
+ * Mapped to 429 by `registerErrorHandlers`. The `retryAfterSec` field is
6
+ * surfaced as the `Retry-After` response header by the rate-limit
7
+ * middleware itself (set before throwing).
8
+ */
9
+ export class RateLimitError extends AppError {
10
+ retryAfterSec;
11
+ constructor(retryAfterSec, message = "Too many requests") {
12
+ super(message, 429, "RATE_LIMIT_EXCEEDED");
13
+ this.retryAfterSec = retryAfterSec;
14
+ }
15
+ }
16
+ //# sourceMappingURL=RateLimitError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimitError.js","sourceRoot":"","sources":["../../../src/http/errors/RateLimitError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1B,aAAa,CAAS;IAEtC,YAAY,aAAqB,EAAE,OAAO,GAAG,mBAAmB;QAC9D,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when a service is temporarily unavailable
4
+ */
5
+ export declare class ServiceUnavailableError extends AppError {
6
+ constructor(message?: string);
7
+ }
8
+ //# sourceMappingURL=ServiceUnavailableError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceUnavailableError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/ServiceUnavailableError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;gBACvC,OAAO,GAAE,MAA0C;CAGhE"}
@@ -0,0 +1,10 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when a service is temporarily unavailable
4
+ */
5
+ export class ServiceUnavailableError extends AppError {
6
+ constructor(message = "Service temporarily unavailable") {
7
+ super(message, 503, "SERVICE_UNAVAILABLE_ERROR");
8
+ }
9
+ }
10
+ //# sourceMappingURL=ServiceUnavailableError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceUnavailableError.js","sourceRoot":"","sources":["../../../src/http/errors/ServiceUnavailableError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,QAAQ;IACnD,YAAY,UAAkB,iCAAiC;QAC7D,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAC;IACnD,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when input validation fails
4
+ */
5
+ export declare class ValidationError extends AppError {
6
+ readonly details?: any;
7
+ constructor(message: string, details?: any);
8
+ }
9
+ //# sourceMappingURL=ValidationError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationError.d.ts","sourceRoot":"","sources":["../../../src/http/errors/ValidationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,SAAgB,OAAO,CAAC,EAAE,GAAG,CAAC;gBAElB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAI3C"}
@@ -0,0 +1,12 @@
1
+ import { AppError } from "./AppError.js";
2
+ /**
3
+ * Error thrown when input validation fails
4
+ */
5
+ export class ValidationError extends AppError {
6
+ details;
7
+ constructor(message, details) {
8
+ super(message, 400, "VALIDATION_ERROR");
9
+ this.details = details;
10
+ }
11
+ }
12
+ //# sourceMappingURL=ValidationError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationError.js","sourceRoot":"","sources":["../../../src/http/errors/ValidationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3B,OAAO,CAAO;IAE9B,YAAY,OAAe,EAAE,OAAa;QACxC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ export { AppError } from "./AppError.js";
2
+ export { AuthenticationError } from "./AuthenticationError.js";
3
+ export { AuthorizationError } from "./AuthorizationError.js";
4
+ export { BadRequestError } from "./BadRequestError.js";
5
+ export { ConflictError } from "./ConflictError.js";
6
+ export { InternalServerError } from "./InternalServerError.js";
7
+ export { NotFoundError } from "./NotFoundError.js";
8
+ export { RateLimitError } from "./RateLimitError.js";
9
+ export { ServiceUnavailableError } from "./ServiceUnavailableError.js";
10
+ export { ValidationError } from "./ValidationError.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/errors/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ // Export all error classes for convenient importing
2
+ export { AppError } from "./AppError.js";
3
+ export { AuthenticationError } from "./AuthenticationError.js";
4
+ export { AuthorizationError } from "./AuthorizationError.js";
5
+ export { BadRequestError } from "./BadRequestError.js";
6
+ export { ConflictError } from "./ConflictError.js";
7
+ export { InternalServerError } from "./InternalServerError.js";
8
+ export { NotFoundError } from "./NotFoundError.js";
9
+ export { RateLimitError } from "./RateLimitError.js";
10
+ export { ServiceUnavailableError } from "./ServiceUnavailableError.js";
11
+ export { ValidationError } from "./ValidationError.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/errors/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { MiddlewareHandler } from "hono";
2
+ export interface ApiKeyOptions {
3
+ /** The expected secret. Required. */
4
+ secret: string;
5
+ /** Header name to read. Default `"x-api-key"`. */
6
+ headerName?: string;
7
+ }
8
+ export declare function apiKey(opts: ApiKeyOptions): MiddlewareHandler;
9
+ //# sourceMappingURL=apiKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiKey.d.ts","sourceRoot":"","sources":["../../../src/http/middleware/apiKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AA0B9C,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,CA6B7D"}
@@ -0,0 +1,71 @@
1
+ import { AuthenticationError } from "../errors/AuthenticationError.js";
2
+ import { AUTH_META, setMetaTag } from "../utils/metaTags.js";
3
+ /**
4
+ * `apiKey({ secret, headerName? })` — minimal API-key gate for webhook /
5
+ * machine-to-machine endpoints where Firebase token auth doesn't apply.
6
+ *
7
+ * Replaces v3's `ApiKeyMiddleware`. Differences:
8
+ *
9
+ * 1. Secret is passed in by the consumer (typically `env.WEBHOOKS_API_KEY`
10
+ * via `defineEnv`) rather than read directly from `process.env` —
11
+ * cleaner test stories, better stack tracing of misconfig.
12
+ * 2. Throws `AuthenticationError` (mapped by `app.onError`) instead of
13
+ * returning a JSON response inline — keeps the response shape consistent
14
+ * with the rest of the framework.
15
+ * 3. Tagged with `AUTH_META` (`providerName: "api-key"`) so the route
16
+ * registry shows the route is authenticated even though no AuthProvider
17
+ * is involved.
18
+ *
19
+ * Constant-time comparison via `crypto.timingSafeEqual` to avoid leaking
20
+ * the secret length / first-mismatch position via timing side-channel.
21
+ */
22
+ import { timingSafeEqual } from "node:crypto";
23
+ /**
24
+ * Constant-time-ish compare. F22: the mismatch-path dummy compares
25
+ * the EXPECTED buffer against itself rather than the presented
26
+ * buffer — so wall-clock execution time doesn't leak the *presented*
27
+ * value's length (which an attacker controls). The secret's length is
28
+ * fixed across requests and is not itself sensitive (length alone
29
+ * doesn't reveal the secret), but biasing the timing channel toward
30
+ * the controlled side is unambiguously better.
31
+ *
32
+ * `expected` MUST be the trusted side (the server-side secret).
33
+ */
34
+ function safeCompare(expected, presented) {
35
+ const expectedBuf = Buffer.from(expected);
36
+ const presentedBuf = Buffer.from(presented);
37
+ if (expectedBuf.length !== presentedBuf.length) {
38
+ // Fixed-cost comparison over the *expected* buffer so the
39
+ // attacker's input length can't bias the timing observation.
40
+ timingSafeEqual(expectedBuf, expectedBuf);
41
+ return false;
42
+ }
43
+ return timingSafeEqual(expectedBuf, presentedBuf);
44
+ }
45
+ export function apiKey(opts) {
46
+ if (!opts.secret) {
47
+ throw new Error("apiKey(): `secret` is required");
48
+ }
49
+ const headerName = (opts.headerName ?? "x-api-key").toLowerCase();
50
+ const expected = opts.secret;
51
+ const middleware = async (c, next) => {
52
+ const presented = c.req.header(headerName);
53
+ if (!presented) {
54
+ throw new AuthenticationError(`Missing ${headerName} header`);
55
+ }
56
+ // F22: pass expected as the first arg so the timing dummy on
57
+ // mismatch operates over the trusted secret's length, not the
58
+ // attacker-controlled presented value's length.
59
+ if (!safeCompare(expected, presented)) {
60
+ throw new AuthenticationError("Invalid API key");
61
+ }
62
+ return next();
63
+ };
64
+ const tag = {
65
+ required: true,
66
+ providerName: "api-key",
67
+ };
68
+ setMetaTag(middleware, AUTH_META, tag);
69
+ return middleware;
70
+ }
71
+ //# sourceMappingURL=apiKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiKey.js","sourceRoot":"","sources":["../../../src/http/middleware/apiKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAiB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAS9C;;;;;;;;;;GAUG;AACH,SAAS,WAAW,CAAC,QAAgB,EAAE,SAAiB;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,WAAW,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/C,0DAA0D;QAC1D,6DAA6D;QAC7D,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAmB;IACxC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAE7B,MAAM,UAAU,GAAsB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACtD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,mBAAmB,CAAC,WAAW,UAAU,SAAS,CAAC,CAAC;QAChE,CAAC;QACD,6DAA6D;QAC7D,8DAA8D;QAC9D,gDAAgD;QAChD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAa;QACpB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,SAAS;KACxB,CAAC;IACF,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAEvC,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { MiddlewareHandler } from "hono";
2
+ export interface CsrfOptions {
3
+ /**
4
+ * Origins permitted to make mutating requests. Compared exactly (scheme +
5
+ * host + port). Required.
6
+ */
7
+ allowedOrigins: readonly string[];
8
+ /**
9
+ * Enable the double-submit cookie pattern. Default `false` (Origin check
10
+ * only).
11
+ *
12
+ * **F27 — threat model note.** The double-submit cookie is intentionally
13
+ * readable by JavaScript (`httpOnly: false`) so the SPA can echo it
14
+ * into the request header. This means **an XSS bug becomes a CSRF
15
+ * defense bypass**: attacker-controlled script reads the cookie,
16
+ * sets the matching header, and submits a mutating request. The
17
+ * double-submit pattern is therefore **defense-in-depth on top of
18
+ * CSP-defended XSS**, not a standalone bulwark.
19
+ *
20
+ * Operators should pair this middleware with:
21
+ * - A strict Content-Security-Policy (`default-src 'self'`,
22
+ * `script-src 'self' 'strict-dynamic'`, nonced inline scripts).
23
+ * - Subresource integrity for third-party scripts.
24
+ * - Trusted Types where the runtime supports it.
25
+ *
26
+ * If your XSS posture is uncertain, prefer header-only mode (see
27
+ * `headerOnly` below) — clients track the token in memory + reply
28
+ * via the header, never as a cookie.
29
+ */
30
+ doubleSubmit?: boolean;
31
+ /**
32
+ * **F27 — header-only mode.** When `true` (and `doubleSubmit: true`),
33
+ * the framework does NOT set a cookie on safe requests. The client
34
+ * is responsible for fetching a token via an out-of-band channel
35
+ * (a `GET /api/csrf-token` route the consumer defines, or the same-
36
+ * response-as-the-page approach) and storing it in memory only.
37
+ * Header-only mode trades client-side complexity for an
38
+ * XSS-doesn't-bypass-CSRF property.
39
+ *
40
+ * Default `false` (cookie-based double-submit — backwards-compatible).
41
+ */
42
+ headerOnly?: boolean;
43
+ /**
44
+ * Override the cookie name. Default `"ship_csrf"`.
45
+ */
46
+ cookieName?: string;
47
+ /**
48
+ * Override the header name clients echo the cookie into. Default
49
+ * `"x-csrf-token"`.
50
+ */
51
+ headerName?: string;
52
+ /**
53
+ * Cookie attribute overrides for the double-submit token.
54
+ */
55
+ cookie?: {
56
+ domain?: string;
57
+ sameSite?: "Strict" | "Lax" | "None";
58
+ secure?: boolean;
59
+ maxAge?: number;
60
+ };
61
+ }
62
+ export declare function csrf(opts: CsrfOptions): MiddlewareHandler;
63
+ //# sourceMappingURL=csrf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../../src/http/middleware/csrf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAkC9C,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;QACrC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAyDD,wBAAgB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,iBAAiB,CA2FzD"}