@hot-updater/server 1.0.0-rc.2 → 1.0.0-rc.21

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 (328) hide show
  1. package/LICENSE +12 -14
  2. package/dist/adapters/drizzle.cjs +32 -75
  3. package/dist/adapters/drizzle.d.cts +13 -5
  4. package/dist/adapters/drizzle.d.mts +13 -5
  5. package/dist/adapters/drizzle.mjs +32 -77
  6. package/dist/adapters/drizzleExecutor.cjs +114 -0
  7. package/dist/adapters/drizzleExecutor.d.cts +9 -0
  8. package/dist/adapters/drizzleExecutor.d.mts +9 -0
  9. package/dist/adapters/drizzleExecutor.mjs +112 -0
  10. package/dist/adapters/kysely.cjs +22 -31
  11. package/dist/adapters/kysely.d.cts +10 -6
  12. package/dist/adapters/kysely.d.mts +10 -6
  13. package/dist/adapters/kysely.mjs +23 -33
  14. package/dist/adapters/kyselyExecutor.cjs +32 -0
  15. package/dist/adapters/kyselyExecutor.d.cts +11 -0
  16. package/dist/adapters/kyselyExecutor.d.mts +11 -0
  17. package/dist/adapters/kyselyExecutor.mjs +32 -0
  18. package/dist/adapters/mongodb.cjs +18 -54
  19. package/dist/adapters/mongodb.d.cts +10 -5
  20. package/dist/adapters/mongodb.d.mts +10 -5
  21. package/dist/adapters/mongodb.mjs +19 -56
  22. package/dist/adapters/mongodbAdapter.cjs +192 -0
  23. package/dist/adapters/mongodbAdapter.d.cts +9 -0
  24. package/dist/adapters/mongodbAdapter.d.mts +9 -0
  25. package/dist/adapters/mongodbAdapter.mjs +191 -0
  26. package/dist/adapters/prisma.cjs +35 -267
  27. package/dist/adapters/prisma.d.cts +12 -7
  28. package/dist/adapters/prisma.d.mts +12 -7
  29. package/dist/adapters/prisma.mjs +36 -268
  30. package/dist/adapters/prismaExecutor.cjs +63 -0
  31. package/dist/adapters/prismaExecutor.mjs +63 -0
  32. package/dist/adapters/sqlProviders.cjs +14 -0
  33. package/dist/adapters/sqlProviders.mjs +14 -0
  34. package/dist/assembly/assemblePlugins.cjs +144 -0
  35. package/dist/assembly/assemblePlugins.d.cts +5 -0
  36. package/dist/assembly/assemblePlugins.d.mts +5 -0
  37. package/dist/assembly/assemblePlugins.mjs +139 -0
  38. package/dist/assembly/clientPlugins.cjs +88 -0
  39. package/dist/assembly/clientPlugins.mjs +88 -0
  40. package/dist/assembly/configError.d.cts +2 -0
  41. package/dist/assembly/configError.d.mts +2 -0
  42. package/dist/assembly/configError.mjs +2 -0
  43. package/dist/core/api.cjs +51 -0
  44. package/dist/core/api.d.cts +54 -0
  45. package/dist/core/api.d.mts +54 -0
  46. package/dist/core/api.mjs +51 -0
  47. package/dist/core/baseCandidates.cjs +28 -0
  48. package/dist/core/baseCandidates.mjs +28 -0
  49. package/dist/core/operations.cjs +351 -0
  50. package/dist/core/operations.mjs +351 -0
  51. package/dist/core/reads.cjs +273 -0
  52. package/dist/core/reads.d.cts +9 -0
  53. package/dist/core/reads.d.mts +9 -0
  54. package/dist/core/reads.mjs +267 -0
  55. package/dist/core/releases.cjs +193 -0
  56. package/dist/core/releases.mjs +190 -0
  57. package/dist/core/writes.cjs +96 -0
  58. package/dist/core/writes.mjs +91 -0
  59. package/dist/createHotUpdaterCore.cjs +72 -91
  60. package/dist/createHotUpdaterCore.d.cts +106 -38
  61. package/dist/createHotUpdaterCore.d.mts +106 -38
  62. package/dist/createHotUpdaterCore.mjs +74 -89
  63. package/dist/db/engineDrizzleSchema.cjs +53 -0
  64. package/dist/db/engineDrizzleSchema.mjs +53 -0
  65. package/dist/db/enginePrismaSchema.cjs +84 -0
  66. package/dist/db/enginePrismaSchema.d.cts +5 -0
  67. package/dist/db/enginePrismaSchema.d.mts +5 -0
  68. package/dist/db/enginePrismaSchema.mjs +83 -0
  69. package/dist/db/releaseCatalog.cjs +24 -47
  70. package/dist/db/releaseCatalog.mjs +20 -44
  71. package/dist/db/updateArtifacts.cjs +43 -72
  72. package/dist/db/updateArtifacts.mjs +40 -69
  73. package/dist/handler.cjs +59 -43
  74. package/dist/handler.d.cts +3 -5
  75. package/dist/handler.d.mts +3 -5
  76. package/dist/handler.mjs +61 -43
  77. package/dist/handlerAdminRoutes.cjs +374 -0
  78. package/dist/handlerAdminRoutes.mjs +372 -0
  79. package/dist/handlerParameters.cjs +6 -11
  80. package/dist/handlerParameters.mjs +6 -10
  81. package/dist/handlerReleaseCatalogRoutes.cjs +32 -15
  82. package/dist/handlerReleaseCatalogRoutes.mjs +32 -15
  83. package/dist/handlerTypes.d.cts +2 -55
  84. package/dist/handlerTypes.d.mts +2 -55
  85. package/dist/handlerVersionRoutes.cjs +20 -4
  86. package/dist/handlerVersionRoutes.mjs +20 -4
  87. package/dist/index.cjs +9 -9
  88. package/dist/index.d.cts +8 -9
  89. package/dist/index.d.mts +8 -9
  90. package/dist/index.mjs +3 -4
  91. package/dist/node.cjs +3 -6
  92. package/dist/node.d.cts +2 -2
  93. package/dist/node.d.mts +2 -2
  94. package/dist/node.mjs +4 -4
  95. package/dist/package.cjs +1 -1
  96. package/dist/package.mjs +1 -1
  97. package/dist/plugins/api-keys/index.cjs +9 -0
  98. package/dist/plugins/api-keys/index.d.cts +1 -0
  99. package/dist/plugins/api-keys/index.d.mts +1 -0
  100. package/dist/plugins/api-keys/index.mjs +2 -0
  101. package/dist/plugins/definePlugin.d.cts +2 -0
  102. package/dist/plugins/definePlugin.d.mts +2 -0
  103. package/dist/plugins/insights/index.cjs +9 -0
  104. package/dist/plugins/insights/index.d.cts +1 -0
  105. package/dist/plugins/insights/index.d.mts +1 -0
  106. package/dist/plugins/insights/index.mjs +2 -0
  107. package/dist/plugins/official.cjs +30 -0
  108. package/dist/plugins/official.mjs +29 -0
  109. package/dist/storageAccess.cjs +13 -10
  110. package/dist/storageAccess.mjs +13 -10
  111. package/dist/types/index.d.cts +2 -28
  112. package/dist/types/index.d.mts +2 -28
  113. package/package.json +26 -14
  114. package/dist/_virtual/_rolldown/runtime.cjs +0 -23
  115. package/dist/adapters/databaseConstraintErrors.cjs +0 -22
  116. package/dist/adapters/databaseConstraintErrors.mjs +0 -21
  117. package/dist/adapters/databasePluginUtils.cjs +0 -116
  118. package/dist/adapters/databasePluginUtils.mjs +0 -106
  119. package/dist/adapters/drizzleCrud.cjs +0 -311
  120. package/dist/adapters/drizzleCrud.mjs +0 -308
  121. package/dist/adapters/drizzleLazyDB.cjs +0 -106
  122. package/dist/adapters/drizzleLazyDB.mjs +0 -106
  123. package/dist/adapters/drizzleQuery.cjs +0 -69
  124. package/dist/adapters/drizzleQuery.mjs +0 -69
  125. package/dist/adapters/insightsTransaction.cjs +0 -22
  126. package/dist/adapters/insightsTransaction.mjs +0 -22
  127. package/dist/adapters/kyselyCrud.cjs +0 -305
  128. package/dist/adapters/kyselyCrud.mjs +0 -304
  129. package/dist/adapters/kyselyQuery.cjs +0 -56
  130. package/dist/adapters/kyselyQuery.mjs +0 -56
  131. package/dist/adapters/mongodbCollections.cjs +0 -38
  132. package/dist/adapters/mongodbCollections.mjs +0 -32
  133. package/dist/adapters/mongodbQuery.cjs +0 -94
  134. package/dist/adapters/mongodbQuery.mjs +0 -86
  135. package/dist/adapters/mongodbReads.cjs +0 -210
  136. package/dist/adapters/mongodbReads.mjs +0 -210
  137. package/dist/adapters/mongodbWrites.cjs +0 -148
  138. package/dist/adapters/mongodbWrites.mjs +0 -148
  139. package/dist/adapters/prismaQuery.cjs +0 -57
  140. package/dist/adapters/prismaQuery.mjs +0 -56
  141. package/dist/adapters/prismaRows.cjs +0 -219
  142. package/dist/adapters/prismaRows.mjs +0 -209
  143. package/dist/apiKeys.cjs +0 -143
  144. package/dist/apiKeys.d.cts +0 -49
  145. package/dist/apiKeys.d.mts +0 -49
  146. package/dist/apiKeys.mjs +0 -133
  147. package/dist/db/createBundleDiff.cjs +0 -144
  148. package/dist/db/createBundleDiff.d.cts +0 -16
  149. package/dist/db/createBundleDiff.d.mts +0 -16
  150. package/dist/db/createBundleDiff.mjs +0 -141
  151. package/dist/db/databasePluginCore.cjs +0 -137
  152. package/dist/db/databasePluginCore.mjs +0 -137
  153. package/dist/db/fixedMigrator.cjs +0 -79
  154. package/dist/db/fixedMigrator.mjs +0 -78
  155. package/dist/db/fixedMigratorMongo.cjs +0 -321
  156. package/dist/db/fixedMigratorMongo.mjs +0 -321
  157. package/dist/db/fixedMigratorShared.cjs +0 -23
  158. package/dist/db/fixedMigratorShared.mjs +0 -18
  159. package/dist/db/index.cjs +0 -27
  160. package/dist/db/index.d.cts +0 -12
  161. package/dist/db/index.d.mts +0 -12
  162. package/dist/db/index.mjs +0 -22
  163. package/dist/db/mongoMigrationExecution.cjs +0 -11
  164. package/dist/db/mongoMigrationExecution.mjs +0 -11
  165. package/dist/db/releaseCatalog.d.cts +0 -16
  166. package/dist/db/releaseCatalog.d.mts +0 -16
  167. package/dist/db/schema/insightsCollation.cjs +0 -14
  168. package/dist/db/schema/insightsCollation.mjs +0 -14
  169. package/dist/db/schema/mongodb.cjs +0 -25
  170. package/dist/db/schema/mongodb.mjs +0 -25
  171. package/dist/db/schema/registry.cjs +0 -21
  172. package/dist/db/schema/registry.mjs +0 -17
  173. package/dist/db/schema/sql.cjs +0 -105
  174. package/dist/db/schema/sql.mjs +0 -97
  175. package/dist/db/schema/sqlOperations.cjs +0 -27
  176. package/dist/db/schema/sqlOperations.mjs +0 -26
  177. package/dist/db/schemaGenerators.cjs +0 -275
  178. package/dist/db/schemaGenerators.mjs +0 -273
  179. package/dist/db/schemaReadiness.cjs +0 -26
  180. package/dist/db/schemaReadiness.d.cts +0 -9
  181. package/dist/db/schemaReadiness.d.mts +0 -9
  182. package/dist/db/schemaReadiness.mjs +0 -25
  183. package/dist/db/sqlMigrationExecution.cjs +0 -67
  184. package/dist/db/sqlMigrationExecution.mjs +0 -67
  185. package/dist/db/types.cjs +0 -22
  186. package/dist/db/types.d.cts +0 -118
  187. package/dist/db/types.d.mts +0 -118
  188. package/dist/db/types.mjs +0 -19
  189. package/dist/handlerBundleRoutes.cjs +0 -155
  190. package/dist/handlerBundleRoutes.mjs +0 -155
  191. package/dist/handlerReleaseManagementRoutes.cjs +0 -124
  192. package/dist/handlerReleaseManagementRoutes.mjs +0 -124
  193. package/dist/insights/domain.d.cts +0 -89
  194. package/dist/insights/domain.d.mts +0 -89
  195. package/dist/insights/errors.cjs +0 -15
  196. package/dist/insights/errors.mjs +0 -14
  197. package/dist/insights/eventInput.cjs +0 -155
  198. package/dist/insights/eventInput.mjs +0 -153
  199. package/dist/insights/provider.cjs +0 -314
  200. package/dist/insights/provider.d.cts +0 -6
  201. package/dist/insights/provider.d.mts +0 -6
  202. package/dist/insights/provider.mjs +0 -314
  203. package/dist/insights/queryInput.cjs +0 -93
  204. package/dist/insights/queryInput.mjs +0 -91
  205. package/dist/insights/routes.cjs +0 -58
  206. package/dist/insights/routes.mjs +0 -56
  207. package/dist/insights/types.d.cts +0 -32
  208. package/dist/insights/types.d.mts +0 -32
  209. package/dist/schema/dsl.cjs +0 -103
  210. package/dist/schema/dsl.mjs +0 -87
  211. package/dist/schema/index.cjs +0 -20
  212. package/dist/schema/index.mjs +0 -7
  213. package/dist/schema/settings.cjs +0 -9
  214. package/dist/schema/settings.mjs +0 -9
  215. package/dist/schema/types.cjs +0 -8
  216. package/dist/schema/types.mjs +0 -6
  217. package/dist/schema/v1_0_0.cjs +0 -406
  218. package/dist/schema/v1_0_0.mjs +0 -398
  219. package/src/adapters/databaseConstraintErrors.ts +0 -25
  220. package/src/adapters/databasePluginTestDatabase.ts +0 -120
  221. package/src/adapters/databasePluginUtils.spec.ts +0 -29
  222. package/src/adapters/databasePluginUtils.ts +0 -214
  223. package/src/adapters/drizzle.spec.ts +0 -336
  224. package/src/adapters/drizzle.ts +0 -162
  225. package/src/adapters/drizzleCrud.ts +0 -571
  226. package/src/adapters/drizzleLazyDB.ts +0 -271
  227. package/src/adapters/drizzleQuery.ts +0 -164
  228. package/src/adapters/insightsTransaction.ts +0 -32
  229. package/src/adapters/kysely.spec.ts +0 -174
  230. package/src/adapters/kysely.ts +0 -110
  231. package/src/adapters/kyselyCrud.ts +0 -709
  232. package/src/adapters/kyselyQuery.ts +0 -128
  233. package/src/adapters/mongodb.integration.spec.ts +0 -210
  234. package/src/adapters/mongodb.spec.ts +0 -209
  235. package/src/adapters/mongodb.ts +0 -138
  236. package/src/adapters/mongodbCollections.ts +0 -67
  237. package/src/adapters/mongodbQuery.ts +0 -255
  238. package/src/adapters/mongodbReads.ts +0 -380
  239. package/src/adapters/mongodbRows.spec.ts +0 -64
  240. package/src/adapters/mongodbRows.ts +0 -118
  241. package/src/adapters/mongodbTestClient.ts +0 -377
  242. package/src/adapters/mongodbTestFilter.ts +0 -169
  243. package/src/adapters/mongodbWrites.ts +0 -287
  244. package/src/adapters/prisma.spec.ts +0 -293
  245. package/src/adapters/prisma.ts +0 -565
  246. package/src/adapters/prismaQuery.ts +0 -129
  247. package/src/adapters/prismaRows.spec.ts +0 -98
  248. package/src/adapters/prismaRows.ts +0 -337
  249. package/src/adapters/prismaTestClient.ts +0 -413
  250. package/src/apiKeys.integration.spec.ts +0 -192
  251. package/src/apiKeys.spec.ts +0 -162
  252. package/src/apiKeys.ts +0 -220
  253. package/src/calculatePagination.ts +0 -34
  254. package/src/createHotUpdaterCore.ts +0 -246
  255. package/src/db/bundleRows.spec.ts +0 -164
  256. package/src/db/bundleRows.ts +0 -10
  257. package/src/db/createBundleDiff.spec.ts +0 -450
  258. package/src/db/createBundleDiff.ts +0 -364
  259. package/src/db/databasePluginCore.spec.ts +0 -62
  260. package/src/db/databasePluginCore.testFixtures.ts +0 -76
  261. package/src/db/databasePluginCore.ts +0 -185
  262. package/src/db/databasePluginUpdateCheck.bench.ts +0 -110
  263. package/src/db/fixedMigrator.spec.ts +0 -296
  264. package/src/db/fixedMigrator.ts +0 -147
  265. package/src/db/fixedMigratorMongo.spec.ts +0 -239
  266. package/src/db/fixedMigratorMongo.ts +0 -425
  267. package/src/db/fixedMigratorShared.ts +0 -36
  268. package/src/db/hotUpdaterSchema.ts +0 -5
  269. package/src/db/index.spec.ts +0 -1269
  270. package/src/db/index.ts +0 -47
  271. package/src/db/mongoMigrationExecution.ts +0 -23
  272. package/src/db/node-sqlite.d.ts +0 -25
  273. package/src/db/releaseCatalog.ts +0 -148
  274. package/src/db/schema/definitions.ts +0 -1
  275. package/src/db/schema/insightsCollation.ts +0 -21
  276. package/src/db/schema/mongodb.ts +0 -40
  277. package/src/db/schema/registry.ts +0 -55
  278. package/src/db/schema/sql.ts +0 -244
  279. package/src/db/schema/sqlOperations.ts +0 -63
  280. package/src/db/schema/types.ts +0 -1
  281. package/src/db/schemaGenerators.ts +0 -494
  282. package/src/db/schemaReadiness.ts +0 -34
  283. package/src/db/sqlMigrationExecution.spec.ts +0 -65
  284. package/src/db/sqlMigrationExecution.ts +0 -108
  285. package/src/db/types.spec.ts +0 -63
  286. package/src/db/types.ts +0 -228
  287. package/src/db/updateArtifacts.spec.ts +0 -359
  288. package/src/db/updateArtifacts.ts +0 -541
  289. package/src/handler-standalone.integration.spec.ts +0 -528
  290. package/src/handler.spec.ts +0 -190
  291. package/src/handler.testFixtures.ts +0 -30
  292. package/src/handler.ts +0 -245
  293. package/src/handlerAuth.integration.spec.ts +0 -33
  294. package/src/handlerBundleRoutes.ts +0 -259
  295. package/src/handlerErrors.ts +0 -7
  296. package/src/handlerManagement.spec.ts +0 -262
  297. package/src/handlerParameters.ts +0 -105
  298. package/src/handlerReleaseCatalogRoutes.ts +0 -154
  299. package/src/handlerReleaseManagementRoutes.ts +0 -213
  300. package/src/handlerTypes.ts +0 -96
  301. package/src/handlerVersionRoutes.ts +0 -12
  302. package/src/index.ts +0 -30
  303. package/src/insights/domain.ts +0 -103
  304. package/src/insights/errors.ts +0 -11
  305. package/src/insights/eventInput.ts +0 -225
  306. package/src/insights/insights.integration.spec.ts +0 -381
  307. package/src/insights/provider.spec.ts +0 -385
  308. package/src/insights/provider.ts +0 -591
  309. package/src/insights/queryInput.ts +0 -141
  310. package/src/insights/routes.ts +0 -104
  311. package/src/insights/types.ts +0 -55
  312. package/src/internalRouter.ts +0 -104
  313. package/src/node.spec.ts +0 -119
  314. package/src/node.ts +0 -111
  315. package/src/releaseCatalogRoutes.integration.spec.ts +0 -238
  316. package/src/runtime.spec.ts +0 -194
  317. package/src/runtime.testFixtures.ts +0 -71
  318. package/src/schema/dsl-all-versions.spec.ts +0 -37
  319. package/src/schema/dsl.ts +0 -187
  320. package/src/schema/index.ts +0 -10
  321. package/src/schema/settings.ts +0 -15
  322. package/src/schema/types.ts +0 -79
  323. package/src/schema/v1_0_0.spec.ts +0 -220
  324. package/src/schema/v1_0_0.ts +0 -529
  325. package/src/storageAccess.spec.ts +0 -152
  326. package/src/storageAccess.ts +0 -141
  327. package/src/types/index.ts +0 -34
  328. package/src/version.ts +0 -3
