camstack 1.2.198 → 1.2.199
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/cli.js +11 -28
- package/dist/{launcher-JMVZTHWI.js → launcher-35ZYSID7.js} +423 -914
- package/package.json +1 -1
|
@@ -24024,9 +24024,9 @@ var require_zod = __commonJS({
|
|
|
24024
24024
|
}
|
|
24025
24025
|
});
|
|
24026
24026
|
|
|
24027
|
-
// ../system/dist/dist-
|
|
24028
|
-
var
|
|
24029
|
-
"../system/dist/dist-
|
|
24027
|
+
// ../system/dist/dist-Ct-4tTeX.js
|
|
24028
|
+
var require_dist_Ct_4tTeX = __commonJS({
|
|
24029
|
+
"../system/dist/dist-Ct-4tTeX.js"(exports) {
|
|
24030
24030
|
"use strict";
|
|
24031
24031
|
var zod = require_zod();
|
|
24032
24032
|
__require("crypto");
|
|
@@ -37046,19 +37046,6 @@ var require_dist_Bn_RNanh = __commonJS({
|
|
|
37046
37046
|
/** The whole declaration, secret paths and entry descriptor included (the entries service builds its handle from it). */
|
|
37047
37047
|
declaration: RecordKindDeclarationSchema
|
|
37048
37048
|
});
|
|
37049
|
-
var STORAGE_ADMIN_MOVED_COLLECTIONS = [
|
|
37050
|
-
"stream-broker:probe-snapshots",
|
|
37051
|
-
"stream-broker:profile-map",
|
|
37052
|
-
"stream-broker:rtsp-tokens",
|
|
37053
|
-
"notification-center:device-mutes",
|
|
37054
|
-
"recorder:recording-configs",
|
|
37055
|
-
"pipeline-orchestrator:device-features"
|
|
37056
|
-
];
|
|
37057
|
-
var STORAGE_ADMIN_SCOPED_BASES = [
|
|
37058
|
-
"addon-settings",
|
|
37059
|
-
"addon-devices",
|
|
37060
|
-
"sections"
|
|
37061
|
-
];
|
|
37062
37049
|
var storageAdminCapability = {
|
|
37063
37050
|
name: "storage-admin",
|
|
37064
37051
|
scope: "system",
|
|
@@ -37070,26 +37057,6 @@ var require_dist_Bn_RNanh = __commonJS({
|
|
|
37070
37057
|
* optionally only those owned by `ownerPrefix`. Reads only.
|
|
37071
37058
|
*/
|
|
37072
37059
|
listTables: method(zod.z.object({ ownerPrefix: zod.z.string().min(1).optional() }), zod.z.object({ tables: zod.z.array(StorageTableSchema) }), { auth: "admin" }),
|
|
37073
|
-
/**
|
|
37074
|
-
* Drop one table. REFUSES when an addon declared it since the engine
|
|
37075
|
-
* started (a running addon still owns it), when it is an engine or
|
|
37076
|
-
* canonical table, when it does not exist, or when its row count is not
|
|
37077
|
-
* `expectRows` - the caller states what it believes it is deleting. The
|
|
37078
|
-
* engine also refuses anything but `<owner>:(addon-settings|addon-devices|
|
|
37079
|
-
* sections)`, the retired collections by name, and tables of owners that
|
|
37080
|
-
* are not installed (and refuses when it cannot read the installed list).
|
|
37081
|
-
* Removed with the D870 migration script once the last hub ran it.
|
|
37082
|
-
*/
|
|
37083
|
-
dropCollection: method(zod.z.object({
|
|
37084
|
-
collection: zod.z.string().min(1),
|
|
37085
|
-
expectRows: zod.z.number().int().nonnegative()
|
|
37086
|
-
}), zod.z.object({
|
|
37087
|
-
dropped: zod.z.literal(true),
|
|
37088
|
-
rows: zod.z.number().int().nonnegative()
|
|
37089
|
-
}), {
|
|
37090
|
-
kind: "mutation",
|
|
37091
|
-
auth: "admin"
|
|
37092
|
-
}),
|
|
37093
37060
|
/** Every record kind of both files with rows, a size estimate, class and retention (D881). */
|
|
37094
37061
|
listKinds: method(zod.z.object({
|
|
37095
37062
|
owner: zod.z.string().min(1).optional(),
|
|
@@ -63642,6 +63609,15 @@ var require_dist_Bn_RNanh = __commonJS({
|
|
|
63642
63609
|
* Replaces `zoneCrop`.
|
|
63643
63610
|
*/
|
|
63644
63611
|
showTriggerZone: zod.z.boolean().optional(),
|
|
63612
|
+
/**
|
|
63613
|
+
* Draw the SUBJECT'S PATH on the picture — a line in the subject's colour
|
|
63614
|
+
* through the track's positions up to the frame shown, the same path the
|
|
63615
|
+
* debug views draw (`buildSubjectPath`, D903). Every picture mode a subject
|
|
63616
|
+
* is drawn on: a `crop` maps the path into the crop and clips it. Valid only
|
|
63617
|
+
* on a rule whose subject is a tracked object (refused on a sound rule);
|
|
63618
|
+
* dropped on `image: 'none'`. Absent = off.
|
|
63619
|
+
*/
|
|
63620
|
+
showSubjectPath: zod.z.boolean().optional(),
|
|
63645
63621
|
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
63646
63622
|
attach: zod.z.enum([
|
|
63647
63623
|
"best",
|
|
@@ -94558,12 +94534,6 @@ var require_dist_Bn_RNanh = __commonJS({
|
|
|
94558
94534
|
addonId: null,
|
|
94559
94535
|
access: "create"
|
|
94560
94536
|
},
|
|
94561
|
-
"storageAdmin.dropCollection": {
|
|
94562
|
-
capName: "storage-admin",
|
|
94563
|
-
capScope: "system",
|
|
94564
|
-
addonId: null,
|
|
94565
|
-
access: "delete"
|
|
94566
|
-
},
|
|
94567
94537
|
"storageAdmin.listKinds": {
|
|
94568
94538
|
capName: "storage-admin",
|
|
94569
94539
|
capScope: "system",
|
|
@@ -101340,18 +101310,6 @@ var require_dist_Bn_RNanh = __commonJS({
|
|
|
101340
101310
|
return STORAGE_ACCESS_FALLBACK;
|
|
101341
101311
|
}
|
|
101342
101312
|
});
|
|
101343
|
-
Object.defineProperty(exports, "STORAGE_ADMIN_MOVED_COLLECTIONS", {
|
|
101344
|
-
enumerable: true,
|
|
101345
|
-
get: function() {
|
|
101346
|
-
return STORAGE_ADMIN_MOVED_COLLECTIONS;
|
|
101347
|
-
}
|
|
101348
|
-
});
|
|
101349
|
-
Object.defineProperty(exports, "STORAGE_ADMIN_SCOPED_BASES", {
|
|
101350
|
-
enumerable: true,
|
|
101351
|
-
get: function() {
|
|
101352
|
-
return STORAGE_ADMIN_SCOPED_BASES;
|
|
101353
|
-
}
|
|
101354
|
-
});
|
|
101355
101313
|
Object.defineProperty(exports, "STREAM_PROFILE_META", {
|
|
101356
101314
|
enumerable: true,
|
|
101357
101315
|
get: function() {
|
|
@@ -114066,11 +114024,11 @@ ${values.join("\n")}` : `${blockName} :`;
|
|
|
114066
114024
|
}
|
|
114067
114025
|
});
|
|
114068
114026
|
|
|
114069
|
-
// ../system/dist/device-ca-
|
|
114070
|
-
var
|
|
114071
|
-
"../system/dist/device-ca-
|
|
114027
|
+
// ../system/dist/device-ca-CUEx7sti.js
|
|
114028
|
+
var require_device_ca_CUEx7sti = __commonJS({
|
|
114029
|
+
"../system/dist/device-ca-CUEx7sti.js"(exports) {
|
|
114072
114030
|
"use strict";
|
|
114073
|
-
var require_dist10 =
|
|
114031
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
114074
114032
|
var require_x509_es = require_x509_es_C4cOo48M();
|
|
114075
114033
|
var node_crypto = __require("crypto");
|
|
114076
114034
|
var SYSTEM_SECRET_OWNER = "system";
|
|
@@ -114494,7 +114452,7 @@ var require_alerts_addon = __commonJS({
|
|
|
114494
114452
|
[Symbol.toStringTag]: { value: "Module" }
|
|
114495
114453
|
});
|
|
114496
114454
|
require_chunk_Cek0wNdY();
|
|
114497
|
-
var require_dist10 =
|
|
114455
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
114498
114456
|
var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
|
|
114499
114457
|
function nextEpisodeId(input) {
|
|
114500
114458
|
const { previous } = input;
|
|
@@ -115899,7 +115857,7 @@ var require_calendars_addon = __commonJS({
|
|
|
115899
115857
|
[Symbol.toStringTag]: { value: "Module" }
|
|
115900
115858
|
});
|
|
115901
115859
|
require_chunk_Cek0wNdY();
|
|
115902
|
-
var require_dist10 =
|
|
115860
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
115903
115861
|
var require_settle_sources = require_settle_sources_Bhsy57y();
|
|
115904
115862
|
var zod = require_zod();
|
|
115905
115863
|
var CALENDAR_COLOR_PALETTE = [
|
|
@@ -116115,11 +116073,11 @@ var require_calendars = __commonJS({
|
|
|
116115
116073
|
}
|
|
116116
116074
|
});
|
|
116117
116075
|
|
|
116118
|
-
// ../system/dist/composition-sources-
|
|
116119
|
-
var
|
|
116120
|
-
"../system/dist/composition-sources-
|
|
116076
|
+
// ../system/dist/composition-sources-BPnpB9XG.js
|
|
116077
|
+
var require_composition_sources_BPnpB9XG = __commonJS({
|
|
116078
|
+
"../system/dist/composition-sources-BPnpB9XG.js"(exports) {
|
|
116121
116079
|
"use strict";
|
|
116122
|
-
var require_dist10 =
|
|
116080
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
116123
116081
|
function normalizedNativeOwner(owner) {
|
|
116124
116082
|
const trimmed = owner?.trim();
|
|
116125
116083
|
return trimmed ? trimmed : null;
|
|
@@ -116234,8 +116192,8 @@ var require_composer_addon = __commonJS({
|
|
|
116234
116192
|
[Symbol.toStringTag]: { value: "Module" }
|
|
116235
116193
|
});
|
|
116236
116194
|
require_chunk_Cek0wNdY();
|
|
116237
|
-
var require_dist10 =
|
|
116238
|
-
var require_composition_sources =
|
|
116195
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
116196
|
+
var require_composition_sources = require_composition_sources_BPnpB9XG();
|
|
116239
116197
|
var zod = require_zod();
|
|
116240
116198
|
function isRecord$2(value) {
|
|
116241
116199
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -120045,7 +120003,7 @@ var require_console_logging = __commonJS({
|
|
|
120045
120003
|
[Symbol.toStringTag]: { value: "Module" }
|
|
120046
120004
|
});
|
|
120047
120005
|
require_chunk_Cek0wNdY();
|
|
120048
|
-
var require_dist10 =
|
|
120006
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
120049
120007
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
120050
120008
|
var LEVEL_RANK = {
|
|
120051
120009
|
debug: 0,
|
|
@@ -124709,9 +124667,9 @@ var require_core_blocks_addon = __commonJS({
|
|
|
124709
124667
|
"use strict";
|
|
124710
124668
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
124711
124669
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
124712
|
-
var require_dist10 =
|
|
124670
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
124713
124671
|
var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
|
|
124714
|
-
var require_composition_sources =
|
|
124672
|
+
var require_composition_sources = require_composition_sources_BPnpB9XG();
|
|
124715
124673
|
var require_prefix_range = require_prefix_range_D_KueXbQ();
|
|
124716
124674
|
var require_prefix_walk = require_prefix_walk_Dv6MLZlM();
|
|
124717
124675
|
var zod = require_zod();
|
|
@@ -136984,9 +136942,9 @@ var require_addon = __commonJS({
|
|
|
136984
136942
|
}
|
|
136985
136943
|
});
|
|
136986
136944
|
|
|
136987
|
-
// ../system/dist/retired-settings-keys-
|
|
136988
|
-
var
|
|
136989
|
-
"../system/dist/retired-settings-keys-
|
|
136945
|
+
// ../system/dist/retired-settings-keys-CGUqX-Oz.js
|
|
136946
|
+
var require_retired_settings_keys_CGUqX_Oz = __commonJS({
|
|
136947
|
+
"../system/dist/retired-settings-keys-CGUqX-Oz.js"(exports) {
|
|
136990
136948
|
"use strict";
|
|
136991
136949
|
var _camstack_types_addon = require_addon();
|
|
136992
136950
|
function settingsStoreIsAuthoritativeHere(env) {
|
|
@@ -137247,12 +137205,6 @@ var require_retired_settings_keys_D_VwZiDt = __commonJS({
|
|
|
137247
137205
|
function errText(err) {
|
|
137248
137206
|
return err instanceof Error ? err.message : String(err);
|
|
137249
137207
|
}
|
|
137250
|
-
Object.defineProperty(exports, "RETIRED_SETTINGS_KEYS", {
|
|
137251
|
-
enumerable: true,
|
|
137252
|
-
get: function() {
|
|
137253
|
-
return RETIRED_SETTINGS_KEYS;
|
|
137254
|
-
}
|
|
137255
|
-
});
|
|
137256
137208
|
Object.defineProperty(exports, "purgeRetiredSettingsKeys", {
|
|
137257
137209
|
enumerable: true,
|
|
137258
137210
|
get: function() {
|
|
@@ -137283,11 +137235,11 @@ var require_device_manager_addon = __commonJS({
|
|
|
137283
137235
|
[Symbol.toStringTag]: { value: "Module" }
|
|
137284
137236
|
});
|
|
137285
137237
|
require_chunk_Cek0wNdY();
|
|
137286
|
-
var require_dist10 =
|
|
137238
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
137287
137239
|
var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
|
|
137288
137240
|
var require_prefix_range = require_prefix_range_D_KueXbQ();
|
|
137289
137241
|
var require_prefix_walk = require_prefix_walk_Dv6MLZlM();
|
|
137290
|
-
var require_retired_settings_keys =
|
|
137242
|
+
var require_retired_settings_keys = require_retired_settings_keys_CGUqX_Oz();
|
|
137291
137243
|
var zod = require_zod();
|
|
137292
137244
|
var node_crypto = __require("crypto");
|
|
137293
137245
|
var _camstack_types_node = require_node();
|
|
@@ -146355,7 +146307,7 @@ var require_hub_forwarder = __commonJS({
|
|
|
146355
146307
|
[Symbol.toStringTag]: { value: "Module" }
|
|
146356
146308
|
});
|
|
146357
146309
|
require_chunk_Cek0wNdY();
|
|
146358
|
-
var require_dist10 =
|
|
146310
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
146359
146311
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
146360
146312
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
146361
146313
|
var HubForwarderDestination = class {
|
|
@@ -146489,7 +146441,7 @@ var require_liveness_monitor_addon = __commonJS({
|
|
|
146489
146441
|
"use strict";
|
|
146490
146442
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
146491
146443
|
require_chunk_Cek0wNdY();
|
|
146492
|
-
var require_dist10 =
|
|
146444
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
146493
146445
|
var NO_DEVICES = "liveness:no-devices";
|
|
146494
146446
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
146495
146447
|
var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
|
|
@@ -146852,11 +146804,11 @@ var require_local_auth_addon = __commonJS({
|
|
|
146852
146804
|
[Symbol.toStringTag]: { value: "Module" }
|
|
146853
146805
|
});
|
|
146854
146806
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
146855
|
-
var require_dist10 =
|
|
146807
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
146856
146808
|
var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
|
|
146857
146809
|
var require_safe_buffer$1 = require_safe_buffer_D3aoa_7X();
|
|
146858
146810
|
var require_ms$1 = require_ms_LB3giGoU();
|
|
146859
|
-
var require_device_ca =
|
|
146811
|
+
var require_device_ca = require_device_ca_CUEx7sti();
|
|
146860
146812
|
var zod = require_zod();
|
|
146861
146813
|
var node_crypto = __require("crypto");
|
|
146862
146814
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
@@ -152443,7 +152395,6 @@ var require_local_auth_addon = __commonJS({
|
|
|
152443
152395
|
var USERS_COLLECTION$1 = "users";
|
|
152444
152396
|
var API_KEYS_COLLECTION = "api_keys";
|
|
152445
152397
|
var SCOPED_TOKENS_COLLECTION = "scoped_tokens";
|
|
152446
|
-
var OAUTH_SESSIONS_COLLECTION = "oauth_sessions";
|
|
152447
152398
|
var USER_TOTP_COLLECTION = "user_totp";
|
|
152448
152399
|
var USER_EXTERNAL_IDENTITIES_COLLECTION = "user_external_identities";
|
|
152449
152400
|
var USERS_COLUMNS = [
|
|
@@ -152643,47 +152594,6 @@ var require_local_auth_addon = __commonJS({
|
|
|
152643
152594
|
notNull: true
|
|
152644
152595
|
}
|
|
152645
152596
|
];
|
|
152646
|
-
var OAUTH_SESSIONS_COLUMNS = [
|
|
152647
|
-
{
|
|
152648
|
-
name: "id",
|
|
152649
|
-
type: "TEXT",
|
|
152650
|
-
primaryKey: true,
|
|
152651
|
-
notNull: true
|
|
152652
|
-
},
|
|
152653
|
-
{
|
|
152654
|
-
name: "userId",
|
|
152655
|
-
type: "TEXT",
|
|
152656
|
-
notNull: true
|
|
152657
|
-
},
|
|
152658
|
-
{
|
|
152659
|
-
name: "username",
|
|
152660
|
-
type: "TEXT",
|
|
152661
|
-
notNull: true
|
|
152662
|
-
},
|
|
152663
|
-
{
|
|
152664
|
-
name: "integrationId",
|
|
152665
|
-
type: "TEXT",
|
|
152666
|
-
notNull: true
|
|
152667
|
-
},
|
|
152668
|
-
{
|
|
152669
|
-
name: "scopes",
|
|
152670
|
-
type: "JSON"
|
|
152671
|
-
},
|
|
152672
|
-
{
|
|
152673
|
-
name: "createdAt",
|
|
152674
|
-
type: "INTEGER",
|
|
152675
|
-
notNull: true
|
|
152676
|
-
},
|
|
152677
|
-
{
|
|
152678
|
-
name: "lastUsedAt",
|
|
152679
|
-
type: "INTEGER",
|
|
152680
|
-
notNull: true
|
|
152681
|
-
},
|
|
152682
|
-
{
|
|
152683
|
-
name: "revokedAt",
|
|
152684
|
-
type: "INTEGER"
|
|
152685
|
-
}
|
|
152686
|
-
];
|
|
152687
152597
|
async function declareAuthSchema(store, options) {
|
|
152688
152598
|
const skip = new Set(options?.skipCollections ?? []);
|
|
152689
152599
|
if (!skip.has("users")) await store.declareCollection.mutate({
|
|
@@ -152718,14 +152628,6 @@ var require_local_auth_addon = __commonJS({
|
|
|
152718
152628
|
columns: ["userId"]
|
|
152719
152629
|
}]
|
|
152720
152630
|
});
|
|
152721
|
-
if (!skip.has("oauth_sessions")) await store.declareCollection.mutate({
|
|
152722
|
-
collection: OAUTH_SESSIONS_COLLECTION,
|
|
152723
|
-
columns: OAUTH_SESSIONS_COLUMNS,
|
|
152724
|
-
indexes: [{
|
|
152725
|
-
name: "idx_oauth_sessions_user_id",
|
|
152726
|
-
columns: ["userId"]
|
|
152727
|
-
}]
|
|
152728
|
-
});
|
|
152729
152631
|
if (!skip.has("login_sessions")) await store.declareCollection.mutate({
|
|
152730
152632
|
collection: LOGIN_SESSIONS_COLLECTION,
|
|
152731
152633
|
columns: LOGIN_SESSIONS_COLUMNS,
|
|
@@ -152926,16 +152828,19 @@ var require_local_auth_addon = __commonJS({
|
|
|
152926
152828
|
"oauth-sessions": {
|
|
152927
152829
|
schema: OauthSessionBodySchema,
|
|
152928
152830
|
class: "ledger",
|
|
152929
|
-
writeTrigger: "OAuth code exchange; refresh touches lastUsedAt",
|
|
152831
|
+
writeTrigger: "OAuth code exchange; refresh touches lastUsedAt; revoke stamps revokedAt",
|
|
152930
152832
|
device: "none",
|
|
152931
152833
|
at: "none",
|
|
152932
152834
|
indexes: [{
|
|
152933
152835
|
name: "user",
|
|
152934
152836
|
fields: ["userId"]
|
|
152837
|
+
}, {
|
|
152838
|
+
name: "revoked",
|
|
152839
|
+
fields: ["revokedAt"]
|
|
152935
152840
|
}],
|
|
152936
152841
|
retention: {
|
|
152937
152842
|
owner: "local-auth",
|
|
152938
|
-
reason: "daily reap deletes revoked
|
|
152843
|
+
reason: "daily reap deletes sessions revoked more than 30 days ago; an active session has no lifetime, so no engine TTL"
|
|
152939
152844
|
}
|
|
152940
152845
|
},
|
|
152941
152846
|
"user-totp": {
|
|
@@ -153015,7 +152920,6 @@ var require_local_auth_addon = __commonJS({
|
|
|
153015
152920
|
ADMIN_TOKENS_COLLECTION,
|
|
153016
152921
|
LOGIN_SESSIONS_COLLECTION,
|
|
153017
152922
|
LOGIN_SESSION_CUTOFFS_COLLECTION,
|
|
153018
|
-
OAUTH_SESSIONS_COLLECTION,
|
|
153019
152923
|
USER_TOTP_COLLECTION,
|
|
153020
152924
|
USER_EXTERNAL_IDENTITIES_COLLECTION,
|
|
153021
152925
|
DEVICE_CREDENTIALS_COLLECTION,
|
|
@@ -153163,7 +153067,7 @@ var require_local_auth_addon = __commonJS({
|
|
|
153163
153067
|
const value = data[key];
|
|
153164
153068
|
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
153165
153069
|
}
|
|
153166
|
-
function parseSession
|
|
153070
|
+
function parseSession(data) {
|
|
153167
153071
|
const id = str(data, "id");
|
|
153168
153072
|
const userId = str(data, "userId");
|
|
153169
153073
|
const createdAt = num(data, "createdAt");
|
|
@@ -153226,7 +153130,7 @@ var require_local_auth_addon = __commonJS({
|
|
|
153226
153130
|
if (sessionsKind !== null) {
|
|
153227
153131
|
const rows2 = await (0, import_read_all_rows.readAllRows)(sessionsKind);
|
|
153228
153132
|
for (const row of rows2) {
|
|
153229
|
-
const record = parseSession
|
|
153133
|
+
const record = parseSession({
|
|
153230
153134
|
id: row.id,
|
|
153231
153135
|
...row.data
|
|
153232
153136
|
});
|
|
@@ -153238,7 +153142,7 @@ var require_local_auth_addon = __commonJS({
|
|
|
153238
153142
|
}
|
|
153239
153143
|
const rows = await this.store.query.query({ collection: LOGIN_SESSIONS_COLLECTION });
|
|
153240
153144
|
for (const row of rows) {
|
|
153241
|
-
const record = parseSession
|
|
153145
|
+
const record = parseSession(row.data);
|
|
153242
153146
|
if (record !== null) this.remember(record);
|
|
153243
153147
|
}
|
|
153244
153148
|
const cutoffs = await this.store.query.query({ collection: LOGIN_SESSION_CUTOFFS_COLLECTION });
|
|
@@ -156565,33 +156469,6 @@ var require_local_auth_addon = __commonJS({
|
|
|
156565
156469
|
}
|
|
156566
156470
|
};
|
|
156567
156471
|
}
|
|
156568
|
-
function parseSession(data) {
|
|
156569
|
-
const id = data["id"];
|
|
156570
|
-
const userId = data["userId"];
|
|
156571
|
-
const username = data["username"];
|
|
156572
|
-
const integrationId = data["integrationId"];
|
|
156573
|
-
const scopes = data["scopes"];
|
|
156574
|
-
const createdAt = data["createdAt"];
|
|
156575
|
-
const lastUsedAt = data["lastUsedAt"];
|
|
156576
|
-
const revokedAt = data["revokedAt"];
|
|
156577
|
-
if (typeof id !== "string") throw new Error("oauth_sessions row: missing id");
|
|
156578
|
-
if (typeof userId !== "string") throw new Error("oauth_sessions row: missing userId");
|
|
156579
|
-
if (typeof username !== "string") throw new Error("oauth_sessions row: missing username");
|
|
156580
|
-
if (typeof integrationId !== "string") throw new Error("oauth_sessions row: missing integrationId");
|
|
156581
|
-
if (!Array.isArray(scopes)) throw new Error("oauth_sessions row: scopes must be an array");
|
|
156582
|
-
if (typeof createdAt !== "number") throw new Error("oauth_sessions row: missing createdAt");
|
|
156583
|
-
if (typeof lastUsedAt !== "number") throw new Error("oauth_sessions row: missing lastUsedAt");
|
|
156584
|
-
return {
|
|
156585
|
-
id,
|
|
156586
|
-
userId,
|
|
156587
|
-
username,
|
|
156588
|
-
integrationId,
|
|
156589
|
-
scopes,
|
|
156590
|
-
createdAt,
|
|
156591
|
-
lastUsedAt,
|
|
156592
|
-
revokedAt: typeof revokedAt === "number" ? revokedAt : null
|
|
156593
|
-
};
|
|
156594
|
-
}
|
|
156595
156472
|
function sessionToBody(session) {
|
|
156596
156473
|
return {
|
|
156597
156474
|
userId: session.userId,
|
|
@@ -156604,22 +156481,29 @@ var require_local_auth_addon = __commonJS({
|
|
|
156604
156481
|
};
|
|
156605
156482
|
}
|
|
156606
156483
|
function rowToSession(id, body) {
|
|
156607
|
-
return
|
|
156484
|
+
return {
|
|
156608
156485
|
id,
|
|
156609
|
-
|
|
156610
|
-
|
|
156486
|
+
userId: body.userId,
|
|
156487
|
+
username: body.username,
|
|
156488
|
+
integrationId: body.integrationId,
|
|
156489
|
+
scopes: body.scopes,
|
|
156490
|
+
createdAt: body.createdAt,
|
|
156491
|
+
lastUsedAt: body.lastUsedAt,
|
|
156492
|
+
revokedAt: typeof body.revokedAt === "number" ? body.revokedAt : null
|
|
156493
|
+
};
|
|
156611
156494
|
}
|
|
156612
156495
|
var OauthSessionManager = class {
|
|
156613
156496
|
kind;
|
|
156614
|
-
store;
|
|
156615
156497
|
constructor(deps) {
|
|
156616
|
-
|
|
156617
|
-
|
|
156618
|
-
|
|
156619
|
-
|
|
156620
|
-
|
|
156621
|
-
|
|
156622
|
-
|
|
156498
|
+
this.kind = deps.oauthSessionsKind;
|
|
156499
|
+
}
|
|
156500
|
+
async write(session) {
|
|
156501
|
+
const parsed = localAuthRecordKinds["oauth-sessions"].schema.safeParse(sessionToBody(session));
|
|
156502
|
+
if (!parsed.success) throw new Error(parsed.error.message);
|
|
156503
|
+
await this.kind.put({
|
|
156504
|
+
id: session.id,
|
|
156505
|
+
data: parsed.data
|
|
156506
|
+
});
|
|
156623
156507
|
}
|
|
156624
156508
|
async create(input) {
|
|
156625
156509
|
const now = Date.now();
|
|
@@ -156633,117 +156517,53 @@ var require_local_auth_addon = __commonJS({
|
|
|
156633
156517
|
lastUsedAt: now,
|
|
156634
156518
|
revokedAt: null
|
|
156635
156519
|
};
|
|
156636
|
-
|
|
156637
|
-
if (kind !== null) {
|
|
156638
|
-
const parsed = localAuthRecordKinds["oauth-sessions"].schema.safeParse(sessionToBody(session));
|
|
156639
|
-
if (!parsed.success) throw new Error(parsed.error.message);
|
|
156640
|
-
await kind.put({
|
|
156641
|
-
id: session.id,
|
|
156642
|
-
data: parsed.data
|
|
156643
|
-
});
|
|
156644
|
-
return session;
|
|
156645
|
-
}
|
|
156646
|
-
await this.store.insert.mutate({
|
|
156647
|
-
collection: OAUTH_SESSIONS_COLLECTION,
|
|
156648
|
-
record: {
|
|
156649
|
-
id: session.id,
|
|
156650
|
-
data: { ...session }
|
|
156651
|
-
}
|
|
156652
|
-
});
|
|
156520
|
+
await this.write(session);
|
|
156653
156521
|
return session;
|
|
156654
156522
|
}
|
|
156655
156523
|
async list() {
|
|
156656
|
-
|
|
156657
|
-
if (kind !== null) return (await (0, import_read_all_rows.readAllRows)(kind)).map((row) => rowToSession(row.id, row.data));
|
|
156658
|
-
return (await this.store.query.query({
|
|
156659
|
-
collection: OAUTH_SESSIONS_COLLECTION,
|
|
156660
|
-
filter: {}
|
|
156661
|
-
})).map((r2) => parseSession(r2.data));
|
|
156524
|
+
return (await (0, import_read_all_rows.readAllRows)(this.kind)).map((row) => rowToSession(row.id, row.data));
|
|
156662
156525
|
}
|
|
156663
156526
|
async getById(id) {
|
|
156664
|
-
const
|
|
156665
|
-
|
|
156666
|
-
const row = await kind.get(id);
|
|
156667
|
-
return row === null ? null : rowToSession(row.id, row.data);
|
|
156668
|
-
}
|
|
156669
|
-
const results = await this.store.query.query({
|
|
156670
|
-
collection: OAUTH_SESSIONS_COLLECTION,
|
|
156671
|
-
filter: { where: { id } }
|
|
156672
|
-
});
|
|
156673
|
-
if (results.length === 0) return null;
|
|
156674
|
-
return parseSession(results[0].data);
|
|
156527
|
+
const row = await this.kind.get(id);
|
|
156528
|
+
return row === null ? null : rowToSession(row.id, row.data);
|
|
156675
156529
|
}
|
|
156676
156530
|
async markRevoked(id) {
|
|
156677
156531
|
const existing = await this.getById(id);
|
|
156678
156532
|
if (existing === null) return false;
|
|
156679
156533
|
if (existing.revokedAt !== null) return true;
|
|
156680
|
-
|
|
156534
|
+
await this.write({
|
|
156681
156535
|
...existing,
|
|
156682
156536
|
revokedAt: Date.now()
|
|
156683
|
-
};
|
|
156684
|
-
const kind = this.kind;
|
|
156685
|
-
if (kind !== null) {
|
|
156686
|
-
const parsed = localAuthRecordKinds["oauth-sessions"].schema.safeParse(sessionToBody(updated));
|
|
156687
|
-
if (!parsed.success) throw new Error(parsed.error.message);
|
|
156688
|
-
await kind.put({
|
|
156689
|
-
id,
|
|
156690
|
-
data: parsed.data
|
|
156691
|
-
});
|
|
156692
|
-
return true;
|
|
156693
|
-
}
|
|
156694
|
-
await this.store.update.mutate({
|
|
156695
|
-
collection: OAUTH_SESSIONS_COLLECTION,
|
|
156696
|
-
id,
|
|
156697
|
-
data: { ...updated }
|
|
156698
156537
|
});
|
|
156699
156538
|
return true;
|
|
156700
156539
|
}
|
|
156701
156540
|
async remove(id) {
|
|
156702
156541
|
if (await this.getById(id) === null) return false;
|
|
156703
|
-
|
|
156704
|
-
if (kind !== null) {
|
|
156705
|
-
await kind.delete(id);
|
|
156706
|
-
return true;
|
|
156707
|
-
}
|
|
156708
|
-
await this.store.delete.mutate({
|
|
156709
|
-
collection: OAUTH_SESSIONS_COLLECTION,
|
|
156710
|
-
key: id
|
|
156711
|
-
});
|
|
156542
|
+
await this.kind.delete(id);
|
|
156712
156543
|
return true;
|
|
156713
156544
|
}
|
|
156545
|
+
/**
|
|
156546
|
+
* Delete the sessions revoked at or before `horizonMs`. An active session
|
|
156547
|
+
* (`revokedAt` null) is never matched: it has no lifetime of its own, which
|
|
156548
|
+
* is why this is the owner's sweep and not an engine TTL.
|
|
156549
|
+
*/
|
|
156714
156550
|
async reapRevoked(horizonMs) {
|
|
156715
|
-
|
|
156716
|
-
if (kind !== null) return kind.deleteWhere({ where: { revokedAt: {
|
|
156551
|
+
return this.kind.deleteWhere({ where: { revokedAt: {
|
|
156717
156552
|
gte: 1,
|
|
156718
156553
|
lte: horizonMs
|
|
156719
156554
|
} } });
|
|
156720
|
-
const { deleted } = await this.store.deleteWhere.mutate({
|
|
156721
|
-
collection: OAUTH_SESSIONS_COLLECTION,
|
|
156722
|
-
filter: { whereBetween: { revokedAt: [1, horizonMs] } }
|
|
156723
|
-
});
|
|
156724
|
-
return deleted;
|
|
156725
156555
|
}
|
|
156726
156556
|
async touch(id) {
|
|
156727
156557
|
const existing = await this.getById(id);
|
|
156728
156558
|
if (existing === null) return;
|
|
156729
|
-
const
|
|
156559
|
+
const parsed = localAuthRecordKinds["oauth-sessions"].schema.safeParse(sessionToBody({
|
|
156730
156560
|
...existing,
|
|
156731
156561
|
lastUsedAt: Date.now()
|
|
156732
|
-
};
|
|
156733
|
-
|
|
156734
|
-
|
|
156735
|
-
const parsed = localAuthRecordKinds["oauth-sessions"].schema.safeParse(sessionToBody(updated));
|
|
156736
|
-
if (!parsed.success) return;
|
|
156737
|
-
await kind.put({
|
|
156738
|
-
id,
|
|
156739
|
-
data: parsed.data
|
|
156740
|
-
});
|
|
156741
|
-
return;
|
|
156742
|
-
}
|
|
156743
|
-
await this.store.update.mutate({
|
|
156744
|
-
collection: OAUTH_SESSIONS_COLLECTION,
|
|
156562
|
+
}));
|
|
156563
|
+
if (!parsed.success) return;
|
|
156564
|
+
await this.kind.put({
|
|
156745
156565
|
id,
|
|
156746
|
-
data:
|
|
156566
|
+
data: parsed.data
|
|
156747
156567
|
});
|
|
156748
156568
|
}
|
|
156749
156569
|
};
|
|
@@ -156800,10 +156620,7 @@ var require_local_auth_addon = __commonJS({
|
|
|
156800
156620
|
apiKeysKind: authStores.apiKeys,
|
|
156801
156621
|
legacyStore: store
|
|
156802
156622
|
});
|
|
156803
|
-
this.oauthSessionManager = new OauthSessionManager({
|
|
156804
|
-
oauthSessionsKind: authStores.oauthSessions,
|
|
156805
|
-
legacyStore: store
|
|
156806
|
-
});
|
|
156623
|
+
this.oauthSessionManager = new OauthSessionManager({ oauthSessionsKind: authStores.oauthSessions });
|
|
156807
156624
|
this.totpManager = new TotpManager({
|
|
156808
156625
|
userTotpKind: authStores.userTotp,
|
|
156809
156626
|
legacyStore: store
|
|
@@ -157523,7 +157340,7 @@ var require_loki_logging = __commonJS({
|
|
|
157523
157340
|
[Symbol.toStringTag]: { value: "Module" }
|
|
157524
157341
|
});
|
|
157525
157342
|
require_chunk_Cek0wNdY();
|
|
157526
|
-
var require_dist10 =
|
|
157343
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
157527
157344
|
var require_log_read_filter = require_log_read_filter_Bi066jwU();
|
|
157528
157345
|
var zod = require_zod();
|
|
157529
157346
|
function sanitizeLabelName(raw) {
|
|
@@ -158484,7 +158301,7 @@ var require_native_metrics_addon = __commonJS({
|
|
|
158484
158301
|
[Symbol.toStringTag]: { value: "Module" }
|
|
158485
158302
|
});
|
|
158486
158303
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
158487
|
-
var require_dist10 =
|
|
158304
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
158488
158305
|
var node_fs_promises = __require("fs/promises");
|
|
158489
158306
|
var node_util = __require("util");
|
|
158490
158307
|
var node_os = __require("os");
|
|
@@ -161051,7 +160868,7 @@ var require_device_history_addon = __commonJS({
|
|
|
161051
160868
|
[Symbol.toStringTag]: { value: "Module" }
|
|
161052
160869
|
});
|
|
161053
160870
|
require_chunk_Cek0wNdY();
|
|
161054
|
-
var require_dist10 =
|
|
160871
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
161055
160872
|
var FIVE_MINUTES_MS = 5 * 6e4;
|
|
161056
160873
|
var HOUR_MS = 60 * 6e4;
|
|
161057
160874
|
var DAY_MS = 24 * HOUR_MS;
|
|
@@ -164097,7 +163914,7 @@ var require_filesystem_storage_addon = __commonJS({
|
|
|
164097
163914
|
[Symbol.toStringTag]: { value: "Module" }
|
|
164098
163915
|
});
|
|
164099
163916
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
164100
|
-
var require_dist10 =
|
|
163917
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
164101
163918
|
var node_crypto = __require("crypto");
|
|
164102
163919
|
var node_fs_promises = __require("fs/promises");
|
|
164103
163920
|
var node_path = __require("path");
|
|
@@ -165207,12 +165024,12 @@ var require_lib = __commonJS({
|
|
|
165207
165024
|
}
|
|
165208
165025
|
});
|
|
165209
165026
|
|
|
165210
|
-
// ../system/dist/wal-maintenance-
|
|
165211
|
-
var
|
|
165212
|
-
"../system/dist/wal-maintenance-
|
|
165027
|
+
// ../system/dist/wal-maintenance-DBvuVU9s.js
|
|
165028
|
+
var require_wal_maintenance_DBvuVU9s = __commonJS({
|
|
165029
|
+
"../system/dist/wal-maintenance-DBvuVU9s.js"(exports) {
|
|
165213
165030
|
"use strict";
|
|
165214
165031
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
165215
|
-
var require_dist10 =
|
|
165032
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
165216
165033
|
var require_prefix_range = require_prefix_range_D_KueXbQ();
|
|
165217
165034
|
var node_crypto = __require("crypto");
|
|
165218
165035
|
var node_module = __require("module");
|
|
@@ -165496,7 +165313,6 @@ var require_wal_maintenance_CaJjuLHq = __commonJS({
|
|
|
165496
165313
|
function controlTargetOf(backend, threadId) {
|
|
165497
165314
|
return {
|
|
165498
165315
|
hasTable: ({ name }) => backend.hasTable(name),
|
|
165499
|
-
dropRetiredTable: ({ name }) => backend.dropRetiredTable(name),
|
|
165500
165316
|
threadId: () => threadId,
|
|
165501
165317
|
listPhysicalTables: ({ ownerPrefix }) => backend.listTables(ownerPrefix)
|
|
165502
165318
|
};
|
|
@@ -165588,9 +165404,6 @@ var require_wal_maintenance_CaJjuLHq = __commonJS({
|
|
|
165588
165404
|
params
|
|
165589
165405
|
};
|
|
165590
165406
|
}
|
|
165591
|
-
var RECORDS_TABLE = "records";
|
|
165592
|
-
var RECORD_KINDS_TABLE = "_record_kinds";
|
|
165593
|
-
var RECORD_SEQUENCES_TABLE = "_record_sequences";
|
|
165594
165407
|
var RECORDS_SCHEMA_SQL = `
|
|
165595
165408
|
CREATE TABLE IF NOT EXISTS records (
|
|
165596
165409
|
rid INTEGER PRIMARY KEY,
|
|
@@ -165626,11 +165439,6 @@ CREATE TABLE IF NOT EXISTS _record_sequences (
|
|
|
165626
165439
|
next INTEGER NOT NULL
|
|
165627
165440
|
);
|
|
165628
165441
|
`;
|
|
165629
|
-
var RECORDS_ENGINE_TABLES = [
|
|
165630
|
-
RECORDS_TABLE,
|
|
165631
|
-
RECORD_KINDS_TABLE,
|
|
165632
|
-
RECORD_SEQUENCES_TABLE
|
|
165633
|
-
];
|
|
165634
165442
|
var INDEX_KIND_DEVICE_AT = "records_kind_device_at";
|
|
165635
165443
|
var INDEX_KIND_AT = "records_kind_at";
|
|
165636
165444
|
var FIELD_PATH = /^[A-Za-z_][A-Za-z0-9_]{0,63}(\.[A-Za-z_][A-Za-z0-9_]{0,63}){0,3}$/;
|
|
@@ -166634,7 +166442,6 @@ CREATE TABLE IF NOT EXISTS _record_sequences (
|
|
|
166634
166442
|
];
|
|
166635
166443
|
var CONTROL_OPS = [
|
|
166636
166444
|
"hasTable",
|
|
166637
|
-
"dropRetiredTable",
|
|
166638
166445
|
"threadId",
|
|
166639
166446
|
"listPhysicalTables"
|
|
166640
166447
|
];
|
|
@@ -166883,9 +166690,6 @@ CREATE TABLE IF NOT EXISTS _record_sequences (
|
|
|
166883
166690
|
kind: kind === "table" || kind === "index" ? kind : "unknown"
|
|
166884
166691
|
};
|
|
166885
166692
|
}
|
|
166886
|
-
function isCountRow(raw) {
|
|
166887
|
-
return raw !== null && typeof raw === "object" && typeof Reflect.get(raw, "n") === "number";
|
|
166888
|
-
}
|
|
166889
166693
|
function parseRowData(raw) {
|
|
166890
166694
|
return require_dist10.asJsonObject(require_dist10.parseJsonUnknown(raw)) ?? {};
|
|
166891
166695
|
}
|
|
@@ -167848,28 +167652,6 @@ CREATE TABLE IF NOT EXISTS _record_sequences (
|
|
|
167848
167652
|
return out;
|
|
167849
167653
|
}
|
|
167850
167654
|
/**
|
|
167851
|
-
* Drop one table nobody owns (D870 migration, one-shot). Refuses a canonical
|
|
167852
|
-
* or engine table, one a running addon declared since boot, a table that is
|
|
167853
|
-
* not there, and a row count other than the one the caller stated.
|
|
167854
|
-
*/
|
|
167855
|
-
dropTable(name, expectRows) {
|
|
167856
|
-
if (name.startsWith("sqlite_") || name === SqliteSettingsBackend2.DECLARATIONS_TABLE) throw new Error(`drop refused: "${name}" is an engine table`);
|
|
167857
|
-
if (RECORDS_ENGINE_TABLES.includes(name)) throw new Error(`drop refused: "${name}" is a table of the records engine`);
|
|
167858
|
-
if (SqliteSettingsBackend2.CANONICAL_KV_COLLECTIONS.includes(name)) throw new Error(`drop refused: "${name}" is a canonical collection`);
|
|
167859
|
-
if (this.declaredThisBoot.has(name)) throw new Error(`drop refused: "${name}" is declared by a running addon`);
|
|
167860
|
-
if (!this.hasTable(name)) throw new Error(`drop refused: no table "${name}"`);
|
|
167861
|
-
const db = this.getDb();
|
|
167862
|
-
const rows = db.prepare(`SELECT COUNT(*) AS c FROM "${name}"`).get()?.c ?? 0;
|
|
167863
|
-
if (rows !== expectRows) throw new Error(`drop refused: "${name}" holds ${rows} rows, the caller expected ${expectRows}`);
|
|
167864
|
-
db.transaction(() => {
|
|
167865
|
-
db.exec(`DROP TABLE "${name}"`);
|
|
167866
|
-
this.ensureDeclarationsTable();
|
|
167867
|
-
db.prepare(`DELETE FROM "${SqliteSettingsBackend2.DECLARATIONS_TABLE}" WHERE name = ?`).run(name);
|
|
167868
|
-
})();
|
|
167869
|
-
this.declaredCollections.delete(name);
|
|
167870
|
-
return rows;
|
|
167871
|
-
}
|
|
167872
|
-
/**
|
|
167873
167655
|
* The tables this file's own `_collection_declarations` names — the
|
|
167874
167656
|
* placement authority (D851). Read from DISK, not from memory, so a table
|
|
167875
167657
|
* created and declared by an earlier life of the process still counts.
|
|
@@ -168289,31 +168071,6 @@ CREATE TABLE IF NOT EXISTS _record_sequences (
|
|
|
168289
168071
|
}
|
|
168290
168072
|
this.structuredTables.set(table, fingerprint);
|
|
168291
168073
|
}
|
|
168292
|
-
/**
|
|
168293
|
-
* Drop a table nothing declares any more, reporting what went with it.
|
|
168294
|
-
*
|
|
168295
|
-
* The DDL lives here because the engine owns the handle AND the two memos
|
|
168296
|
-
* that outlive a table: `structuredTables` (schema fingerprint) and
|
|
168297
|
-
* `declaredCollections` (the column set `compileFilter` resolves against).
|
|
168298
|
-
* Dropping behind their backs would leave a ghost — a later declaration of
|
|
168299
|
-
* the same name would be memoised as "already materialised" against a table
|
|
168300
|
-
* that no longer exists.
|
|
168301
|
-
*
|
|
168302
|
-
* WHICH tables are retired, and the logging, are policy: they live in
|
|
168303
|
-
* `retired-collections.ts`. This method knows only how to drop one.
|
|
168304
|
-
*
|
|
168305
|
-
* Answers `null` when the table is not there — the steady state after the
|
|
168306
|
-
* first boot that ran the purge, and the case on a fresh install.
|
|
168307
|
-
*/
|
|
168308
|
-
dropRetiredTable(table) {
|
|
168309
|
-
if (this.getDb().prepare(`SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?`).get(table) === void 0) return null;
|
|
168310
|
-
const counted = this.getDb().prepare(`SELECT COUNT(*) AS n FROM "${table}"`).get();
|
|
168311
|
-
const rows = isCountRow(counted) ? counted.n : 0;
|
|
168312
|
-
this.getDb().exec(`DROP TABLE "${table}"`);
|
|
168313
|
-
this.structuredTables.delete(table);
|
|
168314
|
-
this.declaredCollections.delete(table);
|
|
168315
|
-
return { rows };
|
|
168316
|
-
}
|
|
168317
168074
|
/** Returns SQLite's `lastInsertRowid` — the only place an auto-assigned key
|
|
168318
168075
|
* is knowable (D473). */
|
|
168319
168076
|
async tableInsert(table, row) {
|
|
@@ -169389,9 +169146,9 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
169389
169146
|
[Symbol.toStringTag]: { value: "Module" }
|
|
169390
169147
|
});
|
|
169391
169148
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
169392
|
-
var require_dist10 =
|
|
169393
|
-
var require_retired_settings_keys =
|
|
169394
|
-
var require_wal_maintenance =
|
|
169149
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
169150
|
+
var require_retired_settings_keys = require_retired_settings_keys_CGUqX_Oz();
|
|
169151
|
+
var require_wal_maintenance = require_wal_maintenance_DBvuVU9s();
|
|
169395
169152
|
var require_sqlite_snapshot_protocol = require_sqlite_snapshot_protocol_B9OndqZv();
|
|
169396
169153
|
var require_wal_checkpoint_policy = require_wal_checkpoint_policy_d2z2qPqx();
|
|
169397
169154
|
var node_fs_promises = __require("fs/promises");
|
|
@@ -170277,9 +170034,6 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
170277
170034
|
listPhysicalTables(ownerPrefix) {
|
|
170278
170035
|
return Promise.resolve(require_wal_maintenance.callControl(require_wal_maintenance.controlTargetOf(this.backend, 0), "listPhysicalTables", { ownerPrefix }));
|
|
170279
170036
|
}
|
|
170280
|
-
async dropRetiredTable(name) {
|
|
170281
|
-
return require_wal_maintenance.callControl(require_wal_maintenance.controlTargetOf(this.backend, 0), "dropRetiredTable", { name });
|
|
170282
|
-
}
|
|
170283
170037
|
async servingThreadId() {
|
|
170284
170038
|
return 0;
|
|
170285
170039
|
}
|
|
@@ -170333,9 +170087,6 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
170333
170087
|
listPhysicalTables(ownerPrefix) {
|
|
170334
170088
|
return this.client.control("listPhysicalTables", { ownerPrefix });
|
|
170335
170089
|
}
|
|
170336
|
-
dropRetiredTable(name) {
|
|
170337
|
-
return this.client.control("dropRetiredTable", { name });
|
|
170338
|
-
}
|
|
170339
170090
|
servingThreadId() {
|
|
170340
170091
|
return this.client.control("threadId", {});
|
|
170341
170092
|
}
|
|
@@ -170808,13 +170559,11 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
170808
170559
|
var StorageAdminProvider = class {
|
|
170809
170560
|
backend;
|
|
170810
170561
|
logger;
|
|
170811
|
-
installedOwners;
|
|
170812
170562
|
records;
|
|
170813
170563
|
peerFiles;
|
|
170814
|
-
constructor(backend, logger,
|
|
170564
|
+
constructor(backend, logger, records, peerFiles = async () => []) {
|
|
170815
170565
|
this.backend = backend;
|
|
170816
170566
|
this.logger = logger;
|
|
170817
|
-
this.installedOwners = installedOwners;
|
|
170818
170567
|
this.records = records;
|
|
170819
170568
|
this.peerFiles = peerFiles;
|
|
170820
170569
|
}
|
|
@@ -170824,19 +170573,6 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
170824
170573
|
readRecords(input) {
|
|
170825
170574
|
return this.records.readRecords(input);
|
|
170826
170575
|
}
|
|
170827
|
-
/** May this table be dropped AT ALL? Throws with the reason when not. */
|
|
170828
|
-
async assertDroppable(collection) {
|
|
170829
|
-
const colon = collection.indexOf(":");
|
|
170830
|
-
const base = colon > 0 ? collection.slice(colon + 1) : "";
|
|
170831
|
-
if (colon > 0 && require_dist10.STORAGE_ADMIN_SCOPED_BASES.includes(base)) return;
|
|
170832
|
-
if (require_dist10.STORAGE_ADMIN_MOVED_COLLECTIONS.includes(collection)) return;
|
|
170833
|
-
if (colon <= 0) throw new Error(`drop refused: "${collection}" is not a scoped table`);
|
|
170834
|
-
const installed = await this.installedOwners().catch((err) => {
|
|
170835
|
-
throw new Error(`drop refused: the installed addons could not be read (${err instanceof Error ? err.message : String(err)})`);
|
|
170836
|
-
});
|
|
170837
|
-
const owner = collection.slice(0, colon);
|
|
170838
|
-
if (installed.has(owner)) throw new Error(`drop refused: "${collection}" belongs to the installed addon "${owner}"`);
|
|
170839
|
-
}
|
|
170840
170576
|
async listTables(input) {
|
|
170841
170577
|
const tables = [...this.backend.listTables(input.ownerPrefix)];
|
|
170842
170578
|
for (const file of await this.peerFiles()) tables.push(...await file.listPhysicalTables(input.ownerPrefix));
|
|
@@ -170847,98 +170583,7 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
170847
170583
|
} });
|
|
170848
170584
|
return { tables };
|
|
170849
170585
|
}
|
|
170850
|
-
async dropCollection(input) {
|
|
170851
|
-
try {
|
|
170852
|
-
await this.assertDroppable(input.collection);
|
|
170853
|
-
const rows = this.backend.dropTable(input.collection, input.expectRows);
|
|
170854
|
-
this.logger.warn("storage-admin: DROPPED a table", { meta: {
|
|
170855
|
-
collection: input.collection,
|
|
170856
|
-
rows
|
|
170857
|
-
} });
|
|
170858
|
-
return {
|
|
170859
|
-
dropped: true,
|
|
170860
|
-
rows
|
|
170861
|
-
};
|
|
170862
|
-
} catch (err) {
|
|
170863
|
-
this.logger.warn("storage-admin: drop refused", { meta: {
|
|
170864
|
-
collection: input.collection,
|
|
170865
|
-
expectRows: input.expectRows,
|
|
170866
|
-
error: err instanceof Error ? err.message : String(err)
|
|
170867
|
-
} });
|
|
170868
|
-
throw err;
|
|
170869
|
-
}
|
|
170870
|
-
}
|
|
170871
170586
|
};
|
|
170872
|
-
var RETIRED_COLLECTIONS = [
|
|
170873
|
-
{
|
|
170874
|
-
collection: "devices",
|
|
170875
|
-
owner: "integration-registry",
|
|
170876
|
-
reason: "the device half of the integration-registry is deleted; the fleet is `device-manager:devices` and always was (0 rows here against 974 live devices)"
|
|
170877
|
-
},
|
|
170878
|
-
{
|
|
170879
|
-
collection: "device_settings_kv",
|
|
170880
|
-
owner: "integration-registry",
|
|
170881
|
-
reason: "per-device settings of a device table that never had a row; the live per-camera store is the device-manager row plus `addon-device-settings`"
|
|
170882
|
-
},
|
|
170883
|
-
{
|
|
170884
|
-
collection: "pipeline-analytics:track-groups",
|
|
170885
|
-
owner: "pipeline-analytics",
|
|
170886
|
-
reason: "the co-moving group entity is deleted (operator decision 2026-09-01, after the 2026-08-24 kill switch); nothing declares, writes or reads it"
|
|
170887
|
-
},
|
|
170888
|
-
{
|
|
170889
|
-
collection: "pipeline-analytics:track-group-members",
|
|
170890
|
-
owner: "pipeline-analytics",
|
|
170891
|
-
reason: "membership rows of the deleted group entity; the track cascade that used to carry them away no longer has a group leg"
|
|
170892
|
-
},
|
|
170893
|
-
{
|
|
170894
|
-
collection: "pipeline-analytics:summaries",
|
|
170895
|
-
owner: "pipeline-analytics",
|
|
170896
|
-
reason: "the session summary (proximity track grouping, D489/D490) is deleted (operator decision 2026-09-29, D680, after the 2026-09-16 switch-off); nothing declares, writes or reads it"
|
|
170897
|
-
},
|
|
170898
|
-
{
|
|
170899
|
-
collection: "pipeline-analytics:summary-members",
|
|
170900
|
-
owner: "pipeline-analytics",
|
|
170901
|
-
reason: "membership rows of the deleted session summary; the track cascade no longer has a summary leg (D680)"
|
|
170902
|
-
}
|
|
170903
|
-
];
|
|
170904
|
-
function retiredCollectionStoreOfFile(file) {
|
|
170905
|
-
return { async drop(collection) {
|
|
170906
|
-
return file.dropRetiredTable(collection);
|
|
170907
|
-
} };
|
|
170908
|
-
}
|
|
170909
|
-
async function purgeRetiredCollections(store, logger, specs = RETIRED_COLLECTIONS) {
|
|
170910
|
-
const results = [];
|
|
170911
|
-
for (const spec of specs) {
|
|
170912
|
-
let dropped;
|
|
170913
|
-
try {
|
|
170914
|
-
dropped = await store.drop(spec.collection);
|
|
170915
|
-
} catch (err) {
|
|
170916
|
-
logger.warn("retired collection \u2014 drop failed, table left in place", { meta: {
|
|
170917
|
-
addon: spec.owner,
|
|
170918
|
-
collection: spec.collection,
|
|
170919
|
-
error: err instanceof Error ? err.message : String(err)
|
|
170920
|
-
} });
|
|
170921
|
-
continue;
|
|
170922
|
-
}
|
|
170923
|
-
if (dropped === null) continue;
|
|
170924
|
-
const result = {
|
|
170925
|
-
collection: spec.collection,
|
|
170926
|
-
owner: spec.owner,
|
|
170927
|
-
rows: dropped.rows
|
|
170928
|
-
};
|
|
170929
|
-
results.push(result);
|
|
170930
|
-
const line = "dropped a retired collection";
|
|
170931
|
-
if (dropped.rows > 0) logger.warn(`${line} \u2014 it still held rows`, { meta: {
|
|
170932
|
-
...result,
|
|
170933
|
-
reason: spec.reason
|
|
170934
|
-
} });
|
|
170935
|
-
else logger.info(line, { meta: {
|
|
170936
|
-
...result,
|
|
170937
|
-
reason: spec.reason
|
|
170938
|
-
} });
|
|
170939
|
-
}
|
|
170940
|
-
return results;
|
|
170941
|
-
}
|
|
170942
170587
|
var DATABASE_FILE_NAMES = {
|
|
170943
170588
|
settings: "camstack.db",
|
|
170944
170589
|
events: "events.db",
|
|
@@ -171028,14 +170673,13 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
171028
170673
|
},
|
|
171029
170674
|
{
|
|
171030
170675
|
capability: require_dist10.storageAdminCapability,
|
|
171031
|
-
provider: new StorageAdminProvider(settings.backend, this.ctx.logger.child("StorageAdmin"),
|
|
170676
|
+
provider: new StorageAdminProvider(settings.backend, this.ctx.logger.child("StorageAdmin"), records, async () => router.openFiles().filter((file) => file.databaseId !== "settings"))
|
|
171032
170677
|
}
|
|
171033
170678
|
];
|
|
171034
170679
|
}
|
|
171035
170680
|
/**
|
|
171036
170681
|
* Housekeeping that must happen BEFORE anything can read a file: the
|
|
171037
|
-
* retired-key purge (settings only)
|
|
171038
|
-
* open file).
|
|
170682
|
+
* retired-key purge (settings file only).
|
|
171039
170683
|
*/
|
|
171040
170684
|
async purgeBeforeServing(file) {
|
|
171041
170685
|
if (file instanceof InlineOwnedFile && file.databaseId === "settings") try {
|
|
@@ -171043,7 +170687,6 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
171043
170687
|
} catch (err) {
|
|
171044
170688
|
this.ctx.logger.warn("Retired-key purge failed", { meta: { error: require_dist10.errMsg(err) } });
|
|
171045
170689
|
}
|
|
171046
|
-
await purgeRetiredCollections(retiredCollectionStoreOfFile(file), this.ctx.logger.child("RetiredCollections").withTags({ database: file.databaseId }));
|
|
171047
170690
|
}
|
|
171048
170691
|
/**
|
|
171049
170692
|
* The engine's TTL sweep (D881): every 10 minutes, off the boot path (the
|
|
@@ -171118,7 +170761,7 @@ var require_sqlite_storage = __commonJS({
|
|
|
171118
170761
|
});
|
|
171119
170762
|
require_chunk_Cek0wNdY();
|
|
171120
170763
|
var require_builtins_sqlite_storage_filesystem_storage_addon = require_filesystem_storage_addon();
|
|
171121
|
-
var require_wal_maintenance =
|
|
170764
|
+
var require_wal_maintenance = require_wal_maintenance_DBvuVU9s();
|
|
171122
170765
|
var require_builtins_sqlite_storage_sqlite_settings_addon = require_sqlite_settings_addon();
|
|
171123
170766
|
var ConfigStore = class {
|
|
171124
170767
|
db;
|
|
@@ -171202,7 +170845,7 @@ var require_storage_orchestrator_addon = __commonJS({
|
|
|
171202
170845
|
[Symbol.toStringTag]: { value: "Module" }
|
|
171203
170846
|
});
|
|
171204
170847
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
171205
|
-
var require_dist10 =
|
|
170848
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
171206
170849
|
var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
|
|
171207
170850
|
var zod = require_zod();
|
|
171208
170851
|
var node_crypto = __require("crypto");
|
|
@@ -175789,12 +175432,12 @@ var require_storage_orchestrator = __commonJS({
|
|
|
175789
175432
|
}
|
|
175790
175433
|
});
|
|
175791
175434
|
|
|
175792
|
-
// ../system/dist/agent-https-
|
|
175793
|
-
var
|
|
175794
|
-
"../system/dist/agent-https-
|
|
175435
|
+
// ../system/dist/agent-https-C6M6apPV.js
|
|
175436
|
+
var require_agent_https_C6M6apPV = __commonJS({
|
|
175437
|
+
"../system/dist/agent-https-C6M6apPV.js"(exports) {
|
|
175795
175438
|
"use strict";
|
|
175796
175439
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
175797
|
-
var require_dist10 =
|
|
175440
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
175798
175441
|
var require_x509_es = require_x509_es_C4cOo48M();
|
|
175799
175442
|
var zod = require_zod();
|
|
175800
175443
|
var node_crypto = __require("crypto");
|
|
@@ -176852,11 +176495,11 @@ var require_agent_https_Dnr_nIVx = __commonJS({
|
|
|
176852
176495
|
}
|
|
176853
176496
|
});
|
|
176854
176497
|
|
|
176855
|
-
// ../system/dist/constants-
|
|
176856
|
-
var
|
|
176857
|
-
"../system/dist/constants-
|
|
176498
|
+
// ../system/dist/constants-7ZMxWr8Z.js
|
|
176499
|
+
var require_constants_7ZMxWr8Z = __commonJS({
|
|
176500
|
+
"../system/dist/constants-7ZMxWr8Z.js"(exports) {
|
|
176858
176501
|
"use strict";
|
|
176859
|
-
var MESH_CA_KEY_REF =
|
|
176502
|
+
var MESH_CA_KEY_REF = require_dist_Ct_4tTeX().buildSecretRef({
|
|
176860
176503
|
owner: "system",
|
|
176861
176504
|
scope: { kind: "global" },
|
|
176862
176505
|
fieldPath: "meshCaKey"
|
|
@@ -193953,11 +193596,11 @@ var require_system_config_addon = __commonJS({
|
|
|
193953
193596
|
[Symbol.toStringTag]: { value: "Module" }
|
|
193954
193597
|
});
|
|
193955
193598
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
193956
|
-
var require_dist10 =
|
|
193599
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
193957
193600
|
var require_safe_buffer$1 = require_safe_buffer_D3aoa_7X();
|
|
193958
193601
|
var require_x509_es = require_x509_es_C4cOo48M();
|
|
193959
|
-
var require_agent_https =
|
|
193960
|
-
var require_constants$8 =
|
|
193602
|
+
var require_agent_https = require_agent_https_C6M6apPV();
|
|
193603
|
+
var require_constants$8 = require_constants_7ZMxWr8Z();
|
|
193961
193604
|
var require_src$1 = require_src_CnAqG6EF();
|
|
193962
193605
|
var zod = require_zod();
|
|
193963
193606
|
var node_crypto = __require("crypto");
|
|
@@ -275009,7 +274652,7 @@ var require_winston_logging = __commonJS({
|
|
|
275009
274652
|
[Symbol.toStringTag]: { value: "Module" }
|
|
275010
274653
|
});
|
|
275011
274654
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
275012
|
-
var require_dist10 =
|
|
274655
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
275013
274656
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
275014
274657
|
var require_log_file_read_protocol = require_log_file_read_protocol_D0WcLbIV();
|
|
275015
274658
|
var node_path = __require("path");
|
|
@@ -282812,14 +282455,14 @@ var require_lib_8oZrELLm = __commonJS({
|
|
|
282812
282455
|
}
|
|
282813
282456
|
});
|
|
282814
282457
|
|
|
282815
|
-
// ../system/dist/hub-mdns-ciao-
|
|
282816
|
-
var
|
|
282817
|
-
"../system/dist/hub-mdns-ciao-
|
|
282458
|
+
// ../system/dist/hub-mdns-ciao-DJ-Amqd7.js
|
|
282459
|
+
var require_hub_mdns_ciao_DJ_Amqd7 = __commonJS({
|
|
282460
|
+
"../system/dist/hub-mdns-ciao-DJ-Amqd7.js"(exports) {
|
|
282818
282461
|
"use strict";
|
|
282819
282462
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
282820
|
-
var require_dist10 =
|
|
282463
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
282821
282464
|
var require_x509_es = require_x509_es_C4cOo48M();
|
|
282822
|
-
var require_agent_https =
|
|
282465
|
+
var require_agent_https = require_agent_https_C6M6apPV();
|
|
282823
282466
|
var node_crypto = __require("crypto");
|
|
282824
282467
|
var _camstack_types_node = require_node();
|
|
282825
282468
|
var node_fs_promises = __require("fs/promises");
|
|
@@ -283831,12 +283474,12 @@ var require_platform_key_source_Di7HrlGR = __commonJS({
|
|
|
283831
283474
|
}
|
|
283832
283475
|
});
|
|
283833
283476
|
|
|
283834
|
-
// ../system/dist/restore-archive-
|
|
283835
|
-
var
|
|
283836
|
-
"../system/dist/restore-archive-
|
|
283477
|
+
// ../system/dist/restore-archive-HwOA83v3.js
|
|
283478
|
+
var require_restore_archive_HwOA83v3 = __commonJS({
|
|
283479
|
+
"../system/dist/restore-archive-HwOA83v3.js"(exports) {
|
|
283837
283480
|
"use strict";
|
|
283838
283481
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
283839
|
-
var require_dist10 =
|
|
283482
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
283840
283483
|
var zod = require_zod();
|
|
283841
283484
|
var node_crypto = __require("crypto");
|
|
283842
283485
|
var buffer = __require("buffer");
|
|
@@ -295077,9 +294720,9 @@ var require_dist3 = __commonJS({
|
|
|
295077
294720
|
"use strict";
|
|
295078
294721
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
295079
294722
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
295080
|
-
var require_dist10 =
|
|
294723
|
+
var require_dist10 = require_dist_Ct_4tTeX();
|
|
295081
294724
|
var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
|
|
295082
|
-
var require_device_ca =
|
|
294725
|
+
var require_device_ca = require_device_ca_CUEx7sti();
|
|
295083
294726
|
var require_builtins_alerts_alerts_addon = require_alerts_addon();
|
|
295084
294727
|
require_alerts();
|
|
295085
294728
|
var require_builtins_calendars_calendars_addon = require_calendars_addon();
|
|
@@ -295088,11 +294731,9 @@ var require_dist3 = __commonJS({
|
|
|
295088
294731
|
require_composer();
|
|
295089
294732
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
295090
294733
|
var require_builtins_console_logging_index = require_console_logging();
|
|
295091
|
-
var require_prefix_range = require_prefix_range_D_KueXbQ();
|
|
295092
294734
|
var require_prefix_walk = require_prefix_walk_Dv6MLZlM();
|
|
295093
294735
|
var require_builtins_core_blocks_core_blocks_addon = require_core_blocks_addon();
|
|
295094
294736
|
require_core_blocks();
|
|
295095
|
-
var require_retired_settings_keys = require_retired_settings_keys_D_VwZiDt();
|
|
295096
294737
|
var require_builtins_device_manager_device_manager_addon = require_device_manager_addon();
|
|
295097
294738
|
require_device_manager();
|
|
295098
294739
|
var require_builtins_hub_forwarder_index = require_hub_forwarder();
|
|
@@ -295105,21 +294746,21 @@ var require_dist3 = __commonJS({
|
|
|
295105
294746
|
var require_builtins_native_metrics_native_metrics_addon = require_native_metrics_addon();
|
|
295106
294747
|
var require_builtins_device_history_device_history_addon = require_device_history_addon();
|
|
295107
294748
|
var require_builtins_sqlite_storage_filesystem_storage_addon = require_filesystem_storage_addon();
|
|
295108
|
-
var require_wal_maintenance =
|
|
294749
|
+
var require_wal_maintenance = require_wal_maintenance_DBvuVU9s();
|
|
295109
294750
|
var require_builtins_sqlite_storage_sqlite_settings_addon = require_sqlite_settings_addon();
|
|
295110
294751
|
var require_builtins_sqlite_storage_index = require_sqlite_storage();
|
|
295111
294752
|
var require_builtins_storage_orchestrator_storage_orchestrator_addon = require_storage_orchestrator_addon();
|
|
295112
294753
|
require_storage_orchestrator();
|
|
295113
|
-
var require_agent_https =
|
|
295114
|
-
var require_constants15 =
|
|
294754
|
+
var require_agent_https = require_agent_https_C6M6apPV();
|
|
294755
|
+
var require_constants15 = require_constants_7ZMxWr8Z();
|
|
295115
294756
|
var require_builtins_system_config_system_config_addon = require_system_config_addon();
|
|
295116
294757
|
require_system_config();
|
|
295117
294758
|
var require_builtins_winston_logging_index = require_winston_logging();
|
|
295118
294759
|
var require_custom_action_registry = require_custom_action_registry_MRyes5j0();
|
|
295119
|
-
var require_hub_mdns_ciao =
|
|
294760
|
+
var require_hub_mdns_ciao = require_hub_mdns_ciao_DJ_Amqd7();
|
|
295120
294761
|
var require_platform_key_source = require_platform_key_source_Di7HrlGR();
|
|
295121
294762
|
var require_resource_monitor = require_resource_monitor_mio9dSCT();
|
|
295122
|
-
var require_restore_archive =
|
|
294763
|
+
var require_restore_archive = require_restore_archive_HwOA83v3();
|
|
295123
294764
|
var require_coral_accelerators = require_coral_accelerators_oUXmmbc2();
|
|
295124
294765
|
var zod = require_zod();
|
|
295125
294766
|
var node_crypto = __require("crypto");
|
|
@@ -295909,22 +295550,22 @@ var require_dist3 = __commonJS({
|
|
|
295909
295550
|
const queuedTop = window2.queued.top.map((p) => `${p.peerId}:${kb$1(p.bytes)}`).join(",");
|
|
295910
295551
|
return ` socketPeers=${window2.peersMeasured}/${window2.peersConnected} socketTx=${formatDirection(window2.tx)} socketRx=${formatDirection(window2.rx)}` + (top.length === 0 ? "" : ` socketTop=${top}`) + (topBytes.length === 0 ? "" : ` socketTopBytes=${topBytes}`) + ` socketQueued=${kb$1(window2.queued.totalBytes)}kB` + (window2.queued.unmeasured === 0 ? "" : ` socketQueuedUnmeasured=${window2.queued.unmeasured}`) + (queuedTop.length === 0 ? "" : ` socketQueuedTop=${queuedTop}`) + (window2.forward === void 0 ? "" : ` socketFwd=${window2.forward.raw}/${window2.forward.decoded}`) + (window2.actions === void 0 ? "" : ` socketActions=${kb$1(window2.actions.labelledBytes)}/${kb$1(window2.actions.totalBytes)}kB` + (window2.actions.top.length === 0 ? "" : ` socketTopActions=${window2.actions.top.map(formatAction).join(",")}`));
|
|
295911
295552
|
}
|
|
295912
|
-
function isRecord$
|
|
295553
|
+
function isRecord$6(value) {
|
|
295913
295554
|
return typeof value === "object" && value !== null;
|
|
295914
295555
|
}
|
|
295915
295556
|
function writerSocketsOf(broker) {
|
|
295916
|
-
if (!isRecord$
|
|
295557
|
+
if (!isRecord$6(broker)) return void 0;
|
|
295917
295558
|
const transit = broker["transit"];
|
|
295918
|
-
if (!isRecord$
|
|
295559
|
+
if (!isRecord$6(transit)) return void 0;
|
|
295919
295560
|
const transporter = transit["tx"];
|
|
295920
|
-
if (!isRecord$
|
|
295561
|
+
if (!isRecord$6(transporter)) return void 0;
|
|
295921
295562
|
const writer = transporter["writer"];
|
|
295922
|
-
if (!isRecord$
|
|
295563
|
+
if (!isRecord$6(writer)) return void 0;
|
|
295923
295564
|
const sockets = writer["sockets"];
|
|
295924
295565
|
return sockets instanceof Map ? sockets : void 0;
|
|
295925
295566
|
}
|
|
295926
295567
|
function readSocket(nodeId, socket) {
|
|
295927
|
-
if (typeof nodeId !== "string" || !isRecord$
|
|
295568
|
+
if (typeof nodeId !== "string" || !isRecord$6(socket)) return void 0;
|
|
295928
295569
|
const queuedBytes = socket["writableLength"];
|
|
295929
295570
|
const bytesWritten = socket["bytesWritten"];
|
|
295930
295571
|
if (typeof queuedBytes !== "number" || typeof bytesWritten !== "number") return void 0;
|
|
@@ -299530,7 +299171,6 @@ var require_dist3 = __commonJS({
|
|
|
299530
299171
|
};
|
|
299531
299172
|
}
|
|
299532
299173
|
};
|
|
299533
|
-
var CLUSTER_NODE_HISTORY_COLLECTION = "cluster-node-history";
|
|
299534
299174
|
var NodePackageEntrySchema = zod.z.object({
|
|
299535
299175
|
name: zod.z.string(),
|
|
299536
299176
|
version: zod.z.string().nullable()
|
|
@@ -299823,27 +299463,27 @@ var require_dist3 = __commonJS({
|
|
|
299823
299463
|
throw new Error(`no system npm on PATH and the npm bootstrap failed \u2014 cannot install addon dependencies on this node: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
299824
299464
|
}
|
|
299825
299465
|
}
|
|
299826
|
-
function isRecord$
|
|
299466
|
+
function isRecord$5(value) {
|
|
299827
299467
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
299828
299468
|
}
|
|
299829
299469
|
function isAddonConstructor(fn) {
|
|
299830
299470
|
if (typeof fn !== "function") return false;
|
|
299831
299471
|
const proto = fn.prototype;
|
|
299832
|
-
if (!isRecord$
|
|
299472
|
+
if (!isRecord$5(proto)) return false;
|
|
299833
299473
|
return typeof proto["initialize"] === "function";
|
|
299834
299474
|
}
|
|
299835
299475
|
function resolveAddonClass(mod) {
|
|
299836
299476
|
let candidate = mod["default"];
|
|
299837
|
-
if (isRecord$
|
|
299477
|
+
if (isRecord$5(candidate) && "default" in candidate) candidate = candidate["default"];
|
|
299838
299478
|
if (isAddonConstructor(candidate)) return candidate;
|
|
299839
|
-
if (isRecord$
|
|
299479
|
+
if (isRecord$5(candidate)) {
|
|
299840
299480
|
const fn = Object.values(candidate).find(isAddonConstructor);
|
|
299841
299481
|
if (fn) return fn;
|
|
299842
299482
|
}
|
|
299843
299483
|
const namedAddon = Object.values(mod).find(isAddonConstructor);
|
|
299844
299484
|
if (namedAddon) return namedAddon;
|
|
299845
299485
|
}
|
|
299846
|
-
function isRecord$
|
|
299486
|
+
function isRecord$4(value) {
|
|
299847
299487
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
299848
299488
|
}
|
|
299849
299489
|
var PACKAGE_JSON_LOOKUP_DEPTH = 4;
|
|
@@ -299883,12 +299523,12 @@ var require_dist3 = __commonJS({
|
|
|
299883
299523
|
return import(`${(0, node_url.pathToFileURL)(entryPath).href}?v=${encodeURIComponent(bust)}`);
|
|
299884
299524
|
}
|
|
299885
299525
|
function isAddonPackageManifest(value) {
|
|
299886
|
-
if (!isRecord$
|
|
299526
|
+
if (!isRecord$4(value)) return false;
|
|
299887
299527
|
if (!Array.isArray(value.addons)) return false;
|
|
299888
|
-
return value.addons.every((a) => isRecord$
|
|
299528
|
+
return value.addons.every((a) => isRecord$4(a) && typeof a.id === "string");
|
|
299889
299529
|
}
|
|
299890
299530
|
function toAddonPackageManifest(value) {
|
|
299891
|
-
if (!isRecord$
|
|
299531
|
+
if (!isRecord$4(value)) return void 0;
|
|
299892
299532
|
if (!isAddonPackageManifest(value)) return void 0;
|
|
299893
299533
|
return value;
|
|
299894
299534
|
}
|
|
@@ -300045,7 +299685,7 @@ var require_dist3 = __commonJS({
|
|
|
300045
299685
|
}
|
|
300046
299686
|
if (!node_fs.existsSync(entryPath)) throw new Error(`Entry not found: ${entryPath}`);
|
|
300047
299687
|
const modUnknown = await importAddonModuleFresh(entryPath);
|
|
300048
|
-
const mod = isRecord$
|
|
299688
|
+
const mod = isRecord$4(modUnknown) ? modUnknown : {};
|
|
300049
299689
|
const AddonClass = resolveAddonClass(mod);
|
|
300050
299690
|
if (!AddonClass) throw new Error(`No addon class in ${entryPath}`);
|
|
300051
299691
|
this.addons.set(declaration.id, {
|
|
@@ -300061,7 +299701,7 @@ var require_dist3 = __commonJS({
|
|
|
300061
299701
|
/** Load addon from a direct path (for development/testing) */
|
|
300062
299702
|
async loadFromPath(addonId, modulePath, packageName, declaration, packageVersion = "0.0.0") {
|
|
300063
299703
|
const modUnknown = await importAddonModuleFresh(modulePath);
|
|
300064
|
-
const mod = isRecord$
|
|
299704
|
+
const mod = isRecord$4(modUnknown) ? modUnknown : {};
|
|
300065
299705
|
const AddonClass = resolveAddonClass(mod);
|
|
300066
299706
|
if (!AddonClass) throw new Error(`Module ${modulePath} has no default export`);
|
|
300067
299707
|
this.addons.set(addonId, {
|
|
@@ -304332,11 +303972,11 @@ var require_dist3 = __commonJS({
|
|
|
304332
303972
|
await steps.bootInProcessConsumers();
|
|
304333
303973
|
await steps.spawnIsolatedConsumers();
|
|
304334
303974
|
}
|
|
304335
|
-
function isRecord$
|
|
303975
|
+
function isRecord$3(value) {
|
|
304336
303976
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
304337
303977
|
}
|
|
304338
303978
|
function asBlob(value) {
|
|
304339
|
-
return isRecord$
|
|
303979
|
+
return isRecord$3(value) ? value : {};
|
|
304340
303980
|
}
|
|
304341
303981
|
async function loadSystemSettingsPrefix(door, prefix, mayRead = () => true) {
|
|
304342
303982
|
const listed = await require_prefix_walk.loadPrefixed(door, "system-settings", prefix, () => null);
|
|
@@ -306884,7 +306524,7 @@ var require_dist3 = __commonJS({
|
|
|
306884
306524
|
})))(), 1);
|
|
306885
306525
|
var { Type, Schema, FAILSAFE_SCHEMA, JSON_SCHEMA, CORE_SCHEMA, DEFAULT_SCHEMA, load: load2, loadAll, dump, YAMLException, types, safeLoad, safeLoadAll, safeDump } = import_js_yaml.default;
|
|
306886
306526
|
import_js_yaml.default;
|
|
306887
|
-
function isRecord$
|
|
306527
|
+
function isRecord$2(value) {
|
|
306888
306528
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
306889
306529
|
}
|
|
306890
306530
|
var BOOTSTRAP_SECTIONS = /* @__PURE__ */ new Set([
|
|
@@ -306961,7 +306601,7 @@ var require_dist3 = __commonJS({
|
|
|
306961
306601
|
[head]: value
|
|
306962
306602
|
};
|
|
306963
306603
|
const existing = obj[head];
|
|
306964
|
-
const child = isRecord$
|
|
306604
|
+
const child = isRecord$2(existing) ? existing : {};
|
|
306965
306605
|
return {
|
|
306966
306606
|
...obj,
|
|
306967
306607
|
[head]: setNested(child, rest.join("."), value)
|
|
@@ -307170,7 +306810,7 @@ var require_dist3 = __commonJS({
|
|
|
307170
306810
|
}
|
|
307171
306811
|
}
|
|
307172
306812
|
};
|
|
307173
|
-
function isRecord$
|
|
306813
|
+
function isRecord$1(value) {
|
|
307174
306814
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
307175
306815
|
}
|
|
307176
306816
|
function errorText(err) {
|
|
@@ -307535,7 +307175,7 @@ var require_dist3 = __commonJS({
|
|
|
307535
307175
|
const keys = configPath.split(".");
|
|
307536
307176
|
let current = this.bootstrapConfig;
|
|
307537
307177
|
for (const key of keys) {
|
|
307538
|
-
if (!isRecord$
|
|
307178
|
+
if (!isRecord$1(current)) return void 0;
|
|
307539
307179
|
current = current[key];
|
|
307540
307180
|
}
|
|
307541
307181
|
return current;
|
|
@@ -308304,7 +307944,7 @@ var require_dist3 = __commonJS({
|
|
|
308304
307944
|
this.name = "RuntimeStateLoadError";
|
|
308305
307945
|
}
|
|
308306
307946
|
};
|
|
308307
|
-
function isRecord
|
|
307947
|
+
function isRecord(value) {
|
|
308308
307948
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
308309
307949
|
}
|
|
308310
307950
|
function errorMessage(err) {
|
|
@@ -308330,7 +307970,7 @@ var require_dist3 = __commonJS({
|
|
|
308330
307970
|
} catch (err) {
|
|
308331
307971
|
return refuse2(errorMessage(err), err);
|
|
308332
307972
|
}
|
|
308333
|
-
if (!isRecord
|
|
307973
|
+
if (!isRecord(answer)) return refuse2(`answered ${answer === null ? "null" : typeof answer}`);
|
|
308334
307974
|
return answer;
|
|
308335
307975
|
}
|
|
308336
307976
|
var ACCESSORY_SPAWN_CONCURRENCY = 12;
|
|
@@ -314243,8 +313883,7 @@ var require_dist3 = __commonJS({
|
|
|
314243
313883
|
}
|
|
314244
313884
|
};
|
|
314245
313885
|
}
|
|
314246
|
-
function createRunnerAddonSettings(client, addonId
|
|
314247
|
-
}) {
|
|
313886
|
+
function createRunnerAddonSettings(client, addonId) {
|
|
314248
313887
|
if (client === void 0) {
|
|
314249
313888
|
const refuse2 = async () => {
|
|
314250
313889
|
throw new Error(`settings of "${addonId}": settings store not wired`);
|
|
@@ -314266,22 +313905,10 @@ var require_dist3 = __commonJS({
|
|
|
314266
313905
|
};
|
|
314267
313906
|
}
|
|
314268
313907
|
const door = {
|
|
314269
|
-
query:
|
|
314270
|
-
|
|
314271
|
-
|
|
314272
|
-
|
|
314273
|
-
get: async (input) => {
|
|
314274
|
-
await before();
|
|
314275
|
-
return client.get.query(input);
|
|
314276
|
-
},
|
|
314277
|
-
set: async (input) => {
|
|
314278
|
-
await before();
|
|
314279
|
-
return client.set.mutate(input);
|
|
314280
|
-
},
|
|
314281
|
-
transact: async (input) => {
|
|
314282
|
-
await before();
|
|
314283
|
-
return client.transact.mutate(input);
|
|
314284
|
-
}
|
|
313908
|
+
query: (input) => client.query.query(input),
|
|
313909
|
+
get: (input) => client.get.query(input),
|
|
313910
|
+
set: (input) => client.set.mutate(input),
|
|
313911
|
+
transact: (input) => client.transact.mutate(input)
|
|
314285
313912
|
};
|
|
314286
313913
|
const store = require_builtins_core_blocks_core_blocks_addon.createAddonSettingsStore(door, addonId);
|
|
314287
313914
|
const sections = createSectionsStore(door);
|
|
@@ -314327,141 +313954,14 @@ var require_dist3 = __commonJS({
|
|
|
314327
313954
|
setSection: (section, patch) => sections.write(section, patch)
|
|
314328
313955
|
};
|
|
314329
313956
|
}
|
|
314330
|
-
|
|
314331
|
-
/** Stable, greppable cause, e.g. `unmigrated-settings`. */
|
|
314332
|
-
code;
|
|
314333
|
-
/** What the operator does about it. */
|
|
314334
|
-
remedy;
|
|
314335
|
-
constructor(code, message, remedy, options) {
|
|
314336
|
-
super(message, options);
|
|
314337
|
-
this.name = "AddonRefusedError";
|
|
314338
|
-
this.code = code;
|
|
314339
|
-
this.remedy = remedy;
|
|
314340
|
-
}
|
|
314341
|
-
};
|
|
314342
|
-
function findAddonRefusal(err) {
|
|
314343
|
-
const seen = /* @__PURE__ */ new Set();
|
|
314344
|
-
let current = err;
|
|
314345
|
-
while (current !== null && current !== void 0 && !seen.has(current)) {
|
|
314346
|
-
if (current instanceof AddonRefusedError) return current;
|
|
314347
|
-
seen.add(current);
|
|
314348
|
-
current = current instanceof Error ? current.cause : void 0;
|
|
314349
|
-
}
|
|
314350
|
-
return null;
|
|
314351
|
-
}
|
|
314352
|
-
var OWN_RETIRED_ROOT_KEYS = /* @__PURE__ */ new Set([
|
|
314353
|
-
"recordingConfigs",
|
|
314354
|
-
"recordingExports",
|
|
314355
|
-
"recordingOpsLog",
|
|
314356
|
-
"probeSnapshots",
|
|
314357
|
-
"rtspTokens",
|
|
314358
|
-
"profileMap"
|
|
314359
|
-
]);
|
|
314360
|
-
function isRetiredRootKey(addonId, key) {
|
|
314361
|
-
if (OWN_RETIRED_ROOT_KEYS.has(key)) return true;
|
|
314362
|
-
return require_retired_settings_keys.RETIRED_SETTINGS_KEYS.some((spec) => spec.namespace === addonId && (spec.keys.includes(key) || spec.perNodeKeys.some((k) => key === k || key.startsWith(`${k}@`))));
|
|
314363
|
-
}
|
|
314364
|
-
var UNMIGRATED_SETTINGS_CODE = "unmigrated-settings";
|
|
314365
|
-
var UNMIGRATED_SETTINGS_REMEDY = "Run scripts/hub/migrate-device-store.ts --copy --apply (D870), then restart the addon.";
|
|
314366
|
-
var UnmigratedSettingsError = class extends AddonRefusedError {
|
|
314367
|
-
constructor(addonId, what) {
|
|
314368
|
-
super(UNMIGRATED_SETTINGS_CODE, `addon "${addonId}" refuses to start: ${what} - the settings it had are still in the per-addon tables and the standard store holds none. Run scripts/hub/migrate-device-store.ts --copy --apply (D870) before starting it.`, UNMIGRATED_SETTINGS_REMEDY);
|
|
314369
|
-
this.name = "UnmigratedSettingsError";
|
|
314370
|
-
}
|
|
314371
|
-
};
|
|
314372
|
-
async function countOf(client, input) {
|
|
314373
|
-
const n = await client.count.query(input);
|
|
314374
|
-
if (typeof n !== "number") throw new Error("settings store answered a non-number to a count");
|
|
314375
|
-
return n;
|
|
314376
|
-
}
|
|
314377
|
-
var LEGACY_PAGE = 500;
|
|
314378
|
-
var LEGACY_PAGE_BUDGET = 200;
|
|
314379
|
-
var ID_TAIL = "\x7F";
|
|
314380
|
-
function isRecord(value) {
|
|
314381
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
314382
|
-
}
|
|
314383
|
-
async function hasMigratableDeviceRow(client, addonId) {
|
|
314384
|
-
let cursor = "";
|
|
314385
|
-
for (let page = 0; page < LEGACY_PAGE_BUDGET; page++) {
|
|
314386
|
-
const rows = await client.query.query({
|
|
314387
|
-
namespace: addonId,
|
|
314388
|
-
collection: "addon-devices",
|
|
314389
|
-
filter: {
|
|
314390
|
-
whereBetween: { id: [cursor, ID_TAIL] },
|
|
314391
|
-
orderBy: {
|
|
314392
|
-
field: "id",
|
|
314393
|
-
direction: "asc"
|
|
314394
|
-
},
|
|
314395
|
-
limit: LEGACY_PAGE
|
|
314396
|
-
}
|
|
314397
|
-
});
|
|
314398
|
-
if (!Array.isArray(rows)) throw new Error("settings store answered a non-list to a query");
|
|
314399
|
-
let lastId = cursor;
|
|
314400
|
-
for (const row of rows) {
|
|
314401
|
-
if (!isRecord(row) || typeof row["id"] !== "string") continue;
|
|
314402
|
-
lastId = row["id"];
|
|
314403
|
-
const id = Number(row["id"]);
|
|
314404
|
-
const data = row["data"];
|
|
314405
|
-
if (Number.isInteger(id) && id > 0 && isRecord(data) && Object.keys(data).length > 0) return true;
|
|
314406
|
-
}
|
|
314407
|
-
if (rows.length < LEGACY_PAGE || lastId === cursor) return false;
|
|
314408
|
-
cursor = lastId;
|
|
314409
|
-
}
|
|
314410
|
-
throw new Error(`addon "${addonId}": more legacy blob pages than the guard will read`);
|
|
314411
|
-
}
|
|
314412
|
-
async function assertLegacyBlobsMigrated(client, addonId, logger) {
|
|
314413
|
-
const legacyDevices = await hasMigratableDeviceRow(client, addonId);
|
|
314414
|
-
const root = await client.get.query({
|
|
314415
|
-
namespace: addonId,
|
|
314416
|
-
collection: "addon-settings",
|
|
314417
|
-
key: "root"
|
|
314418
|
-
});
|
|
314419
|
-
const legacySettings = isRecord(root) && Object.keys(root).some((key) => !isRetiredRootKey(addonId, key));
|
|
314420
|
-
if (!legacyDevices && !legacySettings) return;
|
|
314421
|
-
const rangeOf = (prefix) => {
|
|
314422
|
-
const range = require_prefix_range.prefixRange(prefix);
|
|
314423
|
-
if (range === null) throw new Error(`no id range for addon "${addonId}"`);
|
|
314424
|
-
return { whereBetween: { id: [range.lo, range.hi] } };
|
|
314425
|
-
};
|
|
314426
|
-
const newDevices = await countOf(client, {
|
|
314427
|
-
collection: "addon-device-settings",
|
|
314428
|
-
filter: rangeOf(`${addonId}:`)
|
|
314429
|
-
});
|
|
314430
|
-
const newSettings = await countOf(client, {
|
|
314431
|
-
collection: "addon-settings",
|
|
314432
|
-
filter: rangeOf(`${addonId}.`)
|
|
314433
|
-
});
|
|
314434
|
-
const problems = [];
|
|
314435
|
-
if (legacyDevices && newDevices === 0) problems.push("per-device blobs");
|
|
314436
|
-
if (legacySettings && newSettings === 0) problems.push("an addon settings blob");
|
|
314437
|
-
if (problems.length === 0) return;
|
|
314438
|
-
const error = new UnmigratedSettingsError(addonId, problems.join(" and "));
|
|
314439
|
-
logger.error(error.message, { meta: {
|
|
314440
|
-
addonId,
|
|
314441
|
-
newDevices,
|
|
314442
|
-
newSettings
|
|
314443
|
-
} });
|
|
314444
|
-
throw error;
|
|
314445
|
-
}
|
|
314446
|
-
function doorOverClient(client, before = async () => {
|
|
314447
|
-
}) {
|
|
313957
|
+
function doorOverClient(client) {
|
|
314448
313958
|
return {
|
|
314449
|
-
query:
|
|
314450
|
-
|
|
314451
|
-
|
|
314452
|
-
},
|
|
314453
|
-
transact: async (input) => {
|
|
314454
|
-
await before();
|
|
314455
|
-
return client.transact.mutate(input);
|
|
314456
|
-
},
|
|
314457
|
-
deleteWhere: async (input) => {
|
|
314458
|
-
await before();
|
|
314459
|
-
return client.deleteWhere.mutate(input);
|
|
314460
|
-
}
|
|
313959
|
+
query: (input) => client.query.query(input),
|
|
313960
|
+
transact: (input) => client.transact.mutate(input),
|
|
313961
|
+
deleteWhere: (input) => client.deleteWhere.mutate(input)
|
|
314461
313962
|
};
|
|
314462
313963
|
}
|
|
314463
|
-
function createRunnerDeviceSettings(client, addonId
|
|
314464
|
-
}) {
|
|
313964
|
+
function createRunnerDeviceSettings(client, addonId) {
|
|
314465
313965
|
if (client === void 0) {
|
|
314466
313966
|
const refuse2 = () => {
|
|
314467
313967
|
throw new Error(`device settings of "${addonId}": settings store not wired`);
|
|
@@ -314474,7 +313974,7 @@ var require_dist3 = __commonJS({
|
|
|
314474
313974
|
clearDeviceStore: async () => refuse2()
|
|
314475
313975
|
};
|
|
314476
313976
|
}
|
|
314477
|
-
const store = require_builtins_device_manager_device_manager_addon.createDeviceSettingsStore(doorOverClient(client
|
|
313977
|
+
const store = require_builtins_device_manager_device_manager_addon.createDeviceSettingsStore(doorOverClient(client), addonId);
|
|
314478
313978
|
return {
|
|
314479
313979
|
readDeviceStore: (deviceId) => require_builtins_device_manager_device_manager_addon.readDeviceOrThrow(store, deviceId),
|
|
314480
313980
|
readDeviceStoreBatch: (ids) => store.readBatch(ids),
|
|
@@ -314676,23 +314176,9 @@ var require_dist3 = __commonJS({
|
|
|
314676
314176
|
}
|
|
314677
314177
|
};
|
|
314678
314178
|
const deviceSettingsClient = Reflect.get(api, "settingsStore");
|
|
314679
|
-
let blobsChecked = null;
|
|
314680
|
-
const bootGuard = () => {
|
|
314681
|
-
const client = deviceSettingsClient;
|
|
314682
|
-
if (client === void 0) return Promise.resolve();
|
|
314683
|
-
blobsChecked ??= assertLegacyBlobsMigrated({
|
|
314684
|
-
get: { query: (input) => client.get.query(input) },
|
|
314685
|
-
query: { query: (input) => client.query.query(input) },
|
|
314686
|
-
count: { query: (input) => client.count.query(input) }
|
|
314687
|
-
}, addonId, scopedLogger).catch((err) => {
|
|
314688
|
-
blobsChecked = null;
|
|
314689
|
-
throw err;
|
|
314690
|
-
});
|
|
314691
|
-
return blobsChecked;
|
|
314692
|
-
};
|
|
314693
314179
|
const settingsView = {
|
|
314694
|
-
...createRunnerAddonSettings(deviceSettingsClient, addonId
|
|
314695
|
-
...createRunnerDeviceSettings(deviceSettingsClient, addonId
|
|
314180
|
+
...createRunnerAddonSettings(deviceSettingsClient, addonId),
|
|
314181
|
+
...createRunnerDeviceSettings(deviceSettingsClient, addonId),
|
|
314696
314182
|
async readDeviceRuntimeState(deviceId) {
|
|
314697
314183
|
return readBlob("device-runtime-state", String(deviceId));
|
|
314698
314184
|
},
|
|
@@ -316780,6 +316266,28 @@ var require_dist3 = __commonJS({
|
|
|
316780
316266
|
}
|
|
316781
316267
|
};
|
|
316782
316268
|
}
|
|
316269
|
+
var AddonRefusedError = class extends Error {
|
|
316270
|
+
/** Stable, greppable cause, e.g. `unmigrated-settings`. */
|
|
316271
|
+
code;
|
|
316272
|
+
/** What the operator does about it. */
|
|
316273
|
+
remedy;
|
|
316274
|
+
constructor(code, message, remedy, options) {
|
|
316275
|
+
super(message, options);
|
|
316276
|
+
this.name = "AddonRefusedError";
|
|
316277
|
+
this.code = code;
|
|
316278
|
+
this.remedy = remedy;
|
|
316279
|
+
}
|
|
316280
|
+
};
|
|
316281
|
+
function findAddonRefusal(err) {
|
|
316282
|
+
const seen = /* @__PURE__ */ new Set();
|
|
316283
|
+
let current = err;
|
|
316284
|
+
while (current !== null && current !== void 0 && !seen.has(current)) {
|
|
316285
|
+
if (current instanceof AddonRefusedError) return current;
|
|
316286
|
+
seen.add(current);
|
|
316287
|
+
current = current instanceof Error ? current.cause : void 0;
|
|
316288
|
+
}
|
|
316289
|
+
return null;
|
|
316290
|
+
}
|
|
316783
316291
|
function createScopedProcessManager(broker, addonId) {
|
|
316784
316292
|
return {
|
|
316785
316293
|
async spawn(config) {
|
|
@@ -317868,7 +317376,6 @@ var require_dist3 = __commonJS({
|
|
|
317868
317376
|
exports.CAP_METHOD_NOT_IMPLEMENTED = CAP_METHOD_NOT_IMPLEMENTED;
|
|
317869
317377
|
exports.CA_COMMON_NAME = require_agent_https.CA_COMMON_NAME;
|
|
317870
317378
|
exports.CA_VALIDITY_DAYS = require_agent_https.CA_VALIDITY_DAYS;
|
|
317871
|
-
exports.CLUSTER_NODE_HISTORY_COLLECTION = CLUSTER_NODE_HISTORY_COLLECTION;
|
|
317872
317379
|
exports.CORE_CAP_SERVICE_NAME = CORE_CAP_SERVICE_NAME;
|
|
317873
317380
|
exports.CalendarsAddon = require_builtins_calendars_calendars_addon.CalendarsAddon;
|
|
317874
317381
|
exports.CapRouteError = CapRouteError;
|
|
@@ -318044,14 +317551,11 @@ var require_dist3 = __commonJS({
|
|
|
318044
317551
|
exports.ToastService = ToastService;
|
|
318045
317552
|
exports.UDS_NO_ROUTE_PREFIX = UDS_NO_ROUTE_PREFIX;
|
|
318046
317553
|
exports.UNCLAIMED = UNCLAIMED;
|
|
318047
|
-
exports.UNMIGRATED_SETTINGS_CODE = UNMIGRATED_SETTINGS_CODE;
|
|
318048
|
-
exports.UNMIGRATED_SETTINGS_REMEDY = UNMIGRATED_SETTINGS_REMEDY;
|
|
318049
317554
|
exports.UPLOADED_CA_FILE = require_hub_mdns_ciao.UPLOADED_CA_FILE;
|
|
318050
317555
|
exports.USER_MANAGEMENT_INTERNAL = require_builtins_local_auth_local_auth_addon.USER_MANAGEMENT_INTERNAL;
|
|
318051
317556
|
exports.UdsLocalTransportClient = UdsLocalTransportClient;
|
|
318052
317557
|
exports.UdsLocalTransportServer = UdsLocalTransportServer;
|
|
318053
317558
|
exports.UnlockTicketJtiStore = require_builtins_system_config_system_config_addon.UnlockTicketJtiStore;
|
|
318054
|
-
exports.UnmigratedSettingsError = UnmigratedSettingsError;
|
|
318055
317559
|
exports.UserManager = require_builtins_local_auth_local_auth_addon.UserManager;
|
|
318056
317560
|
exports.WinstonDestination = require_builtins_winston_logging_index.WinstonDestination$1;
|
|
318057
317561
|
exports.WinstonLoggingAddon = require_builtins_winston_logging_index.WinstonLoggingAddon$1;
|
|
@@ -318069,7 +317573,6 @@ var require_dist3 = __commonJS({
|
|
|
318069
317573
|
exports.applyCertificateToListener = require_hub_mdns_ciao.applyCertificateToListener;
|
|
318070
317574
|
exports.applyLanHttp = require_hub_mdns_ciao.applyLanHttp;
|
|
318071
317575
|
exports.asBrokerLike = asBrokerLike;
|
|
318072
|
-
exports.assertLegacyBlobsMigrated = assertLegacyBlobsMigrated;
|
|
318073
317576
|
exports.attachUserManagementInternal = require_builtins_local_auth_local_auth_addon.attachUserManagementInternal;
|
|
318074
317577
|
exports.attributeStall = require_custom_action_registry.attributeStall;
|
|
318075
317578
|
exports.backupOrchestratorRecordKinds = require_restore_archive.backupOrchestratorRecordKinds;
|
|
@@ -329231,19 +328734,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
329231
328734
|
/** The whole declaration, secret paths and entry descriptor included (the entries service builds its handle from it). */
|
|
329232
328735
|
declaration: require_sleep.RecordKindDeclarationSchema
|
|
329233
328736
|
});
|
|
329234
|
-
var STORAGE_ADMIN_MOVED_COLLECTIONS = [
|
|
329235
|
-
"stream-broker:probe-snapshots",
|
|
329236
|
-
"stream-broker:profile-map",
|
|
329237
|
-
"stream-broker:rtsp-tokens",
|
|
329238
|
-
"notification-center:device-mutes",
|
|
329239
|
-
"recorder:recording-configs",
|
|
329240
|
-
"pipeline-orchestrator:device-features"
|
|
329241
|
-
];
|
|
329242
|
-
var STORAGE_ADMIN_SCOPED_BASES = [
|
|
329243
|
-
"addon-settings",
|
|
329244
|
-
"addon-devices",
|
|
329245
|
-
"sections"
|
|
329246
|
-
];
|
|
329247
328737
|
var storageAdminCapability = {
|
|
329248
328738
|
name: "storage-admin",
|
|
329249
328739
|
scope: "system",
|
|
@@ -329255,26 +328745,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
329255
328745
|
* optionally only those owned by `ownerPrefix`. Reads only.
|
|
329256
328746
|
*/
|
|
329257
328747
|
listTables: require_sleep.method(zod.z.object({ ownerPrefix: zod.z.string().min(1).optional() }), zod.z.object({ tables: zod.z.array(StorageTableSchema) }), { auth: "admin" }),
|
|
329258
|
-
/**
|
|
329259
|
-
* Drop one table. REFUSES when an addon declared it since the engine
|
|
329260
|
-
* started (a running addon still owns it), when it is an engine or
|
|
329261
|
-
* canonical table, when it does not exist, or when its row count is not
|
|
329262
|
-
* `expectRows` - the caller states what it believes it is deleting. The
|
|
329263
|
-
* engine also refuses anything but `<owner>:(addon-settings|addon-devices|
|
|
329264
|
-
* sections)`, the retired collections by name, and tables of owners that
|
|
329265
|
-
* are not installed (and refuses when it cannot read the installed list).
|
|
329266
|
-
* Removed with the D870 migration script once the last hub ran it.
|
|
329267
|
-
*/
|
|
329268
|
-
dropCollection: require_sleep.method(zod.z.object({
|
|
329269
|
-
collection: zod.z.string().min(1),
|
|
329270
|
-
expectRows: zod.z.number().int().nonnegative()
|
|
329271
|
-
}), zod.z.object({
|
|
329272
|
-
dropped: zod.z.literal(true),
|
|
329273
|
-
rows: zod.z.number().int().nonnegative()
|
|
329274
|
-
}), {
|
|
329275
|
-
kind: "mutation",
|
|
329276
|
-
auth: "admin"
|
|
329277
|
-
}),
|
|
329278
328748
|
/** Every record kind of both files with rows, a size estimate, class and retention (D881). */
|
|
329279
328749
|
listKinds: require_sleep.method(zod.z.object({
|
|
329280
328750
|
owner: zod.z.string().min(1).optional(),
|
|
@@ -356575,6 +356045,15 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
356575
356045
|
* Replaces `zoneCrop`.
|
|
356576
356046
|
*/
|
|
356577
356047
|
showTriggerZone: zod.z.boolean().optional(),
|
|
356048
|
+
/**
|
|
356049
|
+
* Draw the SUBJECT'S PATH on the picture — a line in the subject's colour
|
|
356050
|
+
* through the track's positions up to the frame shown, the same path the
|
|
356051
|
+
* debug views draw (`buildSubjectPath`, D903). Every picture mode a subject
|
|
356052
|
+
* is drawn on: a `crop` maps the path into the crop and clips it. Valid only
|
|
356053
|
+
* on a rule whose subject is a tracked object (refused on a sound rule);
|
|
356054
|
+
* dropped on `image: 'none'`. Absent = off.
|
|
356055
|
+
*/
|
|
356056
|
+
showSubjectPath: zod.z.boolean().optional(),
|
|
356578
356057
|
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
356579
356058
|
attach: zod.z.enum([
|
|
356580
356059
|
"best",
|
|
@@ -390230,12 +389709,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
390230
389709
|
addonId: null,
|
|
390231
389710
|
access: "create"
|
|
390232
389711
|
},
|
|
390233
|
-
"storageAdmin.dropCollection": {
|
|
390234
|
-
capName: "storage-admin",
|
|
390235
|
-
capScope: "system",
|
|
390236
|
-
addonId: null,
|
|
390237
|
-
access: "delete"
|
|
390238
|
-
},
|
|
390239
389712
|
"storageAdmin.listKinds": {
|
|
390240
389713
|
capName: "storage-admin",
|
|
390241
389714
|
capScope: "system",
|
|
@@ -400578,15 +400051,22 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
400578
400051
|
return clampToKind(legacyImageMode(media), kind);
|
|
400579
400052
|
}
|
|
400580
400053
|
function normalizeNcMediaPolicy(media, rule) {
|
|
400581
|
-
const
|
|
400582
|
-
const
|
|
400054
|
+
const kind = ruleKindOf(rule);
|
|
400055
|
+
const image = resolveNcMediaImage(media, kind);
|
|
400056
|
+
const { attach: _attach, frame: _frame, zoneCrop, showTriggerZone, showSubjectPath, image: _image, ...rest } = media;
|
|
400583
400057
|
const drawable = (showTriggerZone === true || media.image === void 0 && zoneCrop === true) && image !== "crop" && image !== "none" && ruleTriggerZoneIds(rule.conditions).length > 0;
|
|
400058
|
+
const pathDrawable = showSubjectPath === true && image !== "none" && subjectHasPath(kind);
|
|
400584
400059
|
return {
|
|
400585
400060
|
...rest,
|
|
400586
400061
|
image,
|
|
400587
|
-
...drawable ? { showTriggerZone: true } : {}
|
|
400062
|
+
...drawable ? { showTriggerZone: true } : {},
|
|
400063
|
+
...pathDrawable ? { showSubjectPath: true } : {}
|
|
400588
400064
|
};
|
|
400589
400065
|
}
|
|
400066
|
+
function subjectHasPath(kind) {
|
|
400067
|
+
const spec = ruleKindSpec(kind);
|
|
400068
|
+
return spec.carriesMedia && spec.carriesSubjectCrop;
|
|
400069
|
+
}
|
|
400590
400070
|
function ncMediaPolicyError(media, rule) {
|
|
400591
400071
|
const kind = ruleKindOf(rule);
|
|
400592
400072
|
if (media.image !== void 0) {
|
|
@@ -400594,6 +400074,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
400594
400074
|
if (offered.length > 0 && !offered.includes(media.image)) return `media.image '${media.image}' is not available for a ${kind} rule (offered: ${offered.join(", ")})`;
|
|
400595
400075
|
}
|
|
400596
400076
|
if (media.showTriggerZone === true && ruleTriggerZoneIds(rule.conditions).length === 0) return "media.showTriggerZone needs a rule triggered by a zone (a zones condition or an occupancy zone)";
|
|
400077
|
+
if (media.showSubjectPath === true && !subjectHasPath(kind)) return `media.showSubjectPath needs a rule whose subject is a tracked object (not a ${kind} rule)`;
|
|
400597
400078
|
return null;
|
|
400598
400079
|
}
|
|
400599
400080
|
var WEEKDAY_TO_DAY = {
|
|
@@ -400651,17 +400132,181 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
400651
400132
|
if (schedule === void 0) return true;
|
|
400652
400133
|
const { day, minute } = localDayMinute(atMs, schedule.timezone);
|
|
400653
400134
|
const prevDay = (day + 6) % 7;
|
|
400654
|
-
let
|
|
400135
|
+
let inside2 = false;
|
|
400655
400136
|
for (const w of schedule.windows) if (w.startMinute <= w.endMinute) {
|
|
400656
400137
|
if (w.days.includes(day) && minute >= w.startMinute && minute < w.endMinute) {
|
|
400657
|
-
|
|
400138
|
+
inside2 = true;
|
|
400658
400139
|
break;
|
|
400659
400140
|
}
|
|
400660
400141
|
} else if (w.days.includes(day) && minute >= w.startMinute || w.days.includes(prevDay) && minute < w.endMinute) {
|
|
400661
|
-
|
|
400142
|
+
inside2 = true;
|
|
400662
400143
|
break;
|
|
400663
400144
|
}
|
|
400664
|
-
return schedule.invert === true ? !
|
|
400145
|
+
return schedule.invert === true ? !inside2 : inside2;
|
|
400146
|
+
}
|
|
400147
|
+
var SUBJECT_PATH_FULL_FRAME_COVERAGE = 0.85;
|
|
400148
|
+
var SUBJECT_PATH_DWELL_EPS = 5e-3;
|
|
400149
|
+
var SUBJECT_PATH_MAX_POINTS = 120;
|
|
400150
|
+
var clamp01 = (n) => n < 0 ? 0 : n > 1 ? 1 : n;
|
|
400151
|
+
function subjectPathSampleFromBox(bbox, timestamp) {
|
|
400152
|
+
return {
|
|
400153
|
+
x: bbox.x + bbox.w / 2,
|
|
400154
|
+
y: bbox.y + bbox.h / 2,
|
|
400155
|
+
w: bbox.w,
|
|
400156
|
+
h: bbox.h,
|
|
400157
|
+
...timestamp !== void 0 ? { timestamp } : {}
|
|
400158
|
+
};
|
|
400159
|
+
}
|
|
400160
|
+
function isPlaceholder(s) {
|
|
400161
|
+
return s.w !== void 0 && s.h !== void 0 && s.w >= 0.85 && s.h >= 0.85;
|
|
400162
|
+
}
|
|
400163
|
+
function downsample(xs, max) {
|
|
400164
|
+
if (xs.length <= max || max < 2) return xs;
|
|
400165
|
+
const step = (xs.length - 1) / (max - 1);
|
|
400166
|
+
const out = [];
|
|
400167
|
+
for (let i = 0; i < max - 1; i++) {
|
|
400168
|
+
const x = xs[Math.round(i * step)];
|
|
400169
|
+
if (x !== void 0) out.push(x);
|
|
400170
|
+
}
|
|
400171
|
+
const last = xs[xs.length - 1];
|
|
400172
|
+
if (last !== void 0) out.push(last);
|
|
400173
|
+
return out;
|
|
400174
|
+
}
|
|
400175
|
+
function isFiniteSample(s) {
|
|
400176
|
+
return Number.isFinite(s.x) && Number.isFinite(s.y);
|
|
400177
|
+
}
|
|
400178
|
+
function buildSubjectPath(samples, opts) {
|
|
400179
|
+
const until = opts?.untilTimestamp;
|
|
400180
|
+
const nodes = [];
|
|
400181
|
+
let unlocalized = 0;
|
|
400182
|
+
let tail = null;
|
|
400183
|
+
for (let index = 0; index < samples.length; index++) {
|
|
400184
|
+
const s = samples[index];
|
|
400185
|
+
if (s === void 0 || !isFiniteSample(s)) continue;
|
|
400186
|
+
if (until !== void 0 && s.timestamp !== void 0 && s.timestamp > until) continue;
|
|
400187
|
+
if (isPlaceholder(s)) {
|
|
400188
|
+
unlocalized += 1;
|
|
400189
|
+
continue;
|
|
400190
|
+
}
|
|
400191
|
+
const ts = s.timestamp !== void 0 && Number.isFinite(s.timestamp) ? s.timestamp : index;
|
|
400192
|
+
const x = clamp01(s.x);
|
|
400193
|
+
const y = clamp01(s.y);
|
|
400194
|
+
const prev = nodes[nodes.length - 1];
|
|
400195
|
+
if (prev !== void 0 && Math.hypot(x - prev.x, y - prev.y) < 5e-3) {
|
|
400196
|
+
nodes[nodes.length - 1] = {
|
|
400197
|
+
...prev,
|
|
400198
|
+
samples: prev.samples + 1,
|
|
400199
|
+
lastTs: Math.max(prev.lastTs, ts)
|
|
400200
|
+
};
|
|
400201
|
+
tail = {
|
|
400202
|
+
x,
|
|
400203
|
+
y,
|
|
400204
|
+
samples: 1,
|
|
400205
|
+
firstTs: ts,
|
|
400206
|
+
lastTs: ts
|
|
400207
|
+
};
|
|
400208
|
+
continue;
|
|
400209
|
+
}
|
|
400210
|
+
tail = null;
|
|
400211
|
+
nodes.push({
|
|
400212
|
+
x,
|
|
400213
|
+
y,
|
|
400214
|
+
samples: 1,
|
|
400215
|
+
firstTs: ts,
|
|
400216
|
+
lastTs: ts
|
|
400217
|
+
});
|
|
400218
|
+
}
|
|
400219
|
+
const end = nodes[nodes.length - 1];
|
|
400220
|
+
if (tail !== null && end !== void 0 && end.samples > 1 && (tail.x !== end.x || tail.y !== end.y)) {
|
|
400221
|
+
nodes[nodes.length - 1] = {
|
|
400222
|
+
...end,
|
|
400223
|
+
samples: end.samples - 1
|
|
400224
|
+
};
|
|
400225
|
+
nodes.push(tail);
|
|
400226
|
+
}
|
|
400227
|
+
return {
|
|
400228
|
+
nodes: downsample(nodes, opts?.maxPoints ?? 120),
|
|
400229
|
+
unlocalized
|
|
400230
|
+
};
|
|
400231
|
+
}
|
|
400232
|
+
function isDrawableSubjectPath(path) {
|
|
400233
|
+
return path.nodes.length >= 2;
|
|
400234
|
+
}
|
|
400235
|
+
function inside(p) {
|
|
400236
|
+
return p.x >= 0 && p.x <= 1 && p.y >= 0 && p.y <= 1;
|
|
400237
|
+
}
|
|
400238
|
+
function clipSegment(a, b) {
|
|
400239
|
+
const dx = b.x - a.x;
|
|
400240
|
+
const dy = b.y - a.y;
|
|
400241
|
+
let t0 = 0;
|
|
400242
|
+
let t1 = 1;
|
|
400243
|
+
const edges = [
|
|
400244
|
+
[-dx, a.x],
|
|
400245
|
+
[dx, 1 - a.x],
|
|
400246
|
+
[-dy, a.y],
|
|
400247
|
+
[dy, 1 - a.y]
|
|
400248
|
+
];
|
|
400249
|
+
for (const [p, q] of edges) {
|
|
400250
|
+
if (p === 0) {
|
|
400251
|
+
if (q < 0) return null;
|
|
400252
|
+
continue;
|
|
400253
|
+
}
|
|
400254
|
+
const r = q / p;
|
|
400255
|
+
if (p < 0) {
|
|
400256
|
+
if (r > t1) return null;
|
|
400257
|
+
if (r > t0) t0 = r;
|
|
400258
|
+
} else {
|
|
400259
|
+
if (r < t0) return null;
|
|
400260
|
+
if (r < t1) t1 = r;
|
|
400261
|
+
}
|
|
400262
|
+
}
|
|
400263
|
+
return [{
|
|
400264
|
+
x: a.x + t0 * dx,
|
|
400265
|
+
y: a.y + t0 * dy
|
|
400266
|
+
}, {
|
|
400267
|
+
x: a.x + t1 * dx,
|
|
400268
|
+
y: a.y + t1 * dy
|
|
400269
|
+
}];
|
|
400270
|
+
}
|
|
400271
|
+
function samePoint(a, b) {
|
|
400272
|
+
return Math.abs(a.x - b.x) < 1e-9 && Math.abs(a.y - b.y) < 1e-9;
|
|
400273
|
+
}
|
|
400274
|
+
function projectSubjectPath(points, view) {
|
|
400275
|
+
if (points.length < 2 || !(view.w > 0) || !(view.h > 0)) return [];
|
|
400276
|
+
const local = points.map((p) => ({
|
|
400277
|
+
x: (p.x - view.x) / view.w,
|
|
400278
|
+
y: (p.y - view.y) / view.h
|
|
400279
|
+
}));
|
|
400280
|
+
const runs = [];
|
|
400281
|
+
let run = [];
|
|
400282
|
+
for (let i = 1; i < local.length; i++) {
|
|
400283
|
+
const a = local[i - 1];
|
|
400284
|
+
const b = local[i];
|
|
400285
|
+
if (a === void 0 || b === void 0) continue;
|
|
400286
|
+
const seg = clipSegment(a, b);
|
|
400287
|
+
if (seg === null) {
|
|
400288
|
+
if (run.length >= 2) runs.push(run);
|
|
400289
|
+
run = [];
|
|
400290
|
+
continue;
|
|
400291
|
+
}
|
|
400292
|
+
const [from2, to] = seg;
|
|
400293
|
+
const last = run[run.length - 1];
|
|
400294
|
+
if (last === void 0 || !samePoint(last, from2)) {
|
|
400295
|
+
if (run.length >= 2) runs.push(run);
|
|
400296
|
+
run = [from2];
|
|
400297
|
+
}
|
|
400298
|
+
run.push(to);
|
|
400299
|
+
if (!inside(b)) {
|
|
400300
|
+
if (run.length >= 2) runs.push(run);
|
|
400301
|
+
run = [];
|
|
400302
|
+
}
|
|
400303
|
+
}
|
|
400304
|
+
if (run.length >= 2) runs.push(run);
|
|
400305
|
+
return runs;
|
|
400306
|
+
}
|
|
400307
|
+
function subjectPathSvgPoints(run, width, height) {
|
|
400308
|
+
const fmt = (v) => String(Math.round(v * 100) / 100);
|
|
400309
|
+
return run.map((p) => `${fmt(p.x * width)},${fmt(p.y * height)}`).join(" ");
|
|
400665
400310
|
}
|
|
400666
400311
|
var ARMED_WORD_PREFIX = "armed_";
|
|
400667
400312
|
var ALARM_PANEL_CAP = "alarm-panel";
|
|
@@ -406102,14 +405747,14 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
406102
405747
|
}
|
|
406103
405748
|
function pointInPolygon(point, polygon) {
|
|
406104
405749
|
if (polygon.length < 3) return false;
|
|
406105
|
-
let
|
|
405750
|
+
let inside2 = false;
|
|
406106
405751
|
const { x, y } = point;
|
|
406107
405752
|
for (let i = 0, j2 = polygon.length - 1; i < polygon.length; j2 = i++) {
|
|
406108
405753
|
const a = polygon[i];
|
|
406109
405754
|
const b = polygon[j2];
|
|
406110
|
-
if (a.y > y !== b.y > y && x < (b.x - a.x) * (y - a.y) / (b.y - a.y || Number.EPSILON) + a.x)
|
|
405755
|
+
if (a.y > y !== b.y > y && x < (b.x - a.x) * (y - a.y) / (b.y - a.y || Number.EPSILON) + a.x) inside2 = !inside2;
|
|
406111
405756
|
}
|
|
406112
|
-
return
|
|
405757
|
+
return inside2;
|
|
406113
405758
|
}
|
|
406114
405759
|
function bindAddonActions(api, addonId, catalog) {
|
|
406115
405760
|
const out = {};
|
|
@@ -408042,12 +407687,13 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
408042
407687
|
exports.STATE_LABEL_KEYS = STATE_LABEL_KEYS;
|
|
408043
407688
|
exports.STATIONARY_OVERLAY_STYLE = STATIONARY_OVERLAY_STYLE;
|
|
408044
407689
|
exports.STORAGE_ACCESS_FALLBACK = STORAGE_ACCESS_FALLBACK;
|
|
408045
|
-
exports.STORAGE_ADMIN_MOVED_COLLECTIONS = STORAGE_ADMIN_MOVED_COLLECTIONS;
|
|
408046
|
-
exports.STORAGE_ADMIN_SCOPED_BASES = STORAGE_ADMIN_SCOPED_BASES;
|
|
408047
407690
|
exports.STORAGE_BYTES_PER_GB = STORAGE_BYTES_PER_GB;
|
|
408048
407691
|
exports.STORAGE_LOCATION_MODES = STORAGE_LOCATION_MODES;
|
|
408049
407692
|
exports.STREAM_PROFILE_META = STREAM_PROFILE_META;
|
|
408050
407693
|
exports.STREAM_QUALITY_LABELS = STREAM_QUALITY_LABELS;
|
|
407694
|
+
exports.SUBJECT_PATH_DWELL_EPS = SUBJECT_PATH_DWELL_EPS;
|
|
407695
|
+
exports.SUBJECT_PATH_FULL_FRAME_COVERAGE = SUBJECT_PATH_FULL_FRAME_COVERAGE;
|
|
407696
|
+
exports.SUBJECT_PATH_MAX_POINTS = SUBJECT_PATH_MAX_POINTS;
|
|
408051
407697
|
exports.SUB_DETECTION_TYPES = SUB_DETECTION_TYPES;
|
|
408052
407698
|
exports.SYSTEM_CAP_NAMES = SYSTEM_CAP_NAMES;
|
|
408053
407699
|
exports.SYSTEM_SCOPE_DEVICE_METHODS = SYSTEM_SCOPE_DEVICE_METHODS;
|
|
@@ -408439,6 +408085,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
408439
408085
|
exports.buildRoleScopes = buildRoleScopes;
|
|
408440
408086
|
exports.buildSecretRef = require_sleep.buildSecretRef;
|
|
408441
408087
|
exports.buildStreamParamsConfigSchema = buildStreamParamsConfigSchema;
|
|
408088
|
+
exports.buildSubjectPath = buildSubjectPath;
|
|
408442
408089
|
exports.buildVideoArgs = require_composition.buildVideoArgs;
|
|
408443
408090
|
exports.buildViewerLink = buildViewerLink;
|
|
408444
408091
|
exports.builtCapabilityBlockers = builtCapabilityBlockers;
|
|
@@ -408760,6 +408407,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
408760
408407
|
exports.isDeviceScopedCap = require_sleep.isDeviceScopedCap;
|
|
408761
408408
|
exports.isDoActionActuatable = isDoActionActuatable;
|
|
408762
408409
|
exports.isDoPickerDeviceType = isDoPickerDeviceType;
|
|
408410
|
+
exports.isDrawableSubjectPath = isDrawableSubjectPath;
|
|
408763
408411
|
exports.isEmbeddingModelFailed = isEmbeddingModelFailed;
|
|
408764
408412
|
exports.isEvent = require_sleep.isEvent;
|
|
408765
408413
|
exports.isEventKindLabelKey = isEventKindLabelKey;
|
|
@@ -408973,6 +408621,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
408973
408621
|
exports.principalMayReachAddon = principalMayReachAddon;
|
|
408974
408622
|
exports.privacyMaskCapability = privacyMaskCapability;
|
|
408975
408623
|
exports.procedureAuthKey = procedureAuthKey;
|
|
408624
|
+
exports.projectSubjectPath = projectSubjectPath;
|
|
408976
408625
|
exports.providerMotionEvent = providerMotionEvent;
|
|
408977
408626
|
exports.ptzAutotrackCapability = ptzAutotrackCapability;
|
|
408978
408627
|
exports.ptzCapability = ptzCapability;
|
|
@@ -409152,6 +408801,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
409152
408801
|
exports.stripRetiredBandPreBufferSec = stripRetiredBandPreBufferSec;
|
|
409153
408802
|
exports.strippedOfLegacyReadOnly = strippedOfLegacyReadOnly;
|
|
409154
408803
|
exports.subKindsOf = subKindsOf;
|
|
408804
|
+
exports.subjectHasPath = subjectHasPath;
|
|
408805
|
+
exports.subjectPathSampleFromBox = subjectPathSampleFromBox;
|
|
408806
|
+
exports.subjectPathSvgPoints = subjectPathSvgPoints;
|
|
409155
408807
|
exports.summarisePrivacyAudio = summarisePrivacyAudio;
|
|
409156
408808
|
exports.summarizeEffectiveScope = summarizeEffectiveScope;
|
|
409157
408809
|
exports.summarizeReview = summarizeReview;
|
|
@@ -590921,10 +590573,6 @@ var require_addon_registry_service = __commonJS({
|
|
|
590921
590573
|
plannedRunnerIds() {
|
|
590922
590574
|
return [...this.buildAddonGroupPlan([...this.addonEntries.keys()]).keys()];
|
|
590923
590575
|
}
|
|
590924
|
-
/** The forked addon ids (the ones whose Init the D870 guard gates). */
|
|
590925
|
-
forkedAddonIds() {
|
|
590926
|
-
return [...this.buildAddonGroupPlan([...this.addonEntries.keys()]).values()].flatMap((roster) => roster.map((r) => r.addonId));
|
|
590927
|
-
}
|
|
590928
590576
|
/**
|
|
590929
590577
|
* Snapshot of the live runner subprocesses (`$process.list`), reduced to the
|
|
590930
590578
|
* `{ runnerId, addonIds }` shape the convergence planner needs. Returns `[]`
|
|
@@ -595515,7 +595163,6 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595515
595163
|
lastActive: zod_1.z.number(),
|
|
595516
595164
|
descriptor: DescriptorSchema
|
|
595517
595165
|
});
|
|
595518
|
-
var COLLECTION = "cluster-node-history";
|
|
595519
595166
|
var LAST_ACTIVE_HEARTBEAT_MS = 5 * 6e4;
|
|
595520
595167
|
function descriptorsEqual(a, b) {
|
|
595521
595168
|
return a.id === b.id && a.name === b.name && a.hostname === b.hostname && a.platform === b.platform && a.arch === b.arch && a.cpuModel === b.cpuModel && a.cpuCores === b.cpuCores && a.memoryMB === b.memoryMB && a.isHub === b.isHub && sameStrings(a.engines, b.engines) && sameStrings(a.localIps, b.localIps) && sameStrings(a.addonIds, b.addonIds) && samePackages(a.packages, b.packages);
|
|
@@ -595529,12 +595176,9 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595529
595176
|
return a.length === b.length && a.every((p, i) => p.name === b[i]?.name && p.version === b[i]?.version);
|
|
595530
595177
|
}
|
|
595531
595178
|
var ClusterNodeHistoryStore = class _ClusterNodeHistoryStore {
|
|
595532
|
-
resolveSettingsStore;
|
|
595533
595179
|
logger;
|
|
595534
|
-
declared = false;
|
|
595535
595180
|
resolveKind;
|
|
595536
|
-
constructor(
|
|
595537
|
-
this.resolveSettingsStore = resolveSettingsStore;
|
|
595181
|
+
constructor(logger, resolveKind = () => null) {
|
|
595538
595182
|
this.logger = logger;
|
|
595539
595183
|
this.resolveKind = resolveKind;
|
|
595540
595184
|
}
|
|
@@ -595542,37 +595186,6 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595542
595186
|
bindRecordsKind(resolver) {
|
|
595543
595187
|
this.resolveKind = resolver;
|
|
595544
595188
|
}
|
|
595545
|
-
/**
|
|
595546
|
-
* Idempotently declare the typed collection. Returns the resolved provider
|
|
595547
|
-
* or null if the settings-store isn't available yet (early boot / hub
|
|
595548
|
-
* unreachable) — callers treat null as "skip, best-effort".
|
|
595549
|
-
*/
|
|
595550
|
-
async ensureDeclared() {
|
|
595551
|
-
if (this.resolveKind() !== null)
|
|
595552
|
-
return this.resolveSettingsStore();
|
|
595553
|
-
const store = this.resolveSettingsStore();
|
|
595554
|
-
if (!store)
|
|
595555
|
-
return null;
|
|
595556
|
-
if (this.declared)
|
|
595557
|
-
return store;
|
|
595558
|
-
try {
|
|
595559
|
-
await store.declareCollection({
|
|
595560
|
-
collection: COLLECTION,
|
|
595561
|
-
columns: [
|
|
595562
|
-
{ name: "id", type: "TEXT", primaryKey: true, notNull: true },
|
|
595563
|
-
{ name: "lastActive", type: "INTEGER", notNull: true },
|
|
595564
|
-
{ name: "descriptor", type: "JSON", notNull: true }
|
|
595565
|
-
]
|
|
595566
|
-
});
|
|
595567
|
-
this.declared = true;
|
|
595568
|
-
return store;
|
|
595569
|
-
} catch (err) {
|
|
595570
|
-
this.logger.warn("declareCollection failed (best-effort)", {
|
|
595571
|
-
meta: { error: (0, types_1.errMsg)(err) }
|
|
595572
|
-
});
|
|
595573
|
-
return null;
|
|
595574
|
-
}
|
|
595575
|
-
}
|
|
595576
595189
|
/**
|
|
595577
595190
|
* Upsert a node's descriptor + addon roster while it is ONLINE, stamping
|
|
595578
595191
|
* `lastActive = Date.now()`. Called on each `listNodes()` refresh for every
|
|
@@ -595592,16 +595205,16 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595592
595205
|
* `$node.disconnected`, and buys 288 writes/day/node instead of 2,880.
|
|
595593
595206
|
*/
|
|
595594
595207
|
async snapshot(descriptor) {
|
|
595595
|
-
const
|
|
595596
|
-
if (
|
|
595208
|
+
const kind = this.resolveKind();
|
|
595209
|
+
if (kind === null)
|
|
595597
595210
|
return;
|
|
595598
595211
|
try {
|
|
595599
|
-
const existing = await this.readStored(descriptor.id);
|
|
595212
|
+
const existing = await this.readStored(kind, descriptor.id);
|
|
595600
595213
|
const packages = descriptor.packages ?? existing?.descriptor.packages;
|
|
595601
595214
|
const next = packages === void 0 ? descriptor : { ...descriptor, packages };
|
|
595602
595215
|
if (existing !== null && !this.worthWriting(existing, next))
|
|
595603
595216
|
return;
|
|
595604
|
-
await this.writeStored(descriptor.id, Date.now(), next);
|
|
595217
|
+
await this.writeStored(kind, descriptor.id, Date.now(), next);
|
|
595605
595218
|
} catch (err) {
|
|
595606
595219
|
this.logger.warn("snapshot upsert failed (best-effort)", {
|
|
595607
595220
|
tags: { nodeId: descriptor.id },
|
|
@@ -595620,47 +595233,21 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595620
595233
|
return !descriptorsEqual(existing.descriptor, next);
|
|
595621
595234
|
}
|
|
595622
595235
|
/** Read one node's row, validated. `null` when absent or malformed. */
|
|
595623
|
-
async readStored(nodeId) {
|
|
595624
|
-
const
|
|
595625
|
-
if (
|
|
595626
|
-
const row = await kind.get(nodeId);
|
|
595627
|
-
if (row === null)
|
|
595628
|
-
return null;
|
|
595629
|
-
const parsed = RowDataSchema.safeParse({
|
|
595630
|
-
lastActive: row.at ?? 0,
|
|
595631
|
-
descriptor: row.data.descriptor
|
|
595632
|
-
});
|
|
595633
|
-
return parsed.success ? parsed.data : null;
|
|
595634
|
-
}
|
|
595635
|
-
const store = this.resolveSettingsStore();
|
|
595636
|
-
if (!store)
|
|
595637
|
-
return null;
|
|
595638
|
-
return this.readRowLegacy(store, nodeId);
|
|
595639
|
-
}
|
|
595640
|
-
async readRowLegacy(store, nodeId) {
|
|
595641
|
-
const raw = await store.get({ collection: COLLECTION, key: nodeId });
|
|
595642
|
-
if (raw === null || raw === void 0)
|
|
595236
|
+
async readStored(kind, nodeId) {
|
|
595237
|
+
const row = await kind.get(nodeId);
|
|
595238
|
+
if (row === null)
|
|
595643
595239
|
return null;
|
|
595644
|
-
const parsed = RowDataSchema.safeParse(
|
|
595240
|
+
const parsed = RowDataSchema.safeParse({
|
|
595241
|
+
lastActive: row.at ?? 0,
|
|
595242
|
+
descriptor: row.data.descriptor
|
|
595243
|
+
});
|
|
595645
595244
|
return parsed.success ? parsed.data : null;
|
|
595646
595245
|
}
|
|
595647
|
-
async writeStored(nodeId, lastActive, descriptor) {
|
|
595648
|
-
const
|
|
595649
|
-
if (
|
|
595650
|
-
const body = system_1.ClusterNodeHistoryBodySchema.safeParse({ descriptor });
|
|
595651
|
-
if (!body.success)
|
|
595652
|
-
return;
|
|
595653
|
-
await kind.put({ id: nodeId, at: lastActive, data: body.data });
|
|
595654
|
-
return;
|
|
595655
|
-
}
|
|
595656
|
-
const store = this.resolveSettingsStore();
|
|
595657
|
-
if (!store)
|
|
595246
|
+
async writeStored(kind, nodeId, lastActive, descriptor) {
|
|
595247
|
+
const body = system_1.ClusterNodeHistoryBodySchema.safeParse({ descriptor });
|
|
595248
|
+
if (!body.success)
|
|
595658
595249
|
return;
|
|
595659
|
-
await
|
|
595660
|
-
collection: COLLECTION,
|
|
595661
|
-
key: nodeId,
|
|
595662
|
-
value: { lastActive, descriptor }
|
|
595663
|
-
});
|
|
595250
|
+
await kind.put({ id: nodeId, at: lastActive, data: body.data });
|
|
595664
595251
|
}
|
|
595665
595252
|
/** A placeholder descriptor for a node the topology pass has not seen yet. */
|
|
595666
595253
|
static placeholderDescriptor(nodeId) {
|
|
@@ -595685,11 +595272,11 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595685
595272
|
* nothing is delivered rather than something guessed.
|
|
595686
595273
|
*/
|
|
595687
595274
|
async getPackages(nodeId) {
|
|
595688
|
-
const
|
|
595689
|
-
if (
|
|
595275
|
+
const kind = this.resolveKind();
|
|
595276
|
+
if (kind === null)
|
|
595690
595277
|
return [];
|
|
595691
595278
|
try {
|
|
595692
|
-
return (await this.readStored(nodeId))?.descriptor.packages ?? [];
|
|
595279
|
+
return (await this.readStored(kind, nodeId))?.descriptor.packages ?? [];
|
|
595693
595280
|
} catch (err) {
|
|
595694
595281
|
this.logger.warn("getPackages failed (best-effort)", {
|
|
595695
595282
|
tags: { nodeId },
|
|
@@ -595709,11 +595296,11 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595709
595296
|
async recordPackages(nodeId, packages) {
|
|
595710
595297
|
if (packages.length === 0)
|
|
595711
595298
|
return;
|
|
595712
|
-
const
|
|
595713
|
-
if (
|
|
595299
|
+
const kind = this.resolveKind();
|
|
595300
|
+
if (kind === null)
|
|
595714
595301
|
return;
|
|
595715
595302
|
try {
|
|
595716
|
-
const existing = await this.readStored(nodeId);
|
|
595303
|
+
const existing = await this.readStored(kind, nodeId);
|
|
595717
595304
|
const merged = new Map((existing?.descriptor.packages ?? []).map((p) => [p.name, p]));
|
|
595718
595305
|
for (const entry of packages)
|
|
595719
595306
|
merged.set(entry.name, entry);
|
|
@@ -595721,7 +595308,7 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595721
595308
|
...existing?.descriptor ?? _ClusterNodeHistoryStore.placeholderDescriptor(nodeId),
|
|
595722
595309
|
packages: [...merged.values()]
|
|
595723
595310
|
};
|
|
595724
|
-
await this.writeStored(nodeId, existing?.lastActive ?? Date.now(), descriptor);
|
|
595311
|
+
await this.writeStored(kind, nodeId, existing?.lastActive ?? Date.now(), descriptor);
|
|
595725
595312
|
} catch (err) {
|
|
595726
595313
|
this.logger.warn("recordPackages failed (best-effort)", {
|
|
595727
595314
|
tags: { nodeId },
|
|
@@ -595737,11 +595324,11 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595737
595324
|
async prunePackages(nodeId, names) {
|
|
595738
595325
|
if (names.length === 0)
|
|
595739
595326
|
return;
|
|
595740
|
-
const
|
|
595741
|
-
if (
|
|
595327
|
+
const kind = this.resolveKind();
|
|
595328
|
+
if (kind === null)
|
|
595742
595329
|
return;
|
|
595743
595330
|
try {
|
|
595744
|
-
const existing = await this.readStored(nodeId);
|
|
595331
|
+
const existing = await this.readStored(kind, nodeId);
|
|
595745
595332
|
if (existing === null)
|
|
595746
595333
|
return;
|
|
595747
595334
|
const current = existing.descriptor.packages;
|
|
@@ -595751,7 +595338,7 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595751
595338
|
const remaining = current.filter((p) => !drop.has(p.name));
|
|
595752
595339
|
if (remaining.length === current.length)
|
|
595753
595340
|
return;
|
|
595754
|
-
await this.writeStored(nodeId, existing.lastActive, {
|
|
595341
|
+
await this.writeStored(kind, nodeId, existing.lastActive, {
|
|
595755
595342
|
...existing.descriptor,
|
|
595756
595343
|
packages: remaining
|
|
595757
595344
|
});
|
|
@@ -595772,27 +595359,14 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595772
595359
|
* time. A no-op if the node was never snapshotted (nothing to update).
|
|
595773
595360
|
*/
|
|
595774
595361
|
async touch(nodeId) {
|
|
595775
|
-
const
|
|
595776
|
-
if (
|
|
595362
|
+
const kind = this.resolveKind();
|
|
595363
|
+
if (kind === null)
|
|
595777
595364
|
return;
|
|
595778
595365
|
try {
|
|
595779
|
-
const existing = await this.readStored(nodeId);
|
|
595366
|
+
const existing = await this.readStored(kind, nodeId);
|
|
595780
595367
|
if (existing === null)
|
|
595781
595368
|
return;
|
|
595782
|
-
|
|
595783
|
-
if (kind !== null) {
|
|
595784
|
-
await kind.put({
|
|
595785
|
-
id: nodeId,
|
|
595786
|
-
at: Date.now(),
|
|
595787
|
-
data: { descriptor: existing.descriptor }
|
|
595788
|
-
});
|
|
595789
|
-
return;
|
|
595790
|
-
}
|
|
595791
|
-
await store.update({
|
|
595792
|
-
collection: COLLECTION,
|
|
595793
|
-
id: nodeId,
|
|
595794
|
-
data: { lastActive: Date.now() }
|
|
595795
|
-
});
|
|
595369
|
+
await this.writeStored(kind, nodeId, Date.now(), existing.descriptor);
|
|
595796
595370
|
} catch (err) {
|
|
595797
595371
|
this.logger.warn("touch failed (best-effort)", {
|
|
595798
595372
|
tags: { nodeId },
|
|
@@ -595806,24 +595380,20 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595806
595380
|
}
|
|
595807
595381
|
/**
|
|
595808
595382
|
* Read the full persisted history, validated, or `null` when the store did
|
|
595809
|
-
* not ANSWER (
|
|
595383
|
+
* not ANSWER (the kind is not bound yet, or the read threw). A caller that must not claim
|
|
595810
595384
|
* a node absent from an unanswered read (D315) uses this; `getAll` folds the
|
|
595811
595385
|
* `null` into `[]` for the callers that only render what exists. Malformed
|
|
595812
595386
|
* rows are dropped (and logged) — the rest of the answer still stands.
|
|
595813
595387
|
*/
|
|
595814
595388
|
async tryGetAll() {
|
|
595815
|
-
const
|
|
595816
|
-
if (
|
|
595389
|
+
const kind = this.resolveKind();
|
|
595390
|
+
if (kind === null)
|
|
595817
595391
|
return null;
|
|
595818
595392
|
try {
|
|
595819
|
-
const kind = this.resolveKind();
|
|
595820
595393
|
const result = [];
|
|
595821
|
-
const rows =
|
|
595394
|
+
const rows = (await (0, system_1.readAllRows)(kind)).map((row) => ({
|
|
595822
595395
|
id: row.id,
|
|
595823
595396
|
data: { lastActive: row.at ?? 0, descriptor: row.data.descriptor }
|
|
595824
|
-
})) : (await store.query({ collection: COLLECTION })).map((row) => ({
|
|
595825
|
-
id: row.id,
|
|
595826
|
-
data: row.data
|
|
595827
595397
|
}));
|
|
595828
595398
|
for (const row of rows) {
|
|
595829
595399
|
const parsed = RowDataSchema.safeParse(row.data);
|
|
@@ -595850,17 +595420,12 @@ var require_cluster_node_history_store = __commonJS({
|
|
|
595850
595420
|
* 2026-09-01 all three reached the UI as `{"success": true}`.
|
|
595851
595421
|
*/
|
|
595852
595422
|
async forget(nodeId) {
|
|
595853
|
-
const
|
|
595854
|
-
if (
|
|
595423
|
+
const kind = this.resolveKind();
|
|
595424
|
+
if (kind === null)
|
|
595855
595425
|
return "store-unavailable";
|
|
595856
595426
|
try {
|
|
595857
|
-
const existed = await this.readStored(nodeId) !== null;
|
|
595858
|
-
|
|
595859
|
-
if (kind !== null) {
|
|
595860
|
-
await kind.delete(nodeId);
|
|
595861
|
-
} else {
|
|
595862
|
-
await store.delete({ collection: COLLECTION, key: nodeId });
|
|
595863
|
-
}
|
|
595427
|
+
const existed = await this.readStored(kind, nodeId) !== null;
|
|
595428
|
+
await kind.delete(nodeId);
|
|
595864
595429
|
if (!existed) {
|
|
595865
595430
|
this.logger.info("cluster node had no history row to forget", { tags: { nodeId } });
|
|
595866
595431
|
return "not-found";
|
|
@@ -595997,52 +595562,6 @@ var require_toast_wrapper_service = __commonJS({
|
|
|
595997
595562
|
}
|
|
595998
595563
|
});
|
|
595999
595564
|
|
|
596000
|
-
// ../../server/backend/dist/core/runner-health/update-preflight.js
|
|
596001
|
-
var require_update_preflight = __commonJS({
|
|
596002
|
-
"../../server/backend/dist/core/runner-health/update-preflight.js"(exports) {
|
|
596003
|
-
"use strict";
|
|
596004
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
596005
|
-
exports.LEGACY_BLOB_GUARD_SINCE = void 0;
|
|
596006
|
-
exports.buildUpdatePreflight = buildUpdatePreflight;
|
|
596007
|
-
exports.legacyGuardClientOf = legacyGuardClientOf;
|
|
596008
|
-
var system_1 = require_dist3();
|
|
596009
|
-
var index_js_1 = require_server_root();
|
|
596010
|
-
exports.LEGACY_BLOB_GUARD_SINCE = "1.2.585";
|
|
596011
|
-
function buildUpdatePreflight(deps) {
|
|
596012
|
-
return async (targetVersion) => {
|
|
596013
|
-
if ((0, index_js_1.compareSemver)(targetVersion, exports.LEGACY_BLOB_GUARD_SINCE) < 0)
|
|
596014
|
-
return [];
|
|
596015
|
-
const store = deps.store();
|
|
596016
|
-
if (store === null) {
|
|
596017
|
-
throw new Error("the settings store is not available to pre-check the update");
|
|
596018
|
-
}
|
|
596019
|
-
const blockers = [];
|
|
596020
|
-
for (const addonId of deps.forkedAddonIds()) {
|
|
596021
|
-
try {
|
|
596022
|
-
await (0, system_1.assertLegacyBlobsMigrated)(store, addonId, deps.logger);
|
|
596023
|
-
} catch (err) {
|
|
596024
|
-
if (!(err instanceof system_1.UnmigratedSettingsError))
|
|
596025
|
-
throw err;
|
|
596026
|
-
blockers.push({
|
|
596027
|
-
addonId,
|
|
596028
|
-
reason: err.message,
|
|
596029
|
-
remedy: system_1.UNMIGRATED_SETTINGS_REMEDY
|
|
596030
|
-
});
|
|
596031
|
-
}
|
|
596032
|
-
}
|
|
596033
|
-
return blockers;
|
|
596034
|
-
};
|
|
596035
|
-
}
|
|
596036
|
-
function legacyGuardClientOf(store) {
|
|
596037
|
-
return {
|
|
596038
|
-
query: { query: (input) => store.query(input) },
|
|
596039
|
-
get: { query: (input) => store.get(input) },
|
|
596040
|
-
count: { query: (input) => store.count(input) }
|
|
596041
|
-
};
|
|
596042
|
-
}
|
|
596043
|
-
}
|
|
596044
|
-
});
|
|
596045
|
-
|
|
596046
595565
|
// ../../server/backend/dist/core/topology/topology-emitter.service.js
|
|
596047
595566
|
var require_topology_emitter_service = __commonJS({
|
|
596048
595567
|
"../../server/backend/dist/core/topology/topology-emitter.service.js"(exports) {
|
|
@@ -596272,7 +595791,6 @@ var require_manual_boot = __commonJS({
|
|
|
596272
595791
|
var repl_engine_service_1 = require_repl_engine_service();
|
|
596273
595792
|
var server_update_service_1 = require_server_update_service();
|
|
596274
595793
|
var runner_boot_check_1 = require_runner_boot_check();
|
|
596275
|
-
var update_preflight_1 = require_update_preflight();
|
|
596276
595794
|
var storage_service_1 = require_storage_service();
|
|
596277
595795
|
var stream_probe_service_1 = require_stream_probe_service();
|
|
596278
595796
|
var topology_emitter_service_1 = require_topology_emitter_service();
|
|
@@ -596326,7 +595844,7 @@ var require_manual_boot = __commonJS({
|
|
|
596326
595844
|
const addonRegistryService = new addon_registry_service_1.AddonRegistryService(loggingService, eventBusService, configService, storageService, capabilityService, moleculerService, streamProbeService);
|
|
596327
595845
|
agentRegistryService.setAddonRegistry(addonRegistryService);
|
|
596328
595846
|
agentRegistryService.setLogger(loggingService.createLogger("ClusterNodes"));
|
|
596329
|
-
const clusterNodeHistoryStore = new cluster_node_history_store_1.ClusterNodeHistoryStore(
|
|
595847
|
+
const clusterNodeHistoryStore = new cluster_node_history_store_1.ClusterNodeHistoryStore(loggingService.createLogger("cluster-node-history"));
|
|
596330
595848
|
agentRegistryService.setClusterNodeHistoryStore(clusterNodeHistoryStore);
|
|
596331
595849
|
addonRegistryService.setClusterNodeHistoryStore(clusterNodeHistoryStore);
|
|
596332
595850
|
const addonWidgetsService = new addon_widgets_service_1.AddonWidgetsService(loggingService, capabilityService, addonRegistryService);
|
|
@@ -596412,16 +595930,7 @@ var require_manual_boot = __commonJS({
|
|
|
596412
595930
|
});
|
|
596413
595931
|
}
|
|
596414
595932
|
});
|
|
596415
|
-
const settingsStoreOrNull = () => capabilityService.getRegistry()?.getSingleton("settings-store") ?? null;
|
|
596416
595933
|
const serverUpdateService = new server_update_service_1.ServerUpdateService({
|
|
596417
|
-
updatePreflight: (0, update_preflight_1.buildUpdatePreflight)({
|
|
596418
|
-
logger: loggingService.createLogger("UpdatePreflight"),
|
|
596419
|
-
forkedAddonIds: () => addonRegistryService.forkedAddonIds(),
|
|
596420
|
-
store: () => {
|
|
596421
|
-
const store = settingsStoreOrNull();
|
|
596422
|
-
return store === null ? null : (0, update_preflight_1.legacyGuardClientOf)(store);
|
|
596423
|
-
}
|
|
596424
|
-
}),
|
|
596425
595934
|
runnerBootCheck: () => hubRunnerBootCheck.current(),
|
|
596426
595935
|
logger: loggingService.createLogger("ServerUpdate"),
|
|
596427
595936
|
restartServer: (requestedBy, update) => addonPackageService.restartServer(requestedBy, update),
|