@hot-updater/plugin-core 1.0.0-rc.0 → 1.0.0-rc.14

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 (142) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  2. package/dist/assetStorageLayout.cjs +4 -2
  3. package/dist/assetStorageLayout.d.cts +5 -24
  4. package/dist/assetStorageLayout.d.mts +5 -24
  5. package/dist/assetStorageLayout.mjs +4 -2
  6. package/dist/calculatePagination.d.cts +0 -1
  7. package/dist/calculatePagination.d.mts +0 -1
  8. package/dist/compressionFormat.cjs +12 -5
  9. package/dist/compressionFormat.d.cts +1 -1
  10. package/dist/compressionFormat.d.mts +1 -1
  11. package/dist/compressionFormat.mjs +11 -4
  12. package/dist/contentAddressedAssets.d.cts +1 -4
  13. package/dist/contentAddressedAssets.d.mts +1 -4
  14. package/dist/createDatabasePlugin.cjs +116 -42
  15. package/dist/createDatabasePlugin.d.cts +3 -1
  16. package/dist/createDatabasePlugin.d.mts +3 -1
  17. package/dist/createDatabasePlugin.mjs +116 -43
  18. package/dist/createStoragePlugin.d.cts +0 -1
  19. package/dist/createStoragePlugin.d.mts +0 -1
  20. package/dist/databaseClient.cjs +6 -1
  21. package/dist/databaseClient.d.cts +1 -2
  22. package/dist/databaseClient.d.mts +1 -2
  23. package/dist/databaseClient.mjs +6 -2
  24. package/dist/databaseClientReads.cjs +3 -1
  25. package/dist/databaseClientReads.mjs +3 -2
  26. package/dist/databaseClientUpdates.cjs +2 -1
  27. package/dist/databaseClientUpdates.d.cts +1 -1
  28. package/dist/databaseClientUpdates.d.mts +1 -1
  29. package/dist/databaseClientUpdates.mjs +2 -0
  30. package/dist/databaseJsonValue.cjs +4 -0
  31. package/dist/databaseJsonValue.d.cts +4 -2
  32. package/dist/databaseJsonValue.d.mts +4 -2
  33. package/dist/databaseJsonValue.mjs +2 -1
  34. package/dist/databaseMetadata.cjs +0 -1
  35. package/dist/databasePluginCrud.cjs +1 -0
  36. package/dist/databasePluginCrud.d.cts +4 -1
  37. package/dist/databasePluginCrud.d.mts +4 -1
  38. package/dist/databasePluginCrud.mjs +1 -1
  39. package/dist/databasePluginCrudValidation.d.cts +6 -1
  40. package/dist/databasePluginCrudValidation.d.mts +6 -1
  41. package/dist/databasePluginCrudValidationErrors.cjs +1 -0
  42. package/dist/databasePluginCrudValidationErrors.mjs +1 -0
  43. package/dist/databasePluginCrudValidationFields.cjs +21 -19
  44. package/dist/databasePluginCrudValidationFields.d.cts +1 -1
  45. package/dist/databasePluginCrudValidationFields.d.mts +1 -1
  46. package/dist/databasePluginCrudValidationFields.mjs +20 -20
  47. package/dist/databasePluginCrudValidationMutations.cjs +1 -1
  48. package/dist/databasePluginCrudValidationMutations.d.cts +1 -1
  49. package/dist/databasePluginCrudValidationMutations.d.mts +1 -1
  50. package/dist/databasePluginCrudValidationMutations.mjs +1 -1
  51. package/dist/databasePluginCrudValidationQueries.d.cts +2 -1
  52. package/dist/databasePluginCrudValidationQueries.d.mts +2 -1
  53. package/dist/databasePluginCrudValidationRows.cjs +2 -2
  54. package/dist/databasePluginCrudValidationRows.d.cts +1 -1
  55. package/dist/databasePluginCrudValidationRows.d.mts +1 -1
  56. package/dist/databasePluginCrudValidationRows.mjs +2 -2
  57. package/dist/databaseRows.cjs +0 -1
  58. package/dist/databaseRows.d.cts +2 -6
  59. package/dist/databaseRows.d.mts +2 -6
  60. package/dist/index.cjs +4 -1
  61. package/dist/index.d.cts +5 -4
  62. package/dist/index.d.mts +5 -4
  63. package/dist/index.mjs +3 -2
  64. package/dist/insightsContract.cjs +146 -0
  65. package/dist/insightsContract.d.cts +9 -0
  66. package/dist/insightsContract.d.mts +9 -0
  67. package/dist/insightsContract.mjs +143 -0
  68. package/dist/insightsLatestQueries.cjs +53 -0
  69. package/dist/insightsLatestQueries.d.cts +13 -0
  70. package/dist/insightsLatestQueries.d.mts +13 -0
  71. package/dist/insightsLatestQueries.mjs +52 -0
  72. package/dist/internal.cjs +3 -0
  73. package/dist/internal.d.cts +5 -3
  74. package/dist/internal.d.mts +5 -3
  75. package/dist/internal.mjs +2 -1
  76. package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/comparison-DenM3wCn.cjs +136 -0
  77. package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/comparison-DenM3wCn.mjs +116 -0
  78. package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/range-DvX-Y6iv.cjs +167 -0
  79. package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/range-DvX-Y6iv.mjs +165 -0
  80. package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/set-CC5YeoYX.cjs +42 -0
  81. package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/set-CC5YeoYX.mjs +39 -0
  82. package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/version-CQ98ZBpL.cjs +39 -0
  83. package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/version-CQ98ZBpL.mjs +37 -0
  84. package/dist/paginateBundles.d.cts +1 -8
  85. package/dist/paginateBundles.d.mts +1 -8
  86. package/dist/parseStorageUri.d.cts +1 -5
  87. package/dist/parseStorageUri.d.mts +1 -5
  88. package/dist/queryBundles.d.cts +0 -1
  89. package/dist/queryBundles.d.mts +0 -1
  90. package/dist/releaseCatalogCompiler.cjs +15 -12
  91. package/dist/releaseCatalogCompiler.d.cts +0 -1
  92. package/dist/releaseCatalogCompiler.d.mts +0 -1
  93. package/dist/releaseCatalogCompiler.mjs +11 -7
  94. package/dist/releaseCatalogMutation.cjs +1 -1
  95. package/dist/releaseCatalogMutation.d.cts +1 -1
  96. package/dist/releaseCatalogMutation.d.mts +1 -1
  97. package/dist/releaseCatalogMutation.mjs +1 -0
  98. package/dist/releaseManagement.cjs +3 -2
  99. package/dist/releaseManagement.d.cts +1 -1
  100. package/dist/releaseManagement.d.mts +1 -1
  101. package/dist/releaseManagement.mjs +3 -1
  102. package/dist/remoteBundleSigning.cjs +5 -7
  103. package/dist/remoteBundleSigning.d.cts +2 -15
  104. package/dist/remoteBundleSigning.d.mts +2 -15
  105. package/dist/remoteBundleSigning.mjs +5 -7
  106. package/dist/requestBundleCache.d.cts +1 -2
  107. package/dist/requestBundleCache.d.mts +1 -2
  108. package/dist/semverSatisfies.cjs +4 -3
  109. package/dist/semverSatisfies.mjs +2 -1
  110. package/dist/storageDownloadPath.cjs +2 -1
  111. package/dist/storageDownloadPath.d.cts +1 -3
  112. package/dist/storageDownloadPath.d.mts +1 -3
  113. package/dist/storageDownloadPath.mjs +2 -1
  114. package/dist/types/database.d.cts +4 -3
  115. package/dist/types/database.d.mts +4 -3
  116. package/dist/types/databaseFields.cjs +1 -5
  117. package/dist/types/databaseFields.d.cts +1 -1
  118. package/dist/types/databaseFields.d.mts +1 -1
  119. package/dist/types/databaseFields.mjs +1 -5
  120. package/dist/types/databaseOperations.d.cts +15 -12
  121. package/dist/types/databaseOperations.d.mts +15 -12
  122. package/dist/types/databasePlugin.d.cts +77 -13
  123. package/dist/types/databasePlugin.d.mts +77 -13
  124. package/dist/types/databaseQuery.d.cts +2 -3
  125. package/dist/types/databaseQuery.d.mts +2 -3
  126. package/dist/types/databaseRows.d.cts +16 -11
  127. package/dist/types/databaseRows.d.mts +16 -11
  128. package/dist/types/index.d.cts +15 -11
  129. package/dist/types/index.d.mts +15 -11
  130. package/dist/types/internal.d.cts +4 -3
  131. package/dist/types/internal.d.mts +4 -3
  132. package/dist/types/public.d.cts +4 -3
  133. package/dist/types/public.d.mts +4 -3
  134. package/dist/types/utils.d.cts +1 -1
  135. package/dist/types/utils.d.mts +1 -1
  136. package/dist/uuidv7.cjs +7 -2
  137. package/dist/uuidv7.d.cts +0 -1
  138. package/dist/uuidv7.d.mts +0 -1
  139. package/dist/uuidv7.mjs +1 -1
  140. package/package.json +4 -4
  141. package/dist/node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.cjs +0 -345
  142. package/dist/node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs +0 -341
