@hot-updater/server 1.0.0-rc.14 → 1.0.0-rc.16

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 (514) hide show
  1. package/dist/adapters/drizzle.cjs +35 -74
  2. package/dist/adapters/drizzle.d.cts +13 -5
  3. package/dist/adapters/drizzle.d.mts +13 -5
  4. package/dist/adapters/drizzle.mjs +34 -75
  5. package/dist/adapters/drizzleExecutor.cjs +114 -0
  6. package/dist/adapters/drizzleExecutor.d.cts +9 -0
  7. package/dist/adapters/drizzleExecutor.d.mts +9 -0
  8. package/dist/adapters/drizzleExecutor.mjs +112 -0
  9. package/dist/adapters/kysely.cjs +25 -31
  10. package/dist/adapters/kysely.d.cts +10 -6
  11. package/dist/adapters/kysely.d.mts +10 -6
  12. package/dist/adapters/kysely.mjs +25 -32
  13. package/dist/adapters/kyselyExecutor.cjs +32 -0
  14. package/dist/adapters/kyselyExecutor.d.cts +12 -0
  15. package/dist/adapters/kyselyExecutor.d.mts +12 -0
  16. package/dist/adapters/kyselyExecutor.mjs +32 -0
  17. package/dist/adapters/mongodb.cjs +28 -62
  18. package/dist/adapters/mongodb.d.cts +10 -5
  19. package/dist/adapters/mongodb.d.mts +10 -5
  20. package/dist/adapters/mongodb.mjs +28 -63
  21. package/dist/adapters/mongodbAdapter.cjs +174 -0
  22. package/dist/adapters/mongodbAdapter.d.cts +9 -0
  23. package/dist/adapters/mongodbAdapter.d.mts +9 -0
  24. package/dist/adapters/mongodbAdapter.mjs +173 -0
  25. package/dist/adapters/prisma.cjs +38 -257
  26. package/dist/adapters/prisma.d.cts +12 -7
  27. package/dist/adapters/prisma.d.mts +12 -7
  28. package/dist/adapters/prisma.mjs +38 -257
  29. package/dist/adapters/prismaExecutor.cjs +64 -0
  30. package/dist/adapters/prismaExecutor.mjs +64 -0
  31. package/dist/adapters/sqlProviders.cjs +9 -0
  32. package/dist/adapters/sqlProviders.mjs +9 -0
  33. package/dist/apiKeys.cjs +2 -6
  34. package/dist/apiKeys.d.cts +1 -23
  35. package/dist/apiKeys.d.mts +1 -23
  36. package/dist/apiKeys.mjs +2 -6
  37. package/dist/assembly/assemblePlugins.cjs +147 -0
  38. package/dist/assembly/assemblePlugins.d.cts +12 -0
  39. package/dist/assembly/assemblePlugins.d.mts +12 -0
  40. package/dist/assembly/assemblePlugins.mjs +146 -0
  41. package/dist/assembly/databasePlugins.cjs +23 -0
  42. package/dist/assembly/databasePlugins.d.cts +43 -0
  43. package/dist/assembly/databasePlugins.d.mts +43 -0
  44. package/dist/assembly/databasePlugins.mjs +22 -0
  45. package/dist/core/api.cjs +91 -0
  46. package/dist/core/api.d.cts +65 -0
  47. package/dist/core/api.d.mts +65 -0
  48. package/dist/core/api.mjs +87 -0
  49. package/dist/core/baseCandidates.cjs +71 -0
  50. package/dist/core/baseCandidates.d.cts +17 -0
  51. package/dist/core/baseCandidates.d.mts +17 -0
  52. package/dist/core/baseCandidates.mjs +69 -0
  53. package/dist/core/operations.cjs +350 -0
  54. package/dist/core/operations.mjs +350 -0
  55. package/dist/core/reads.cjs +273 -0
  56. package/dist/core/reads.d.cts +48 -0
  57. package/dist/core/reads.d.mts +48 -0
  58. package/dist/core/reads.mjs +267 -0
  59. package/dist/core/releases.cjs +193 -0
  60. package/dist/core/releases.mjs +190 -0
  61. package/dist/core/schema.cjs +279 -0
  62. package/dist/core/schema.d.cts +307 -0
  63. package/dist/core/schema.d.mts +307 -0
  64. package/dist/core/schema.mjs +277 -0
  65. package/dist/core/writes.cjs +96 -0
  66. package/dist/core/writes.mjs +91 -0
  67. package/dist/createHotUpdaterCore.cjs +58 -75
  68. package/dist/createHotUpdaterCore.d.cts +52 -44
  69. package/dist/createHotUpdaterCore.d.mts +52 -44
  70. package/dist/createHotUpdaterCore.mjs +59 -75
  71. package/dist/database/cursor.cjs +44 -0
  72. package/dist/database/cursor.d.cts +7 -0
  73. package/dist/database/cursor.d.mts +7 -0
  74. package/dist/database/cursor.mjs +40 -0
  75. package/dist/database/database.cjs +44 -0
  76. package/dist/database/database.d.cts +123 -0
  77. package/dist/database/database.d.mts +123 -0
  78. package/dist/database/database.mjs +44 -0
  79. package/dist/database/definitions.d.cts +68 -0
  80. package/dist/database/definitions.d.mts +68 -0
  81. package/dist/database/engine.cjs +37 -0
  82. package/dist/database/engine.d.cts +40 -0
  83. package/dist/database/engine.d.mts +40 -0
  84. package/dist/database/engine.mjs +37 -0
  85. package/dist/database/engineAggregates.cjs +115 -0
  86. package/dist/database/engineAggregates.mjs +112 -0
  87. package/dist/database/engineReads.cjs +180 -0
  88. package/dist/database/engineReads.d.cts +35 -0
  89. package/dist/database/engineReads.d.mts +35 -0
  90. package/dist/database/engineReads.mjs +179 -0
  91. package/dist/database/engineTransaction.cjs +403 -0
  92. package/dist/database/engineTransaction.d.cts +26 -0
  93. package/dist/database/engineTransaction.d.mts +26 -0
  94. package/dist/database/engineTransaction.mjs +402 -0
  95. package/dist/database/errors.cjs +27 -0
  96. package/dist/database/errors.d.cts +21 -0
  97. package/dist/database/errors.d.mts +21 -0
  98. package/dist/database/errors.mjs +24 -0
  99. package/dist/database/fence.cjs +124 -0
  100. package/dist/database/fence.d.cts +42 -0
  101. package/dist/database/fence.d.mts +42 -0
  102. package/dist/database/fence.mjs +116 -0
  103. package/dist/database/index.cjs +127 -0
  104. package/dist/database/index.d.cts +17 -0
  105. package/dist/database/index.d.mts +17 -0
  106. package/dist/database/index.mjs +15 -0
  107. package/dist/database/kv/kvAdapter.cjs +273 -0
  108. package/dist/database/kv/kvAdapter.d.cts +101 -0
  109. package/dist/database/kv/kvAdapter.d.mts +101 -0
  110. package/dist/database/kv/kvAdapter.mjs +272 -0
  111. package/dist/database/resolveSchema.cjs +196 -0
  112. package/dist/database/resolveSchema.d.cts +42 -0
  113. package/dist/database/resolveSchema.d.mts +42 -0
  114. package/dist/database/resolveSchema.mjs +193 -0
  115. package/dist/database/schema.cjs +21 -0
  116. package/dist/database/schema.d.cts +61 -0
  117. package/dist/database/schema.d.mts +61 -0
  118. package/dist/database/schema.mjs +20 -0
  119. package/dist/database/sql/sqlAdapter.cjs +282 -0
  120. package/dist/database/sql/sqlAdapter.d.cts +46 -0
  121. package/dist/database/sql/sqlAdapter.d.mts +46 -0
  122. package/dist/database/sql/sqlAdapter.mjs +279 -0
  123. package/dist/database/sql/sqlSchema.cjs +115 -0
  124. package/dist/database/sql/sqlSchema.d.cts +8 -0
  125. package/dist/database/sql/sqlSchema.d.mts +8 -0
  126. package/dist/database/sql/sqlSchema.mjs +111 -0
  127. package/dist/db/builtInDatabase.cjs +104 -0
  128. package/dist/db/builtInDatabase.d.cts +38 -0
  129. package/dist/db/builtInDatabase.d.mts +38 -0
  130. package/dist/db/builtInDatabase.mjs +97 -0
  131. package/dist/db/createBundleDiff.cjs +4 -4
  132. package/dist/db/createBundleDiff.d.cts +3 -2
  133. package/dist/db/createBundleDiff.d.mts +3 -2
  134. package/dist/db/createBundleDiff.mjs +5 -5
  135. package/dist/db/engineDrizzleSchema.cjs +54 -0
  136. package/dist/db/engineDrizzleSchema.mjs +54 -0
  137. package/dist/db/engineMigrator.cjs +53 -0
  138. package/dist/db/engineMigrator.mjs +53 -0
  139. package/dist/db/enginePrismaSchema.cjs +85 -0
  140. package/dist/db/enginePrismaSchema.d.cts +5 -0
  141. package/dist/db/enginePrismaSchema.d.mts +5 -0
  142. package/dist/db/enginePrismaSchema.mjs +84 -0
  143. package/dist/db/engineSql.cjs +26 -0
  144. package/dist/db/engineSql.d.cts +17 -0
  145. package/dist/db/engineSql.d.mts +17 -0
  146. package/dist/db/engineSql.mjs +25 -0
  147. package/dist/db/engineSqlMigrator.cjs +66 -0
  148. package/dist/db/engineSqlMigrator.mjs +66 -0
  149. package/dist/db/fixedMigratorShared.cjs +0 -11
  150. package/dist/db/fixedMigratorShared.mjs +1 -8
  151. package/dist/db/index.cjs +23 -8
  152. package/dist/db/index.d.cts +10 -3
  153. package/dist/db/index.d.mts +10 -3
  154. package/dist/db/index.mjs +16 -8
  155. package/dist/db/releaseCatalog.cjs +20 -43
  156. package/dist/db/releaseCatalog.d.cts +2 -2
  157. package/dist/db/releaseCatalog.d.mts +2 -2
  158. package/dist/db/releaseCatalog.mjs +20 -44
  159. package/dist/db/schemaSettings.cjs +63 -0
  160. package/dist/db/schemaSettings.d.cts +12 -0
  161. package/dist/db/schemaSettings.d.mts +12 -0
  162. package/dist/db/schemaSettings.mjs +62 -0
  163. package/dist/db/settingsMigrator.cjs +92 -0
  164. package/dist/db/settingsMigrator.mjs +89 -0
  165. package/dist/db/types.cjs +1 -12
  166. package/dist/db/types.d.cts +26 -66
  167. package/dist/db/types.d.mts +26 -66
  168. package/dist/db/types.mjs +2 -11
  169. package/dist/db/updateArtifacts.cjs +38 -67
  170. package/dist/db/updateArtifacts.mjs +40 -69
  171. package/dist/handler.cjs +72 -43
  172. package/dist/handler.d.cts +3 -5
  173. package/dist/handler.d.mts +3 -5
  174. package/dist/handler.mjs +73 -43
  175. package/dist/handlerAdminRoutes.cjs +375 -0
  176. package/dist/handlerAdminRoutes.mjs +373 -0
  177. package/dist/handlerParameters.cjs +6 -11
  178. package/dist/handlerParameters.mjs +6 -10
  179. package/dist/handlerReleaseCatalogRoutes.cjs +11 -13
  180. package/dist/handlerReleaseCatalogRoutes.mjs +11 -13
  181. package/dist/handlerTypes.d.cts +2 -55
  182. package/dist/handlerTypes.d.mts +2 -55
  183. package/dist/handlerVersionRoutes.cjs +20 -4
  184. package/dist/handlerVersionRoutes.mjs +20 -4
  185. package/dist/index.cjs +4 -7
  186. package/dist/index.d.cts +8 -7
  187. package/dist/index.d.mts +8 -7
  188. package/dist/index.mjs +4 -4
  189. package/dist/insights/domain.d.cts +12 -0
  190. package/dist/insights/domain.d.mts +12 -0
  191. package/dist/insights/errors.cjs +34 -0
  192. package/dist/insights/errors.mjs +34 -1
  193. package/dist/insights/eventInput.cjs +14 -19
  194. package/dist/insights/eventInput.mjs +15 -20
  195. package/dist/insights/provider.cjs +47 -23
  196. package/dist/insights/provider.mjs +47 -24
  197. package/dist/insights/routes.cjs +79 -14
  198. package/dist/insights/routes.mjs +77 -14
  199. package/dist/node.d.cts +1 -1
  200. package/dist/node.d.mts +1 -1
  201. package/dist/package.cjs +1 -1
  202. package/dist/package.mjs +1 -1
  203. package/dist/plugins/api-keys/index.cjs +50 -0
  204. package/dist/plugins/api-keys/index.d.cts +85 -0
  205. package/dist/plugins/api-keys/index.d.mts +85 -0
  206. package/dist/plugins/api-keys/index.mjs +47 -0
  207. package/dist/plugins/api-keys/model.cjs +58 -0
  208. package/dist/plugins/api-keys/model.d.cts +8 -0
  209. package/dist/plugins/api-keys/model.d.mts +8 -0
  210. package/dist/plugins/api-keys/model.mjs +58 -0
  211. package/dist/plugins/api-keys/schema.cjs +38 -0
  212. package/dist/plugins/api-keys/schema.d.cts +44 -0
  213. package/dist/plugins/api-keys/schema.d.mts +44 -0
  214. package/dist/plugins/api-keys/schema.mjs +39 -0
  215. package/dist/plugins/builtIn.cjs +7 -0
  216. package/dist/plugins/builtIn.mjs +6 -0
  217. package/dist/plugins/definePlugin.cjs +5 -0
  218. package/dist/plugins/definePlugin.d.cts +73 -0
  219. package/dist/plugins/definePlugin.d.mts +73 -0
  220. package/dist/plugins/definePlugin.mjs +5 -0
  221. package/dist/plugins/index.cjs +17 -0
  222. package/dist/plugins/index.d.cts +9 -0
  223. package/dist/plugins/index.d.mts +9 -0
  224. package/dist/plugins/index.mjs +7 -0
  225. package/dist/plugins/insights/index.cjs +48 -0
  226. package/dist/plugins/insights/index.d.cts +295 -0
  227. package/dist/plugins/insights/index.d.mts +295 -0
  228. package/dist/plugins/insights/index.mjs +44 -0
  229. package/dist/plugins/insights/model.cjs +17 -0
  230. package/dist/plugins/insights/model.d.cts +10 -0
  231. package/dist/plugins/insights/model.d.mts +10 -0
  232. package/dist/plugins/insights/model.mjs +17 -0
  233. package/dist/plugins/insights/reads.cjs +471 -0
  234. package/dist/plugins/insights/reads.mjs +466 -0
  235. package/dist/plugins/insights/recordEvent.cjs +135 -0
  236. package/dist/plugins/insights/recordEvent.d.cts +13 -0
  237. package/dist/plugins/insights/recordEvent.d.mts +13 -0
  238. package/dist/plugins/insights/recordEvent.mjs +132 -0
  239. package/dist/plugins/insights/schema.cjs +347 -0
  240. package/dist/plugins/insights/schema.d.cts +258 -0
  241. package/dist/plugins/insights/schema.d.mts +258 -0
  242. package/dist/plugins/insights/schema.mjs +344 -0
  243. package/dist/types/index.d.cts +2 -28
  244. package/dist/types/index.d.mts +2 -28
  245. package/package.json +28 -5
  246. package/src/adapters/drizzle.conformance.integration.spec.ts +34 -0
  247. package/src/adapters/drizzle.readBudgets.integration.spec.ts +41 -0
  248. package/src/adapters/drizzle.spec.ts +270 -399
  249. package/src/adapters/drizzle.ts +48 -140
  250. package/src/adapters/drizzleExecutor.ts +166 -0
  251. package/src/adapters/kysely.conformance.integration.spec.ts +36 -0
  252. package/src/adapters/kysely.readBudgets.integration.spec.ts +42 -0
  253. package/src/adapters/kysely.spec.ts +204 -171
  254. package/src/adapters/kysely.ts +32 -93
  255. package/src/adapters/kyselyExecutor.ts +53 -0
  256. package/src/adapters/mongodb.integration.spec.ts +143 -446
  257. package/src/adapters/mongodb.readBudgets.integration.spec.ts +61 -0
  258. package/src/adapters/mongodb.ts +36 -123
  259. package/src/adapters/mongodbAdapter.ts +293 -0
  260. package/src/adapters/prisma.conformance.integration.spec.ts +36 -0
  261. package/src/adapters/prisma.integration.spec.ts +138 -0
  262. package/src/adapters/prisma.readBudgets.integration.spec.ts +40 -0
  263. package/src/adapters/prisma.spec.ts +216 -433
  264. package/src/adapters/prisma.ts +60 -524
  265. package/src/adapters/prismaExecutor.ts +107 -0
  266. package/src/adapters/prismaTestClients.ts +175 -0
  267. package/src/adapters/sqlProviders.ts +14 -0
  268. package/src/apiKeys.integration.spec.ts +19 -119
  269. package/src/apiKeys.spec.ts +39 -35
  270. package/src/apiKeys.ts +2 -8
  271. package/src/assembly/assemblePlugins.ts +269 -0
  272. package/src/assembly/assembly.spec.ts +325 -0
  273. package/src/assembly/assembly.types.spec.ts +155 -0
  274. package/src/assembly/builtInRoutes.spec.ts +213 -0
  275. package/src/assembly/databasePlugins.spec.ts +71 -0
  276. package/src/assembly/databasePlugins.ts +96 -0
  277. package/src/core/api.ts +139 -0
  278. package/src/core/baseCandidates.spec.ts +378 -0
  279. package/src/core/baseCandidates.ts +136 -0
  280. package/src/core/index.ts +44 -0
  281. package/src/core/operations.spec.ts +415 -0
  282. package/src/core/operations.ts +551 -0
  283. package/src/core/reads.spec.ts +300 -0
  284. package/src/core/reads.ts +417 -0
  285. package/src/core/releases.spec.ts +308 -0
  286. package/src/core/releases.ts +345 -0
  287. package/src/core/schema.ts +173 -0
  288. package/src/core/writes.ts +160 -0
  289. package/src/createHotUpdaterCore.ts +191 -181
  290. package/src/database/cursor.ts +65 -0
  291. package/src/database/database.ts +335 -0
  292. package/src/database/database.types.spec.ts +135 -0
  293. package/src/database/definitions.ts +72 -0
  294. package/src/database/engine.ts +62 -0
  295. package/src/database/engineAggregates.spec.ts +539 -0
  296. package/src/database/engineAggregates.ts +193 -0
  297. package/src/database/engineReads.spec.ts +219 -0
  298. package/src/database/engineReads.ts +302 -0
  299. package/src/database/engineTransaction.spec.ts +710 -0
  300. package/src/database/engineTransaction.ts +588 -0
  301. package/src/database/errors.ts +30 -0
  302. package/src/database/fence.spec.ts +223 -0
  303. package/src/database/fence.ts +171 -0
  304. package/src/database/index.ts +154 -0
  305. package/src/database/kv/kvAdapter.conformance.integration.spec.ts +17 -0
  306. package/src/database/kv/kvAdapter.readBudgets.integration.spec.ts +17 -0
  307. package/src/database/kv/kvAdapter.spec.ts +468 -0
  308. package/src/database/kv/kvAdapter.ts +450 -0
  309. package/src/database/kv/kvTestStore.ts +91 -0
  310. package/src/database/memory.readBudgets.integration.spec.ts +13 -0
  311. package/src/database/resolveSchema.spec.ts +230 -0
  312. package/src/database/resolveSchema.ts +372 -0
  313. package/src/database/schema.ts +169 -0
  314. package/src/database/schema.types.spec.ts +94 -0
  315. package/src/database/sql/docker-compose.yml +36 -0
  316. package/src/database/sql/sqlAdapter.integration.spec.ts +148 -0
  317. package/src/database/sql/sqlAdapter.readBudgets.integration.spec.ts +109 -0
  318. package/src/database/sql/sqlAdapter.spec.ts +255 -0
  319. package/src/database/sql/sqlAdapter.ts +532 -0
  320. package/src/database/sql/sqlSchema.ts +205 -0
  321. package/src/database/sql/sqlTestExecutors.ts +183 -0
  322. package/src/databaseTestSuite.spec.ts +39 -0
  323. package/src/db/builtInDatabase.ts +149 -0
  324. package/src/db/bundleRows.spec.ts +3 -3
  325. package/src/db/createBundleDiff.spec.ts +43 -29
  326. package/src/db/createBundleDiff.ts +13 -7
  327. package/src/db/engineDrizzleSchema.ts +72 -0
  328. package/src/db/engineMigrator.ts +105 -0
  329. package/src/db/enginePrismaSchema.ts +147 -0
  330. package/src/db/engineSql.spec.ts +129 -0
  331. package/src/db/engineSql.ts +48 -0
  332. package/src/db/engineSqlMigrator.ts +116 -0
  333. package/src/db/fixedMigratorShared.ts +1 -20
  334. package/src/db/index.spec.ts +116 -829
  335. package/src/db/index.ts +43 -14
  336. package/src/db/pluginTables.spec.ts +218 -0
  337. package/src/db/releaseCatalog.ts +48 -90
  338. package/src/db/schemaSettings.ts +104 -0
  339. package/src/db/settingsMigrator.spec.ts +65 -0
  340. package/src/db/settingsMigrator.ts +152 -0
  341. package/src/db/types.ts +25 -171
  342. package/src/db/updateArtifacts.spec.ts +170 -294
  343. package/src/db/updateArtifacts.ts +74 -142
  344. package/src/db/updateCheck.bench.ts +47 -0
  345. package/src/handler-standalone.integration.spec.ts +204 -410
  346. package/src/handler.spec.ts +134 -51
  347. package/src/handler.testFixtures.ts +14 -19
  348. package/src/handler.ts +163 -75
  349. package/src/handlerAdminRoutes.spec.ts +183 -0
  350. package/src/handlerAdminRoutes.ts +536 -0
  351. package/src/handlerAuth.integration.spec.ts +3 -3
  352. package/src/handlerManagement.spec.ts +136 -196
  353. package/src/handlerReleaseCatalogRoutes.ts +15 -17
  354. package/src/handlerTypes.ts +3 -80
  355. package/src/handlerVersionRoutes.ts +20 -7
  356. package/src/index.ts +5 -12
  357. package/src/insights/domain.ts +12 -0
  358. package/src/insights/errors.spec.ts +48 -0
  359. package/src/insights/errors.ts +51 -0
  360. package/src/insights/eventInput.ts +27 -24
  361. package/src/insights/insights.integration.spec.ts +228 -78
  362. package/src/insights/provider.spec.ts +203 -25
  363. package/src/insights/provider.ts +88 -32
  364. package/src/insights/routes.ts +95 -20
  365. package/src/lintRules.spec.ts +76 -0
  366. package/src/plugins/api-keys/apiKeysPlugin.spec.ts +172 -0
  367. package/src/plugins/api-keys/index.ts +66 -0
  368. package/src/plugins/api-keys/model.ts +69 -0
  369. package/src/plugins/api-keys/schema.ts +22 -0
  370. package/src/plugins/builtIn.ts +5 -0
  371. package/src/plugins/definePlugin.ts +100 -0
  372. package/src/plugins/index.ts +55 -0
  373. package/src/plugins/insights/index.ts +86 -0
  374. package/src/plugins/insights/insightsRollout.integration.spec.ts +187 -0
  375. package/src/plugins/insights/model.spec.ts +66 -0
  376. package/src/plugins/insights/model.ts +19 -0
  377. package/src/plugins/insights/reads.spec.ts +725 -0
  378. package/src/plugins/insights/reads.ts +707 -0
  379. package/src/plugins/insights/recordEvent.spec.ts +443 -0
  380. package/src/plugins/insights/recordEvent.ts +238 -0
  381. package/src/plugins/insights/schema.ts +229 -0
  382. package/src/plugins/pluginTestHarness.spec.ts +56 -0
  383. package/src/readBudgets.testFixtures.ts +15 -0
  384. package/src/releaseCatalogRoutes.integration.spec.ts +47 -92
  385. package/src/runtime.spec.ts +91 -77
  386. package/src/runtime.testFixtures.ts +28 -44
  387. package/src/runtimeBundles.integration.spec.ts +112 -0
  388. package/src/testUtilsMutation.integration.spec.ts +215 -0
  389. package/src/testUtilsPackage.integration.spec.ts +176 -0
  390. package/src/types/index.ts +0 -32
  391. package/dist/adapters/databaseConstraintErrors.cjs +0 -22
  392. package/dist/adapters/databaseConstraintErrors.mjs +0 -21
  393. package/dist/adapters/databasePluginUtils.cjs +0 -130
  394. package/dist/adapters/databasePluginUtils.mjs +0 -118
  395. package/dist/adapters/drizzleCrud.cjs +0 -340
  396. package/dist/adapters/drizzleCrud.mjs +0 -337
  397. package/dist/adapters/drizzleLazyDB.cjs +0 -103
  398. package/dist/adapters/drizzleLazyDB.mjs +0 -103
  399. package/dist/adapters/drizzleQuery.cjs +0 -69
  400. package/dist/adapters/drizzleQuery.mjs +0 -69
  401. package/dist/adapters/kyselyCrud.cjs +0 -293
  402. package/dist/adapters/kyselyCrud.mjs +0 -292
  403. package/dist/adapters/kyselyQuery.cjs +0 -56
  404. package/dist/adapters/kyselyQuery.mjs +0 -56
  405. package/dist/adapters/mongodbCollections.cjs +0 -38
  406. package/dist/adapters/mongodbCollections.mjs +0 -32
  407. package/dist/adapters/mongodbQuery.cjs +0 -90
  408. package/dist/adapters/mongodbQuery.mjs +0 -83
  409. package/dist/adapters/mongodbReads.cjs +0 -206
  410. package/dist/adapters/mongodbReads.mjs +0 -206
  411. package/dist/adapters/mongodbWrites.cjs +0 -133
  412. package/dist/adapters/mongodbWrites.mjs +0 -133
  413. package/dist/adapters/prismaInsights.cjs +0 -99
  414. package/dist/adapters/prismaInsights.mjs +0 -97
  415. package/dist/adapters/prismaQuery.cjs +0 -57
  416. package/dist/adapters/prismaQuery.mjs +0 -56
  417. package/dist/adapters/prismaRows.cjs +0 -197
  418. package/dist/adapters/prismaRows.mjs +0 -188
  419. package/dist/db/databasePluginCore.cjs +0 -137
  420. package/dist/db/databasePluginCore.mjs +0 -137
  421. package/dist/db/fixedMigrator.cjs +0 -79
  422. package/dist/db/fixedMigrator.mjs +0 -78
  423. package/dist/db/fixedMigratorMongo.cjs +0 -321
  424. package/dist/db/fixedMigratorMongo.mjs +0 -321
  425. package/dist/db/mongoMigrationExecution.cjs +0 -11
  426. package/dist/db/mongoMigrationExecution.mjs +0 -11
  427. package/dist/db/schema/insightsCollation.cjs +0 -14
  428. package/dist/db/schema/insightsCollation.mjs +0 -14
  429. package/dist/db/schema/mongodb.cjs +0 -25
  430. package/dist/db/schema/mongodb.mjs +0 -25
  431. package/dist/db/schema/registry.cjs +0 -21
  432. package/dist/db/schema/registry.mjs +0 -17
  433. package/dist/db/schema/sql.cjs +0 -105
  434. package/dist/db/schema/sql.mjs +0 -97
  435. package/dist/db/schema/sqlOperations.cjs +0 -27
  436. package/dist/db/schema/sqlOperations.mjs +0 -26
  437. package/dist/db/schemaGenerators.cjs +0 -276
  438. package/dist/db/schemaGenerators.mjs +0 -274
  439. package/dist/db/schemaReadiness.cjs +0 -26
  440. package/dist/db/schemaReadiness.d.cts +0 -9
  441. package/dist/db/schemaReadiness.d.mts +0 -9
  442. package/dist/db/schemaReadiness.mjs +0 -25
  443. package/dist/db/sqlMigrationExecution.cjs +0 -67
  444. package/dist/db/sqlMigrationExecution.mjs +0 -67
  445. package/dist/handlerBundleRoutes.cjs +0 -155
  446. package/dist/handlerBundleRoutes.mjs +0 -155
  447. package/dist/handlerReleaseManagementRoutes.cjs +0 -124
  448. package/dist/handlerReleaseManagementRoutes.mjs +0 -124
  449. package/dist/schema/dsl.cjs +0 -103
  450. package/dist/schema/dsl.mjs +0 -87
  451. package/dist/schema/index.cjs +0 -20
  452. package/dist/schema/index.mjs +0 -7
  453. package/dist/schema/settings.cjs +0 -9
  454. package/dist/schema/settings.mjs +0 -9
  455. package/dist/schema/types.cjs +0 -8
  456. package/dist/schema/types.mjs +0 -6
  457. package/dist/schema/v1_0_0.cjs +0 -393
  458. package/dist/schema/v1_0_0.mjs +0 -385
  459. package/src/adapters/databaseConstraintErrors.ts +0 -25
  460. package/src/adapters/databasePluginTestDatabase.ts +0 -116
  461. package/src/adapters/databasePluginUtils.spec.ts +0 -29
  462. package/src/adapters/databasePluginUtils.ts +0 -238
  463. package/src/adapters/drizzleCrud.ts +0 -610
  464. package/src/adapters/drizzleLazyDB.ts +0 -284
  465. package/src/adapters/drizzleQuery.ts +0 -164
  466. package/src/adapters/kyselyCrud.ts +0 -696
  467. package/src/adapters/kyselyInsights.spec.ts +0 -168
  468. package/src/adapters/kyselyQuery.ts +0 -128
  469. package/src/adapters/mongodb.spec.ts +0 -230
  470. package/src/adapters/mongodbCollections.ts +0 -78
  471. package/src/adapters/mongodbQuery.ts +0 -245
  472. package/src/adapters/mongodbReads.ts +0 -387
  473. package/src/adapters/mongodbRows.spec.ts +0 -64
  474. package/src/adapters/mongodbRows.ts +0 -118
  475. package/src/adapters/mongodbTestClient.ts +0 -443
  476. package/src/adapters/mongodbTestFilter.ts +0 -170
  477. package/src/adapters/mongodbWrites.ts +0 -261
  478. package/src/adapters/prismaInsights.ts +0 -190
  479. package/src/adapters/prismaQuery.ts +0 -129
  480. package/src/adapters/prismaRows.spec.ts +0 -98
  481. package/src/adapters/prismaRows.ts +0 -308
  482. package/src/adapters/prismaTestClient.ts +0 -478
  483. package/src/calculatePagination.ts +0 -34
  484. package/src/db/databasePluginCore.spec.ts +0 -62
  485. package/src/db/databasePluginCore.testFixtures.ts +0 -76
  486. package/src/db/databasePluginCore.ts +0 -185
  487. package/src/db/databasePluginUpdateCheck.bench.ts +0 -117
  488. package/src/db/fixedMigrator.spec.ts +0 -294
  489. package/src/db/fixedMigrator.ts +0 -147
  490. package/src/db/fixedMigratorMongo.spec.ts +0 -253
  491. package/src/db/fixedMigratorMongo.ts +0 -425
  492. package/src/db/hotUpdaterSchema.ts +0 -5
  493. package/src/db/mongoMigrationExecution.ts +0 -23
  494. package/src/db/schema/definitions.ts +0 -1
  495. package/src/db/schema/insightsCollation.ts +0 -21
  496. package/src/db/schema/mongodb.ts +0 -40
  497. package/src/db/schema/registry.ts +0 -55
  498. package/src/db/schema/sql.ts +0 -244
  499. package/src/db/schema/sqlOperations.ts +0 -63
  500. package/src/db/schema/types.ts +0 -1
  501. package/src/db/schemaGenerators.ts +0 -495
  502. package/src/db/schemaReadiness.ts +0 -34
  503. package/src/db/sqlMigrationExecution.spec.ts +0 -65
  504. package/src/db/sqlMigrationExecution.ts +0 -108
  505. package/src/db/types.spec.ts +0 -63
  506. package/src/handlerBundleRoutes.ts +0 -259
  507. package/src/handlerReleaseManagementRoutes.ts +0 -213
  508. package/src/schema/dsl-all-versions.spec.ts +0 -35
  509. package/src/schema/dsl.ts +0 -187
  510. package/src/schema/index.ts +0 -10
  511. package/src/schema/settings.ts +0 -15
  512. package/src/schema/types.ts +0 -79
  513. package/src/schema/v1_0_0.spec.ts +0 -220
  514. package/src/schema/v1_0_0.ts +0 -511
