@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hot-updater/cloudflare",
3
3
  "type": "module",
4
- "version": "1.0.0-rc.45",
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.45",
61
- "@hot-updater/plugin-core": "1.0.0-rc.45",
62
- "@hot-updater/protocol": "1.0.0-rc.45",
63
- "@hot-updater/server": "1.0.0-rc.45"
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.45"
77
+ "@hot-updater/test-utils": "1.0.0-rc.46"
80
78
  },
81
79
  "scripts": {
82
80
  "build": "tsdown && pnpm build:worker",
@@ -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({
@@ -1 +1 @@
1
- This folder contains the built output assets for the worker "hot-updater" generated at 2026-10-10T04:34:58.260Z.
1
+ This folder contains the built output assets for the worker "hot-updater" generated at 2026-10-10T12:49:43.766Z.
@@ -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: stripBundleArtifactMetadata(row.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.45";
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 1.0 database, such as kyselyAdapter(...) or postgres(...). Upgrade the provider package that created it.");
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;