@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.
- package/dist/_virtual/_rolldown/runtime.cjs +1 -1
- package/dist/assetStorageLayout.cjs +4 -2
- package/dist/assetStorageLayout.d.cts +5 -24
- package/dist/assetStorageLayout.d.mts +5 -24
- package/dist/assetStorageLayout.mjs +4 -2
- package/dist/calculatePagination.d.cts +0 -1
- package/dist/calculatePagination.d.mts +0 -1
- package/dist/compressionFormat.cjs +12 -5
- package/dist/compressionFormat.d.cts +1 -1
- package/dist/compressionFormat.d.mts +1 -1
- package/dist/compressionFormat.mjs +11 -4
- package/dist/contentAddressedAssets.d.cts +1 -4
- package/dist/contentAddressedAssets.d.mts +1 -4
- package/dist/createDatabasePlugin.cjs +116 -42
- package/dist/createDatabasePlugin.d.cts +3 -1
- package/dist/createDatabasePlugin.d.mts +3 -1
- package/dist/createDatabasePlugin.mjs +116 -43
- package/dist/createStoragePlugin.d.cts +0 -1
- package/dist/createStoragePlugin.d.mts +0 -1
- package/dist/databaseClient.cjs +6 -1
- package/dist/databaseClient.d.cts +1 -2
- package/dist/databaseClient.d.mts +1 -2
- package/dist/databaseClient.mjs +6 -2
- package/dist/databaseClientReads.cjs +3 -1
- package/dist/databaseClientReads.mjs +3 -2
- package/dist/databaseClientUpdates.cjs +2 -1
- package/dist/databaseClientUpdates.d.cts +1 -1
- package/dist/databaseClientUpdates.d.mts +1 -1
- package/dist/databaseClientUpdates.mjs +2 -0
- package/dist/databaseJsonValue.cjs +4 -0
- package/dist/databaseJsonValue.d.cts +4 -2
- package/dist/databaseJsonValue.d.mts +4 -2
- package/dist/databaseJsonValue.mjs +2 -1
- package/dist/databaseMetadata.cjs +0 -1
- package/dist/databasePluginCrud.cjs +1 -0
- package/dist/databasePluginCrud.d.cts +4 -1
- package/dist/databasePluginCrud.d.mts +4 -1
- package/dist/databasePluginCrud.mjs +1 -1
- package/dist/databasePluginCrudValidation.d.cts +6 -1
- package/dist/databasePluginCrudValidation.d.mts +6 -1
- package/dist/databasePluginCrudValidationErrors.cjs +1 -0
- package/dist/databasePluginCrudValidationErrors.mjs +1 -0
- package/dist/databasePluginCrudValidationFields.cjs +21 -19
- package/dist/databasePluginCrudValidationFields.d.cts +1 -1
- package/dist/databasePluginCrudValidationFields.d.mts +1 -1
- package/dist/databasePluginCrudValidationFields.mjs +20 -20
- package/dist/databasePluginCrudValidationMutations.cjs +1 -1
- package/dist/databasePluginCrudValidationMutations.d.cts +1 -1
- package/dist/databasePluginCrudValidationMutations.d.mts +1 -1
- package/dist/databasePluginCrudValidationMutations.mjs +1 -1
- package/dist/databasePluginCrudValidationQueries.d.cts +2 -1
- package/dist/databasePluginCrudValidationQueries.d.mts +2 -1
- package/dist/databasePluginCrudValidationRows.cjs +2 -2
- package/dist/databasePluginCrudValidationRows.d.cts +1 -1
- package/dist/databasePluginCrudValidationRows.d.mts +1 -1
- package/dist/databasePluginCrudValidationRows.mjs +2 -2
- package/dist/databaseRows.cjs +0 -1
- package/dist/databaseRows.d.cts +2 -6
- package/dist/databaseRows.d.mts +2 -6
- package/dist/index.cjs +4 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.mts +5 -4
- package/dist/index.mjs +3 -2
- package/dist/insightsContract.cjs +146 -0
- package/dist/insightsContract.d.cts +9 -0
- package/dist/insightsContract.d.mts +9 -0
- package/dist/insightsContract.mjs +143 -0
- package/dist/insightsLatestQueries.cjs +53 -0
- package/dist/insightsLatestQueries.d.cts +13 -0
- package/dist/insightsLatestQueries.d.mts +13 -0
- package/dist/insightsLatestQueries.mjs +52 -0
- package/dist/internal.cjs +3 -0
- package/dist/internal.d.cts +5 -3
- package/dist/internal.d.mts +5 -3
- package/dist/internal.mjs +2 -1
- package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/comparison-DenM3wCn.cjs +136 -0
- package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/comparison-DenM3wCn.mjs +116 -0
- package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/range-DvX-Y6iv.cjs +167 -0
- package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/range-DvX-Y6iv.mjs +165 -0
- package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/set-CC5YeoYX.cjs +42 -0
- package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/set-CC5YeoYX.mjs +39 -0
- package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/version-CQ98ZBpL.cjs +39 -0
- package/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/version-CQ98ZBpL.mjs +37 -0
- package/dist/paginateBundles.d.cts +1 -8
- package/dist/paginateBundles.d.mts +1 -8
- package/dist/parseStorageUri.d.cts +1 -5
- package/dist/parseStorageUri.d.mts +1 -5
- package/dist/queryBundles.d.cts +0 -1
- package/dist/queryBundles.d.mts +0 -1
- package/dist/releaseCatalogCompiler.cjs +15 -12
- package/dist/releaseCatalogCompiler.d.cts +0 -1
- package/dist/releaseCatalogCompiler.d.mts +0 -1
- package/dist/releaseCatalogCompiler.mjs +11 -7
- package/dist/releaseCatalogMutation.cjs +1 -1
- package/dist/releaseCatalogMutation.d.cts +1 -1
- package/dist/releaseCatalogMutation.d.mts +1 -1
- package/dist/releaseCatalogMutation.mjs +1 -0
- package/dist/releaseManagement.cjs +3 -2
- package/dist/releaseManagement.d.cts +1 -1
- package/dist/releaseManagement.d.mts +1 -1
- package/dist/releaseManagement.mjs +3 -1
- package/dist/remoteBundleSigning.cjs +5 -7
- package/dist/remoteBundleSigning.d.cts +2 -15
- package/dist/remoteBundleSigning.d.mts +2 -15
- package/dist/remoteBundleSigning.mjs +5 -7
- package/dist/requestBundleCache.d.cts +1 -2
- package/dist/requestBundleCache.d.mts +1 -2
- package/dist/semverSatisfies.cjs +4 -3
- package/dist/semverSatisfies.mjs +2 -1
- package/dist/storageDownloadPath.cjs +2 -1
- package/dist/storageDownloadPath.d.cts +1 -3
- package/dist/storageDownloadPath.d.mts +1 -3
- package/dist/storageDownloadPath.mjs +2 -1
- package/dist/types/database.d.cts +4 -3
- package/dist/types/database.d.mts +4 -3
- package/dist/types/databaseFields.cjs +1 -5
- package/dist/types/databaseFields.d.cts +1 -1
- package/dist/types/databaseFields.d.mts +1 -1
- package/dist/types/databaseFields.mjs +1 -5
- package/dist/types/databaseOperations.d.cts +15 -12
- package/dist/types/databaseOperations.d.mts +15 -12
- package/dist/types/databasePlugin.d.cts +77 -13
- package/dist/types/databasePlugin.d.mts +77 -13
- package/dist/types/databaseQuery.d.cts +2 -3
- package/dist/types/databaseQuery.d.mts +2 -3
- package/dist/types/databaseRows.d.cts +16 -11
- package/dist/types/databaseRows.d.mts +16 -11
- package/dist/types/index.d.cts +15 -11
- package/dist/types/index.d.mts +15 -11
- package/dist/types/internal.d.cts +4 -3
- package/dist/types/internal.d.mts +4 -3
- package/dist/types/public.d.cts +4 -3
- package/dist/types/public.d.mts +4 -3
- package/dist/types/utils.d.cts +1 -1
- package/dist/types/utils.d.mts +1 -1
- package/dist/uuidv7.cjs +7 -2
- package/dist/uuidv7.d.cts +0 -1
- package/dist/uuidv7.d.mts +0 -1
- package/dist/uuidv7.mjs +1 -1
- package/package.json +4 -4
- package/dist/node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.cjs +0 -345
- package/dist/node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs +0 -341
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { isUUIDv7 as isUUIDv7$1 } from "./uuidv7.mjs";
|
|
2
|
-
import {
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
8
|
-
const RESPONSE_BODY_LIMIT =
|
|
9
|
-
const SIGNATURE_BYTES_LIMIT =
|
|
10
|
-
const TOKEN_BYTES_LIMIT =
|
|
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,
|
|
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 =
|
|
8
|
-
const RESPONSE_BODY_LIMIT =
|
|
9
|
-
const SIGNATURE_BYTES_LIMIT =
|
|
10
|
-
const TOKEN_BYTES_LIMIT =
|
|
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,
|
|
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 };
|
package/dist/semverSatisfies.cjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
const
|
|
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 =
|
|
5
|
+
const currentCoerce = require_version_CQ98ZBpL.n(currentVersion);
|
|
5
6
|
if (!currentCoerce) return false;
|
|
6
|
-
return
|
|
7
|
+
return require_range_DvX_Y6iv.f(currentCoerce, targetAppVersion);
|
|
7
8
|
};
|
|
8
9
|
//#endregion
|
|
9
10
|
exports.semverSatisfies = semverSatisfies;
|
package/dist/semverSatisfies.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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
|
-
"
|
|
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", "
|
|
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", "
|
|
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
|
-
"
|
|
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:
|
|
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
|
|
139
|
-
type CreateDatabaseImplementationInput = { readonly [TModel in CreateDatabaseModel]: CreateDatabaseInput<TModel, DatabaseSelect<TModel> | undefined
|
|
140
|
-
type UpdateDatabaseImplementationInput = { readonly [TModel in UpdateDatabaseModel]: UpdateDatabaseInput<TModel, DatabaseSelect<TModel> | undefined
|
|
141
|
-
type DeleteDatabaseImplementationInput = { readonly [TModel in DeleteDatabaseModel]: DeleteDatabaseInput<TModel
|
|
142
|
-
type CountDatabaseImplementationInput = { readonly [TModel in CountDatabaseModel]: CountDatabaseInput<TModel
|
|
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
|
|
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
|
|
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>;
|