@@ -1,103 +1,84 @@
1
+ const require_clientPlugins = require("./assembly/clientPlugins.cjs");
2
+ const require_assemblePlugins = require("./assembly/assemblePlugins.cjs");
1
3
  const require_handler = require("./handler.cjs");
2
- const require_provider = require("./insights/provider.cjs");
3
- const require_apiKeys = require("./apiKeys.cjs");
4
- const require_databasePluginCore = require("./db/databasePluginCore.cjs");
5
- const require_schemaReadiness = require("./db/schemaReadiness.cjs");
6
- const require_types = require("./db/types.cjs");
7
4
  const require_storageAccess = require("./storageAccess.cjs");
8
5
  let _hot_updater_plugin_core = require("@hot-updater/plugin-core");
9
6
  //#region src/createHotUpdaterCore.ts
10
- const normalizeClientAccess = (value) => {
11
- if (value === null || typeof value !== "object" || Array.isArray(value)) throw new TypeError("clientAccess must be an object.");
12
- const policy = value;
13
- if (policy.type === "public") return { type: "public" };
14
- if (policy.type === "api-key") return {
15
- headerName: require_apiKeys.normalizeApiKeyHeaderName(policy.headerName),
16
- type: "api-key"
17
- };
18
- throw new TypeError("clientAccess.type must be either \"public\" or \"api-key\".");
7
+ const isRecord = (value) => typeof value === "object" && value !== null;
8
+ const isAdapter = (value) => isRecord(value) && [
9
+ "fits",
10
+ "get",
11
+ "query",
12
+ "write"
13
+ ].every((method) => typeof value[method] === "function");
14
+ /** The configured database, when it runs on the storage engine. */
15
+ const databaseOf = (value) => {
16
+ if (isRecord(value) && typeof value.name === "string") {
17
+ if (isAdapter(value.adapter)) return value;
18
+ if ("core" in value && "fetchAdmin" in value) throw new _hot_updater_plugin_core.HotUpdaterConfigError("standaloneRepository reaches a server's admin API from the CLI and console. createHotUpdater needs the server's own database, such as kyselyAdapter(...).");
19
+ }
20
+ throw new _hot_updater_plugin_core.HotUpdaterConfigError("database must be a Hot Updater 1.0 database, such as kyselyAdapter(...) or postgres(...). Upgrade the provider package that created it.");
19
21
  };
20
- const hotUpdaterCoreMetadata = Symbol.for("@hot-updater/server/core-metadata");
21
- function getHotUpdaterCoreMetadata(hotUpdater) {
22
- return hotUpdater[hotUpdaterCoreMetadata];
23
- }
24
- function createHotUpdaterCore(options) {
22
+ /** `"public"`, or nothing; a `clientAccess` object says what replaced it. */
23
+ const isPublic = (value) => {
24
+ if (value === void 0) return false;
25
+ if (value === "public") return true;
26
+ throw new _hot_updater_plugin_core.HotUpdaterConfigError(isRecord(value) ? "clientAccess objects were removed in 1.0. Set clientAccess: \"public\", or add a plugin that provides clientAuth to plugins." : "clientAccess must be \"public\"; to protect client routes, add a plugin that provides clientAuth to plugins.");
27
+ };
28
+ function createHotUpdater(options) {
25
29
  for (const key of ["authorityId", "catalogId"]) if (Object.hasOwn(options, key)) throw new TypeError(`Remove ${key} from createHotUpdater options. Catalog identity is managed internally.`);
26
- const database = options.database;
27
- const storagePlugins = (options.storage ?? []).map((storage) => {
28
- (0, _hot_updater_plugin_core.assertStorageOperations)(storage, ["get", "getDownloadUrl"]);
29
- return storage;
30
- });
31
- const { downloadStorageObject, readStorageText, resolveFileUrl } = require_storageAccess.createStorageAccess(storagePlugins);
32
- const adapterCapabilities = database;
33
- if (!require_types.isDatabasePlugin(database)) throw new Error("@hot-updater/server only supports database plugins.");
34
- const plugin = database;
35
- const adapterName = adapterCapabilities.adapterName ?? plugin.name;
36
- const assertSchemaReady = require_schemaReadiness.createSchemaReadinessChecker(adapterName, adapterCapabilities.createMigrator);
37
- const core = require_databasePluginCore.createDatabasePluginCore(plugin, resolveFileUrl, {
38
- beforeOperation: assertSchemaReady,
39
- readStorageText
40
- });
41
- const clientAccess = normalizeClientAccess(options.clientAccess);
42
- const insights = require_provider.createInsightsProvider({
43
- async record(input) {
44
- await assertSchemaReady();
45
- return plugin.models.insights.record(input);
46
- },
47
- async listEvents(input) {
48
- await assertSchemaReady();
49
- return plugin.models.insights.listEvents(input);
50
- },
51
- async findInstallations(input) {
52
- await assertSchemaReady();
53
- return plugin.models.insights.findInstallations(input);
54
- },
55
- async countInstallations(input) {
56
- await assertSchemaReady();
57
- return plugin.models.insights.countInstallations(input);
58
- },
59
- async countEvents(input) {
60
- await assertSchemaReady();
61
- return plugin.models.insights.countEvents(input);
62
- }
63
- });
64
- const apiKeys = require_apiKeys.createApiKeyManagement({
65
- apiKeys: plugin.models.apiKeys,
66
- beforeOperation: assertSchemaReady
67
- });
68
- const handlers = require_handler.createHotUpdaterHandlers(core.api, insights, clientAccess.type === "api-key" ? {
69
- authenticate: (request) => require_apiKeys.authenticateApiKey({
70
- apiKeys: plugin.models.apiKeys,
71
- beforeLookup: assertSchemaReady,
72
- headerName: clientAccess.headerName,
73
- request
74
- }),
75
- headerName: clientAccess.headerName
76
- } : void 0, downloadStorageObject);
77
- const api = Object.assign({
78
- adapterName: adapterCapabilities.adapterName ?? core.adapterName,
79
- insights,
80
- apiKeys,
81
- handlers
82
- }, core.api);
83
- Object.defineProperty(api, hotUpdaterCoreMetadata, {
84
- enumerable: false,
85
- value: {
86
- adapterCapabilities,
87
- core
88
- }
30
+ const database = databaseOf(options.database);
31
+ const storage = Object.freeze([...options.storage ?? []]);
32
+ const { downloadStorageObject, readStorageText, resolveFileUrl } = require_storageAccess.createStorageAccess(storage);
33
+ const publicClients = isPublic(options.clientAccess);
34
+ const configured = Object.freeze([...options.plugins ?? []]);
35
+ const plugins = require_assemblePlugins.assemblePlugins(configured, database, { storage: {
36
+ readStorageText,
37
+ resolveFileUrl
38
+ } });
39
+ const clientPlugins = Object.freeze(require_clientPlugins.clientPluginsOf(configured));
40
+ const clientAuth = plugins.clientAuth;
41
+ if (clientAuth !== void 0 && publicClients) throw new _hot_updater_plugin_core.HotUpdaterConfigError(`Plugin "${clientAuth.plugin}" provides clientAuth, so remove clientAccess.`);
42
+ if (clientAuth === void 0 && !publicClients) throw new _hot_updater_plugin_core.HotUpdaterConfigError("Set clientAccess to \"public\", or add a plugin that provides clientAuth.");
43
+ const varyHeaders = Object.freeze((clientAuth?.varyHeaders ?? []).map((header) => header.toLowerCase()));
44
+ const clientPolicy = clientAuth === void 0 ? void 0 : {
45
+ varyHeaders,
46
+ authenticate: (request) => clientAuth.authenticate(request.headers)
47
+ };
48
+ const handlers = require_handler.createHotUpdaterHandlers({
49
+ api: { core: plugins.core },
50
+ ...clientPolicy === void 0 ? {} : { clientPolicy },
51
+ downloadStorageObject,
52
+ endpoints: plugins.endpoints,
53
+ plugins: Object.keys(plugins.api)
89
54
  });
55
+ let serving = false;
90
56
  return {
91
- api,
92
- adapterCapabilities,
93
- core
57
+ adapterName: database.name,
58
+ get handlers() {
59
+ if (!serving) {
60
+ for (const adapter of storage) (0, _hot_updater_plugin_core.assertStorageOperations)(adapter, ["get", "getDownloadUrl"]);
61
+ serving = true;
62
+ }
63
+ return handlers;
64
+ },
65
+ core: plugins.core,
66
+ api: plugins.api,
67
+ flush: plugins.flush,
68
+ database,
69
+ storage,
70
+ plugins: configured,
71
+ clientPlugins,
72
+ clientEndpoints: Object.freeze(plugins.endpoints.filter((endpoint) => endpoint.access === "client").map(({ plugin, method, path }) => Object.freeze({
73
+ plugin,
74
+ method,
75
+ path
76
+ }))),
77
+ ...clientAuth === void 0 ? {} : { clientAuth: Object.freeze({
78
+ plugin: clientAuth.plugin,
79
+ varyHeaders
80
+ }) }
94
81
  };
95
82
  }
96
- function createHotUpdater(options) {
97
- return createHotUpdaterCore(options).api;
98
- }
99
83
  //#endregion
100
84
  exports.createHotUpdater = createHotUpdater;
101
- exports.createHotUpdaterCore = createHotUpdaterCore;
102
- exports.getHotUpdaterCoreMetadata = getHotUpdaterCoreMetadata;
103
- exports.hotUpdaterCoreMetadata = hotUpdaterCoreMetadata;
@@ -1,57 +1,125 @@
1
- import { ApiKeyManagementAPI } from "./apiKeys.cjs";
1
+ import { CoreApi } from "./core/api.cjs";
2
+ import { AnyHotUpdaterPlugin, PluginApis } from "./plugins/definePlugin.cjs";
2
3
  import { HotUpdaterHandlers } from "./handlerTypes.cjs";
3
- import { InsightsProvider } from "./insights/types.cjs";
4
4
  import "./handler.cjs";
5
- import { DatabaseAPI, DatabasePlugin as DatabasePlugin$1 } from "./db/types.cjs";
6
- import { StoragePlugin } from "@hot-updater/plugin-core";
5
+ import { PluginClientPlugin, StorageAdapter, ToolingDatabase } from "@hot-updater/plugin-core";
7
6
  //#region src/createHotUpdaterCore.d.ts
8
- type RuntimeHotUpdaterAPI = DatabaseAPI & {
7
+ /** A plugin's endpoint on `handlers.client`. */
8
+ interface ClientEndpoint {
9
+ /** The id of the plugin that adds it. */
10
+ readonly plugin: string;
11
+ readonly method: string;
12
+ /** Relative to the handler's mount; `:name` segments are parameters. */
13
+ readonly path: string;
14
+ }
15
+ /** The plugin that decides who may call client routes. */
16
+ interface ClientAuthProvider {
17
+ /** Its id. */
18
+ readonly plugin: string;
19
+ /**
20
+ * The request headers its decision reads, lowercase: what a cache in
21
+ * front of the server, such as a CDN, keys client routes on.
22
+ */
23
+ readonly varyHeaders: readonly string[];
24
+ }
25
+ type RuntimeHotUpdaterAPI<TPlugins extends readonly AnyHotUpdaterPlugin[] = readonly AnyHotUpdaterPlugin[]> = {
26
+ /**
27
+ * The routes a host mounts. On first access every storage adapter must
28
+ * serve downloads (`get` and `getDownloadUrl`), so a server fails where it
29
+ * mounts them, while tooling that only reads the definition, such as the
30
+ * CLI, can list storage that only uploads.
31
+ */
9
32
  readonly handlers: HotUpdaterHandlers;
10
- readonly adapterName: string;
11
33
  /**
12
- * Built-in Insights provider. Client ingestion and admin query routes are
13
- * always mounted; React Native clients report lifecycle events by default
14
- * and can opt out with `HotUpdater.init({ insights: false })`.
34
+ * Core's reads and typed writes: bundles, Releases, Catalogs, and
35
+ * channels. The CLI and the console write through it, so their writes
36
+ * take the server's path: the plugins' schema fence, pruning during
37
+ * writes, the storage's file URLs, and the database's CDN purge.
15
38
  */
16
- readonly insights: InsightsProvider;
39
+ readonly core: CoreApi;
40
+ /** Each plugin's API by plugin id, which the CLI's and the console's plugin features call. */
41
+ readonly api: PluginApis<TPlugins>;
42
+ /** The database's name, which `hot-updater db` commands read. */
43
+ readonly adapterName: string;
17
44
  /**
18
- * In-process API key lifecycle operations for trusted server tooling.
19
- * Creation returns the plaintext once; list and revoke expose only metadata.
20
- * This capability is never mounted on the client or admin HTTP handlers.
45
+ * Applies aggregate changes the database batches that are still pending:
46
+ * this process's buffer, and the log rows no compaction has merged yet.
47
+ * A long-lived server with `aggregateBatching: { mode: "memory" }` calls
48
+ * it before it exits.
21
49
  */
22
- readonly apiKeys: ApiKeyManagementAPI;
23
- };
24
- type HotUpdaterAPI = RuntimeHotUpdaterAPI;
25
- type ClientAccessPolicy = {
50
+ readonly flush: () => Promise<void>;
26
51
  /**
27
- * Leaves Release Catalog, artifact, and Insights ingestion routes
28
- * publicly accessible without a client credential.
52
+ * The database as configured. `hot-updater db` runs its tooling
53
+ * (`createMigrator`, `generateSchema`), and tooling done with the server
54
+ * closes it (`dispose`).
29
55
  */
30
- readonly type: "public";
31
- } | {
56
+ readonly database: ToolingDatabase;
57
+ /** The storage as configured, in order, as a frozen copy. */
58
+ readonly storage: readonly StorageAdapter[];
59
+ /** The plugins as configured, as a frozen copy, whose tables tooling creates. */
60
+ readonly plugins: TPlugins;
32
61
  /**
33
- * Requires a key registered in `database.models.apiKeys` for
34
- * Release Catalog, artifact, and Insights ingestion requests.
62
+ * The client plugins an app adds to `HotUpdater.init`'s `plugins` for
63
+ * these plugins, each once, in plugin order: what init prints.
35
64
  */
36
- readonly type: "api-key";
65
+ readonly clientPlugins: readonly PluginClientPlugin[];
37
66
  /**
38
- * Request header containing the API key. Defaults to
39
- * `x-api-key`. Clients must send the same header; Release Catalog
40
- * responses include it in `Vary` to preserve cache isolation.
67
+ * The plugins' endpoints on `handlers.client`, which a host that routes
68
+ * by path, such as a CDN in front of the server, sends to it.
41
69
  */
70
+ readonly clientEndpoints: readonly ClientEndpoint[];
71
+ /** The plugin that guards client routes; absent when they are public. */
72
+ readonly clientAuth?: ClientAuthProvider;
73
+ };
74
+ type HotUpdaterAPI = RuntimeHotUpdaterAPI;
75
+ declare const REMOVED_CLIENT_ACCESS = "clientAccess objects were removed in 1.0: set clientAccess: \"public\", or add a plugin that provides clientAuth";
76
+ /**
77
+ * A `clientAccess` object from before 1.0. Its `type` names the fix, so
78
+ * TypeScript reports it where the object is written.
79
+ */
80
+ interface RemovedClientAccess {
81
+ readonly type: typeof REMOVED_CLIENT_ACCESS;
42
82
  readonly headerName?: string;
83
+ }
84
+ type ClientAccessPolicy =
85
+ /** Leaves client routes public; required when no plugin provides clientAuth. */
86
+ "public" | RemovedClientAccess;
87
+ type ProvidesClientAuth<TPlugin> = TPlugin extends {
88
+ readonly provides?: infer TProvides;
89
+ } ? TProvides extends {
90
+ readonly clientAuth: true;
91
+ } ? true : false : false;
92
+ type ClientAuthIds<TPlugins extends readonly unknown[], TFound extends string[] = []> = TPlugins extends readonly [infer THead, ...infer TTail] ? ClientAuthIds<TTail, ProvidesClientAuth<THead> extends true ? [...TFound, THead extends {
93
+ readonly id: infer TId extends string;
94
+ } ? TId : string] : TFound> : TFound;
95
+ type JoinIds<TIds extends string[]> = TIds extends [infer TFirst extends string, ...infer TRest extends string[]] ? TRest extends [] ? `"${TFirst}"` : `"${TFirst}", ${JoinIds<TRest>}` : "";
96
+ /**
97
+ * Client routes have one policy source: exactly one plugin that provides
98
+ * clientAuth, or an explicit `clientAccess`. Tuples are counted here; an
99
+ * untyped list that may hold a clientAuth plugin is left to startup.
100
+ */
101
+ type ClientAccessRule<TPlugins extends readonly AnyHotUpdaterPlugin[]> = number extends TPlugins["length"] ? true extends ProvidesClientAuth<TPlugins[number]> ? {
102
+ readonly clientAccess?: "Remove clientAccess: a plugin in this list may provide clientAuth";
103
+ } : {
104
+ readonly clientAccess: ClientAccessPolicy;
105
+ } : ClientAuthIds<TPlugins> extends [] ? {
106
+ readonly clientAccess: ClientAccessPolicy;
107
+ } : ClientAuthIds<TPlugins> extends [infer TId extends string] ? {
108
+ readonly clientAccess?: `Remove clientAccess: plugin "${TId}" provides clientAuth`;
109
+ } : {
110
+ readonly clientAuth: `Keep one clientAuth plugin: ${JoinIds<ClientAuthIds<TPlugins>>} all provide it`;
43
111
  };
44
- interface CreateHotUpdaterOptions {
45
- readonly database: DatabasePlugin$1;
112
+ type CreateHotUpdaterOptions<TPlugins extends readonly AnyHotUpdaterPlugin[] = readonly []> = {
113
+ /** A provider's database on the storage engine, such as `kyselyAdapter(...)` or `postgres(...)`. */
114
+ readonly database: ToolingDatabase;
46
115
  /**
47
- * Required client-route access policy. This choice is explicit so a server
48
- * cannot accidentally change between public and authenticated OTA access.
49
- * `/version`, storage downloads, and admin-handler routes are unaffected.
116
+ * Where bundles are stored: the server reads and signs the URIs of each
117
+ * adapter's protocol.
50
118
  */
51
- readonly clientAccess: ClientAccessPolicy;
52
- /** Storage implementations used to read provider-specific storage URIs. */
53
- readonly storage?: readonly StoragePlugin[];
54
- }
55
- declare function createHotUpdater(options: CreateHotUpdaterOptions): RuntimeHotUpdaterAPI;
119
+ readonly storage?: readonly StorageAdapter[];
120
+ /** The plugins the server runs; at most one provides clientAuth. Defaults to none. */
121
+ readonly plugins?: TPlugins;
122
+ } & ClientAccessRule<TPlugins>;
123
+ declare function createHotUpdater<const TPlugins extends readonly AnyHotUpdaterPlugin[] = readonly []>(options: CreateHotUpdaterOptions<TPlugins>): RuntimeHotUpdaterAPI<NoInfer<TPlugins>>;
56
124
  //#endregion
57
- export { ClientAccessPolicy, CreateHotUpdaterOptions, HotUpdaterAPI, RuntimeHotUpdaterAPI, createHotUpdater };
125
+ export { ClientAccessPolicy, ClientAccessRule, ClientAuthProvider, ClientEndpoint, CreateHotUpdaterOptions, HotUpdaterAPI, RemovedClientAccess, RuntimeHotUpdaterAPI, createHotUpdater };
@@ -1,57 +1,125 @@
1
- import { ApiKeyManagementAPI } from "./apiKeys.mjs";
1
+ import { CoreApi } from "./core/api.mjs";
2
+ import { AnyHotUpdaterPlugin, PluginApis } from "./plugins/definePlugin.mjs";
2
3
  import { HotUpdaterHandlers } from "./handlerTypes.mjs";
3
- import { InsightsProvider } from "./insights/types.mjs";
4
4
  import "./handler.mjs";
5
- import { DatabaseAPI, DatabasePlugin as DatabasePlugin$1 } from "./db/types.mjs";
6
- import { StoragePlugin } from "@hot-updater/plugin-core";
5
+ import { PluginClientPlugin, StorageAdapter, ToolingDatabase } from "@hot-updater/plugin-core";
7
6
  //#region src/createHotUpdaterCore.d.ts
8
- type RuntimeHotUpdaterAPI = DatabaseAPI & {
7
+ /** A plugin's endpoint on `handlers.client`. */
8
+ interface ClientEndpoint {
9
+ /** The id of the plugin that adds it. */
10
+ readonly plugin: string;
11
+ readonly method: string;
12
+ /** Relative to the handler's mount; `:name` segments are parameters. */
13
+ readonly path: string;
14
+ }
15
+ /** The plugin that decides who may call client routes. */
16
+ interface ClientAuthProvider {
17
+ /** Its id. */
18
+ readonly plugin: string;
19
+ /**
20
+ * The request headers its decision reads, lowercase: what a cache in
21
+ * front of the server, such as a CDN, keys client routes on.
22
+ */
23
+ readonly varyHeaders: readonly string[];
24
+ }
25
+ type RuntimeHotUpdaterAPI<TPlugins extends readonly AnyHotUpdaterPlugin[] = readonly AnyHotUpdaterPlugin[]> = {
26
+ /**
27
+ * The routes a host mounts. On first access every storage adapter must
28
+ * serve downloads (`get` and `getDownloadUrl`), so a server fails where it
29
+ * mounts them, while tooling that only reads the definition, such as the
30
+ * CLI, can list storage that only uploads.
31
+ */
9
32
  readonly handlers: HotUpdaterHandlers;
10
- readonly adapterName: string;
11
33
  /**
12
- * Built-in Insights provider. Client ingestion and admin query routes are
13
- * always mounted; React Native clients report lifecycle events by default
14
- * and can opt out with `HotUpdater.init({ insights: false })`.
34
+ * Core's reads and typed writes: bundles, Releases, Catalogs, and
35
+ * channels. The CLI and the console write through it, so their writes
36
+ * take the server's path: the plugins' schema fence, pruning during
37
+ * writes, the storage's file URLs, and the database's CDN purge.
15
38
  */
16
- readonly insights: InsightsProvider;
39
+ readonly core: CoreApi;
40
+ /** Each plugin's API by plugin id, which the CLI's and the console's plugin features call. */
41
+ readonly api: PluginApis<TPlugins>;
42
+ /** The database's name, which `hot-updater db` commands read. */
43
+ readonly adapterName: string;
17
44
  /**
18
- * In-process API key lifecycle operations for trusted server tooling.
19
- * Creation returns the plaintext once; list and revoke expose only metadata.
20
- * This capability is never mounted on the client or admin HTTP handlers.
45
+ * Applies aggregate changes the database batches that are still pending:
46
+ * this process's buffer, and the log rows no compaction has merged yet.
47
+ * A long-lived server with `aggregateBatching: { mode: "memory" }` calls
48
+ * it before it exits.
21
49
  */
22
- readonly apiKeys: ApiKeyManagementAPI;
23
- };
24
- type HotUpdaterAPI = RuntimeHotUpdaterAPI;
25
- type ClientAccessPolicy = {
50
+ readonly flush: () => Promise<void>;
26
51
  /**
27
- * Leaves Release Catalog, artifact, and Insights ingestion routes
28
- * publicly accessible without a client credential.
52
+ * The database as configured. `hot-updater db` runs its tooling
53
+ * (`createMigrator`, `generateSchema`), and tooling done with the server
54
+ * closes it (`dispose`).
29
55
  */
30
- readonly type: "public";
31
- } | {
56
+ readonly database: ToolingDatabase;
57
+ /** The storage as configured, in order, as a frozen copy. */
58
+ readonly storage: readonly StorageAdapter[];
59
+ /** The plugins as configured, as a frozen copy, whose tables tooling creates. */
60
+ readonly plugins: TPlugins;
32
61
  /**
33
- * Requires a key registered in `database.models.apiKeys` for
34
- * Release Catalog, artifact, and Insights ingestion requests.
62
+ * The client plugins an app adds to `HotUpdater.init`'s `plugins` for
63
+ * these plugins, each once, in plugin order: what init prints.
35
64
  */
36
- readonly type: "api-key";
65
+ readonly clientPlugins: readonly PluginClientPlugin[];
37
66
  /**
38
- * Request header containing the API key. Defaults to
39
- * `x-api-key`. Clients must send the same header; Release Catalog
40
- * responses include it in `Vary` to preserve cache isolation.
67
+ * The plugins' endpoints on `handlers.client`, which a host that routes
68
+ * by path, such as a CDN in front of the server, sends to it.
41
69
  */
70
+ readonly clientEndpoints: readonly ClientEndpoint[];
71
+ /** The plugin that guards client routes; absent when they are public. */
72
+ readonly clientAuth?: ClientAuthProvider;
73
+ };
74
+ type HotUpdaterAPI = RuntimeHotUpdaterAPI;
75
+ declare const REMOVED_CLIENT_ACCESS = "clientAccess objects were removed in 1.0: set clientAccess: \"public\", or add a plugin that provides clientAuth";
76
+ /**
77
+ * A `clientAccess` object from before 1.0. Its `type` names the fix, so
78
+ * TypeScript reports it where the object is written.
79
+ */
80
+ interface RemovedClientAccess {
81
+ readonly type: typeof REMOVED_CLIENT_ACCESS;
42
82
  readonly headerName?: string;
83
+ }
84
+ type ClientAccessPolicy =
85
+ /** Leaves client routes public; required when no plugin provides clientAuth. */
86
+ "public" | RemovedClientAccess;
87
+ type ProvidesClientAuth<TPlugin> = TPlugin extends {
88
+ readonly provides?: infer TProvides;
89
+ } ? TProvides extends {
90
+ readonly clientAuth: true;
91
+ } ? true : false : false;
92
+ type ClientAuthIds<TPlugins extends readonly unknown[], TFound extends string[] = []> = TPlugins extends readonly [infer THead, ...infer TTail] ? ClientAuthIds<TTail, ProvidesClientAuth<THead> extends true ? [...TFound, THead extends {
93
+ readonly id: infer TId extends string;
94
+ } ? TId : string] : TFound> : TFound;
95
+ type JoinIds<TIds extends string[]> = TIds extends [infer TFirst extends string, ...infer TRest extends string[]] ? TRest extends [] ? `"${TFirst}"` : `"${TFirst}", ${JoinIds<TRest>}` : "";
96
+ /**
97
+ * Client routes have one policy source: exactly one plugin that provides
98
+ * clientAuth, or an explicit `clientAccess`. Tuples are counted here; an
99
+ * untyped list that may hold a clientAuth plugin is left to startup.
100
+ */
101
+ type ClientAccessRule<TPlugins extends readonly AnyHotUpdaterPlugin[]> = number extends TPlugins["length"] ? true extends ProvidesClientAuth<TPlugins[number]> ? {
102
+ readonly clientAccess?: "Remove clientAccess: a plugin in this list may provide clientAuth";
103
+ } : {
104
+ readonly clientAccess: ClientAccessPolicy;
105
+ } : ClientAuthIds<TPlugins> extends [] ? {
106
+ readonly clientAccess: ClientAccessPolicy;
107
+ } : ClientAuthIds<TPlugins> extends [infer TId extends string] ? {
108
+ readonly clientAccess?: `Remove clientAccess: plugin "${TId}" provides clientAuth`;
109
+ } : {
110
+ readonly clientAuth: `Keep one clientAuth plugin: ${JoinIds<ClientAuthIds<TPlugins>>} all provide it`;
43
111
  };
44
- interface CreateHotUpdaterOptions {
45
- readonly database: DatabasePlugin$1;
112
+ type CreateHotUpdaterOptions<TPlugins extends readonly AnyHotUpdaterPlugin[] = readonly []> = {
113
+ /** A provider's database on the storage engine, such as `kyselyAdapter(...)` or `postgres(...)`. */
114
+ readonly database: ToolingDatabase;
46
115
  /**
47
- * Required client-route access policy. This choice is explicit so a server
48
- * cannot accidentally change between public and authenticated OTA access.
49
- * `/version`, storage downloads, and admin-handler routes are unaffected.
116
+ * Where bundles are stored: the server reads and signs the URIs of each
117
+ * adapter's protocol.
50
118
  */
51
- readonly clientAccess: ClientAccessPolicy;
52
- /** Storage implementations used to read provider-specific storage URIs. */
53
- readonly storage?: readonly StoragePlugin[];
54
- }
55
- declare function createHotUpdater(options: CreateHotUpdaterOptions): RuntimeHotUpdaterAPI;
119
+ readonly storage?: readonly StorageAdapter[];
120
+ /** The plugins the server runs; at most one provides clientAuth. Defaults to none. */
121
+ readonly plugins?: TPlugins;
122
+ } & ClientAccessRule<TPlugins>;
123
+ declare function createHotUpdater<const TPlugins extends readonly AnyHotUpdaterPlugin[] = readonly []>(options: CreateHotUpdaterOptions<TPlugins>): RuntimeHotUpdaterAPI<NoInfer<TPlugins>>;
56
124
  //#endregion
57
- export { ClientAccessPolicy, CreateHotUpdaterOptions, HotUpdaterAPI, RuntimeHotUpdaterAPI, createHotUpdater };
125
+ export { ClientAccessPolicy, ClientAccessRule, ClientAuthProvider, ClientEndpoint, CreateHotUpdaterOptions, HotUpdaterAPI, RemovedClientAccess, RuntimeHotUpdaterAPI, createHotUpdater };