@hot-updater/cloudflare 1.0.0-rc.45 → 1.0.0-rc.46
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/package.json +6 -8
- package/src/worker/d1Database.ts +0 -4
- package/worker/dist/README.md +1 -1
- package/worker/dist/index.js +47 -53
- package/worker/dist/index.js.map +4 -4
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hot-updater/cloudflare",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.0-rc.
|
|
4
|
+
"version": "1.0.0-rc.46",
|
|
5
5
|
"description": "React Native OTA solution for self-hosted",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
7
7
|
"module": "dist/index.mjs",
|
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
"require": "./dist/worker/index.cjs",
|
|
22
22
|
"default": "./dist/worker/index.mjs"
|
|
23
23
|
},
|
|
24
|
-
"./worker/config": "./worker/wrangler.json",
|
|
25
|
-
"./worker/wrangler.json": "./worker/wrangler.json",
|
|
26
24
|
"./package.json": "./package.json"
|
|
27
25
|
},
|
|
28
26
|
"license": "MIT",
|
|
@@ -57,10 +55,10 @@
|
|
|
57
55
|
"cloudflare": "4.2.0",
|
|
58
56
|
"hono": "4.12.34",
|
|
59
57
|
"uuidv7": "^1.0.2",
|
|
60
|
-
"@hot-updater/cli-tools": "1.0.0-rc.
|
|
61
|
-
"@hot-updater/plugin-core": "1.0.0-rc.
|
|
62
|
-
"@hot-updater/
|
|
63
|
-
"@hot-updater/
|
|
58
|
+
"@hot-updater/cli-tools": "1.0.0-rc.46",
|
|
59
|
+
"@hot-updater/plugin-core": "1.0.0-rc.46",
|
|
60
|
+
"@hot-updater/server": "1.0.0-rc.46",
|
|
61
|
+
"@hot-updater/protocol": "1.0.0-rc.46"
|
|
64
62
|
},
|
|
65
63
|
"devDependencies": {
|
|
66
64
|
"@cloudflare/vitest-pool-workers": "0.13.0",
|
|
@@ -76,7 +74,7 @@
|
|
|
76
74
|
"vitest": "4.1.4",
|
|
77
75
|
"wrangler": "^4.69.0",
|
|
78
76
|
"xdg-app-paths": "^8.3.0",
|
|
79
|
-
"@hot-updater/test-utils": "1.0.0-rc.
|
|
77
|
+
"@hot-updater/test-utils": "1.0.0-rc.46"
|
|
80
78
|
},
|
|
81
79
|
"scripts": {
|
|
82
80
|
"build": "tsdown && pnpm build:worker",
|
package/src/worker/d1Database.ts
CHANGED
|
@@ -20,10 +20,6 @@ export type D1Like = {
|
|
|
20
20
|
batch(statements: D1BoundStatement[]): Promise<readonly D1ResultLike[]>;
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
export interface CloudflareWorkerDatabaseEnv {
|
|
24
|
-
readonly DB: D1Like;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
23
|
/** Hot Updater's database on a D1 binding, inside a Worker. */
|
|
28
24
|
export const d1Database = (database: D1Like): EngineDatabase =>
|
|
29
25
|
createD1Database({
|
package/worker/dist/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
This folder contains the built output assets for the worker "hot-updater" generated at 2026-10-
|
|
1
|
+
This folder contains the built output assets for the worker "hot-updater" generated at 2026-10-10T12:49:43.766Z.
|
package/worker/dist/index.js
CHANGED
|
@@ -207,6 +207,13 @@ var isDatabaseJsonValue = /* @__PURE__ */ __name((value) => {
|
|
|
207
207
|
var isDatabaseJsonObject = /* @__PURE__ */ __name((value) => typeof value === "object" && value !== null && !Array.isArray(value) && isDatabaseJsonValue(value), "isDatabaseJsonObject");
|
|
208
208
|
var isDatabaseMetadataObject = /* @__PURE__ */ __name((value) => isDatabaseJsonObject(value) && (!Object.hasOwn(value, "app_version") || typeof value["app_version"] === "string"), "isDatabaseMetadataObject");
|
|
209
209
|
|
|
210
|
+
// ../plugin-core/dist/databaseMetadata.mjs
|
|
211
|
+
var bundleMetadataToRow = /* @__PURE__ */ __name((metadata) => {
|
|
212
|
+
if (metadata === void 0) return {};
|
|
213
|
+
if (!isDatabaseMetadataObject(metadata)) throw new DatabaseAdapterInputError("invalid-data");
|
|
214
|
+
return metadata;
|
|
215
|
+
}, "bundleMetadataToRow");
|
|
216
|
+
|
|
210
217
|
// ../../packages/protocol/dist/index.mjs
|
|
211
218
|
var LETTER_DASH_NUMBER = "[a-zA-Z0-9-]";
|
|
212
219
|
var NUMERIC_IDENTIFIER = String.raw`0|[1-9]\d*`;
|
|
@@ -323,7 +330,6 @@ function canonicalizeAppVersion(appVersion) {
|
|
|
323
330
|
return version2 ? normalizeFull(version2) : null;
|
|
324
331
|
}
|
|
325
332
|
__name(canonicalizeAppVersion, "canonicalizeAppVersion");
|
|
326
|
-
var stripBundleArtifactMetadata = /* @__PURE__ */ __name((metadata) => metadata, "stripBundleArtifactMetadata");
|
|
327
333
|
var getManifestStorageUri = /* @__PURE__ */ __name((bundle) => bundle.manifestStorageUri, "getManifestStorageUri");
|
|
328
334
|
var getManifestFileHash = /* @__PURE__ */ __name((bundle) => bundle.manifestFileHash, "getManifestFileHash");
|
|
329
335
|
var getAssetBaseStorageUri = /* @__PURE__ */ __name((bundle) => bundle.assetBaseStorageUri, "getAssetBaseStorageUri");
|
|
@@ -599,14 +605,6 @@ var UUID_V7_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[
|
|
|
599
605
|
var isUUIDv7 = /* @__PURE__ */ __name((value) => typeof value === "string" && UUID_V7_PATTERN.test(value), "isUUIDv7");
|
|
600
606
|
var ARTIFACT_PROTOCOL_VERSION = 1;
|
|
601
607
|
|
|
602
|
-
// ../plugin-core/dist/databaseMetadata.mjs
|
|
603
|
-
var bundleMetadataToRow = /* @__PURE__ */ __name((metadata) => {
|
|
604
|
-
const value = stripBundleArtifactMetadata(metadata);
|
|
605
|
-
if (value === void 0) return {};
|
|
606
|
-
if (!isDatabaseMetadataObject(value)) throw new DatabaseAdapterInputError("invalid-data");
|
|
607
|
-
return value;
|
|
608
|
-
}, "bundleMetadataToRow");
|
|
609
|
-
|
|
610
608
|
// ../plugin-core/dist/databaseRows.mjs
|
|
611
609
|
var releaseRowToRelease = /* @__PURE__ */ __name((row) => ({
|
|
612
610
|
id: row.id,
|
|
@@ -664,7 +662,7 @@ var rowToBundle = /* @__PURE__ */ __name((row, patchRows = []) => {
|
|
|
664
662
|
id: row.id,
|
|
665
663
|
platform: row.platform,
|
|
666
664
|
gitCommitHash: row.git_commit_hash,
|
|
667
|
-
metadata:
|
|
665
|
+
metadata: row.metadata,
|
|
668
666
|
manifestStorageUri: row.manifest_storage_uri,
|
|
669
667
|
manifestFileHash: row.manifest_file_hash,
|
|
670
668
|
assetBaseStorageUri: row.asset_base_storage_uri,
|
|
@@ -672,6 +670,36 @@ var rowToBundle = /* @__PURE__ */ __name((row, patchRows = []) => {
|
|
|
672
670
|
};
|
|
673
671
|
}, "rowToBundle");
|
|
674
672
|
|
|
673
|
+
// ../plugin-core/dist/uuidv7.mjs
|
|
674
|
+
var extractTimestampFromUUIDv7 = /* @__PURE__ */ __name((uuid) => {
|
|
675
|
+
if (!isUUIDv7(uuid)) throw new TypeError("Expected a canonical lowercase UUIDv7");
|
|
676
|
+
const timestampHex = uuid.split("-").join("").slice(0, 12);
|
|
677
|
+
return Number.parseInt(timestampHex, 16);
|
|
678
|
+
}, "extractTimestampFromUUIDv7");
|
|
679
|
+
function createUUIDv7FromTimestampHex(timestampHex) {
|
|
680
|
+
const randomBytes = /* @__PURE__ */ new Uint8Array(10);
|
|
681
|
+
crypto.getRandomValues(randomBytes);
|
|
682
|
+
const randomHex = Array.from(randomBytes).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
683
|
+
const randA = randomHex.slice(0, 3);
|
|
684
|
+
const randBHex = randomHex.slice(3, 19);
|
|
685
|
+
const versionAndRandA = `7${randA}`;
|
|
686
|
+
const variantAndFirstRandB = (128 | parseInt(randBHex.slice(0, 2), 16) & 63).toString(16).padStart(2, "0");
|
|
687
|
+
return [
|
|
688
|
+
timestampHex.slice(0, 8),
|
|
689
|
+
timestampHex.slice(8, 12),
|
|
690
|
+
versionAndRandA,
|
|
691
|
+
variantAndFirstRandB + randBHex.slice(2, 4),
|
|
692
|
+
randBHex.slice(4, 16)
|
|
693
|
+
].join("-");
|
|
694
|
+
}
|
|
695
|
+
__name(createUUIDv7FromTimestampHex, "createUUIDv7FromTimestampHex");
|
|
696
|
+
var createUUIDv7 = /* @__PURE__ */ __name(() => createUUIDv7FromTimestampHex(Date.now().toString(16).padStart(12, "0")), "createUUIDv7");
|
|
697
|
+
var createUUIDv7After = /* @__PURE__ */ __name((floor, nowMs = Date.now()) => {
|
|
698
|
+
const timestamp = Math.max(nowMs, floor === null ? 0 : extractTimestampFromUUIDv7(floor) + 1);
|
|
699
|
+
if (!Number.isSafeInteger(timestamp) || timestamp < 0 || timestamp >= 2 ** 48) throw new RangeError("UUIDv7 timestamp is out of range");
|
|
700
|
+
return createUUIDv7FromTimestampHex(timestamp.toString(16).padStart(12, "0"));
|
|
701
|
+
}, "createUUIDv7After");
|
|
702
|
+
|
|
675
703
|
// ../plugin-core/dist/node_modules/.pnpm/verkit@0.4.0/node_modules/verkit/dist/comparison-DenM3wCn.mjs
|
|
676
704
|
var LETTER_DASH_NUMBER2 = "[a-zA-Z0-9-]";
|
|
677
705
|
var NUMERIC_IDENTIFIER2 = String.raw`0|[1-9]\d*`;
|
|
@@ -1063,43 +1091,6 @@ function coerce2(value, options = {}) {
|
|
|
1063
1091
|
}
|
|
1064
1092
|
__name(coerce2, "coerce");
|
|
1065
1093
|
|
|
1066
|
-
// ../plugin-core/dist/semverSatisfies.mjs
|
|
1067
|
-
var semverSatisfies = /* @__PURE__ */ __name((targetAppVersion, currentVersion) => {
|
|
1068
|
-
const currentCoerce = coerce2(currentVersion);
|
|
1069
|
-
if (!currentCoerce) return false;
|
|
1070
|
-
return satisfies(currentCoerce, targetAppVersion);
|
|
1071
|
-
}, "semverSatisfies");
|
|
1072
|
-
|
|
1073
|
-
// ../plugin-core/dist/uuidv7.mjs
|
|
1074
|
-
var extractTimestampFromUUIDv7 = /* @__PURE__ */ __name((uuid) => {
|
|
1075
|
-
if (!isUUIDv7(uuid)) throw new TypeError("Expected a canonical lowercase UUIDv7");
|
|
1076
|
-
const timestampHex = uuid.split("-").join("").slice(0, 12);
|
|
1077
|
-
return Number.parseInt(timestampHex, 16);
|
|
1078
|
-
}, "extractTimestampFromUUIDv7");
|
|
1079
|
-
function createUUIDv7FromTimestampHex(timestampHex) {
|
|
1080
|
-
const randomBytes = /* @__PURE__ */ new Uint8Array(10);
|
|
1081
|
-
crypto.getRandomValues(randomBytes);
|
|
1082
|
-
const randomHex = Array.from(randomBytes).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
1083
|
-
const randA = randomHex.slice(0, 3);
|
|
1084
|
-
const randBHex = randomHex.slice(3, 19);
|
|
1085
|
-
const versionAndRandA = `7${randA}`;
|
|
1086
|
-
const variantAndFirstRandB = (128 | parseInt(randBHex.slice(0, 2), 16) & 63).toString(16).padStart(2, "0");
|
|
1087
|
-
return [
|
|
1088
|
-
timestampHex.slice(0, 8),
|
|
1089
|
-
timestampHex.slice(8, 12),
|
|
1090
|
-
versionAndRandA,
|
|
1091
|
-
variantAndFirstRandB + randBHex.slice(2, 4),
|
|
1092
|
-
randBHex.slice(4, 16)
|
|
1093
|
-
].join("-");
|
|
1094
|
-
}
|
|
1095
|
-
__name(createUUIDv7FromTimestampHex, "createUUIDv7FromTimestampHex");
|
|
1096
|
-
var createUUIDv7 = /* @__PURE__ */ __name(() => createUUIDv7FromTimestampHex(Date.now().toString(16).padStart(12, "0")), "createUUIDv7");
|
|
1097
|
-
var createUUIDv7After = /* @__PURE__ */ __name((floor, nowMs = Date.now()) => {
|
|
1098
|
-
const timestamp = Math.max(nowMs, floor === null ? 0 : extractTimestampFromUUIDv7(floor) + 1);
|
|
1099
|
-
if (!Number.isSafeInteger(timestamp) || timestamp < 0 || timestamp >= 2 ** 48) throw new RangeError("UUIDv7 timestamp is out of range");
|
|
1100
|
-
return createUUIDv7FromTimestampHex(timestamp.toString(16).padStart(12, "0"));
|
|
1101
|
-
}, "createUUIDv7After");
|
|
1102
|
-
|
|
1103
1094
|
// ../plugin-core/dist/releaseCatalogCompiler.mjs
|
|
1104
1095
|
var ReleaseCatalogCompilationError = class extends Error {
|
|
1105
1096
|
static {
|
|
@@ -1525,6 +1516,13 @@ var ReleaseCatalogMutationError = class extends Error {
|
|
|
1525
1516
|
}
|
|
1526
1517
|
};
|
|
1527
1518
|
|
|
1519
|
+
// ../plugin-core/dist/semverSatisfies.mjs
|
|
1520
|
+
var semverSatisfies = /* @__PURE__ */ __name((targetAppVersion, currentVersion) => {
|
|
1521
|
+
const currentCoerce = coerce2(currentVersion);
|
|
1522
|
+
if (!currentCoerce) return false;
|
|
1523
|
+
return satisfies(currentCoerce, targetAppVersion);
|
|
1524
|
+
}, "semverSatisfies");
|
|
1525
|
+
|
|
1528
1526
|
// ../plugin-core/dist/serverPlugin/definePlugin.mjs
|
|
1529
1527
|
var definePlugin = /* @__PURE__ */ __name((plugin) => plugin, "definePlugin");
|
|
1530
1528
|
|
|
@@ -2564,9 +2562,6 @@ var getEmptyMigrationResult = /* @__PURE__ */ __name(() => ({
|
|
|
2564
2562
|
}, "execute"),
|
|
2565
2563
|
getSQL: /* @__PURE__ */ __name(() => "", "getSQL")
|
|
2566
2564
|
}), "getEmptyMigrationResult");
|
|
2567
|
-
var assertSupportedMigrationMode = /* @__PURE__ */ __name((options) => {
|
|
2568
|
-
if (options.mode === "from-database") throw new Error("Hot Updater migrations support only mode: 'from-schema'.");
|
|
2569
|
-
}, "assertSupportedMigrationMode");
|
|
2570
2565
|
|
|
2571
2566
|
// ../plugin-core/dist/engine/db/settingsMigrator.mjs
|
|
2572
2567
|
var storedSchemaVersion = /* @__PURE__ */ __name((stored2) => {
|
|
@@ -3513,7 +3508,6 @@ var resolveSchema = /* @__PURE__ */ __name((modules) => {
|
|
|
3513
3508
|
var createEngineMigrator = /* @__PURE__ */ __name((options) => {
|
|
3514
3509
|
const getVersion = /* @__PURE__ */ __name(async () => storedSchemaVersion(await options.readSettings()), "getVersion");
|
|
3515
3510
|
const makeResult = /* @__PURE__ */ __name(async (migrate = {}) => {
|
|
3516
|
-
assertSupportedMigrationMode(migrate);
|
|
3517
3511
|
const stored2 = await options.readSettings();
|
|
3518
3512
|
refusePreEngineDatabase(options.adapterName, stored2);
|
|
3519
3513
|
if (Object.entries(options.settings).every(([key, value]) => stored2.get(key) === value)) return getEmptyMigrationResult();
|
|
@@ -4550,7 +4544,7 @@ var createSqlAdapter = /* @__PURE__ */ __name(({ executor, tablePrefix = "", max
|
|
|
4550
4544
|
}, "createSqlAdapter");
|
|
4551
4545
|
|
|
4552
4546
|
// ../../packages/server/dist/package.mjs
|
|
4553
|
-
var version = "1.0.0-rc.
|
|
4547
|
+
var version = "1.0.0-rc.46";
|
|
4554
4548
|
|
|
4555
4549
|
// ../../packages/server/dist/version.mjs
|
|
4556
4550
|
var HOT_UPDATER_SERVER_VERSION = version;
|
|
@@ -7016,7 +7010,7 @@ var databaseOf = /* @__PURE__ */ __name((value) => {
|
|
|
7016
7010
|
if (isAdapter(value.adapter)) return value;
|
|
7017
7011
|
if ("core" in value && "fetchAdmin" in value) throw new HotUpdaterConfigError("standaloneRepository reaches a server's admin API from the CLI and console. createHotUpdater needs the server's own database, such as kyselyAdapter(...).");
|
|
7018
7012
|
}
|
|
7019
|
-
throw new HotUpdaterConfigError("database must be a Hot Updater
|
|
7013
|
+
throw new HotUpdaterConfigError("database must be a Hot Updater database adapter, such as kyselyAdapter(...) or postgres(...).");
|
|
7020
7014
|
}, "databaseOf");
|
|
7021
7015
|
var storageOf = /* @__PURE__ */ __name((value) => {
|
|
7022
7016
|
if (isRecord4(value) && typeof value.name === "string" && typeof value.protocol === "string") return value;
|