@hot-updater/cloudflare 1.0.0-rc.4 → 1.0.0-rc.5
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/iac/index.cjs +1 -2
- package/dist/iac/index.mjs +1 -2
- package/dist/index.cjs +1 -2
- package/dist/index.mjs +1 -2
- package/dist/worker/index.cjs +1 -2
- package/dist/worker/index.mjs +1 -2
- package/package.json +5 -5
- package/sql/bundles.sql +3 -3
- package/src/d1Rows.ts +2 -6
- package/worker/dist/README.md +1 -1
- package/worker/dist/index.js +14 -18
- package/worker/dist/index.js.map +2 -2
- package/worker/migrations/0001_hot-updater_1.0.0.sql +3 -3
package/dist/iac/index.cjs
CHANGED
|
@@ -143,7 +143,7 @@ const eventRow = (row) => {
|
|
|
143
143
|
const platform = stringValue(row, "platform", "bundle_events");
|
|
144
144
|
const fromBundleId = nullableString(row, "from_bundle_id", "bundle_events");
|
|
145
145
|
const updateStrategy = nullableString(row, "update_strategy", "bundle_events");
|
|
146
|
-
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED"
|
|
146
|
+
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED") && typeof fromBundleId === "string" && (updateStrategy === "fingerprint" || updateStrategy === "appVersion") || type === "UNCHANGED" && fromBundleId === null && updateStrategy === null)) throw new InvalidD1RowError("bundle_events");
|
|
147
147
|
return {
|
|
148
148
|
id: stringValue(row, "id", "bundle_events"),
|
|
149
149
|
type,
|
|
@@ -170,7 +170,6 @@ const installationRow = (row) => {
|
|
|
170
170
|
if (![
|
|
171
171
|
"UPDATE_APPLIED",
|
|
172
172
|
"RECOVERED",
|
|
173
|
-
"RELEASE_ADOPTED",
|
|
174
173
|
"UNCHANGED"
|
|
175
174
|
].includes(type) || platform !== "ios" && platform !== "android") throw new InvalidD1RowError("bundle_installations");
|
|
176
175
|
return {
|
package/dist/iac/index.mjs
CHANGED
|
@@ -135,7 +135,7 @@ const eventRow = (row) => {
|
|
|
135
135
|
const platform = stringValue(row, "platform", "bundle_events");
|
|
136
136
|
const fromBundleId = nullableString(row, "from_bundle_id", "bundle_events");
|
|
137
137
|
const updateStrategy = nullableString(row, "update_strategy", "bundle_events");
|
|
138
|
-
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED"
|
|
138
|
+
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED") && typeof fromBundleId === "string" && (updateStrategy === "fingerprint" || updateStrategy === "appVersion") || type === "UNCHANGED" && fromBundleId === null && updateStrategy === null)) throw new InvalidD1RowError("bundle_events");
|
|
139
139
|
return {
|
|
140
140
|
id: stringValue(row, "id", "bundle_events"),
|
|
141
141
|
type,
|
|
@@ -162,7 +162,6 @@ const installationRow = (row) => {
|
|
|
162
162
|
if (![
|
|
163
163
|
"UPDATE_APPLIED",
|
|
164
164
|
"RECOVERED",
|
|
165
|
-
"RELEASE_ADOPTED",
|
|
166
165
|
"UNCHANGED"
|
|
167
166
|
].includes(type) || platform !== "ios" && platform !== "android") throw new InvalidD1RowError("bundle_installations");
|
|
168
167
|
return {
|
package/dist/index.cjs
CHANGED
|
@@ -113,7 +113,7 @@ const eventRow = (row) => {
|
|
|
113
113
|
const platform = stringValue(row, "platform", "bundle_events");
|
|
114
114
|
const fromBundleId = nullableString(row, "from_bundle_id", "bundle_events");
|
|
115
115
|
const updateStrategy = nullableString(row, "update_strategy", "bundle_events");
|
|
116
|
-
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED"
|
|
116
|
+
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED") && typeof fromBundleId === "string" && (updateStrategy === "fingerprint" || updateStrategy === "appVersion") || type === "UNCHANGED" && fromBundleId === null && updateStrategy === null)) throw new InvalidD1RowError("bundle_events");
|
|
117
117
|
return {
|
|
118
118
|
id: stringValue(row, "id", "bundle_events"),
|
|
119
119
|
type,
|
|
@@ -140,7 +140,6 @@ const installationRow = (row) => {
|
|
|
140
140
|
if (![
|
|
141
141
|
"UPDATE_APPLIED",
|
|
142
142
|
"RECOVERED",
|
|
143
|
-
"RELEASE_ADOPTED",
|
|
144
143
|
"UNCHANGED"
|
|
145
144
|
].includes(type) || platform !== "ios" && platform !== "android") throw new InvalidD1RowError("bundle_installations");
|
|
146
145
|
return {
|
package/dist/index.mjs
CHANGED
|
@@ -89,7 +89,7 @@ const eventRow = (row) => {
|
|
|
89
89
|
const platform = stringValue(row, "platform", "bundle_events");
|
|
90
90
|
const fromBundleId = nullableString(row, "from_bundle_id", "bundle_events");
|
|
91
91
|
const updateStrategy = nullableString(row, "update_strategy", "bundle_events");
|
|
92
|
-
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED"
|
|
92
|
+
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED") && typeof fromBundleId === "string" && (updateStrategy === "fingerprint" || updateStrategy === "appVersion") || type === "UNCHANGED" && fromBundleId === null && updateStrategy === null)) throw new InvalidD1RowError("bundle_events");
|
|
93
93
|
return {
|
|
94
94
|
id: stringValue(row, "id", "bundle_events"),
|
|
95
95
|
type,
|
|
@@ -116,7 +116,6 @@ const installationRow = (row) => {
|
|
|
116
116
|
if (![
|
|
117
117
|
"UPDATE_APPLIED",
|
|
118
118
|
"RECOVERED",
|
|
119
|
-
"RELEASE_ADOPTED",
|
|
120
119
|
"UNCHANGED"
|
|
121
120
|
].includes(type) || platform !== "ios" && platform !== "android") throw new InvalidD1RowError("bundle_installations");
|
|
122
121
|
return {
|
package/dist/worker/index.cjs
CHANGED
|
@@ -87,7 +87,7 @@ const eventRow = (row) => {
|
|
|
87
87
|
const platform = stringValue(row, "platform", "bundle_events");
|
|
88
88
|
const fromBundleId = nullableString(row, "from_bundle_id", "bundle_events");
|
|
89
89
|
const updateStrategy = nullableString(row, "update_strategy", "bundle_events");
|
|
90
|
-
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED"
|
|
90
|
+
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED") && typeof fromBundleId === "string" && (updateStrategy === "fingerprint" || updateStrategy === "appVersion") || type === "UNCHANGED" && fromBundleId === null && updateStrategy === null)) throw new InvalidD1RowError("bundle_events");
|
|
91
91
|
return {
|
|
92
92
|
id: stringValue(row, "id", "bundle_events"),
|
|
93
93
|
type,
|
|
@@ -114,7 +114,6 @@ const installationRow = (row) => {
|
|
|
114
114
|
if (![
|
|
115
115
|
"UPDATE_APPLIED",
|
|
116
116
|
"RECOVERED",
|
|
117
|
-
"RELEASE_ADOPTED",
|
|
118
117
|
"UNCHANGED"
|
|
119
118
|
].includes(type) || platform !== "ios" && platform !== "android") throw new InvalidD1RowError("bundle_installations");
|
|
120
119
|
return {
|
package/dist/worker/index.mjs
CHANGED
|
@@ -86,7 +86,7 @@ const eventRow = (row) => {
|
|
|
86
86
|
const platform = stringValue(row, "platform", "bundle_events");
|
|
87
87
|
const fromBundleId = nullableString(row, "from_bundle_id", "bundle_events");
|
|
88
88
|
const updateStrategy = nullableString(row, "update_strategy", "bundle_events");
|
|
89
|
-
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED"
|
|
89
|
+
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED") && typeof fromBundleId === "string" && (updateStrategy === "fingerprint" || updateStrategy === "appVersion") || type === "UNCHANGED" && fromBundleId === null && updateStrategy === null)) throw new InvalidD1RowError("bundle_events");
|
|
90
90
|
return {
|
|
91
91
|
id: stringValue(row, "id", "bundle_events"),
|
|
92
92
|
type,
|
|
@@ -113,7 +113,6 @@ const installationRow = (row) => {
|
|
|
113
113
|
if (![
|
|
114
114
|
"UPDATE_APPLIED",
|
|
115
115
|
"RECOVERED",
|
|
116
|
-
"RELEASE_ADOPTED",
|
|
117
116
|
"UNCHANGED"
|
|
118
117
|
].includes(type) || platform !== "ios" && platform !== "android") throw new InvalidD1RowError("bundle_installations");
|
|
119
118
|
return {
|
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.5",
|
|
5
5
|
"description": "React Native OTA solution for self-hosted",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
7
7
|
"module": "dist/index.mjs",
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
"cloudflare": "4.2.0",
|
|
61
61
|
"hono": "4.12.34",
|
|
62
62
|
"uuidv7": "^1.0.2",
|
|
63
|
-
"@hot-updater/cli-tools": "1.0.0-rc.
|
|
64
|
-
"@hot-updater/
|
|
65
|
-
"@hot-updater/
|
|
63
|
+
"@hot-updater/cli-tools": "1.0.0-rc.3",
|
|
64
|
+
"@hot-updater/server": "1.0.0-rc.3",
|
|
65
|
+
"@hot-updater/plugin-core": "1.0.0-rc.3",
|
|
66
66
|
"@hot-updater/core": "1.0.0-rc.0"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"vitest": "4.1.4",
|
|
80
80
|
"wrangler": "^4.69.0",
|
|
81
81
|
"xdg-app-paths": "^8.3.0",
|
|
82
|
-
"@hot-updater/test-utils": "1.0.0-rc.
|
|
82
|
+
"@hot-updater/test-utils": "1.0.0-rc.3"
|
|
83
83
|
},
|
|
84
84
|
"scripts": {
|
|
85
85
|
"build": "tsdown && pnpm build:worker",
|
package/sql/bundles.sql
CHANGED
|
@@ -129,14 +129,14 @@ CREATE TABLE bundle_events (
|
|
|
129
129
|
sdk_version TEXT,
|
|
130
130
|
received_at_ms REAL NOT NULL,
|
|
131
131
|
CONSTRAINT bundle_events_type_check CHECK (
|
|
132
|
-
type IN ('UPDATE_APPLIED', 'RECOVERED', '
|
|
132
|
+
type IN ('UPDATE_APPLIED', 'RECOVERED', 'UNCHANGED')
|
|
133
133
|
),
|
|
134
134
|
CONSTRAINT bundle_events_platform_check CHECK (
|
|
135
135
|
platform IN ('ios', 'android')
|
|
136
136
|
),
|
|
137
137
|
CONSTRAINT bundle_events_shape_check CHECK (
|
|
138
138
|
(
|
|
139
|
-
type IN ('UPDATE_APPLIED', 'RECOVERED'
|
|
139
|
+
type IN ('UPDATE_APPLIED', 'RECOVERED')
|
|
140
140
|
AND from_bundle_id IS NOT NULL
|
|
141
141
|
AND update_strategy IS NOT NULL
|
|
142
142
|
AND update_strategy IN ('fingerprint', 'appVersion')
|
|
@@ -162,7 +162,7 @@ CREATE TABLE bundle_installations (
|
|
|
162
162
|
cohort TEXT NOT NULL,
|
|
163
163
|
received_at_ms REAL NOT NULL,
|
|
164
164
|
CONSTRAINT bundle_installations_type_check CHECK (
|
|
165
|
-
type IN ('UPDATE_APPLIED', 'RECOVERED', '
|
|
165
|
+
type IN ('UPDATE_APPLIED', 'RECOVERED', 'UNCHANGED')
|
|
166
166
|
),
|
|
167
167
|
CONSTRAINT bundle_installations_platform_check CHECK (
|
|
168
168
|
platform IN ('ios', 'android')
|
package/src/d1Rows.ts
CHANGED
|
@@ -157,9 +157,7 @@ const eventRow = (row: Record<string, unknown>): BundleEventRow => {
|
|
|
157
157
|
if (
|
|
158
158
|
(platform !== "ios" && platform !== "android") ||
|
|
159
159
|
!(
|
|
160
|
-
((type === "UPDATE_APPLIED" ||
|
|
161
|
-
type === "RECOVERED" ||
|
|
162
|
-
type === "RELEASE_ADOPTED") &&
|
|
160
|
+
((type === "UPDATE_APPLIED" || type === "RECOVERED") &&
|
|
163
161
|
typeof fromBundleId === "string" &&
|
|
164
162
|
(updateStrategy === "fingerprint" ||
|
|
165
163
|
updateStrategy === "appVersion")) ||
|
|
@@ -195,9 +193,7 @@ const installationRow = (
|
|
|
195
193
|
const type = stringValue(row, "type", "bundle_installations");
|
|
196
194
|
const platform = stringValue(row, "platform", "bundle_installations");
|
|
197
195
|
if (
|
|
198
|
-
!["UPDATE_APPLIED", "RECOVERED", "
|
|
199
|
-
type,
|
|
200
|
-
) ||
|
|
196
|
+
!["UPDATE_APPLIED", "RECOVERED", "UNCHANGED"].includes(type) ||
|
|
201
197
|
(platform !== "ios" && platform !== "android")
|
|
202
198
|
) {
|
|
203
199
|
throw new InvalidD1RowError("bundle_installations");
|
package/worker/dist/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
This folder contains the built output assets for the worker "hot-updater" generated at 2026-09-
|
|
1
|
+
This folder contains the built output assets for the worker "hot-updater" generated at 2026-09-08T01:48:53.178Z.
|
package/worker/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
|
|
4
4
|
// ../../packages/server/dist/package.mjs
|
|
5
|
-
var version = "1.0.0-rc.
|
|
5
|
+
var version = "1.0.0-rc.3";
|
|
6
6
|
|
|
7
7
|
// ../../packages/server/dist/version.mjs
|
|
8
8
|
var HOT_UPDATER_SERVER_VERSION = version;
|
|
@@ -831,7 +831,7 @@ var modelValidators = {
|
|
|
831
831
|
},
|
|
832
832
|
bundle_events: {
|
|
833
833
|
id: /* @__PURE__ */ __name((value) => typeof value === "string", "id"),
|
|
834
|
-
type: /* @__PURE__ */ __name((value) => value === "UPDATE_APPLIED" || value === "RECOVERED" || value === "
|
|
834
|
+
type: /* @__PURE__ */ __name((value) => value === "UPDATE_APPLIED" || value === "RECOVERED" || value === "UNCHANGED", "type"),
|
|
835
835
|
install_id: isInsightsIdentityText,
|
|
836
836
|
user_id: isNullableInsightsIdentityText,
|
|
837
837
|
username: /* @__PURE__ */ __name((value) => value === null || typeof value === "string", "username"),
|
|
@@ -854,7 +854,7 @@ var modelValidators = {
|
|
|
854
854
|
user_id: isNullableInsightsIdentityText,
|
|
855
855
|
username: /* @__PURE__ */ __name((value) => value === null || typeof value === "string", "username"),
|
|
856
856
|
to_bundle_id: /* @__PURE__ */ __name((value) => typeof value === "string", "to_bundle_id"),
|
|
857
|
-
type: /* @__PURE__ */ __name((value) => value === "UPDATE_APPLIED" || value === "RECOVERED" || value === "
|
|
857
|
+
type: /* @__PURE__ */ __name((value) => value === "UPDATE_APPLIED" || value === "RECOVERED" || value === "UNCHANGED", "type"),
|
|
858
858
|
platform: /* @__PURE__ */ __name((value) => value === "ios" || value === "android", "platform"),
|
|
859
859
|
app_version: /* @__PURE__ */ __name((value) => typeof value === "string", "app_version"),
|
|
860
860
|
channel: /* @__PURE__ */ __name((value) => typeof value === "string", "channel"),
|
|
@@ -1057,7 +1057,7 @@ var hasValidReleaseInvariants = /* @__PURE__ */ __name((data) => {
|
|
|
1057
1057
|
const fingerprintHash = data.fingerprint_hash;
|
|
1058
1058
|
return (kind === "BUNDLE" && typeof bundleId === "string" || kind === "EMBEDDED" && bundleId === null) && (strategy === "APP_VERSION" && typeof targetAppVersion === "string" && fingerprintHash === null || strategy === "FINGERPRINT" && targetAppVersion === null && typeof fingerprintHash === "string");
|
|
1059
1059
|
}, "hasValidReleaseInvariants");
|
|
1060
|
-
var hasValidBundleEventInvariants = /* @__PURE__ */ __name((data) => (data.type === "UPDATE_APPLIED" || data.type === "RECOVERED"
|
|
1060
|
+
var hasValidBundleEventInvariants = /* @__PURE__ */ __name((data) => (data.type === "UPDATE_APPLIED" || data.type === "RECOVERED") && typeof data.from_bundle_id === "string" && (data.update_strategy === "fingerprint" || data.update_strategy === "appVersion") || data.type === "UNCHANGED" && data.from_bundle_id === null && data.update_strategy === null, "hasValidBundleEventInvariants");
|
|
1061
1061
|
var validateCreateData = /* @__PURE__ */ __name((model, data) => {
|
|
1062
1062
|
if (!isRecord(data)) throw new DatabasePluginInputError("invalid-data");
|
|
1063
1063
|
validateFields(model, Object.keys(data));
|
|
@@ -1126,7 +1126,7 @@ var isBundleFilter = /* @__PURE__ */ __name((value, withKind = false) => {
|
|
|
1126
1126
|
"type",
|
|
1127
1127
|
...withKind ? ["kind"] : []
|
|
1128
1128
|
];
|
|
1129
|
-
return value.type === "RECOVERED" ? isText(value.fromBundleId) && hasOnlyKeys(value, [...keys, "fromBundleId"]) : (value.type === "UPDATE_APPLIED" || value.type === "
|
|
1129
|
+
return value.type === "RECOVERED" ? isText(value.fromBundleId) && hasOnlyKeys(value, [...keys, "fromBundleId"]) : (value.type === "UPDATE_APPLIED" || value.type === "UNCHANGED") && isText(value.toBundleId) && hasOnlyKeys(value, [...keys, "toBundleId"]);
|
|
1130
1130
|
}, "isBundleFilter");
|
|
1131
1131
|
var isEventFilter = /* @__PURE__ */ __name((value) => {
|
|
1132
1132
|
if (!isRecord(value)) return false;
|
|
@@ -4333,8 +4333,7 @@ function requireEvent(payload) {
|
|
|
4333
4333
|
const type = requireStringField(payload, "type");
|
|
4334
4334
|
switch (type) {
|
|
4335
4335
|
case "UPDATE_APPLIED":
|
|
4336
|
-
case "RECOVERED":
|
|
4337
|
-
case "RELEASE_ADOPTED": {
|
|
4336
|
+
case "RECOVERED": {
|
|
4338
4337
|
const updateStrategy = requireStringField(payload, "updateStrategy");
|
|
4339
4338
|
if (updateStrategy !== "fingerprint" && updateStrategy !== "appVersion") throw new InsightsBadRequestError("Invalid event field: updateStrategy");
|
|
4340
4339
|
return {
|
|
@@ -4382,7 +4381,6 @@ function createBundleEventRow(input) {
|
|
|
4382
4381
|
switch (input.type) {
|
|
4383
4382
|
case "UPDATE_APPLIED":
|
|
4384
4383
|
case "RECOVERED":
|
|
4385
|
-
case "RELEASE_ADOPTED":
|
|
4386
4384
|
return {
|
|
4387
4385
|
...base,
|
|
4388
4386
|
from_bundle_id: input.fromBundleId,
|
|
@@ -4452,7 +4450,7 @@ var parseEventPageInput = /* @__PURE__ */ __name((request) => {
|
|
|
4452
4450
|
let bundle;
|
|
4453
4451
|
if (bundleFields.some((key) => url.searchParams.has(key))) {
|
|
4454
4452
|
const outcome = readSingle(url, "outcome");
|
|
4455
|
-
if (outcome !== "applied" && outcome !== "recovered" && outcome !== "
|
|
4453
|
+
if (outcome !== "applied" && outcome !== "recovered" && outcome !== "unchanged") throw new InsightsBadRequestError("Invalid 'outcome' query parameter.");
|
|
4456
4454
|
bundle = {
|
|
4457
4455
|
...readScope(url),
|
|
4458
4456
|
bundleId: readId(url, "bundleId", 1024),
|
|
@@ -4779,10 +4777,10 @@ var bundleFilter = /* @__PURE__ */ __name((input) => {
|
|
|
4779
4777
|
type: "RECOVERED",
|
|
4780
4778
|
fromBundleId: bundleId
|
|
4781
4779
|
};
|
|
4782
|
-
case "
|
|
4780
|
+
case "unchanged":
|
|
4783
4781
|
return {
|
|
4784
4782
|
...scope,
|
|
4785
|
-
type: "
|
|
4783
|
+
type: "UNCHANGED",
|
|
4786
4784
|
toBundleId: bundleId
|
|
4787
4785
|
};
|
|
4788
4786
|
default:
|
|
@@ -4993,7 +4991,7 @@ var createInsightsProvider = /* @__PURE__ */ __name((model) => Object.freeze({
|
|
|
4993
4991
|
sinceMs,
|
|
4994
4992
|
beforeReceivedAtMs
|
|
4995
4993
|
})), "countOutcome");
|
|
4996
|
-
const [reportingInstallations, bundleInstallations, appliedReports, recoveredReports,
|
|
4994
|
+
const [reportingInstallations, bundleInstallations, appliedReports, recoveredReports, unchangedReports] = await Promise.all([
|
|
4997
4995
|
reporting,
|
|
4998
4996
|
measure(model.countInstallations({
|
|
4999
4997
|
...scope,
|
|
@@ -5002,7 +5000,7 @@ var createInsightsProvider = /* @__PURE__ */ __name((model) => Object.freeze({
|
|
|
5002
5000
|
})),
|
|
5003
5001
|
countOutcome("applied"),
|
|
5004
5002
|
countOutcome("recovered"),
|
|
5005
|
-
countOutcome("
|
|
5003
|
+
countOutcome("unchanged")
|
|
5006
5004
|
]);
|
|
5007
5005
|
return {
|
|
5008
5006
|
...scope,
|
|
@@ -5015,7 +5013,7 @@ var createInsightsProvider = /* @__PURE__ */ __name((model) => Object.freeze({
|
|
|
5015
5013
|
reportingInstallations: bundleInstallations,
|
|
5016
5014
|
appliedReports,
|
|
5017
5015
|
recoveredReports,
|
|
5018
|
-
|
|
5016
|
+
unchangedReports
|
|
5019
5017
|
}
|
|
5020
5018
|
};
|
|
5021
5019
|
}
|
|
@@ -7992,7 +7990,7 @@ var eventRow = /* @__PURE__ */ __name((row) => {
|
|
|
7992
7990
|
"update_strategy",
|
|
7993
7991
|
"bundle_events"
|
|
7994
7992
|
);
|
|
7995
|
-
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED"
|
|
7993
|
+
if (platform !== "ios" && platform !== "android" || !((type === "UPDATE_APPLIED" || type === "RECOVERED") && typeof fromBundleId === "string" && (updateStrategy === "fingerprint" || updateStrategy === "appVersion") || type === "UNCHANGED" && fromBundleId === null && updateStrategy === null)) {
|
|
7996
7994
|
throw new InvalidD1RowError("bundle_events");
|
|
7997
7995
|
}
|
|
7998
7996
|
return {
|
|
@@ -8018,9 +8016,7 @@ var eventRow = /* @__PURE__ */ __name((row) => {
|
|
|
8018
8016
|
var installationRow = /* @__PURE__ */ __name((row) => {
|
|
8019
8017
|
const type = stringValue(row, "type", "bundle_installations");
|
|
8020
8018
|
const platform = stringValue(row, "platform", "bundle_installations");
|
|
8021
|
-
if (!["UPDATE_APPLIED", "RECOVERED", "
|
|
8022
|
-
type
|
|
8023
|
-
) || platform !== "ios" && platform !== "android") {
|
|
8019
|
+
if (!["UPDATE_APPLIED", "RECOVERED", "UNCHANGED"].includes(type) || platform !== "ios" && platform !== "android") {
|
|
8024
8020
|
throw new InvalidD1RowError("bundle_installations");
|
|
8025
8021
|
}
|
|
8026
8022
|
return {
|