@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,602 @@
1
+ # Performance Guide
2
+
3
+ This guide covers performance optimization, best practices, and monitoring for the Weaviate framework.
4
+
5
+ ## 📊 Performance Metrics
6
+
7
+ ### Search Method Performance
8
+
9
+ | Method | Speed | Accuracy | Memory Usage | Best For |
10
+ | ------ | ------ | --------------- | ------------ | ------------------------ |
11
+ | Vector | Medium | High (semantic) | High | Natural language queries |
12
+ | BM25 | Fast | High (keyword) | Low | Exact term matching |
13
+ | Hybrid | Medium | **Highest** | Medium | General purpose search |
14
+
15
+ ### Performance Benchmarks
16
+
17
+ ```typescript
18
+ // Typical performance characteristics
19
+ const benchmarks = {
20
+ vector: {
21
+ latency: "50-200ms",
22
+ throughput: "100-500 queries/sec",
23
+ memory: "High (vector storage)",
24
+ },
25
+ bm25: {
26
+ latency: "10-50ms",
27
+ throughput: "500-2000 queries/sec",
28
+ memory: "Low (text index)",
29
+ },
30
+ hybrid: {
31
+ latency: "60-250ms",
32
+ throughput: "80-400 queries/sec",
33
+ memory: "Medium (combined)",
34
+ },
35
+ };
36
+ ```
37
+
38
+ ## 🚀 Optimization Strategies
39
+
40
+ ### 1. Schema Optimization
41
+
42
+ #### Strategic Field Selection
43
+
44
+ ```typescript
45
+ // ✅ Good: Only vectorize fields that benefit from semantic search
46
+ const Person: SchemaConfig = {
47
+ name: "Person",
48
+ properties: [
49
+ {
50
+ name: "bio",
51
+ type: "text",
52
+ vectorizable: true, // Rich semantic content
53
+ },
54
+ {
55
+ name: "firstName",
56
+ type: "string",
57
+ vectorizable: false, // Exact matching better
58
+ },
59
+ ],
60
+ };
61
+
62
+ // ❌ Bad: Vectorizing everything
63
+ const BadPerson: SchemaConfig = {
64
+ properties: [
65
+ { name: "email", vectorizable: true }, // Unnecessary
66
+ { name: "phone", vectorizable: true }, // Unnecessary
67
+ { name: "id", vectorizable: true }, // Unnecessary
68
+ ],
69
+ };
70
+ ```
71
+
72
+ #### Searchable Fields Optimization
73
+
74
+ ```typescript
75
+ // ✅ Good: Limit searchable fields to essential ones
76
+ const Person: SchemaConfig = {
77
+ searchableFields: [
78
+ "firstName", // Essential for person search
79
+ "lastName", // Essential for person search
80
+ "bio", // Rich content for semantic search
81
+ // Avoid: "createdAt", "id", "internalId"
82
+ ],
83
+ };
84
+
85
+ // ❌ Bad: Making everything searchable
86
+ const BadPerson: SchemaConfig = {
87
+ searchableFields: [
88
+ "firstName",
89
+ "lastName",
90
+ "email",
91
+ "phone",
92
+ "createdAt",
93
+ "updatedAt",
94
+ "id",
95
+ "internalId",
96
+ ],
97
+ };
98
+ ```
99
+
100
+ ### 2. Query Optimization
101
+
102
+ #### Limit and Pagination
103
+
104
+ ```typescript
105
+ // ✅ Good: Use appropriate limits
106
+ const results = await weaviate.search("Person", {
107
+ method: "hybrid",
108
+ options: {
109
+ hybrid: { query: "engineer" },
110
+ limit: 10, // Reasonable limit
111
+ offset: 0,
112
+ }
113
+ });
114
+
115
+ // ❌ Bad: No limits or excessive limits
116
+ const badResults = await weaviate.search("Person", {
117
+ method: "hybrid",
118
+ options: {
119
+ hybrid: { query: "engineer" },
120
+ // No limit = potentially thousands of results
121
+ }
122
+ });
123
+ ```
124
+
125
+ #### Efficient Filtering
126
+
127
+ ```typescript
128
+ // ✅ Good: Use filters to reduce search space
129
+ const results = await weaviate.search("Person", {
130
+ method: "hybrid",
131
+ options: {
132
+ hybrid: { query: "engineer" },
133
+ where: {
134
+ path: ["city"],
135
+ operator: "Equal",
136
+ valueText: "San Francisco",
137
+ },
138
+ limit: 10,
139
+ }
140
+ });
141
+
142
+ // ❌ Bad: Search everything then filter in application
143
+ const allResults = await weaviate.search("Person", {
144
+ method: "hybrid",
145
+ options: {
146
+ hybrid: { query: "engineer" },
147
+ limit: 1000, // Too many results
148
+ }
149
+ });
150
+ // Then filter in JavaScript (inefficient)
151
+ ```
152
+
153
+ ### 3. Vector Index Optimization
154
+
155
+ #### Vector Index Configuration
156
+
157
+ ```typescript
158
+ const Person: SchemaConfig = {
159
+ name: "Person",
160
+ vectorIndexConfig: {
161
+ distance: "cosine", // Best for text similarity
162
+ efConstruction: 128, // Higher = better quality, slower build
163
+ maxConnections: 16, // Higher = better quality, more memory
164
+ ef: 64, // Higher = better quality, slower queries
165
+ },
166
+ };
167
+ ```
168
+
169
+ #### Performance Tuning
170
+
171
+ ```typescript
172
+ // For high-performance scenarios
173
+ const HighPerfConfig = {
174
+ distance: "cosine",
175
+ efConstruction: 256, // Higher quality
176
+ maxConnections: 32, // More connections
177
+ ef: 128, // Better search quality
178
+ };
179
+
180
+ // For fast queries (lower quality)
181
+ const FastConfig = {
182
+ distance: "cosine",
183
+ efConstruction: 64, // Faster build
184
+ maxConnections: 8, // Less memory
185
+ ef: 32, // Faster queries
186
+ };
187
+ ```
188
+
189
+ ### 4. Caching Strategies
190
+
191
+ #### Application-Level Caching
192
+
193
+ ```typescript
194
+ // Cache frequent queries
195
+ class CachedWeaviateService {
196
+ private cache = new Map<string, any>();
197
+ private cacheTimeout = 5 * 60 * 1000; // 5 minutes
198
+
199
+ async search(schemaName: string, method: string, options: any) {
200
+ const cacheKey = this.generateCacheKey(schemaName, method, options);
201
+ const cached = this.cache.get(cacheKey);
202
+
203
+ if (cached && this.isCacheValid(cached)) {
204
+ return cached.data;
205
+ }
206
+
207
+ const result = await this.weaviate.search(schemaName, method, options);
208
+ this.cache.set(cacheKey, {
209
+ data: result,
210
+ timestamp: Date.now(),
211
+ });
212
+
213
+ return result;
214
+ }
215
+ }
216
+ ```
217
+
218
+ #### Redis Caching
219
+
220
+ ```typescript
221
+ import Redis from "ioredis";
222
+
223
+ class RedisCachedWeaviateService {
224
+ private redis = new Redis(process.env.REDIS_URL);
225
+
226
+ async search(schemaName: string, method: string, options: any) {
227
+ const cacheKey = `weaviate:${schemaName}:${method}:${JSON.stringify(options)}`;
228
+
229
+ // Try cache first
230
+ const cached = await this.redis.get(cacheKey);
231
+ if (cached) {
232
+ return JSON.parse(cached);
233
+ }
234
+
235
+ // Execute search
236
+ const result = await this.weaviate.search(schemaName, method, options);
237
+
238
+ // Cache result
239
+ await this.redis.setex(cacheKey, 300, JSON.stringify(result)); // 5 min TTL
240
+
241
+ return result;
242
+ }
243
+ }
244
+ ```
245
+
246
+ ## 🔍 Monitoring and Profiling
247
+
248
+ ### Performance Monitoring
249
+
250
+ ```typescript
251
+ class PerformanceMonitor {
252
+ private metrics = {
253
+ searchCount: 0,
254
+ totalLatency: 0,
255
+ averageLatency: 0,
256
+ errorCount: 0,
257
+ };
258
+
259
+ async monitorSearch<T>(
260
+ schemaName: string,
261
+ method: string,
262
+ options: any,
263
+ searchFn: () => Promise<T>,
264
+ ): Promise<T> {
265
+ const startTime = performance.now();
266
+
267
+ try {
268
+ const result = await searchFn();
269
+ const endTime = performance.now();
270
+
271
+ this.updateMetrics(endTime - startTime, false);
272
+ return result;
273
+ } catch (error) {
274
+ this.updateMetrics(0, true);
275
+ throw error;
276
+ }
277
+ }
278
+
279
+ private updateMetrics(latency: number, isError: boolean) {
280
+ this.metrics.searchCount++;
281
+ this.metrics.totalLatency += latency;
282
+ this.metrics.averageLatency = this.metrics.totalLatency / this.metrics.searchCount;
283
+
284
+ if (isError) {
285
+ this.metrics.errorCount++;
286
+ }
287
+ }
288
+
289
+ getMetrics() {
290
+ return { ...this.metrics };
291
+ }
292
+ }
293
+ ```
294
+
295
+ ### Query Performance Analysis
296
+
297
+ ```typescript
298
+ class QueryAnalyzer {
299
+ analyzeQuery(options: any): QueryAnalysis {
300
+ const analysis = {
301
+ complexity: "low",
302
+ estimatedLatency: "fast",
303
+ recommendations: [],
304
+ };
305
+
306
+ // Analyze limit
307
+ if (!options.limit || options.limit > 100) {
308
+ analysis.recommendations.push("Consider adding a limit (recommended: 10-50)");
309
+ }
310
+
311
+ // Analyze filters
312
+ if (!options.where) {
313
+ analysis.recommendations.push("Consider adding filters to reduce search space");
314
+ }
315
+
316
+ // Analyze search method
317
+ if (options.hybrid?.alpha === 1.0) {
318
+ analysis.recommendations.push("Pure vector search - consider hybrid for better results");
319
+ }
320
+
321
+ return analysis;
322
+ }
323
+ }
324
+ ```
325
+
326
+ ## 🏗️ Architecture Optimization
327
+
328
+ ### Connection Pooling
329
+
330
+ ```typescript
331
+ // The framework automatically handles connection pooling
332
+ // No additional configuration needed for basic usage
333
+
334
+ // For high-load scenarios, consider:
335
+ class OptimizedWeaviateService {
336
+ private connectionPool: WeaviateClient[] = [];
337
+ private maxConnections = 10;
338
+
339
+ async initializePool() {
340
+ for (let i = 0; i < this.maxConnections; i++) {
341
+ const client = await WeaviateConfigService.initializeClient();
342
+ this.connectionPool.push(client);
343
+ }
344
+ }
345
+
346
+ getConnection(): WeaviateClient {
347
+ // Round-robin connection selection
348
+ const index = Math.floor(Math.random() * this.connectionPool.length);
349
+ return this.connectionPool[index];
350
+ }
351
+ }
352
+ ```
353
+
354
+ ### Batch Processing
355
+
356
+ ```typescript
357
+ class BatchProcessor {
358
+ private batch: any[] = [];
359
+ private batchSize = 10;
360
+ private batchTimeout = 1000; // 1 second
361
+
362
+ async addToBatch(data: any) {
363
+ this.batch.push(data);
364
+
365
+ if (this.batch.length >= this.batchSize) {
366
+ return await this.processBatch();
367
+ }
368
+
369
+ // Set timeout for batch processing
370
+ setTimeout(() => this.processBatch(), this.batchTimeout);
371
+ }
372
+
373
+ private async processBatch() {
374
+ if (this.batch.length === 0) return;
375
+
376
+ const batch = [...this.batch];
377
+ this.batch = [];
378
+
379
+ // Process batch efficiently
380
+ await this.processBatchData(batch);
381
+ }
382
+ }
383
+ ```
384
+
385
+ ## 📈 Performance Best Practices
386
+
387
+ ### 1. Schema Design
388
+
389
+ ```typescript
390
+ // ✅ Good schema design
391
+ const OptimizedPerson: SchemaConfig = {
392
+ name: "Person",
393
+ // Only essential fields are searchable
394
+ searchableFields: ["firstName", "lastName", "bio"],
395
+ // Strategic vectorization
396
+ properties: [
397
+ { name: "bio", type: "text", vectorizable: true },
398
+ { name: "firstName", type: "string", vectorizable: false },
399
+ ],
400
+ // Efficient indexing
401
+ vectorIndexConfig: {
402
+ distance: "cosine",
403
+ efConstruction: 128,
404
+ maxConnections: 16,
405
+ ef: 64,
406
+ },
407
+ };
408
+ ```
409
+
410
+ ### 2. Query Patterns
411
+
412
+ ```typescript
413
+ // ✅ Efficient query patterns
414
+ const efficientQueries = {
415
+ // Use filters to reduce search space
416
+ filteredSearch: {
417
+ hybrid: { query: "engineer" },
418
+ where: { path: ["city"], operator: "Equal", valueText: "SF" },
419
+ limit: 10,
420
+ },
421
+
422
+ // Use appropriate limits
423
+ limitedSearch: {
424
+ hybrid: { query: "AI" },
425
+ limit: 20, // Reasonable limit
426
+ },
427
+
428
+ // Use pagination for large result sets
429
+ paginatedSearch: {
430
+ hybrid: { query: "developer" },
431
+ limit: 10,
432
+ offset: 0,
433
+ },
434
+ };
435
+ ```
436
+
437
+ ### 3. Caching Strategy
438
+
439
+ ```typescript
440
+ // ✅ Multi-level caching
441
+ class OptimizedCaching {
442
+ private l1Cache = new Map(); // In-memory cache
443
+ private l2Cache: Redis; // Redis cache
444
+
445
+ async search(query: string) {
446
+ // L1 Cache (fastest)
447
+ if (this.l1Cache.has(query)) {
448
+ return this.l1Cache.get(query);
449
+ }
450
+
451
+ // L2 Cache (fast)
452
+ const cached = await this.l2Cache.get(query);
453
+ if (cached) {
454
+ this.l1Cache.set(query, cached);
455
+ return cached;
456
+ }
457
+
458
+ // Database (slowest)
459
+ const result = await this.executeSearch(query);
460
+
461
+ // Cache at both levels
462
+ this.l1Cache.set(query, result);
463
+ await this.l2Cache.setex(query, 300, result);
464
+
465
+ return result;
466
+ }
467
+ }
468
+ ```
469
+
470
+ ### 4. Error Handling
471
+
472
+ ```typescript
473
+ // ✅ Robust error handling
474
+ class ResilientWeaviateService {
475
+ async searchWithRetry(schemaName: string, method: string, options: any, maxRetries = 3) {
476
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
477
+ try {
478
+ return await this.weaviate.search(schemaName, method, options);
479
+ } catch (error) {
480
+ if (attempt === maxRetries) {
481
+ throw error;
482
+ }
483
+
484
+ // Exponential backoff
485
+ await this.sleep(Math.pow(2, attempt) * 1000);
486
+ }
487
+ }
488
+ }
489
+ }
490
+ ```
491
+
492
+ ## 🚨 Performance Anti-Patterns
493
+
494
+ ### ❌ Common Mistakes
495
+
496
+ ```typescript
497
+ // ❌ Don't: Search without limits
498
+ const badSearch = await weaviate.search("Person", {
499
+ method: "hybrid",
500
+ options: {
501
+ hybrid: { query: "engineer" },
502
+ // No limit = potentially thousands of results
503
+ }
504
+ });
505
+
506
+ // ❌ Don't: Vectorize everything
507
+ const badSchema = {
508
+ properties: [
509
+ { name: "id", vectorizable: true }, // Unnecessary
510
+ { name: "email", vectorizable: true }, // Unnecessary
511
+ { name: "phone", vectorizable: true }, // Unnecessary
512
+ ],
513
+ };
514
+
515
+ // ❌ Don't: Search then filter in application
516
+ const badPattern = async () => {
517
+ const allResults = await weaviate.search("Person", {
518
+ method: "hybrid",
519
+ options: {
520
+ hybrid: { query: "engineer" },
521
+ limit: 1000,
522
+ }
523
+ });
524
+
525
+ // Filtering in JavaScript (inefficient)
526
+ return allResults.objects.filter((person) => person.city === "SF");
527
+ };
528
+
529
+ // ❌ Don't: No caching for repeated queries
530
+ const badCaching = async (query: string) => {
531
+ // Same query executed multiple times
532
+ return await weaviate.search("Person", {
533
+ method: "hybrid",
534
+ options: { hybrid: { query } }
535
+ });
536
+ };
537
+ ```
538
+
539
+ ## 📊 Performance Monitoring Dashboard
540
+
541
+ ### Metrics to Track
542
+
543
+ ```typescript
544
+ interface PerformanceMetrics {
545
+ // Search metrics
546
+ searchCount: number;
547
+ averageLatency: number;
548
+ p95Latency: number;
549
+ p99Latency: number;
550
+
551
+ // Error metrics
552
+ errorRate: number;
553
+ timeoutRate: number;
554
+
555
+ // Resource metrics
556
+ memoryUsage: number;
557
+ cpuUsage: number;
558
+
559
+ // Cache metrics
560
+ cacheHitRate: number;
561
+ cacheSize: number;
562
+ }
563
+ ```
564
+
565
+ ### Monitoring Implementation
566
+
567
+ ```typescript
568
+ class PerformanceDashboard {
569
+ private metrics: PerformanceMetrics = {
570
+ searchCount: 0,
571
+ averageLatency: 0,
572
+ p95Latency: 0,
573
+ p99Latency: 0,
574
+ errorRate: 0,
575
+ timeoutRate: 0,
576
+ memoryUsage: 0,
577
+ cpuUsage: 0,
578
+ cacheHitRate: 0,
579
+ cacheSize: 0,
580
+ };
581
+
582
+ updateMetrics(searchLatency: number, isError: boolean) {
583
+ this.metrics.searchCount++;
584
+ this.metrics.averageLatency = (this.metrics.averageLatency + searchLatency) / 2;
585
+
586
+ if (isError) {
587
+ this.metrics.errorRate =
588
+ (this.metrics.errorRate * (this.metrics.searchCount - 1) + 1) / this.metrics.searchCount;
589
+ }
590
+ }
591
+
592
+ getHealthStatus(): "healthy" | "degraded" | "unhealthy" {
593
+ if (this.metrics.errorRate > 0.1) return "unhealthy";
594
+ if (this.metrics.averageLatency > 1000) return "degraded";
595
+ return "healthy";
596
+ }
597
+ }
598
+ ```
599
+
600
+ ---
601
+
602
+ **Next Steps**: For complete API documentation, see the [API Reference](./API_REFERENCE.md).