@@ -0,0 +1,471 @@
1
+ require("../../insights/provider.cjs");
2
+ const require_schema = require("./schema.cjs");
3
+ const require_recordEvent = require("./recordEvent.cjs");
4
+ let _hot_updater_plugin_core = require("@hot-updater/plugin-core");
5
+ let _hot_updater_plugin_core_internal = require("@hot-updater/plugin-core/internal");
6
+ //#region src/plugins/insights/reads.ts
7
+ const PAGE = 500;
8
+ const hourFloor = (ms) => ms - ms % require_schema.HOUR_MS;
9
+ const hourCeil = (ms) => hourFloor(ms + require_schema.HOUR_MS - 1);
10
+ const dayFloor = (ms) => ms - ms % require_schema.DAY_MS;
11
+ const dayCeil = (ms) => dayFloor(ms + require_schema.DAY_MS - 1);
12
+ /** Every page of one read, in order. */
13
+ const drain = async (read) => {
14
+ const rows = [];
15
+ let cursor;
16
+ do {
17
+ const page = await read(cursor === void 0 ? {} : { cursor });
18
+ rows.push(...page.rows);
19
+ cursor = page.next;
20
+ } while (cursor !== void 0);
21
+ return rows;
22
+ };
23
+ const EVENT_FIELDS = [
24
+ "id",
25
+ "type",
26
+ "install_id",
27
+ "user_id",
28
+ "from_release_id",
29
+ "from_bundle_id",
30
+ "to_release_id",
31
+ "to_bundle_id",
32
+ "platform",
33
+ "app_version",
34
+ "channel",
35
+ "metadata",
36
+ "received_at_ms"
37
+ ];
38
+ /** A stored event or head, as the event row it holds. */
39
+ const toEvent = (row) => Object.fromEntries(EVENT_FIELDS.map((field) => [field, row[field]]));
40
+ const bundleRef = (filter) => filter.type === "RECOVERED" ? `from:${filter.fromBundleId}` : `to:${filter.toBundleId}`;
41
+ const scopeOf = (filter) => ({
42
+ platform: filter.platform,
43
+ channel: filter.channel,
44
+ type: filter.type,
45
+ bundle_ref: bundleRef(filter)
46
+ });
47
+ /** One UTC day of a global or bundle list, newest first. */
48
+ const eventsOfDay = (db, filter, day, range, limit) => filter.kind === "all" ? db.findMany("bundle_events", {
49
+ index: "byDay",
50
+ where: { day },
51
+ range,
52
+ order: "desc",
53
+ limit
54
+ }) : db.findMany("bundle_events", {
55
+ index: "byBundle",
56
+ where: {
57
+ ...scopeOf(filter),
58
+ day
59
+ },
60
+ range,
61
+ order: "desc",
62
+ limit
63
+ });
64
+ /**
65
+ * The newest UTC day before `day`, and not before `since`'s, that holds an
66
+ * event the list matches, from one outcome row: the global list's per-day
67
+ * count, or the bundle filter's own hourly one.
68
+ */
69
+ const newestDayBelow = async (db, filter, day, since) => {
70
+ const counted = filter.kind === "all" ? {
71
+ where: require_schema.DAILY_EVENTS,
72
+ from: dayFloor(since)
73
+ } : {
74
+ where: scopeOf(filter),
75
+ from: hourFloor(since)
76
+ };
77
+ const [newest] = (await db.findAggregates("insights_outcomes", {
78
+ index: "byRef",
79
+ where: counted.where,
80
+ range: {
81
+ gte: counted.from,
82
+ lt: day
83
+ },
84
+ order: "desc",
85
+ limit: 1
86
+ })).rows;
87
+ return newest === void 0 ? void 0 : dayFloor(newest.bucket_start_ms);
88
+ };
89
+ /**
90
+ * Newest first over [since, before), after the cursor. The global and bundle
91
+ * lists cover at most 90 × 24 hours, however many UTC days that touches, and
92
+ * reject a longer range instead of cutting it short. They read one query per
93
+ * UTC day that holds a matching event: a day that holds none is read once,
94
+ * then one outcome row names the newest day below it that does, so a gap of
95
+ * any length costs two reads.
96
+ */
97
+ const listEvents = async (db, input) => {
98
+ const since = input.sinceMs ?? 0;
99
+ const range = {
100
+ gte: since,
101
+ lt: input.after === void 0 ? input.beforeReceivedAtMs : [input.after.receivedAtMs, input.after.id]
102
+ };
103
+ const { filter, limit } = input;
104
+ if (filter.kind === "installationMovement") return (await db.findMany("bundle_events", {
105
+ index: "movementsByInstall",
106
+ where: { movement_install_id: filter.installId },
107
+ range,
108
+ order: "desc",
109
+ limit
110
+ })).rows.map(toEvent);
111
+ if (input.beforeReceivedAtMs - since > 7776e6) throw new _hot_updater_plugin_core.DatabasePluginInputError("invalid-query");
112
+ const rows = [];
113
+ const bottom = dayFloor(since);
114
+ let day = dayFloor(input.after?.receivedAtMs ?? input.beforeReceivedAtMs - 1);
115
+ while (day !== void 0 && day >= bottom && rows.length < limit) {
116
+ const page = await eventsOfDay(db, filter, day, range, limit - rows.length);
117
+ rows.push(...page.rows.map(toEvent));
118
+ day = page.rows.length > 0 ? day - require_schema.DAY_MS : day > bottom ? await newestDayBelow(db, filter, day, since) : void 0;
119
+ }
120
+ return rows;
121
+ };
122
+ /** One point read for an installation; a user's installations in binary install id order. */
123
+ const findLatestEvents = async (db, input) => {
124
+ if ("installId" in input) {
125
+ const head = await db.findOne("bundle_event_heads", { install_id: input.installId });
126
+ return head === null ? [] : [toEvent(head)];
127
+ }
128
+ return (await db.findMany("bundle_event_heads", {
129
+ index: "byUser",
130
+ where: { user_id: input.userId },
131
+ ...input.afterInstallId === void 0 ? {} : { range: { gt: input.afterInstallId } },
132
+ order: "asc",
133
+ limit: input.limit
134
+ })).rows.map(toEvent);
135
+ };
136
+ /** Raw events of one bundle filter over [from, to), which spans at most two partial hours. */
137
+ const countRaw = async (db, filter, from, to) => {
138
+ let total = 0;
139
+ for (let day = dayFloor(from); from < to && day < to; day += require_schema.DAY_MS) {
140
+ const rows = await drain((page) => db.findMany("bundle_events", {
141
+ index: "byBundle",
142
+ where: {
143
+ ...scopeOf(filter),
144
+ day
145
+ },
146
+ range: {
147
+ gte: from,
148
+ lt: to
149
+ },
150
+ limit: PAGE,
151
+ ...page
152
+ }));
153
+ total += rows.length;
154
+ }
155
+ return total;
156
+ };
157
+ /** Whole hours from outcome counters; the partial hours at either edge from raw events. */
158
+ const countEvents = async (db, input) => {
159
+ const { filter, sinceMs, beforeReceivedAtMs } = input;
160
+ const start = hourCeil(sinceMs);
161
+ const end = hourFloor(beforeReceivedAtMs);
162
+ if (start >= end) return countRaw(db, filter, sinceMs, beforeReceivedAtMs);
163
+ const hours = await drain((page) => db.findAggregates("insights_outcomes", {
164
+ index: "byRef",
165
+ where: scopeOf(filter),
166
+ range: {
167
+ gte: start,
168
+ lt: end
169
+ },
170
+ limit: PAGE,
171
+ ...page
172
+ }));
173
+ return await countRaw(db, filter, sinceMs, start) + hours.reduce((sum, row) => sum + row.events, 0) + await countRaw(db, filter, end, beforeReceivedAtMs);
174
+ };
175
+ /** A bundle filter's distinct (field, value, type) predicates. */
176
+ const latestPredicates = (bundle) => {
177
+ if (bundle === void 0) return void 0;
178
+ return [...new Map(bundle.flatMap(({ field, value, types }) => types.map((type) => [JSON.stringify([
179
+ field,
180
+ value,
181
+ type
182
+ ]), {
183
+ field,
184
+ value,
185
+ type
186
+ }]))).values()];
187
+ };
188
+ /** Heads whose latest event falls in [sinceMs, end), a partial hour: those events' installs, then their heads. */
189
+ const countPartialHeads = async (db, input, predicates, end) => {
190
+ const events = await drain((page) => db.findMany("bundle_events", {
191
+ index: "recent",
192
+ where: {
193
+ channel: input.channel,
194
+ platform: input.platform,
195
+ day: dayFloor(input.sinceMs)
196
+ },
197
+ range: {
198
+ gte: input.sinceMs,
199
+ lt: end
200
+ },
201
+ limit: PAGE,
202
+ ...page
203
+ }));
204
+ const ids = new Set(events.map(({ id }) => id));
205
+ return (await Promise.all([...new Set(events.map(({ install_id }) => install_id))].map((install) => db.findOne("bundle_event_heads", { install_id: install })))).filter((head) => head !== null && ids.has(head.id) && (predicates === void 0 || predicates.some(({ field, value, type }) => head[field] === value && head.type === type))).length;
206
+ };
207
+ /** Latest events at or after `sinceMs`: whole hours from gauges, the first partial hour from heads. */
208
+ const countLatestEvents = async (db, input) => {
209
+ const { platform, channel, sinceMs } = input;
210
+ const start = hourCeil(sinceMs);
211
+ const predicates = latestPredicates(input.bundle);
212
+ let total = 0;
213
+ if (predicates === void 0) {
214
+ const rows = await drain((page) => db.findAggregates("insights_distribution", {
215
+ index: "byScope",
216
+ where: {
217
+ channel,
218
+ platform
219
+ },
220
+ range: { gte: start },
221
+ limit: PAGE,
222
+ ...page
223
+ }));
224
+ total += rows.reduce((sum, row) => sum + row.latest_installations, 0);
225
+ } else {
226
+ const gauge = async (bundleField, bundleId, type) => {
227
+ return (await drain((page) => db.findAggregates("insights_latest_by_bundle", {
228
+ index: "byBundle",
229
+ where: {
230
+ platform,
231
+ channel,
232
+ bundle_field: bundleField,
233
+ bundle_id: bundleId,
234
+ type
235
+ },
236
+ range: { gte: start },
237
+ limit: PAGE,
238
+ ...page
239
+ }))).reduce((sum, row) => sum + row.installations, 0);
240
+ };
241
+ for (const { field, value, type } of predicates) total += await gauge(field, value, type);
242
+ for (const from of predicates) {
243
+ if (from.field !== "from_bundle_id") continue;
244
+ for (const to of predicates) {
245
+ if (to.field !== "to_bundle_id" || to.type !== from.type) continue;
246
+ total -= await gauge(require_recordEvent.PAIR_FIELD, require_recordEvent.bundlePairKey(from.value, to.value), from.type);
247
+ }
248
+ }
249
+ }
250
+ return sinceMs < start ? total + await countPartialHeads(db, input, predicates, start) : total;
251
+ };
252
+ /** Periods covering [start, end): whole UTC days when `days` and the window is over 48 hours, hours elsewhere. */
253
+ const periodsOf = (range, days) => {
254
+ const { start, end } = range;
255
+ if (!days || end - start <= 1728e5) return [{
256
+ periodKind: "hour",
257
+ start,
258
+ end
259
+ }];
260
+ const first = Math.min(end, dayCeil(start));
261
+ const last = Math.max(first, dayFloor(end));
262
+ return [
263
+ {
264
+ periodKind: "hour",
265
+ start,
266
+ end: first
267
+ },
268
+ {
269
+ periodKind: "day",
270
+ start: first,
271
+ end: last
272
+ },
273
+ {
274
+ periodKind: "hour",
275
+ start: last,
276
+ end
277
+ }
278
+ ].filter((period) => period.start < period.end);
279
+ };
280
+ /** Every overview or sketch row of one identity over [start, end), mixing day and hour periods. */
281
+ const windowRows = async (db, model, parts, range, days) => {
282
+ const rows = [];
283
+ for (const period of periodsOf(range, days)) {
284
+ const identity = require_recordEvent.insightsIdentity({
285
+ ...parts,
286
+ periodKind: period.periodKind
287
+ });
288
+ rows.push(...await drain((page) => db.findAggregates(model, {
289
+ index: "window",
290
+ where: { identity },
291
+ range: {
292
+ gte: period.start,
293
+ lt: period.end
294
+ },
295
+ limit: PAGE,
296
+ ...page
297
+ })));
298
+ }
299
+ return rows;
300
+ };
301
+ const counterRows = (...args) => windowRows(args[0], "insights_overview", args[1], args[2], args[3]);
302
+ const sketchRows = (...args) => windowRows(args[0], "insights_sketches", args[1], args[2], args[3]);
303
+ const releaseParts = (release) => ({
304
+ scopeKind: "release",
305
+ releaseKind: "specific",
306
+ releaseId: release.releaseId,
307
+ channel: release.channel,
308
+ platform: release.platform,
309
+ appVersionKind: "all",
310
+ appVersion: ""
311
+ });
312
+ /** A release's lifetime counters: one logical row at bucket 0. */
313
+ const lifetimeMetrics = async (db, release) => {
314
+ const identity = require_recordEvent.insightsIdentity({
315
+ ...releaseParts(release),
316
+ periodKind: "lifetime"
317
+ });
318
+ const [lifetime] = (await db.findAggregates("insights_overview", {
319
+ index: "window",
320
+ where: { identity },
321
+ range: {
322
+ gte: 0,
323
+ lte: 0
324
+ },
325
+ limit: PAGE
326
+ })).rows;
327
+ return {
328
+ downloads: lifetime?.downloads ?? 0,
329
+ launches: lifetime?.launches ?? 0,
330
+ failedLaunches: lifetime?.failed_launches ?? 0
331
+ };
332
+ };
333
+ /** Counters, unique users, and a per-UTC-day series over a window. */
334
+ const rangedMetrics = async (db, parts, range, days) => {
335
+ const [counters, sketches] = await Promise.all([counterRows(db, parts, range, days), sketchRows(db, parts, range, days)]);
336
+ const series = /* @__PURE__ */ new Map();
337
+ for (const row of counters) {
338
+ const day = dayFloor(row.bucket_start_ms);
339
+ const point = series.get(day) ?? {
340
+ launches: 0,
341
+ failedLaunches: 0
342
+ };
343
+ point.launches += row.launches;
344
+ point.failedLaunches += row.failed_launches;
345
+ series.set(day, point);
346
+ }
347
+ const total = (field) => counters.reduce((sum, row) => sum + row[field], 0);
348
+ return {
349
+ downloads: total("downloads"),
350
+ launches: total("launches"),
351
+ failedLaunches: total("failed_launches"),
352
+ uniqueUsers: (0, _hot_updater_plugin_core_internal.countInsightsDistinct)((0, _hot_updater_plugin_core_internal.mergeInsightsDistinct)(sketches.map((row) => row.launch_users))),
353
+ series: [...series].sort(([left], [right]) => left - right).map(([startMs, point]) => ({
354
+ startMs,
355
+ ...point
356
+ }))
357
+ };
358
+ };
359
+ const getReleaseActivity = async (db, input, now) => {
360
+ return {
361
+ coverage: {
362
+ kind: "complete",
363
+ sinceMs: 0
364
+ },
365
+ data: input.scope !== void 0 ? [{
366
+ scope: input.scope,
367
+ metrics: await rangedMetrics(db, {
368
+ scopeKind: "channel",
369
+ releaseKind: "all",
370
+ releaseId: "",
371
+ channel: input.scope.channel,
372
+ platform: input.scope.platform,
373
+ appVersionKind: "all",
374
+ appVersion: ""
375
+ }, input.timeRange, true)
376
+ }] : await Promise.all(input.releases.map(async (release) => ({
377
+ release,
378
+ metrics: input.timeRange === void 0 ? await lifetimeMetrics(db, release) : await rangedMetrics(db, releaseParts(release), input.timeRange, false)
379
+ }))),
380
+ measuredAtMs: now()
381
+ };
382
+ };
383
+ const byInstallations = (values) => [...values].map(([name, installations]) => ({
384
+ name,
385
+ installations
386
+ })).sort((left, right) => right.installations - left.installations || left.name.localeCompare(right.name, "en", { numeric: true }));
387
+ const getAppUsage = async (db, input, now) => {
388
+ const { timeRange, intervalMs } = input;
389
+ const usage = await sketchRows(db, {
390
+ scopeKind: "usage",
391
+ releaseKind: "all",
392
+ releaseId: "",
393
+ channel: input.channel,
394
+ platform: input.platform,
395
+ appVersionKind: input.appVersion === void 0 ? "all" : "specific",
396
+ appVersion: input.appVersion ?? ""
397
+ }, timeRange, intervalMs % 864e5 === 0 && timeRange.start % 864e5 === 0);
398
+ const distribution = [];
399
+ for (const platform of input.platform === "all" ? ["ios", "android"] : [input.platform]) distribution.push(...await drain((page) => input.appVersion === void 0 ? db.findAggregates("insights_distribution", {
400
+ index: "byScope",
401
+ where: {
402
+ channel: input.channel,
403
+ platform
404
+ },
405
+ range: {
406
+ gte: timeRange.start,
407
+ lt: timeRange.end
408
+ },
409
+ limit: PAGE,
410
+ ...page
411
+ }) : db.findAggregates("insights_distribution", {
412
+ index: "byVersion",
413
+ where: {
414
+ channel: input.channel,
415
+ platform,
416
+ app_version: input.appVersion
417
+ },
418
+ range: {
419
+ gte: timeRange.start,
420
+ lt: timeRange.end
421
+ },
422
+ limit: PAGE,
423
+ ...page
424
+ })));
425
+ const points = [];
426
+ for (let start = timeRange.start; start < timeRange.end; start += intervalMs) points.push({
427
+ startMs: start,
428
+ installations: (0, _hot_updater_plugin_core_internal.countInsightsDistinct)((0, _hot_updater_plugin_core_internal.mergeInsightsDistinct)(usage.filter((row) => row.bucket_start_ms >= start && row.bucket_start_ms < start + intervalMs).map((row) => row.activity_users)))
429
+ });
430
+ const versions = /* @__PURE__ */ new Map();
431
+ const platforms = /* @__PURE__ */ new Map();
432
+ const bundles = /* @__PURE__ */ new Map();
433
+ for (const row of distribution) {
434
+ const count = row.latest_installations;
435
+ versions.set(row.app_version, (versions.get(row.app_version) ?? 0) + count);
436
+ platforms.set(row.platform, (platforms.get(row.platform) ?? 0) + count);
437
+ const releaseId = row.release_id === "" ? null : row.release_id;
438
+ const key = JSON.stringify([
439
+ row.app_version,
440
+ row.platform,
441
+ releaseId
442
+ ]);
443
+ bundles.set(key, {
444
+ appVersion: row.app_version,
445
+ platform: row.platform,
446
+ releaseId,
447
+ installations: (bundles.get(key)?.installations ?? 0) + count
448
+ });
449
+ }
450
+ const sortedVersions = byInstallations(versions);
451
+ return {
452
+ coverage: {
453
+ kind: "complete",
454
+ sinceMs: 0
455
+ },
456
+ activeInstallations: (0, _hot_updater_plugin_core_internal.countInsightsDistinct)((0, _hot_updater_plugin_core_internal.mergeInsightsDistinct)(usage.map((row) => row.activity_users))),
457
+ points,
458
+ appVersions: sortedVersions.map(({ name }) => name),
459
+ versions: sortedVersions,
460
+ platforms: byInstallations(platforms),
461
+ bundleDistribution: [...bundles.values()],
462
+ measuredAtMs: now()
463
+ };
464
+ };
465
+ //#endregion
466
+ exports.countEvents = countEvents;
467
+ exports.countLatestEvents = countLatestEvents;
468
+ exports.findLatestEvents = findLatestEvents;
469
+ exports.getAppUsage = getAppUsage;
470
+ exports.getReleaseActivity = getReleaseActivity;
471
+ exports.listEvents = listEvents;