@@ -1,5 +1,4 @@
1
1
  import { RELEASE_CATALOG_FALLBACK_POLICY, RELEASE_CATALOG_SCHEMA_VERSION, Release, ReleaseCatalogDescriptor, ReleaseStrategy } from "@hot-updater/core";
2
-
3
2
  //#region src/releaseCatalogCompiler.d.ts
4
3
  interface CatalogVersionBound {
5
4
  readonly version: string;
@@ -1,5 +1,7 @@
1
1
  import { isUUIDv7 as isUUIDv7$1 } from "./uuidv7.mjs";
2
- import { coerce, compare, normalize, parseRange, satisfies } from "./node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs";
2
+ import { t as compare } from "./node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/comparison-DenM3wCn.mjs";
3
+ import { f as satisfies, m as parseRange } from "./node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/range-DvX-Y6iv.mjs";
4
+ import { m as normalizeFull, n as coerce, p as normalize } from "./node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/version-CQ98ZBpL.mjs";
3
5
  import { MAX_COMPILED_CATALOG_BYTES, MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE, MAX_TARGET_COHORTS_PER_RELEASE, NUMERIC_COHORT_SIZE, RELEASE_CATALOG_FALLBACK_POLICY, RELEASE_CATALOG_SCHEMA_VERSION, getNumericCohortValue, getRolledOutNumericCohorts, isCustomCohort, normalizeCohortValue, normalizeRolloutCohortCount } from "@hot-updater/core";
4
6
  //#region src/releaseCatalogCompiler.ts
5
7
  var ReleaseCatalogCompilationError = class extends Error {
@@ -278,15 +280,16 @@ function compileAppVersion(releases) {
278
280
  const retainedIds = new Set(segmentReleases.flatMap(({ retainedIds, rollbackIds }) => [...retainedIds, ...rollbackIds]));
279
281
  const retainedReleases = releases.filter((release) => retainedIds.has(release.id));
280
282
  const descriptorIndex = new Map(retainedReleases.map((release, index) => [release.id, index]));
283
+ const segments = mergeSegments(segmentReleases.map(({ segment, retainedIds, rollbackIds }) => ({
284
+ ...segment,
285
+ releaseIndexes: releases.filter((release) => retainedIds.has(release.id)).map((release) => descriptorIndex.get(release.id)).filter((index) => index !== void 0),
286
+ rollbackReleaseIndexes: releases.filter((release) => rollbackIds.has(release.id)).map((release) => descriptorIndex.get(release.id)).filter((index) => index !== void 0)
287
+ })).filter((segment) => segment.releaseIndexes.length > 0 || segment.rollbackReleaseIndexes.length > 0));
281
288
  return {
282
289
  envelope: {
283
290
  fallbackPolicy: RELEASE_CATALOG_FALLBACK_POLICY,
284
291
  schemaVersion: RELEASE_CATALOG_SCHEMA_VERSION,
285
- segments: mergeSegments(segmentReleases.map(({ segment, retainedIds, rollbackIds }) => ({
286
- ...segment,
287
- releaseIndexes: releases.filter((release) => retainedIds.has(release.id)).map((release) => descriptorIndex.get(release.id)).filter((index) => index !== void 0),
288
- rollbackReleaseIndexes: releases.filter((release) => rollbackIds.has(release.id)).map((release) => descriptorIndex.get(release.id)).filter((index) => index !== void 0)
289
- })).filter((segment) => segment.releaseIndexes.length > 0 || segment.rollbackReleaseIndexes.length > 0)),
292
+ segments,
290
293
  strategy: "APP_VERSION"
291
294
  },
292
295
  retainedReleases
@@ -354,7 +357,8 @@ function versionInSegment(version, segment) {
354
357
  return true;
355
358
  }
356
359
  function canonicalizeAppVersion(appVersion) {
357
- return coerce(appVersion);
360
+ const version = coerce(appVersion);
361
+ return version ? normalizeFull(version) : null;
358
362
  }
359
363
  function projectCompiledCatalog(catalog, appVersion) {
360
364
  let indexes;
@@ -1,4 +1,3 @@
1
- require("./_virtual/_rolldown/runtime.cjs");
2
1
  const require_uuidv7 = require("./uuidv7.cjs");
3
2
  const require_databaseRows = require("./databaseRows.cjs");
4
3
  const require_releaseCatalogCompiler = require("./releaseCatalogCompiler.cjs");
@@ -7,6 +6,7 @@ let _hot_updater_core = require("@hot-updater/core");
7
6
  const RELEASE_PAGE_SIZE = 1e3;
8
7
  const DEFAULT_MAX_ATTEMPTS = 3;
9
8
  var ReleaseCatalogMutationError = class extends Error {
9
+ code;
10
10
  name = "ReleaseCatalogMutationError";
11
11
  constructor(code, message) {
12
12
  super(message);
@@ -1,8 +1,8 @@
1
1
  import { ReleaseCatalogRow, ReleaseRow } from "./types/databaseRows.cjs";
2
2
  import { BundleRepository, DatabaseChange } from "./types/databasePlugin.cjs";
3
3
  import { ReleaseRowUpdate } from "./types/databaseOperations.cjs";
4
+ import "./types/index.cjs";
4
5
  import { ReleaseCatalogCompilation } from "./releaseCatalogCompiler.cjs";
5
-
6
6
  //#region src/releaseCatalogMutation.d.ts
7
7
  interface ReleaseCatalogScope {
8
8
  readonly channelId: string;
@@ -1,8 +1,8 @@
1
1
  import { ReleaseCatalogRow, ReleaseRow } from "./types/databaseRows.mjs";
2
2
  import { BundleRepository, DatabaseChange } from "./types/databasePlugin.mjs";
3
3
  import { ReleaseRowUpdate } from "./types/databaseOperations.mjs";
4
+ import "./types/index.mjs";
4
5
  import { ReleaseCatalogCompilation } from "./releaseCatalogCompiler.mjs";
5
-
6
6
  //#region src/releaseCatalogMutation.d.ts
7
7
  interface ReleaseCatalogScope {
8
8
  readonly channelId: string;
@@ -6,6 +6,7 @@ import { createReleaseCatalogScopeKey, encodeChannelKey } from "@hot-updater/cor
6
6
  const RELEASE_PAGE_SIZE = 1e3;
7
7
  const DEFAULT_MAX_ATTEMPTS = 3;
8
8
  var ReleaseCatalogMutationError = class extends Error {
9
+ code;
9
10
  name = "ReleaseCatalogMutationError";
10
11
  constructor(code, message) {
11
12
  super(message);
@@ -1,10 +1,10 @@
1
- require("./_virtual/_rolldown/runtime.cjs");
2
1
  const require_uuidv7 = require("./uuidv7.cjs");
3
2
  const require_releaseCatalogMutation = require("./releaseCatalogMutation.cjs");
4
3
  let _hot_updater_core = require("@hot-updater/core");
5
4
  //#region src/releaseManagement.ts
6
5
  const RELEASE_PAGE_SIZE = 1e3;
7
6
  var ReleaseManagementError = class extends Error {
7
+ code;
8
8
  name = "ReleaseManagementError";
9
9
  constructor(code, message) {
10
10
  super(message);
@@ -29,7 +29,8 @@ const readReleaseScope = async (database, scopeKey) => {
29
29
  }
30
30
  };
31
31
  const createForwardReleaseId = (rows, candidates, nowMs) => {
32
- return require_uuidv7.createUUIDv7After([...candidates, rows.at(-1)?.id ?? null].filter((value) => value !== null && (0, _hot_updater_core.isUUIDv7)(value)).sort().at(-1) ?? null, nowMs);
32
+ const floor = [...candidates, rows.at(-1)?.id ?? null].filter((value) => value !== null && (0, _hot_updater_core.isUUIDv7)(value)).sort().at(-1);
33
+ return require_uuidv7.createUUIDv7After(floor ?? null, nowMs);
33
34
  };
34
35
  const prepareTargetScope = async ({ channelName, database, fingerprintHash, platform, strategy }) => {
35
36
  const channelKey = (0, _hot_updater_core.encodeChannelKey)(channelName);
@@ -1,6 +1,6 @@
1
1
  import { BundleRepository } from "./types/databasePlugin.cjs";
2
+ import "./types/index.cjs";
2
3
  import { ReleaseCatalogMutationPreflight, ReleaseCatalogMutationResult } from "./releaseCatalogMutation.cjs";
3
-
4
4
  //#region src/releaseManagement.d.ts
5
5
  interface ReleasePolicyPatch {
6
6
  readonly enabled?: boolean;
@@ -1,6 +1,6 @@
1
1
  import { BundleRepository } from "./types/databasePlugin.mjs";
2
+ import "./types/index.mjs";
2
3
  import { ReleaseCatalogMutationPreflight, ReleaseCatalogMutationResult } from "./releaseCatalogMutation.mjs";
3
-
4
4
  //#region src/releaseManagement.d.ts
5
5
  interface ReleasePolicyPatch {
6
6
  readonly enabled?: boolean;
@@ -4,6 +4,7 @@ import { createReleaseCatalogScopeKey, decodeChannelKey, encodeChannelKey } from
4
4
  //#region src/releaseManagement.ts
5
5
  const RELEASE_PAGE_SIZE = 1e3;
6
6
  var ReleaseManagementError = class extends Error {
7
+ code;
7
8
  name = "ReleaseManagementError";
8
9
  constructor(code, message) {
9
10
  super(message);
@@ -28,7 +29,8 @@ const readReleaseScope = async (database, scopeKey) => {
28
29
  }
29
30
  };
30
31
  const createForwardReleaseId = (rows, candidates, nowMs) => {
31
- return createUUIDv7After([...candidates, rows.at(-1)?.id ?? null].filter((value) => value !== null && isUUIDv7$1(value)).sort().at(-1) ?? null, nowMs);
32
+ const floor = [...candidates, rows.at(-1)?.id ?? null].filter((value) => value !== null && isUUIDv7$1(value)).sort().at(-1);
33
+ return createUUIDv7After(floor ?? null, nowMs);
32
34
  };
33
35
  const prepareTargetScope = async ({ channelName, database, fingerprintHash, platform, strategy }) => {
34
36
  const channelKey = encodeChannelKey(channelName);
@@ -4,10 +4,10 @@ const REMOTE_BUNDLE_SIGNING_PROTOCOL_VERSION = 1;
4
4
  const REMOTE_BUNDLE_SIGNING_ALGORITHM = "RSA-SHA256";
5
5
  const REMOTE_BUNDLE_SIGNING_TOKEN_HEADER = "x-hot-updater-signing-token";
6
6
  const MESSAGE_BYTES = 32;
7
- const REQUEST_BODY_LIMIT = 4 * 1024;
8
- const RESPONSE_BODY_LIMIT = 32 * 1024;
9
- const SIGNATURE_BYTES_LIMIT = 16 * 1024;
10
- const TOKEN_BYTES_LIMIT = 4 * 1024;
7
+ const REQUEST_BODY_LIMIT = 4096;
8
+ const RESPONSE_BODY_LIMIT = 32768;
9
+ const SIGNATURE_BYTES_LIMIT = 16384;
10
+ const TOKEN_BYTES_LIMIT = 4096;
11
11
  const REQUEST_TIMEOUT_MS = 3e4;
12
12
  const JSON_CONTENT_TYPE_PATTERN = /^application\/json(?:\s*;|$)/iu;
13
13
  const BASE64_PATTERN = /^(?:[A-Za-z\d+/]{4})*(?:[A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/u;
@@ -160,8 +160,7 @@ const remoteRequest = async (fetchImplementation, endpoint, resolveToken, init)
160
160
  return parseJsonBody(response.body, response.headers, RESPONSE_BODY_LIMIT);
161
161
  };
162
162
  /** Signs through a server implementing the Hot Updater signing protocol. */
163
- const remoteSigning = ({ endpoint, fetch: fetchImplementation = globalThis.fetch, publicKeyPath, signingToken }) => {
164
- if (!publicKeyPath.trim()) throw new Error("Remote bundle signing public key path is required.");
163
+ const remoteSigning = ({ endpoint, fetch: fetchImplementation = globalThis.fetch, signingToken }) => {
165
164
  if (typeof fetchImplementation !== "function") throw new Error("Remote bundle signing requires fetch.");
166
165
  const normalizedEndpoint = normalizeEndpoint(endpoint);
167
166
  let resolvedKey;
@@ -180,7 +179,6 @@ const remoteSigning = ({ endpoint, fetch: fetchImplementation = globalThis.fetch
180
179
  };
181
180
  return {
182
181
  name: "remoteSigning",
183
- publicKeyPath,
184
182
  async getPublicKey() {
185
183
  const { publicKey } = await getResolvedKey();
186
184
  return { publicKey };
@@ -1,5 +1,4 @@
1
1
  import { BundleSigningPlugin } from "./types/index.cjs";
2
-
3
2
  //#region src/remoteBundleSigning.d.ts
4
3
  declare const REMOTE_BUNDLE_SIGNING_PATH = "/_hot-updater/signing";
5
4
  declare const REMOTE_BUNDLE_SIGNING_PROTOCOL_VERSION: 1;
@@ -9,7 +8,6 @@ type Fetch = typeof globalThis.fetch;
9
8
  interface RemoteSigningOptions {
10
9
  readonly endpoint: string;
11
10
  readonly fetch?: Fetch;
12
- readonly publicKeyPath: string;
13
11
  /**
14
12
  * Dedicated signing token or a lazy resolver for provider integrations.
15
13
  * Defaults to HOT_UPDATER_SIGNING_TOKEN.
@@ -25,19 +23,8 @@ interface BundleSigningHandlerOptions {
25
23
  readonly token: string;
26
24
  }
27
25
  /** Signs through a server implementing the Hot Updater signing protocol. */
28
- declare const remoteSigning: ({
29
- endpoint,
30
- fetch: fetchImplementation,
31
- publicKeyPath,
32
- signingToken
33
- }: RemoteSigningOptions) => BundleSigningPlugin;
26
+ declare const remoteSigning: ({ endpoint, fetch: fetchImplementation, signingToken }: RemoteSigningOptions) => BundleSigningPlugin;
34
27
  /** Handles the portable managed signing protocol in Web API runtimes. */
35
- declare const createBundleSigningHandler: ({
36
- endpointPath,
37
- publicKey,
38
- request,
39
- sign,
40
- token
41
- }: BundleSigningHandlerOptions) => Promise<Response | null>;
28
+ declare const createBundleSigningHandler: ({ endpointPath, publicKey, request, sign, token }: BundleSigningHandlerOptions) => Promise<Response | null>;
42
29
  //#endregion
43
30
  export { BundleSigningHandlerOptions, REMOTE_BUNDLE_SIGNING_ALGORITHM, REMOTE_BUNDLE_SIGNING_PATH, REMOTE_BUNDLE_SIGNING_PROTOCOL_VERSION, REMOTE_BUNDLE_SIGNING_TOKEN_HEADER, RemoteSigningOptions, createBundleSigningHandler, remoteSigning };
@@ -1,5 +1,4 @@
1
1
  import { BundleSigningPlugin } from "./types/index.mjs";
2
-
3
2
  //#region src/remoteBundleSigning.d.ts
4
3
  declare const REMOTE_BUNDLE_SIGNING_PATH = "/_hot-updater/signing";
5
4
  declare const REMOTE_BUNDLE_SIGNING_PROTOCOL_VERSION: 1;
@@ -9,7 +8,6 @@ type Fetch = typeof globalThis.fetch;
9
8
  interface RemoteSigningOptions {
10
9
  readonly endpoint: string;
11
10
  readonly fetch?: Fetch;
12
- readonly publicKeyPath: string;
13
11
  /**
14
12
  * Dedicated signing token or a lazy resolver for provider integrations.
15
13
  * Defaults to HOT_UPDATER_SIGNING_TOKEN.
@@ -25,19 +23,8 @@ interface BundleSigningHandlerOptions {
25
23
  readonly token: string;
26
24
  }
27
25
  /** Signs through a server implementing the Hot Updater signing protocol. */
28
- declare const remoteSigning: ({
29
- endpoint,
30
- fetch: fetchImplementation,
31
- publicKeyPath,
32
- signingToken
33
- }: RemoteSigningOptions) => BundleSigningPlugin;
26
+ declare const remoteSigning: ({ endpoint, fetch: fetchImplementation, signingToken }: RemoteSigningOptions) => BundleSigningPlugin;
34
27
  /** Handles the portable managed signing protocol in Web API runtimes. */
35
- declare const createBundleSigningHandler: ({
36
- endpointPath,
37
- publicKey,
38
- request,
39
- sign,
40
- token
41
- }: BundleSigningHandlerOptions) => Promise<Response | null>;
28
+ declare const createBundleSigningHandler: ({ endpointPath, publicKey, request, sign, token }: BundleSigningHandlerOptions) => Promise<Response | null>;
42
29
  //#endregion
43
30
  export { BundleSigningHandlerOptions, REMOTE_BUNDLE_SIGNING_ALGORITHM, REMOTE_BUNDLE_SIGNING_PATH, REMOTE_BUNDLE_SIGNING_PROTOCOL_VERSION, REMOTE_BUNDLE_SIGNING_TOKEN_HEADER, RemoteSigningOptions, createBundleSigningHandler, remoteSigning };
@@ -4,10 +4,10 @@ const REMOTE_BUNDLE_SIGNING_PROTOCOL_VERSION = 1;
4
4
  const REMOTE_BUNDLE_SIGNING_ALGORITHM = "RSA-SHA256";
5
5
  const REMOTE_BUNDLE_SIGNING_TOKEN_HEADER = "x-hot-updater-signing-token";
6
6
  const MESSAGE_BYTES = 32;
7
- const REQUEST_BODY_LIMIT = 4 * 1024;
8
- const RESPONSE_BODY_LIMIT = 32 * 1024;
9
- const SIGNATURE_BYTES_LIMIT = 16 * 1024;
10
- const TOKEN_BYTES_LIMIT = 4 * 1024;
7
+ const REQUEST_BODY_LIMIT = 4096;
8
+ const RESPONSE_BODY_LIMIT = 32768;
9
+ const SIGNATURE_BYTES_LIMIT = 16384;
10
+ const TOKEN_BYTES_LIMIT = 4096;
11
11
  const REQUEST_TIMEOUT_MS = 3e4;
12
12
  const JSON_CONTENT_TYPE_PATTERN = /^application\/json(?:\s*;|$)/iu;
13
13
  const BASE64_PATTERN = /^(?:[A-Za-z\d+/]{4})*(?:[A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/u;
@@ -160,8 +160,7 @@ const remoteRequest = async (fetchImplementation, endpoint, resolveToken, init)
160
160
  return parseJsonBody(response.body, response.headers, RESPONSE_BODY_LIMIT);
161
161
  };
162
162
  /** Signs through a server implementing the Hot Updater signing protocol. */
163
- const remoteSigning = ({ endpoint, fetch: fetchImplementation = globalThis.fetch, publicKeyPath, signingToken }) => {
164
- if (!publicKeyPath.trim()) throw new Error("Remote bundle signing public key path is required.");
163
+ const remoteSigning = ({ endpoint, fetch: fetchImplementation = globalThis.fetch, signingToken }) => {
165
164
  if (typeof fetchImplementation !== "function") throw new Error("Remote bundle signing requires fetch.");
166
165
  const normalizedEndpoint = normalizeEndpoint(endpoint);
167
166
  let resolvedKey;
@@ -180,7 +179,6 @@ const remoteSigning = ({ endpoint, fetch: fetchImplementation = globalThis.fetch
180
179
  };
181
180
  return {
182
181
  name: "remoteSigning",
183
- publicKeyPath,
184
182
  async getPublicKey() {
185
183
  const { publicKey } = await getResolvedKey();
186
184
  return { publicKey };
@@ -1,9 +1,8 @@
1
1
  import { Bundle } from "./types/index.cjs";
2
-
3
2
  //#region src/requestBundleCache.d.ts
4
3
  interface RequestBundleResolver {
5
4
  readonly getById: (bundleId: string, loadBundleById: () => Promise<Bundle | null>) => Promise<Bundle | null>;
6
5
  }
7
6
  declare const createRequestBundleResolver: () => RequestBundleResolver;
8
7
  //#endregion
9
- export { createRequestBundleResolver };
8
+ export { RequestBundleResolver, createRequestBundleResolver };
@@ -1,9 +1,8 @@
1
1
  import { Bundle } from "./types/index.mjs";
2
-
3
2
  //#region src/requestBundleCache.d.ts
4
3
  interface RequestBundleResolver {
5
4
  readonly getById: (bundleId: string, loadBundleById: () => Promise<Bundle | null>) => Promise<Bundle | null>;
6
5
  }
7
6
  declare const createRequestBundleResolver: () => RequestBundleResolver;
8
7
  //#endregion
9
- export { createRequestBundleResolver };
8
+ export { RequestBundleResolver, createRequestBundleResolver };
@@ -1,9 +1,10 @@
1
- const require_index = require("./node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.cjs");
1
+ const require_range_DvX_Y6iv = require("./node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/range-DvX-Y6iv.cjs");
2
+ const require_version_CQ98ZBpL = require("./node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/version-CQ98ZBpL.cjs");
2
3
  //#region src/semverSatisfies.ts
3
4
  const semverSatisfies = (targetAppVersion, currentVersion) => {
4
- const currentCoerce = require_index.coerce(currentVersion);
5
+ const currentCoerce = require_version_CQ98ZBpL.n(currentVersion);
5
6
  if (!currentCoerce) return false;
6
- return require_index.satisfies(currentCoerce, targetAppVersion);
7
+ return require_range_DvX_Y6iv.f(currentCoerce, targetAppVersion);
7
8
  };
8
9
  //#endregion
9
10
  exports.semverSatisfies = semverSatisfies;
@@ -1,4 +1,5 @@
1
- import { coerce, satisfies } from "./node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs";
1
+ import { f as satisfies } from "./node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/range-DvX-Y6iv.mjs";
2
+ import { n as coerce } from "./node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/version-CQ98ZBpL.mjs";
2
3
  //#region src/semverSatisfies.ts
3
4
  const semverSatisfies = (targetAppVersion, currentVersion) => {
4
5
  const currentCoerce = coerce(currentVersion);
@@ -39,7 +39,8 @@ const createStorageDownloadUrl = (signingKey) => {
39
39
  name: "HMAC"
40
40
  }, false, ["sign"]);
41
41
  return async ({ storageUri }) => {
42
- return { url: createStorageDownloadPath(storageUri, encodeBytes(new Uint8Array(await crypto.subtle.sign("HMAC", await key, new TextEncoder().encode(storageUri))))) };
42
+ const signature = encodeBytes(new Uint8Array(await crypto.subtle.sign("HMAC", await key, new TextEncoder().encode(storageUri))));
43
+ return { url: createStorageDownloadPath(storageUri, signature) };
43
44
  };
44
45
  };
45
46
  //#endregion
@@ -4,9 +4,7 @@ declare const parseStorageDownloadPath: (path: string) => {
4
4
  signature: string;
5
5
  storageUri: string;
6
6
  } | null;
7
- declare const createStorageDownloadUrl: (signingKey: string) => ({
8
- storageUri
9
- }: {
7
+ declare const createStorageDownloadUrl: (signingKey: string) => ({ storageUri }: {
10
8
  readonly storageUri: string;
11
9
  }) => Promise<{
12
10
  url: string;
@@ -4,9 +4,7 @@ declare const parseStorageDownloadPath: (path: string) => {
4
4
  signature: string;
5
5
  storageUri: string;
6
6
  } | null;
7
- declare const createStorageDownloadUrl: (signingKey: string) => ({
8
- storageUri
9
- }: {
7
+ declare const createStorageDownloadUrl: (signingKey: string) => ({ storageUri }: {
10
8
  readonly storageUri: string;
11
9
  }) => Promise<{
12
10
  url: string;
@@ -39,7 +39,8 @@ const createStorageDownloadUrl = (signingKey) => {
39
39
  name: "HMAC"
40
40
  }, false, ["sign"]);
41
41
  return async ({ storageUri }) => {
42
- return { url: createStorageDownloadPath(storageUri, encodeBytes(new Uint8Array(await crypto.subtle.sign("HMAC", await key, new TextEncoder().encode(storageUri))))) };
42
+ const signature = encodeBytes(new Uint8Array(await crypto.subtle.sign("HMAC", await key, new TextEncoder().encode(storageUri))));
43
+ return { url: createStorageDownloadPath(storageUri, signature) };
43
44
  };
44
45
  };
45
46
  //#endregion
@@ -1,4 +1,5 @@
1
- import { ApiKeyRow, BundleEventRow, BundleEventRowBase, BundlePatchRow, BundleRow, ChannelRow, DatabaseBundleMetadata, DatabaseField, DatabaseJsonObject, DatabaseJsonValue, DatabaseModel, DatabaseModelMap, DatabaseRow, ReleaseCatalogRow, ReleaseRow } from "./databaseRows.cjs";
2
- import { AnalyticsModel, AnalyticsScanCursor, AnalyticsScanInput, ApiKeyModel, BundleModel, BundleModelQuery, BundlePatchModel, BundleRepository, BundleRepositoryChange, BundleRepositoryCommit, ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelModel, DatabaseChange, DatabaseCommit, DatabaseCommitExpectation, DatabaseCommitResult, DatabaseModels, DatabasePlugin, ReleaseCatalogModel, ReleaseModel } from "./databasePlugin.cjs";
1
+ import { ApiKeyRow, BundleEventRow, BundleEventRowBase, BundlePatchRow, BundleRow, ChannelRow, DatabaseBundleEventMetadata, DatabaseBundleMetadata, DatabaseField, DatabaseJsonObject, DatabaseJsonValue, DatabaseModel, DatabaseModelMap, DatabaseRow, ReleaseCatalogRow, ReleaseRow } from "./databaseRows.cjs";
2
+ import { ApiKeyModel, BundleModel, BundleModelQuery, BundlePatchModel, BundleRepository, BundleRepositoryChange, BundleRepositoryCommit, ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelModel, DatabaseChange, DatabaseCommit, DatabaseCommitExpectation, DatabaseCommitResult, DatabaseModels, DatabasePlugin, InsightsBundleEventFilter, InsightsCountEventsInput, InsightsCountLatestEventsInput, InsightsEventCursor, InsightsEventFilter, InsightsFindLatestEventsInput, InsightsListEventsInput, InsightsModel, InsightsRecordEventInput, InsightsScope, ReleaseCatalogModel, ReleaseModel } from "./databasePlugin.cjs";
3
3
  import { DatabaseDistinctFields, DatabaseDistinctOn, DatabaseOrderBy, DatabaseSelect, DatabaseSortBy, DatabaseSortClause, DatabaseSortNulls, DatabaseStringComparisonMode, DatabaseWhere, DatabaseWhereConnector, DatabaseWhereOperator, SelectedDatabaseRow } from "./databaseQuery.cjs";
4
- import { ApiKeyRowUpdate, BundleRowUpdate, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseCapability, DatabaseDeleteModel, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseModelCapabilities, DatabaseModelsWithCapability, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRowUpdate, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, ReleaseCatalogRowUpdate, ReleaseRowUpdate, SelectedDatabaseInputRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel } from "./databaseOperations.cjs";
4
+ import { ApiKeyRowUpdate, BundleRowUpdate, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseCapability, DatabaseDeleteModel, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseModelCapabilities, DatabaseModelsWithCapability, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRowUpdate, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, ReleaseCatalogRowUpdate, ReleaseRowUpdate, SelectedDatabaseInputRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel } from "./databaseOperations.cjs";
5
+ export { ApiKeyModel, ApiKeyRow, ApiKeyRowUpdate, BundleEventRow, BundleEventRowBase, BundleModel, BundleModelQuery, BundlePatchModel, BundlePatchRow, BundleRepository, BundleRepositoryChange, BundleRepositoryCommit, BundleRow, BundleRowUpdate, ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelModel, ChannelRow, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseBundleEventMetadata, DatabaseBundleMetadata, DatabaseCapability, DatabaseChange, DatabaseCommit, DatabaseCommitExpectation, DatabaseCommitResult, DatabaseDeleteModel, DatabaseDistinctFields, DatabaseDistinctOn, DatabaseField, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseJsonObject, DatabaseJsonValue, DatabaseModel, DatabaseModelCapabilities, DatabaseModelMap, DatabaseModels, DatabaseModelsWithCapability, DatabaseOrderBy, DatabasePlugin, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRow, DatabaseRowUpdate, DatabaseSelect, DatabaseSortBy, DatabaseSortClause, DatabaseSortNulls, DatabaseStringComparisonMode, DatabaseWhere, DatabaseWhereConnector, DatabaseWhereOperator, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, InsightsBundleEventFilter, InsightsCountEventsInput, InsightsCountLatestEventsInput, InsightsEventCursor, InsightsEventFilter, InsightsFindLatestEventsInput, InsightsListEventsInput, InsightsModel, InsightsRecordEventInput, InsightsScope, ReleaseCatalogModel, ReleaseCatalogRow, ReleaseCatalogRowUpdate, ReleaseModel, ReleaseRow, ReleaseRowUpdate, SelectedDatabaseInputRow, SelectedDatabaseRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel };
@@ -1,4 +1,5 @@
1
- import { ApiKeyRow, BundleEventRow, BundleEventRowBase, BundlePatchRow, BundleRow, ChannelRow, DatabaseBundleMetadata, DatabaseField, DatabaseJsonObject, DatabaseJsonValue, DatabaseModel, DatabaseModelMap, DatabaseRow, ReleaseCatalogRow, ReleaseRow } from "./databaseRows.mjs";
2
- import { AnalyticsModel, AnalyticsScanCursor, AnalyticsScanInput, ApiKeyModel, BundleModel, BundleModelQuery, BundlePatchModel, BundleRepository, BundleRepositoryChange, BundleRepositoryCommit, ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelModel, DatabaseChange, DatabaseCommit, DatabaseCommitExpectation, DatabaseCommitResult, DatabaseModels, DatabasePlugin, ReleaseCatalogModel, ReleaseModel } from "./databasePlugin.mjs";
1
+ import { ApiKeyRow, BundleEventRow, BundleEventRowBase, BundlePatchRow, BundleRow, ChannelRow, DatabaseBundleEventMetadata, DatabaseBundleMetadata, DatabaseField, DatabaseJsonObject, DatabaseJsonValue, DatabaseModel, DatabaseModelMap, DatabaseRow, ReleaseCatalogRow, ReleaseRow } from "./databaseRows.mjs";
2
+ import { ApiKeyModel, BundleModel, BundleModelQuery, BundlePatchModel, BundleRepository, BundleRepositoryChange, BundleRepositoryCommit, ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelModel, DatabaseChange, DatabaseCommit, DatabaseCommitExpectation, DatabaseCommitResult, DatabaseModels, DatabasePlugin, InsightsBundleEventFilter, InsightsCountEventsInput, InsightsCountLatestEventsInput, InsightsEventCursor, InsightsEventFilter, InsightsFindLatestEventsInput, InsightsListEventsInput, InsightsModel, InsightsRecordEventInput, InsightsScope, ReleaseCatalogModel, ReleaseModel } from "./databasePlugin.mjs";
3
3
  import { DatabaseDistinctFields, DatabaseDistinctOn, DatabaseOrderBy, DatabaseSelect, DatabaseSortBy, DatabaseSortClause, DatabaseSortNulls, DatabaseStringComparisonMode, DatabaseWhere, DatabaseWhereConnector, DatabaseWhereOperator, SelectedDatabaseRow } from "./databaseQuery.mjs";
4
- import { ApiKeyRowUpdate, BundleRowUpdate, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseCapability, DatabaseDeleteModel, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseModelCapabilities, DatabaseModelsWithCapability, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRowUpdate, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, ReleaseCatalogRowUpdate, ReleaseRowUpdate, SelectedDatabaseInputRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel } from "./databaseOperations.mjs";
4
+ import { ApiKeyRowUpdate, BundleRowUpdate, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseCapability, DatabaseDeleteModel, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseModelCapabilities, DatabaseModelsWithCapability, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRowUpdate, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, ReleaseCatalogRowUpdate, ReleaseRowUpdate, SelectedDatabaseInputRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel } from "./databaseOperations.mjs";
5
+ export { ApiKeyModel, ApiKeyRow, ApiKeyRowUpdate, BundleEventRow, BundleEventRowBase, BundleModel, BundleModelQuery, BundlePatchModel, BundlePatchRow, BundleRepository, BundleRepositoryChange, BundleRepositoryCommit, BundleRow, BundleRowUpdate, ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelModel, ChannelRow, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseBundleEventMetadata, DatabaseBundleMetadata, DatabaseCapability, DatabaseChange, DatabaseCommit, DatabaseCommitExpectation, DatabaseCommitResult, DatabaseDeleteModel, DatabaseDistinctFields, DatabaseDistinctOn, DatabaseField, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseJsonObject, DatabaseJsonValue, DatabaseModel, DatabaseModelCapabilities, DatabaseModelMap, DatabaseModels, DatabaseModelsWithCapability, DatabaseOrderBy, DatabasePlugin, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRow, DatabaseRowUpdate, DatabaseSelect, DatabaseSortBy, DatabaseSortClause, DatabaseSortNulls, DatabaseStringComparisonMode, DatabaseWhere, DatabaseWhereConnector, DatabaseWhereOperator, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, InsightsBundleEventFilter, InsightsCountEventsInput, InsightsCountLatestEventsInput, InsightsEventCursor, InsightsEventFilter, InsightsFindLatestEventsInput, InsightsListEventsInput, InsightsModel, InsightsRecordEventInput, InsightsScope, ReleaseCatalogModel, ReleaseCatalogRow, ReleaseCatalogRowUpdate, ReleaseModel, ReleaseRow, ReleaseRowUpdate, SelectedDatabaseInputRow, SelectedDatabaseRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel };
@@ -64,7 +64,6 @@ const databaseFields = {
64
64
  "type",
65
65
  "install_id",
66
66
  "user_id",
67
- "username",
68
67
  "from_bundle_id",
69
68
  "from_release_id",
70
69
  "to_release_id",
@@ -72,10 +71,7 @@ const databaseFields = {
72
71
  "platform",
73
72
  "app_version",
74
73
  "channel",
75
- "cohort",
76
- "update_strategy",
77
- "fingerprint_hash",
78
- "sdk_version",
74
+ "metadata",
79
75
  "received_at_ms"
80
76
  ],
81
77
  api_keys: [
@@ -5,7 +5,7 @@ declare const databaseFields: {
5
5
  readonly releases: readonly ["id", "revision", "scope_key", "channel_id", "platform", "kind", "bundle_id", "strategy", "target_app_version", "fingerprint_hash", "enabled", "should_force_update", "message", "rollout_cohort_count", "target_cohorts", "operation", "source_release_id", "created_at_ms", "updated_at_ms"];
6
6
  readonly release_catalogs: readonly ["scope_key", "catalog_id", "strategy", "channel_id", "channel_key", "platform", "fingerprint_hash", "generation", "payload", "catalog_hash", "byte_size", "is_tombstone", "updated_at_ms"];
7
7
  readonly channels: readonly ["id", "name"];
8
- readonly bundle_events: readonly ["id", "type", "install_id", "user_id", "username", "from_bundle_id", "from_release_id", "to_release_id", "to_bundle_id", "platform", "app_version", "channel", "cohort", "update_strategy", "fingerprint_hash", "sdk_version", "received_at_ms"];
8
+ readonly bundle_events: readonly ["id", "type", "install_id", "user_id", "from_bundle_id", "from_release_id", "to_release_id", "to_bundle_id", "platform", "app_version", "channel", "metadata", "received_at_ms"];
9
9
  readonly api_keys: readonly ["id", "hash", "name", "prefix", "role", "created_at_ms", "revoked_at_ms"];
10
10
  };
11
11
  //#endregion
@@ -5,7 +5,7 @@ declare const databaseFields: {
5
5
  readonly releases: readonly ["id", "revision", "scope_key", "channel_id", "platform", "kind", "bundle_id", "strategy", "target_app_version", "fingerprint_hash", "enabled", "should_force_update", "message", "rollout_cohort_count", "target_cohorts", "operation", "source_release_id", "created_at_ms", "updated_at_ms"];
6
6
  readonly release_catalogs: readonly ["scope_key", "catalog_id", "strategy", "channel_id", "channel_key", "platform", "fingerprint_hash", "generation", "payload", "catalog_hash", "byte_size", "is_tombstone", "updated_at_ms"];
7
7
  readonly channels: readonly ["id", "name"];
8
- readonly bundle_events: readonly ["id", "type", "install_id", "user_id", "username", "from_bundle_id", "from_release_id", "to_release_id", "to_bundle_id", "platform", "app_version", "channel", "cohort", "update_strategy", "fingerprint_hash", "sdk_version", "received_at_ms"];
8
+ readonly bundle_events: readonly ["id", "type", "install_id", "user_id", "from_bundle_id", "from_release_id", "to_release_id", "to_bundle_id", "platform", "app_version", "channel", "metadata", "received_at_ms"];
9
9
  readonly api_keys: readonly ["id", "hash", "name", "prefix", "role", "created_at_ms", "revoked_at_ms"];
10
10
  };
11
11
  //#endregion
@@ -64,7 +64,6 @@ const databaseFields = {
64
64
  "type",
65
65
  "install_id",
66
66
  "user_id",
67
- "username",
68
67
  "from_bundle_id",
69
68
  "from_release_id",
70
69
  "to_release_id",
@@ -72,10 +71,7 @@ const databaseFields = {
72
71
  "platform",
73
72
  "app_version",
74
73
  "channel",
75
- "cohort",
76
- "update_strategy",
77
- "fingerprint_hash",
78
- "sdk_version",
74
+ "metadata",
79
75
  "received_at_ms"
80
76
  ],
81
77
  api_keys: [
@@ -1,7 +1,6 @@
1
1
  import { ApiKeyRow, BundleRow, DatabaseModel, DatabaseRow, ReleaseCatalogRow, ReleaseRow } from "./databaseRows.cjs";
2
- import { ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, DatabaseCommit, DatabaseCommitResult } from "./databasePlugin.cjs";
2
+ import { ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, DatabaseCommit, DatabaseCommitResult, InsightsModel, InsightsRecordEventInput } from "./databasePlugin.cjs";
3
3
  import { DatabaseDistinctFields, DatabaseDistinctOn, DatabaseOrderBy, DatabaseSelect, DatabaseWhere, SelectedDatabaseRow } from "./databaseQuery.cjs";
4
-
5
4
  //#region src/types/databaseOperations.d.ts
6
5
  type DatabaseCapability = "create" | "update" | "delete" | "count" | "findOne" | "findMany";
7
6
  type DatabaseModelCapabilities = {
@@ -49,7 +48,7 @@ type DatabaseModelCapabilities = {
49
48
  readonly create: true;
50
49
  readonly update: false;
51
50
  readonly delete: false;
52
- readonly count: false;
51
+ readonly count: true;
53
52
  readonly findOne: false;
54
53
  readonly findMany: true;
55
54
  };
@@ -62,7 +61,7 @@ type DatabaseModelCapabilities = {
62
61
  readonly findMany: true;
63
62
  };
64
63
  };
65
- type DatabaseModelsWithCapability<TCapability extends DatabaseCapability> = { readonly [TModel in DatabaseModel]: DatabaseModelCapabilities[TModel][TCapability] extends true ? TModel : never }[DatabaseModel];
64
+ type DatabaseModelsWithCapability<TCapability extends DatabaseCapability> = { readonly [TModel in DatabaseModel]: DatabaseModelCapabilities[TModel][TCapability] extends true ? TModel : never; }[DatabaseModel];
66
65
  type CreateDatabaseModel = DatabaseModelsWithCapability<"create">;
67
66
  type UpdateDatabaseModel = DatabaseModelsWithCapability<"update">;
68
67
  type DeleteDatabaseModel = DatabaseModelsWithCapability<"delete">;
@@ -135,19 +134,19 @@ interface DatabasePluginCrud {
135
134
  findOne<TInput extends FindOneDatabaseImplementationInput>(input: TInput): Promise<SelectedDatabaseInputRow<TInput> | null>;
136
135
  findMany<TInput extends FindManyDatabasePluginInput>(input: TInput): Promise<SelectedDatabaseInputRow<TInput>[]>;
137
136
  }
138
- type DatabaseImplementationResult = { readonly [TModel in DatabaseModel]: Partial<DatabaseRow<TModel>> }[DatabaseModel];
139
- type CreateDatabaseImplementationInput = { readonly [TModel in CreateDatabaseModel]: CreateDatabaseInput<TModel, DatabaseSelect<TModel> | undefined> }[CreateDatabaseModel];
140
- type UpdateDatabaseImplementationInput = { readonly [TModel in UpdateDatabaseModel]: UpdateDatabaseInput<TModel, DatabaseSelect<TModel> | undefined> }[UpdateDatabaseModel];
141
- type DeleteDatabaseImplementationInput = { readonly [TModel in DeleteDatabaseModel]: DeleteDatabaseInput<TModel> }[DeleteDatabaseModel];
142
- type CountDatabaseImplementationInput = { readonly [TModel in CountDatabaseModel]: CountDatabaseInput<TModel> }[CountDatabaseModel];
137
+ type DatabaseImplementationResult = { readonly [TModel in DatabaseModel]: Partial<DatabaseRow<TModel>>; }[DatabaseModel];
138
+ type CreateDatabaseImplementationInput = { readonly [TModel in CreateDatabaseModel]: CreateDatabaseInput<TModel, DatabaseSelect<TModel> | undefined>; }[CreateDatabaseModel];
139
+ type UpdateDatabaseImplementationInput = { readonly [TModel in UpdateDatabaseModel]: UpdateDatabaseInput<TModel, DatabaseSelect<TModel> | undefined>; }[UpdateDatabaseModel];
140
+ type DeleteDatabaseImplementationInput = { readonly [TModel in DeleteDatabaseModel]: DeleteDatabaseInput<TModel>; }[DeleteDatabaseModel];
141
+ type CountDatabaseImplementationInput = { readonly [TModel in CountDatabaseModel]: CountDatabaseInput<TModel>; }[CountDatabaseModel];
143
142
  type UpdateBundleDatabaseImplementationInput = UpdateDatabaseInput<"bundles", DatabaseSelect<"bundles"> | undefined>;
144
143
  type CountBundlesDatabaseImplementationInput = CountDatabaseInput<"bundles">;
145
- type FindOneDatabaseImplementationInput = { readonly [TModel in FindOneDatabaseModel]: FindOneDatabaseInput<TModel, DatabaseSelect<TModel> | undefined> }[FindOneDatabaseModel];
144
+ type FindOneDatabaseImplementationInput = { readonly [TModel in FindOneDatabaseModel]: FindOneDatabaseInput<TModel, DatabaseSelect<TModel> | undefined>; }[FindOneDatabaseModel];
146
145
  type FindManyDatabaseImplementationInput = { readonly [TModel in FindManyDatabaseModel]: Omit<FindManyDatabaseInput<TModel, DatabaseSelect<TModel> | undefined>, "limit" | "offset"> & {
147
146
  readonly limit: number;
148
147
  readonly offset: number;
149
- } }[FindManyDatabaseModel];
150
- type FindManyDatabasePluginInput = { readonly [TModel in FindManyDatabaseModel]: FindManyDatabaseInput<TModel, DatabaseSelect<TModel> | undefined> }[FindManyDatabaseModel];
148
+ }; }[FindManyDatabaseModel];
149
+ type FindManyDatabasePluginInput = { readonly [TModel in FindManyDatabaseModel]: FindManyDatabaseInput<TModel, DatabaseSelect<TModel> | undefined>; }[FindManyDatabaseModel];
151
150
  interface TransactionDatabasePluginImplementation {
152
151
  create(input: CreateDatabaseImplementationInput): Promise<DatabaseImplementationResult>;
153
152
  update(input: UpdateDatabaseImplementationInput): Promise<DatabaseImplementationResult | null>;
@@ -157,6 +156,10 @@ interface TransactionDatabasePluginImplementation {
157
156
  findMany(input: FindManyDatabaseImplementationInput): Promise<readonly DatabaseImplementationResult[]>;
158
157
  }
159
158
  interface DatabasePluginImplementation {
159
+ findLatestInsightsEvents: InsightsModel["findLatestEvents"];
160
+ countLatestInsightsEvents: InsightsModel["countLatestEvents"];
161
+ /** Native immutable event insert; any private index is advanced atomically. */
162
+ recordInsights(input: InsightsRecordEventInput): Promise<void>;
160
163
  create(input: CreateDatabaseImplementationInput): Promise<DatabaseImplementationResult>;
161
164
  update(input: UpdateDatabaseImplementationInput): Promise<DatabaseImplementationResult | null>;
162
165
  delete(input: DeleteDatabaseImplementationInput): Promise<void>;