@camstack/addon-provider-ecowitt 0.1.8 → 0.1.9
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/addon.js +928 -1210
- package/dist/addon.mjs +923 -1209
- package/dist/index.js +6 -2
- package/dist/index.mjs +2 -2
- package/package.json +3 -9
package/dist/addon.js
CHANGED
|
@@ -14785,83 +14785,34 @@ var GetStateInputSchema = object({
|
|
|
14785
14785
|
* HA: entity_id (returns the cached entity state). */
|
|
14786
14786
|
key: string()
|
|
14787
14787
|
});
|
|
14788
|
-
|
|
14789
|
-
|
|
14790
|
-
|
|
14791
|
-
|
|
14792
|
-
|
|
14793
|
-
|
|
14794
|
-
|
|
14795
|
-
|
|
14796
|
-
|
|
14797
|
-
|
|
14798
|
-
|
|
14799
|
-
|
|
14800
|
-
|
|
14801
|
-
|
|
14802
|
-
|
|
14803
|
-
|
|
14804
|
-
|
|
14805
|
-
|
|
14806
|
-
|
|
14807
|
-
|
|
14808
|
-
|
|
14809
|
-
|
|
14810
|
-
|
|
14811
|
-
|
|
14812
|
-
|
|
14813
|
-
|
|
14814
|
-
|
|
14815
|
-
|
|
14816
|
-
}),
|
|
14817
|
-
/** Read the persisted settings record for a broker (kind-specific
|
|
14818
|
-
* shape). Admin-only — settings may contain secrets. Returns `null`
|
|
14819
|
-
* when the broker id is unknown to the provider (the collection
|
|
14820
|
-
* fallback may route a foreign id to the first provider). */
|
|
14821
|
-
getSettings: method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }),
|
|
14822
|
-
/** Overwrite the persisted settings record. The kind-specific
|
|
14823
|
-
* provider validates the shape and applies the change (reconnects
|
|
14824
|
-
* if credentials changed). */
|
|
14825
|
-
setSettings: method(object({
|
|
14826
|
-
id: string(),
|
|
14827
|
-
settings: SettingsRecordSchema$1
|
|
14828
|
-
}), _void(), {
|
|
14829
|
-
kind: "mutation",
|
|
14830
|
-
auth: "admin"
|
|
14831
|
-
}),
|
|
14832
|
-
/** Returns the kind-specific connection config the consumer needs
|
|
14833
|
-
* to open its own client (MQTT pattern: `{url, username, password,
|
|
14834
|
-
* clientIdPrefix}`). HA providers MAY return the auth envelope
|
|
14835
|
-
* but typical HA consumers use `publish` / `subscribe` instead.
|
|
14836
|
-
* Returns `null` when the broker id is unknown to the provider. */
|
|
14837
|
-
getBrokerConfig: method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }),
|
|
14838
|
-
getSettingsSchema: method(SettingsSchemaInputSchema, SettingsSchemaResultSchema, { auth: "admin" }),
|
|
14839
|
-
testSettings: method(TestSettingsInputSchema, TestSettingsResultSchema, {
|
|
14840
|
-
kind: "mutation",
|
|
14841
|
-
auth: "admin"
|
|
14842
|
-
}),
|
|
14843
|
-
publish: method(PublishInputSchema, unknown(), {
|
|
14844
|
-
kind: "mutation",
|
|
14845
|
-
auth: "admin"
|
|
14846
|
-
}),
|
|
14847
|
-
subscribe: method(SubscribeInputSchema, SubscribeResultSchema, {
|
|
14848
|
-
kind: "mutation",
|
|
14849
|
-
auth: "admin"
|
|
14850
|
-
}),
|
|
14851
|
-
unsubscribe: method(UnsubscribeInputSchema, _void(), {
|
|
14852
|
-
kind: "mutation",
|
|
14853
|
-
auth: "admin"
|
|
14854
|
-
}),
|
|
14855
|
-
/** Read the broker's cached state for a key. Returns `null` when
|
|
14856
|
-
* unknown to the broker (never published / unknown entity). */
|
|
14857
|
-
getState: method(GetStateInputSchema, unknown().nullable()),
|
|
14858
|
-
/** Status method — explicit registration with a `z.void()` input so
|
|
14859
|
-
* the codegen-generated tRPC router types its input as
|
|
14860
|
-
* `{addonId?: string, nodeId?: string}` (system-scoped collection
|
|
14861
|
-
* shape) instead of the device-scoped `{deviceId}` fallback. */
|
|
14862
|
-
getStatus: method(_void(), RegistryStatusSchema)
|
|
14863
|
-
}
|
|
14864
|
-
};
|
|
14788
|
+
method(ListInputSchema, array(BrokerInfoSchema$1)), method(GetInputSchema, BrokerInfoSchema$1.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
|
|
14789
|
+
kind: "mutation",
|
|
14790
|
+
auth: "admin"
|
|
14791
|
+
}), method(RemoveInputSchema, _void(), {
|
|
14792
|
+
kind: "mutation",
|
|
14793
|
+
auth: "admin"
|
|
14794
|
+
}), method(GetInputSchema, TestConnectionResultSchema, {
|
|
14795
|
+
kind: "mutation",
|
|
14796
|
+
auth: "admin"
|
|
14797
|
+
}), method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }), method(object({
|
|
14798
|
+
id: string(),
|
|
14799
|
+
settings: SettingsRecordSchema$1
|
|
14800
|
+
}), _void(), {
|
|
14801
|
+
kind: "mutation",
|
|
14802
|
+
auth: "admin"
|
|
14803
|
+
}), method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }), method(SettingsSchemaInputSchema, SettingsSchemaResultSchema, { auth: "admin" }), method(TestSettingsInputSchema, TestSettingsResultSchema, {
|
|
14804
|
+
kind: "mutation",
|
|
14805
|
+
auth: "admin"
|
|
14806
|
+
}), method(PublishInputSchema, unknown(), {
|
|
14807
|
+
kind: "mutation",
|
|
14808
|
+
auth: "admin"
|
|
14809
|
+
}), method(SubscribeInputSchema, SubscribeResultSchema, {
|
|
14810
|
+
kind: "mutation",
|
|
14811
|
+
auth: "admin"
|
|
14812
|
+
}), method(UnsubscribeInputSchema, _void(), {
|
|
14813
|
+
kind: "mutation",
|
|
14814
|
+
auth: "admin"
|
|
14815
|
+
}), method(GetStateInputSchema, unknown().nullable()), method(_void(), RegistryStatusSchema);
|
|
14865
14816
|
DeviceType.Camera;
|
|
14866
14817
|
/**
|
|
14867
14818
|
* `custom-model-registry` — collection cap exposing operator-registered
|
|
@@ -15097,36 +15048,19 @@ var ResyncResultSchema = object({
|
|
|
15097
15048
|
* provider re-derived the device. 0/absent for a normal incremental re-sync. */
|
|
15098
15049
|
removedChildren: number().int().nonnegative().optional()
|
|
15099
15050
|
});
|
|
15100
|
-
|
|
15101
|
-
|
|
15102
|
-
|
|
15103
|
-
|
|
15104
|
-
|
|
15105
|
-
|
|
15106
|
-
|
|
15107
|
-
|
|
15108
|
-
|
|
15109
|
-
|
|
15110
|
-
|
|
15111
|
-
|
|
15112
|
-
|
|
15113
|
-
kind: "mutation",
|
|
15114
|
-
auth: "admin"
|
|
15115
|
-
}),
|
|
15116
|
-
adopt: method(AdoptInputSchema, AdoptResultSchema, {
|
|
15117
|
-
kind: "mutation",
|
|
15118
|
-
auth: "admin"
|
|
15119
|
-
}),
|
|
15120
|
-
release: method(ReleaseInputSchema, _void(), {
|
|
15121
|
-
kind: "mutation",
|
|
15122
|
-
auth: "admin"
|
|
15123
|
-
}),
|
|
15124
|
-
resync: method(ResyncInputSchema, ResyncResultSchema, {
|
|
15125
|
-
kind: "mutation",
|
|
15126
|
-
auth: "admin"
|
|
15127
|
-
})
|
|
15128
|
-
}
|
|
15129
|
-
};
|
|
15051
|
+
method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }), method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }), method(object({ integrationId: string() }), AdoptionStatusSchema, {
|
|
15052
|
+
kind: "mutation",
|
|
15053
|
+
auth: "admin"
|
|
15054
|
+
}), method(AdoptInputSchema, AdoptResultSchema, {
|
|
15055
|
+
kind: "mutation",
|
|
15056
|
+
auth: "admin"
|
|
15057
|
+
}), method(ReleaseInputSchema, _void(), {
|
|
15058
|
+
kind: "mutation",
|
|
15059
|
+
auth: "admin"
|
|
15060
|
+
}), method(ResyncInputSchema, ResyncResultSchema, {
|
|
15061
|
+
kind: "mutation",
|
|
15062
|
+
auth: "admin"
|
|
15063
|
+
});
|
|
15130
15064
|
/**
|
|
15131
15065
|
* `device-export` — collection cap for addons that export camstack
|
|
15132
15066
|
* devices to external ecosystems (HomeAssistant via MQTT discovery,
|
|
@@ -18316,6 +18250,17 @@ var AvailableIntegrationTypeSchema = object({
|
|
|
18316
18250
|
iconUrl: string().nullable(),
|
|
18317
18251
|
color: string(),
|
|
18318
18252
|
instanceMode: string(),
|
|
18253
|
+
/**
|
|
18254
|
+
* Integration wizard `mode` (LOCKED MODEL): `standalone` (create
|
|
18255
|
+
* immediately then add devices, no config step/button), `account` (config
|
|
18256
|
+
* step), or `broker` (broker step). Derived server-side by
|
|
18257
|
+
* `getAvailableTypes` when the addon manifest omits an explicit `mode`.
|
|
18258
|
+
*/
|
|
18259
|
+
mode: _enum([
|
|
18260
|
+
"standalone",
|
|
18261
|
+
"account",
|
|
18262
|
+
"broker"
|
|
18263
|
+
]),
|
|
18319
18264
|
discoveryMode: string(),
|
|
18320
18265
|
/**
|
|
18321
18266
|
* Which integration-marker cap the addon declared, so the wizard can
|
|
@@ -24034,7 +23979,184 @@ object({
|
|
|
24034
23979
|
schemaVersion: literal(1)
|
|
24035
23980
|
});
|
|
24036
23981
|
//#endregion
|
|
24037
|
-
//#region
|
|
23982
|
+
//#region src/config.ts
|
|
23983
|
+
/**
|
|
23984
|
+
* Operator-supplied Ecowitt gateway settings for ONE broker (= one station).
|
|
23985
|
+
* Two transports behind a `transport` discriminator:
|
|
23986
|
+
*
|
|
23987
|
+
* - `local` (local-poll): the addon polls the gateway over HTTP (`host`/`port`/
|
|
23988
|
+
* optional `password`, with poll + mapping intervals).
|
|
23989
|
+
* - `listener` (push): the addon runs an HTTP server the gateway uploads to
|
|
23990
|
+
* (the gateway's "Customized" upload must point at the hub's LAN IP:port).
|
|
23991
|
+
*
|
|
23992
|
+
* Local-poll is the recommended default — it has no inbound-IP constraint.
|
|
23993
|
+
*/
|
|
23994
|
+
var baseFields = {
|
|
23995
|
+
/** Human-overridable station identity used to scope the adopted gateway. */
|
|
23996
|
+
stationId: string().default("").describe("Optional stable station id (auto-derived when blank)") };
|
|
23997
|
+
var ecowittConfigSchema = discriminatedUnion("transport", [object({
|
|
23998
|
+
transport: literal("local"),
|
|
23999
|
+
host: string().min(1).describe("Ecowitt gateway host name or IP address"),
|
|
24000
|
+
port: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(80)).describe("Gateway HTTP port"),
|
|
24001
|
+
password: string().default("").describe("Gateway password (optional — newer firmware)"),
|
|
24002
|
+
pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e3).max(36e5).default(6e4)).describe("Live-data poll interval (ms)"),
|
|
24003
|
+
mappingIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e4).max(864e5).default(6e5)).describe("Sensor-map refresh interval (ms)"),
|
|
24004
|
+
...baseFields
|
|
24005
|
+
}), object({
|
|
24006
|
+
transport: literal("listener"),
|
|
24007
|
+
listenPort: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(4199)).describe("Local TCP port the gateway uploads to"),
|
|
24008
|
+
listenHost: string().default("").describe("Optional bind host (blank = all interfaces)"),
|
|
24009
|
+
...baseFields
|
|
24010
|
+
})]);
|
|
24011
|
+
/**
|
|
24012
|
+
* Narrow an `unknown` value to a shallow-cloned plain object record, or an empty
|
|
24013
|
+
* record when it is not a plain object. Mirrors the Homematic `toRecord` helper —
|
|
24014
|
+
* a cast-free boundary narrowing.
|
|
24015
|
+
*/
|
|
24016
|
+
function toRecord(value) {
|
|
24017
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) return Object.fromEntries(Object.entries(value));
|
|
24018
|
+
return {};
|
|
24019
|
+
}
|
|
24020
|
+
/** Coerce a loose settings blob through the connection schema, applying defaults.
|
|
24021
|
+
* A blob with no `transport` defaults to `local` for back-compat with simple forms. */
|
|
24022
|
+
function settingsToEcowittConfig(settings) {
|
|
24023
|
+
const raw = toRecord(settings);
|
|
24024
|
+
if (raw["transport"] !== "local" && raw["transport"] !== "listener") raw["transport"] = "local";
|
|
24025
|
+
return ecowittConfigSchema.parse(raw);
|
|
24026
|
+
}
|
|
24027
|
+
/**
|
|
24028
|
+
* Persisted config for an Ecowitt gateway {@link import('@camstack/types').DeviceType.Hub}
|
|
24029
|
+
* device. The operator-supplied CONNECTION lives directly on the device (Reolink
|
|
24030
|
+
* pattern) — there is no broker registry. The gateway owns its own live nodewitt
|
|
24031
|
+
* client keyed on its own `stableId`; group Container children reference it via
|
|
24032
|
+
* their `gatewayId` config field.
|
|
24033
|
+
*/
|
|
24034
|
+
var ecowittGatewaySchema = object({
|
|
24035
|
+
/** The transport + endpoint the gateway's live client dials / binds. */
|
|
24036
|
+
connection: ecowittConfigSchema,
|
|
24037
|
+
/** Provenance marker used to scope offline / cascade helpers. */
|
|
24038
|
+
system: literal("ecowitt-gateway").optional()
|
|
24039
|
+
});
|
|
24040
|
+
/**
|
|
24041
|
+
* Hand-written connection form for the gateway device-creation UI (standalone
|
|
24042
|
+
* mode — Reolink pattern). The connection lives on the gateway DEVICE config,
|
|
24043
|
+
* not in a broker registry. A `name` field is included so the operator names
|
|
24044
|
+
* the gateway Hub at creation time (mirrors the Reolink creation form).
|
|
24045
|
+
*/
|
|
24046
|
+
function buildConnectionFormSchema() {
|
|
24047
|
+
return { sections: [
|
|
24048
|
+
{
|
|
24049
|
+
id: "identity",
|
|
24050
|
+
title: "Gateway",
|
|
24051
|
+
columns: 1,
|
|
24052
|
+
fields: [{
|
|
24053
|
+
type: "text",
|
|
24054
|
+
key: "name",
|
|
24055
|
+
label: "Name",
|
|
24056
|
+
required: true,
|
|
24057
|
+
placeholder: "Weather station"
|
|
24058
|
+
}]
|
|
24059
|
+
},
|
|
24060
|
+
{
|
|
24061
|
+
id: "transport",
|
|
24062
|
+
title: "Transport",
|
|
24063
|
+
description: "Choose how CamStack reads the gateway. Local poll connects out to the gateway (recommended). Push listener runs a server the gateway uploads to — configure the gateway \"Customized\" upload to point at this hub.",
|
|
24064
|
+
columns: 1,
|
|
24065
|
+
fields: [{
|
|
24066
|
+
type: "select",
|
|
24067
|
+
key: "transport",
|
|
24068
|
+
label: "Transport",
|
|
24069
|
+
default: "local",
|
|
24070
|
+
options: [{
|
|
24071
|
+
value: "local",
|
|
24072
|
+
label: "Local poll (recommended)"
|
|
24073
|
+
}, {
|
|
24074
|
+
value: "listener",
|
|
24075
|
+
label: "Push listener"
|
|
24076
|
+
}]
|
|
24077
|
+
}]
|
|
24078
|
+
},
|
|
24079
|
+
{
|
|
24080
|
+
id: "local",
|
|
24081
|
+
title: "Local poll settings",
|
|
24082
|
+
columns: 2,
|
|
24083
|
+
fields: [
|
|
24084
|
+
{
|
|
24085
|
+
type: "text",
|
|
24086
|
+
key: "host",
|
|
24087
|
+
label: "Gateway host / IP",
|
|
24088
|
+
placeholder: "192.168.1.50",
|
|
24089
|
+
showWhen: {
|
|
24090
|
+
field: "transport",
|
|
24091
|
+
equals: "local"
|
|
24092
|
+
}
|
|
24093
|
+
},
|
|
24094
|
+
{
|
|
24095
|
+
type: "number",
|
|
24096
|
+
key: "port",
|
|
24097
|
+
label: "HTTP port",
|
|
24098
|
+
min: 1,
|
|
24099
|
+
max: 65535,
|
|
24100
|
+
default: 80,
|
|
24101
|
+
showWhen: {
|
|
24102
|
+
field: "transport",
|
|
24103
|
+
equals: "local"
|
|
24104
|
+
}
|
|
24105
|
+
},
|
|
24106
|
+
{
|
|
24107
|
+
type: "password",
|
|
24108
|
+
key: "password",
|
|
24109
|
+
label: "Password (optional)",
|
|
24110
|
+
showToggle: true,
|
|
24111
|
+
showWhen: {
|
|
24112
|
+
field: "transport",
|
|
24113
|
+
equals: "local"
|
|
24114
|
+
}
|
|
24115
|
+
},
|
|
24116
|
+
{
|
|
24117
|
+
type: "number",
|
|
24118
|
+
key: "pollIntervalMs",
|
|
24119
|
+
label: "Poll interval (ms)",
|
|
24120
|
+
min: 1e3,
|
|
24121
|
+
max: 36e5,
|
|
24122
|
+
default: 6e4,
|
|
24123
|
+
showWhen: {
|
|
24124
|
+
field: "transport",
|
|
24125
|
+
equals: "local"
|
|
24126
|
+
}
|
|
24127
|
+
}
|
|
24128
|
+
]
|
|
24129
|
+
},
|
|
24130
|
+
{
|
|
24131
|
+
id: "listener",
|
|
24132
|
+
title: "Push listener settings",
|
|
24133
|
+
columns: 2,
|
|
24134
|
+
fields: [{
|
|
24135
|
+
type: "number",
|
|
24136
|
+
key: "listenPort",
|
|
24137
|
+
label: "Listen port",
|
|
24138
|
+
min: 1,
|
|
24139
|
+
max: 65535,
|
|
24140
|
+
default: 4199,
|
|
24141
|
+
showWhen: {
|
|
24142
|
+
field: "transport",
|
|
24143
|
+
equals: "listener"
|
|
24144
|
+
}
|
|
24145
|
+
}, {
|
|
24146
|
+
type: "text",
|
|
24147
|
+
key: "listenHost",
|
|
24148
|
+
label: "Bind host (optional)",
|
|
24149
|
+
placeholder: "all interfaces",
|
|
24150
|
+
showWhen: {
|
|
24151
|
+
field: "transport",
|
|
24152
|
+
equals: "listener"
|
|
24153
|
+
}
|
|
24154
|
+
}]
|
|
24155
|
+
}
|
|
24156
|
+
] };
|
|
24157
|
+
}
|
|
24158
|
+
//#endregion
|
|
24159
|
+
//#region node_modules/undici/lib/core/symbols.js
|
|
24038
24160
|
var require_symbols$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
24039
24161
|
module.exports = {
|
|
24040
24162
|
kClose: Symbol("close"),
|
|
@@ -24105,7 +24227,7 @@ var require_symbols$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
24105
24227
|
};
|
|
24106
24228
|
}));
|
|
24107
24229
|
//#endregion
|
|
24108
|
-
//#region
|
|
24230
|
+
//#region node_modules/undici/lib/core/errors.js
|
|
24109
24231
|
var require_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
24110
24232
|
var kUndiciError = Symbol.for("undici.error.UND_ERR");
|
|
24111
24233
|
var UndiciError = class extends Error {
|
|
@@ -24463,7 +24585,7 @@ var require_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
24463
24585
|
};
|
|
24464
24586
|
}));
|
|
24465
24587
|
//#endregion
|
|
24466
|
-
//#region
|
|
24588
|
+
//#region node_modules/undici/lib/core/constants.js
|
|
24467
24589
|
var require_constants$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
24468
24590
|
/** @type {Record<string, string | undefined>} */
|
|
24469
24591
|
var headerNameLowerCasedRecord = {};
|
|
@@ -24576,7 +24698,7 @@ var require_constants$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
24576
24698
|
};
|
|
24577
24699
|
}));
|
|
24578
24700
|
//#endregion
|
|
24579
|
-
//#region
|
|
24701
|
+
//#region node_modules/undici/lib/core/tree.js
|
|
24580
24702
|
var require_tree = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
24581
24703
|
var { wellknownHeaderNames, headerNameLowerCasedRecord } = require_constants$4();
|
|
24582
24704
|
var TstNode = class TstNode {
|
|
@@ -24686,7 +24808,7 @@ var require_tree = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
24686
24808
|
};
|
|
24687
24809
|
}));
|
|
24688
24810
|
//#endregion
|
|
24689
|
-
//#region
|
|
24811
|
+
//#region node_modules/undici/lib/core/util.js
|
|
24690
24812
|
var require_util$7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
24691
24813
|
var assert$26 = require("node:assert");
|
|
24692
24814
|
var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols$4();
|
|
@@ -25140,7 +25262,7 @@ var require_util$7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
25140
25262
|
};
|
|
25141
25263
|
}));
|
|
25142
25264
|
//#endregion
|
|
25143
|
-
//#region
|
|
25265
|
+
//#region node_modules/undici/lib/core/diagnostics.js
|
|
25144
25266
|
var require_diagnostics = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
25145
25267
|
var diagnosticsChannel = require("node:diagnostics_channel");
|
|
25146
25268
|
var util$2 = require("node:util");
|
|
@@ -25237,7 +25359,7 @@ var require_diagnostics = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
25237
25359
|
module.exports = { channels };
|
|
25238
25360
|
}));
|
|
25239
25361
|
//#endregion
|
|
25240
|
-
//#region
|
|
25362
|
+
//#region node_modules/undici/lib/core/request.js
|
|
25241
25363
|
var require_request$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
25242
25364
|
var { InvalidArgumentError, NotSupportedError } = require_errors();
|
|
25243
25365
|
var assert$25 = require("node:assert");
|
|
@@ -25456,7 +25578,7 @@ var require_request$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
25456
25578
|
module.exports = Request;
|
|
25457
25579
|
}));
|
|
25458
25580
|
//#endregion
|
|
25459
|
-
//#region
|
|
25581
|
+
//#region node_modules/undici/lib/dispatcher/dispatcher.js
|
|
25460
25582
|
var require_dispatcher = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
25461
25583
|
var EventEmitter$1 = require("node:events");
|
|
25462
25584
|
var Dispatcher = class extends EventEmitter$1 {
|
|
@@ -25502,7 +25624,7 @@ var require_dispatcher = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
25502
25624
|
module.exports = Dispatcher;
|
|
25503
25625
|
}));
|
|
25504
25626
|
//#endregion
|
|
25505
|
-
//#region
|
|
25627
|
+
//#region node_modules/undici/lib/dispatcher/dispatcher-base.js
|
|
25506
25628
|
var require_dispatcher_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
25507
25629
|
var Dispatcher = require_dispatcher();
|
|
25508
25630
|
var { ClientDestroyedError, ClientClosedError, InvalidArgumentError } = require_errors();
|
|
@@ -25624,7 +25746,7 @@ var require_dispatcher_base = /* @__PURE__ */ __commonJSMin(((exports, module) =
|
|
|
25624
25746
|
module.exports = DispatcherBase;
|
|
25625
25747
|
}));
|
|
25626
25748
|
//#endregion
|
|
25627
|
-
//#region
|
|
25749
|
+
//#region node_modules/undici/lib/util/timers.js
|
|
25628
25750
|
var require_timers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
25629
25751
|
/**
|
|
25630
25752
|
* This module offers an optimized timer implementation designed for scenarios
|
|
@@ -25962,7 +26084,7 @@ var require_timers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
25962
26084
|
};
|
|
25963
26085
|
}));
|
|
25964
26086
|
//#endregion
|
|
25965
|
-
//#region
|
|
26087
|
+
//#region node_modules/undici/lib/core/connect.js
|
|
25966
26088
|
var require_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
25967
26089
|
var net$1 = require("node:net");
|
|
25968
26090
|
var assert$24 = require("node:assert");
|
|
@@ -26132,7 +26254,7 @@ var require_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
26132
26254
|
module.exports = buildConnector;
|
|
26133
26255
|
}));
|
|
26134
26256
|
//#endregion
|
|
26135
|
-
//#region
|
|
26257
|
+
//#region node_modules/undici/lib/llhttp/utils.js
|
|
26136
26258
|
var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
26137
26259
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26138
26260
|
exports.enumToMap = void 0;
|
|
@@ -26147,7 +26269,7 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
26147
26269
|
exports.enumToMap = enumToMap;
|
|
26148
26270
|
}));
|
|
26149
26271
|
//#endregion
|
|
26150
|
-
//#region
|
|
26272
|
+
//#region node_modules/undici/lib/llhttp/constants.js
|
|
26151
26273
|
var require_constants$3 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
26152
26274
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26153
26275
|
exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;
|
|
@@ -26480,19 +26602,19 @@ var require_constants$3 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
26480
26602
|
};
|
|
26481
26603
|
}));
|
|
26482
26604
|
//#endregion
|
|
26483
|
-
//#region
|
|
26605
|
+
//#region node_modules/undici/lib/llhttp/llhttp-wasm.js
|
|
26484
26606
|
var require_llhttp_wasm = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
26485
26607
|
var { Buffer: Buffer$2 } = require("node:buffer");
|
|
26486
26608
|
module.exports = Buffer$2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK07MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64");
|
|
26487
26609
|
}));
|
|
26488
26610
|
//#endregion
|
|
26489
|
-
//#region
|
|
26611
|
+
//#region node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
|
|
26490
26612
|
var require_llhttp_simd_wasm = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
26491
26613
|
var { Buffer: Buffer$1 } = require("node:buffer");
|
|
26492
26614
|
module.exports = Buffer$1.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64");
|
|
26493
26615
|
}));
|
|
26494
26616
|
//#endregion
|
|
26495
|
-
//#region
|
|
26617
|
+
//#region node_modules/undici/lib/web/fetch/constants.js
|
|
26496
26618
|
var require_constants$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
26497
26619
|
var corsSafeListedMethods = [
|
|
26498
26620
|
"GET",
|
|
@@ -26710,7 +26832,7 @@ var require_constants$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
26710
26832
|
};
|
|
26711
26833
|
}));
|
|
26712
26834
|
//#endregion
|
|
26713
|
-
//#region
|
|
26835
|
+
//#region node_modules/undici/lib/web/fetch/global.js
|
|
26714
26836
|
var require_global$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
26715
26837
|
var globalOrigin = Symbol.for("undici.globalOrigin.1");
|
|
26716
26838
|
function getGlobalOrigin() {
|
|
@@ -26741,7 +26863,7 @@ var require_global$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
26741
26863
|
};
|
|
26742
26864
|
}));
|
|
26743
26865
|
//#endregion
|
|
26744
|
-
//#region
|
|
26866
|
+
//#region node_modules/undici/lib/web/fetch/data-url.js
|
|
26745
26867
|
var require_data_url = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
26746
26868
|
var assert$23 = require("node:assert");
|
|
26747
26869
|
var encoder = new TextEncoder();
|
|
@@ -27076,7 +27198,7 @@ var require_data_url = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
27076
27198
|
};
|
|
27077
27199
|
}));
|
|
27078
27200
|
//#endregion
|
|
27079
|
-
//#region
|
|
27201
|
+
//#region node_modules/undici/lib/web/fetch/webidl.js
|
|
27080
27202
|
var require_webidl = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
27081
27203
|
var { types: types$3, inspect } = require("node:util");
|
|
27082
27204
|
var { markAsUncloneable } = require("node:worker_threads");
|
|
@@ -27392,7 +27514,7 @@ var require_webidl = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
27392
27514
|
module.exports = { webidl };
|
|
27393
27515
|
}));
|
|
27394
27516
|
//#endregion
|
|
27395
|
-
//#region
|
|
27517
|
+
//#region node_modules/undici/lib/web/fetch/util.js
|
|
27396
27518
|
var require_util$6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
27397
27519
|
var { Transform: Transform$2 } = require("node:stream");
|
|
27398
27520
|
var zlib$1 = require("node:zlib");
|
|
@@ -28205,7 +28327,7 @@ var require_util$6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
28205
28327
|
};
|
|
28206
28328
|
}));
|
|
28207
28329
|
//#endregion
|
|
28208
|
-
//#region
|
|
28330
|
+
//#region node_modules/undici/lib/web/fetch/symbols.js
|
|
28209
28331
|
var require_symbols$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
28210
28332
|
module.exports = {
|
|
28211
28333
|
kUrl: Symbol("url"),
|
|
@@ -28216,7 +28338,7 @@ var require_symbols$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
28216
28338
|
};
|
|
28217
28339
|
}));
|
|
28218
28340
|
//#endregion
|
|
28219
|
-
//#region
|
|
28341
|
+
//#region node_modules/undici/lib/web/fetch/file.js
|
|
28220
28342
|
var require_file = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
28221
28343
|
var { Blob: Blob$2, File: File$1 } = require("node:buffer");
|
|
28222
28344
|
var { kState } = require_symbols$3();
|
|
@@ -28279,7 +28401,7 @@ var require_file = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
28279
28401
|
};
|
|
28280
28402
|
}));
|
|
28281
28403
|
//#endregion
|
|
28282
|
-
//#region
|
|
28404
|
+
//#region node_modules/undici/lib/web/fetch/formdata.js
|
|
28283
28405
|
var require_formdata = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
28284
28406
|
var { isBlobLike, iteratorMixin } = require_util$6();
|
|
28285
28407
|
var { kState } = require_symbols$3();
|
|
@@ -28414,7 +28536,7 @@ var require_formdata = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
28414
28536
|
};
|
|
28415
28537
|
}));
|
|
28416
28538
|
//#endregion
|
|
28417
|
-
//#region
|
|
28539
|
+
//#region node_modules/undici/lib/web/fetch/formdata-parser.js
|
|
28418
28540
|
var require_formdata_parser = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
28419
28541
|
var { isUSVString, bufferToLowerCasedHeaderName } = require_util$7();
|
|
28420
28542
|
var { utf8DecodeBytes } = require_util$6();
|
|
@@ -28613,7 +28735,7 @@ var require_formdata_parser = /* @__PURE__ */ __commonJSMin(((exports, module) =
|
|
|
28613
28735
|
};
|
|
28614
28736
|
}));
|
|
28615
28737
|
//#endregion
|
|
28616
|
-
//#region
|
|
28738
|
+
//#region node_modules/undici/lib/web/fetch/body.js
|
|
28617
28739
|
var require_body = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
28618
28740
|
var util = require_util$7();
|
|
28619
28741
|
var { ReadableStreamFrom, isBlobLike, isReadableStreamLike, readableStreamClose, createDeferredPromise, fullyReadBody, extractMimeType, utf8DecodeBytes } = require_util$6();
|
|
@@ -28870,7 +28992,7 @@ Content-Type: ${value.type || "application/octet-stream"}\r\n\r\n`);
|
|
|
28870
28992
|
};
|
|
28871
28993
|
}));
|
|
28872
28994
|
//#endregion
|
|
28873
|
-
//#region
|
|
28995
|
+
//#region node_modules/undici/lib/dispatcher/client-h1.js
|
|
28874
28996
|
var require_client_h1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
28875
28997
|
var assert$19 = require("node:assert");
|
|
28876
28998
|
var util = require_util$7();
|
|
@@ -29726,7 +29848,7 @@ var require_client_h1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
29726
29848
|
module.exports = connectH1;
|
|
29727
29849
|
}));
|
|
29728
29850
|
//#endregion
|
|
29729
|
-
//#region
|
|
29851
|
+
//#region node_modules/undici/lib/dispatcher/client-h2.js
|
|
29730
29852
|
var require_client_h2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
29731
29853
|
var assert$18 = require("node:assert");
|
|
29732
29854
|
var { pipeline: pipeline$2 } = require("node:stream");
|
|
@@ -30112,7 +30234,7 @@ var require_client_h2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
30112
30234
|
module.exports = connectH2;
|
|
30113
30235
|
}));
|
|
30114
30236
|
//#endregion
|
|
30115
|
-
//#region
|
|
30237
|
+
//#region node_modules/undici/lib/handler/redirect-handler.js
|
|
30116
30238
|
var require_redirect_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30117
30239
|
var util = require_util$7();
|
|
30118
30240
|
var { kBodyUsed } = require_symbols$4();
|
|
@@ -30238,7 +30360,7 @@ var require_redirect_handler = /* @__PURE__ */ __commonJSMin(((exports, module)
|
|
|
30238
30360
|
module.exports = RedirectHandler;
|
|
30239
30361
|
}));
|
|
30240
30362
|
//#endregion
|
|
30241
|
-
//#region
|
|
30363
|
+
//#region node_modules/undici/lib/interceptor/redirect-interceptor.js
|
|
30242
30364
|
var require_redirect_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30243
30365
|
var RedirectHandler = require_redirect_handler();
|
|
30244
30366
|
function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) {
|
|
@@ -30258,7 +30380,7 @@ var require_redirect_interceptor = /* @__PURE__ */ __commonJSMin(((exports, modu
|
|
|
30258
30380
|
module.exports = createRedirectInterceptor;
|
|
30259
30381
|
}));
|
|
30260
30382
|
//#endregion
|
|
30261
|
-
//#region
|
|
30383
|
+
//#region node_modules/undici/lib/dispatcher/client.js
|
|
30262
30384
|
var require_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30263
30385
|
var assert$16 = require("node:assert");
|
|
30264
30386
|
var net = require("node:net");
|
|
@@ -30593,7 +30715,7 @@ var require_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
30593
30715
|
module.exports = Client;
|
|
30594
30716
|
}));
|
|
30595
30717
|
//#endregion
|
|
30596
|
-
//#region
|
|
30718
|
+
//#region node_modules/undici/lib/dispatcher/fixed-queue.js
|
|
30597
30719
|
var require_fixed_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30598
30720
|
var kSize = 2048;
|
|
30599
30721
|
var kMask = kSize - 1;
|
|
@@ -30642,7 +30764,7 @@ var require_fixed_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
30642
30764
|
};
|
|
30643
30765
|
}));
|
|
30644
30766
|
//#endregion
|
|
30645
|
-
//#region
|
|
30767
|
+
//#region node_modules/undici/lib/dispatcher/pool-stats.js
|
|
30646
30768
|
var require_pool_stats = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30647
30769
|
var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols$4();
|
|
30648
30770
|
var kPool = Symbol("pool");
|
|
@@ -30672,7 +30794,7 @@ var require_pool_stats = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
30672
30794
|
module.exports = PoolStats;
|
|
30673
30795
|
}));
|
|
30674
30796
|
//#endregion
|
|
30675
|
-
//#region
|
|
30797
|
+
//#region node_modules/undici/lib/dispatcher/pool-base.js
|
|
30676
30798
|
var require_pool_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30677
30799
|
var DispatcherBase = require_dispatcher_base();
|
|
30678
30800
|
var FixedQueue = require_fixed_queue();
|
|
@@ -30806,7 +30928,7 @@ var require_pool_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
30806
30928
|
};
|
|
30807
30929
|
}));
|
|
30808
30930
|
//#endregion
|
|
30809
|
-
//#region
|
|
30931
|
+
//#region node_modules/undici/lib/dispatcher/pool.js
|
|
30810
30932
|
var require_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30811
30933
|
var { PoolBase, kClients, kNeedDrain, kAddClient, kGetDispatcher } = require_pool_base();
|
|
30812
30934
|
var Client = require_client();
|
|
@@ -30867,7 +30989,7 @@ var require_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
30867
30989
|
module.exports = Pool;
|
|
30868
30990
|
}));
|
|
30869
30991
|
//#endregion
|
|
30870
|
-
//#region
|
|
30992
|
+
//#region node_modules/undici/lib/dispatcher/balanced-pool.js
|
|
30871
30993
|
var require_balanced_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30872
30994
|
var { BalancedPoolMissingUpstreamError, InvalidArgumentError } = require_errors();
|
|
30873
30995
|
var { PoolBase, kClients, kNeedDrain, kAddClient, kRemoveClient, kGetDispatcher } = require_pool_base();
|
|
@@ -30978,7 +31100,7 @@ var require_balanced_pool = /* @__PURE__ */ __commonJSMin(((exports, module) =>
|
|
|
30978
31100
|
module.exports = BalancedPool;
|
|
30979
31101
|
}));
|
|
30980
31102
|
//#endregion
|
|
30981
|
-
//#region
|
|
31103
|
+
//#region node_modules/undici/lib/dispatcher/agent.js
|
|
30982
31104
|
var require_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
30983
31105
|
var { InvalidArgumentError } = require_errors();
|
|
30984
31106
|
var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols$4();
|
|
@@ -31058,7 +31180,7 @@ var require_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
31058
31180
|
module.exports = Agent;
|
|
31059
31181
|
}));
|
|
31060
31182
|
//#endregion
|
|
31061
|
-
//#region
|
|
31183
|
+
//#region node_modules/undici/lib/dispatcher/proxy-agent.js
|
|
31062
31184
|
var require_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
31063
31185
|
var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols$4();
|
|
31064
31186
|
var { URL: URL$1 } = require("node:url");
|
|
@@ -31256,7 +31378,7 @@ var require_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
31256
31378
|
module.exports = ProxyAgent;
|
|
31257
31379
|
}));
|
|
31258
31380
|
//#endregion
|
|
31259
|
-
//#region
|
|
31381
|
+
//#region node_modules/undici/lib/dispatcher/env-http-proxy-agent.js
|
|
31260
31382
|
var require_env_http_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
31261
31383
|
var DispatcherBase = require_dispatcher_base();
|
|
31262
31384
|
var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols$4();
|
|
@@ -31356,7 +31478,7 @@ var require_env_http_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, modu
|
|
|
31356
31478
|
module.exports = EnvHttpProxyAgent;
|
|
31357
31479
|
}));
|
|
31358
31480
|
//#endregion
|
|
31359
|
-
//#region
|
|
31481
|
+
//#region node_modules/undici/lib/handler/retry-handler.js
|
|
31360
31482
|
var require_retry_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
31361
31483
|
var assert$15 = require("node:assert");
|
|
31362
31484
|
var { kRetryHandlerDefaultRetry } = require_symbols$4();
|
|
@@ -31578,7 +31700,7 @@ var require_retry_handler = /* @__PURE__ */ __commonJSMin(((exports, module) =>
|
|
|
31578
31700
|
};
|
|
31579
31701
|
}));
|
|
31580
31702
|
//#endregion
|
|
31581
|
-
//#region
|
|
31703
|
+
//#region node_modules/undici/lib/dispatcher/retry-agent.js
|
|
31582
31704
|
var require_retry_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
31583
31705
|
var Dispatcher = require_dispatcher();
|
|
31584
31706
|
var RetryHandler = require_retry_handler();
|
|
@@ -31610,7 +31732,7 @@ var require_retry_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
31610
31732
|
module.exports = RetryAgent;
|
|
31611
31733
|
}));
|
|
31612
31734
|
//#endregion
|
|
31613
|
-
//#region
|
|
31735
|
+
//#region node_modules/undici/lib/api/readable.js
|
|
31614
31736
|
var require_readable = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
31615
31737
|
var assert$14 = require("node:assert");
|
|
31616
31738
|
var { Readable: Readable$2 } = require("node:stream");
|
|
@@ -31838,7 +31960,7 @@ var require_readable = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
31838
31960
|
};
|
|
31839
31961
|
}));
|
|
31840
31962
|
//#endregion
|
|
31841
|
-
//#region
|
|
31963
|
+
//#region node_modules/undici/lib/api/util.js
|
|
31842
31964
|
var require_util$5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
31843
31965
|
var assert$13 = require("node:assert");
|
|
31844
31966
|
var { ResponseStatusCodeError } = require_errors();
|
|
@@ -31891,7 +32013,7 @@ var require_util$5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
31891
32013
|
};
|
|
31892
32014
|
}));
|
|
31893
32015
|
//#endregion
|
|
31894
|
-
//#region
|
|
32016
|
+
//#region node_modules/undici/lib/api/api-request.js
|
|
31895
32017
|
var require_api_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
31896
32018
|
var assert$12 = require("node:assert");
|
|
31897
32019
|
var { Readable } = require_readable();
|
|
@@ -32043,7 +32165,7 @@ var require_api_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32043
32165
|
module.exports.RequestHandler = RequestHandler;
|
|
32044
32166
|
}));
|
|
32045
32167
|
//#endregion
|
|
32046
|
-
//#region
|
|
32168
|
+
//#region node_modules/undici/lib/api/abort-signal.js
|
|
32047
32169
|
var require_abort_signal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32048
32170
|
var { addAbortListener } = require_util$7();
|
|
32049
32171
|
var { RequestAbortedError } = require_errors();
|
|
@@ -32082,7 +32204,7 @@ var require_abort_signal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32082
32204
|
};
|
|
32083
32205
|
}));
|
|
32084
32206
|
//#endregion
|
|
32085
|
-
//#region
|
|
32207
|
+
//#region node_modules/undici/lib/api/api-stream.js
|
|
32086
32208
|
var require_api_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32087
32209
|
var assert$11 = require("node:assert");
|
|
32088
32210
|
var { finished: finished$1, PassThrough: PassThrough$1 } = require("node:stream");
|
|
@@ -32227,7 +32349,7 @@ var require_api_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32227
32349
|
module.exports = stream;
|
|
32228
32350
|
}));
|
|
32229
32351
|
//#endregion
|
|
32230
|
-
//#region
|
|
32352
|
+
//#region node_modules/undici/lib/api/api-pipeline.js
|
|
32231
32353
|
var require_api_pipeline = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32232
32354
|
var { Readable: Readable$1, Duplex, PassThrough } = require("node:stream");
|
|
32233
32355
|
var { InvalidArgumentError, InvalidReturnValueError, RequestAbortedError } = require_errors();
|
|
@@ -32395,7 +32517,7 @@ var require_api_pipeline = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32395
32517
|
module.exports = pipeline;
|
|
32396
32518
|
}));
|
|
32397
32519
|
//#endregion
|
|
32398
|
-
//#region
|
|
32520
|
+
//#region node_modules/undici/lib/api/api-upgrade.js
|
|
32399
32521
|
var require_api_upgrade = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32400
32522
|
var { InvalidArgumentError, SocketError } = require_errors();
|
|
32401
32523
|
var { AsyncResource: AsyncResource$1 } = require("node:async_hooks");
|
|
@@ -32474,7 +32596,7 @@ var require_api_upgrade = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32474
32596
|
module.exports = upgrade;
|
|
32475
32597
|
}));
|
|
32476
32598
|
//#endregion
|
|
32477
|
-
//#region
|
|
32599
|
+
//#region node_modules/undici/lib/api/api-connect.js
|
|
32478
32600
|
var require_api_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32479
32601
|
var assert$8 = require("node:assert");
|
|
32480
32602
|
var { AsyncResource } = require("node:async_hooks");
|
|
@@ -32552,7 +32674,7 @@ var require_api_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32552
32674
|
module.exports = connect;
|
|
32553
32675
|
}));
|
|
32554
32676
|
//#endregion
|
|
32555
|
-
//#region
|
|
32677
|
+
//#region node_modules/undici/lib/api/index.js
|
|
32556
32678
|
var require_api = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32557
32679
|
module.exports.request = require_api_request();
|
|
32558
32680
|
module.exports.stream = require_api_stream();
|
|
@@ -32561,7 +32683,7 @@ var require_api = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32561
32683
|
module.exports.connect = require_api_connect();
|
|
32562
32684
|
}));
|
|
32563
32685
|
//#endregion
|
|
32564
|
-
//#region
|
|
32686
|
+
//#region node_modules/undici/lib/mock/mock-errors.js
|
|
32565
32687
|
var require_mock_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32566
32688
|
var { UndiciError } = require_errors();
|
|
32567
32689
|
var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
|
|
@@ -32580,7 +32702,7 @@ var require_mock_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32580
32702
|
} };
|
|
32581
32703
|
}));
|
|
32582
32704
|
//#endregion
|
|
32583
|
-
//#region
|
|
32705
|
+
//#region node_modules/undici/lib/mock/mock-symbols.js
|
|
32584
32706
|
var require_mock_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32585
32707
|
module.exports = {
|
|
32586
32708
|
kAgent: Symbol("agent"),
|
|
@@ -32605,7 +32727,7 @@ var require_mock_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32605
32727
|
};
|
|
32606
32728
|
}));
|
|
32607
32729
|
//#endregion
|
|
32608
|
-
//#region
|
|
32730
|
+
//#region node_modules/undici/lib/mock/mock-utils.js
|
|
32609
32731
|
var require_mock_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32610
32732
|
var { MockNotMatchedError } = require_mock_errors();
|
|
32611
32733
|
var { kDispatches, kMockAgent, kOriginalDispatch, kOrigin, kGetNetConnect } = require_mock_symbols();
|
|
@@ -32842,7 +32964,7 @@ var require_mock_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
32842
32964
|
};
|
|
32843
32965
|
}));
|
|
32844
32966
|
//#endregion
|
|
32845
|
-
//#region
|
|
32967
|
+
//#region node_modules/undici/lib/mock/mock-interceptor.js
|
|
32846
32968
|
var require_mock_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32847
32969
|
var { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
|
|
32848
32970
|
var { kDispatches, kDispatchKey, kDefaultHeaders, kDefaultTrailers, kContentLength, kMockDispatch } = require_mock_symbols();
|
|
@@ -32982,7 +33104,7 @@ var require_mock_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module)
|
|
|
32982
33104
|
module.exports.MockScope = MockScope;
|
|
32983
33105
|
}));
|
|
32984
33106
|
//#endregion
|
|
32985
|
-
//#region
|
|
33107
|
+
//#region node_modules/undici/lib/mock/mock-client.js
|
|
32986
33108
|
var require_mock_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
32987
33109
|
var { promisify: promisify$1 } = require("node:util");
|
|
32988
33110
|
var Client = require_client();
|
|
@@ -33025,7 +33147,7 @@ var require_mock_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33025
33147
|
module.exports = MockClient;
|
|
33026
33148
|
}));
|
|
33027
33149
|
//#endregion
|
|
33028
|
-
//#region
|
|
33150
|
+
//#region node_modules/undici/lib/mock/mock-pool.js
|
|
33029
33151
|
var require_mock_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33030
33152
|
var { promisify } = require("node:util");
|
|
33031
33153
|
var Pool = require_pool();
|
|
@@ -33068,7 +33190,7 @@ var require_mock_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33068
33190
|
module.exports = MockPool;
|
|
33069
33191
|
}));
|
|
33070
33192
|
//#endregion
|
|
33071
|
-
//#region
|
|
33193
|
+
//#region node_modules/undici/lib/mock/pluralizer.js
|
|
33072
33194
|
var require_pluralizer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33073
33195
|
var singulars = {
|
|
33074
33196
|
pronoun: "it",
|
|
@@ -33100,7 +33222,7 @@ var require_pluralizer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33100
33222
|
};
|
|
33101
33223
|
}));
|
|
33102
33224
|
//#endregion
|
|
33103
|
-
//#region
|
|
33225
|
+
//#region node_modules/undici/lib/mock/pending-interceptors-formatter.js
|
|
33104
33226
|
var require_pending_interceptors_formatter = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33105
33227
|
var { Transform: Transform$1 } = require("node:stream");
|
|
33106
33228
|
var { Console } = require("node:console");
|
|
@@ -33135,7 +33257,7 @@ var require_pending_interceptors_formatter = /* @__PURE__ */ __commonJSMin(((exp
|
|
|
33135
33257
|
};
|
|
33136
33258
|
}));
|
|
33137
33259
|
//#endregion
|
|
33138
|
-
//#region
|
|
33260
|
+
//#region node_modules/undici/lib/mock/mock-agent.js
|
|
33139
33261
|
var require_mock_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33140
33262
|
var { kClients } = require_symbols$4();
|
|
33141
33263
|
var Agent = require_agent();
|
|
@@ -33238,7 +33360,7 @@ ${pendingInterceptorsFormatter.format(pending)}
|
|
|
33238
33360
|
module.exports = MockAgent;
|
|
33239
33361
|
}));
|
|
33240
33362
|
//#endregion
|
|
33241
|
-
//#region
|
|
33363
|
+
//#region node_modules/undici/lib/global.js
|
|
33242
33364
|
var require_global = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33243
33365
|
var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
|
|
33244
33366
|
var { InvalidArgumentError } = require_errors();
|
|
@@ -33262,7 +33384,7 @@ var require_global = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33262
33384
|
};
|
|
33263
33385
|
}));
|
|
33264
33386
|
//#endregion
|
|
33265
|
-
//#region
|
|
33387
|
+
//#region node_modules/undici/lib/handler/decorator-handler.js
|
|
33266
33388
|
var require_decorator_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33267
33389
|
module.exports = class DecoratorHandler {
|
|
33268
33390
|
#handler;
|
|
@@ -33297,7 +33419,7 @@ var require_decorator_handler = /* @__PURE__ */ __commonJSMin(((exports, module)
|
|
|
33297
33419
|
};
|
|
33298
33420
|
}));
|
|
33299
33421
|
//#endregion
|
|
33300
|
-
//#region
|
|
33422
|
+
//#region node_modules/undici/lib/interceptor/redirect.js
|
|
33301
33423
|
var require_redirect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33302
33424
|
var RedirectHandler = require_redirect_handler();
|
|
33303
33425
|
module.exports = (opts) => {
|
|
@@ -33312,7 +33434,7 @@ var require_redirect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33312
33434
|
};
|
|
33313
33435
|
}));
|
|
33314
33436
|
//#endregion
|
|
33315
|
-
//#region
|
|
33437
|
+
//#region node_modules/undici/lib/interceptor/retry.js
|
|
33316
33438
|
var require_retry = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33317
33439
|
var RetryHandler = require_retry_handler();
|
|
33318
33440
|
module.exports = (globalOpts) => {
|
|
@@ -33333,7 +33455,7 @@ var require_retry = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33333
33455
|
};
|
|
33334
33456
|
}));
|
|
33335
33457
|
//#endregion
|
|
33336
|
-
//#region
|
|
33458
|
+
//#region node_modules/undici/lib/interceptor/dump.js
|
|
33337
33459
|
var require_dump = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33338
33460
|
var util = require_util$7();
|
|
33339
33461
|
var { InvalidArgumentError, RequestAbortedError } = require_errors();
|
|
@@ -33400,7 +33522,7 @@ var require_dump = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33400
33522
|
module.exports = createDumpInterceptor;
|
|
33401
33523
|
}));
|
|
33402
33524
|
//#endregion
|
|
33403
|
-
//#region
|
|
33525
|
+
//#region node_modules/undici/lib/interceptor/dns.js
|
|
33404
33526
|
var require_dns = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33405
33527
|
var { isIP } = require("node:net");
|
|
33406
33528
|
var { lookup } = require("node:dns");
|
|
@@ -33613,7 +33735,7 @@ var require_dns = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33613
33735
|
};
|
|
33614
33736
|
}));
|
|
33615
33737
|
//#endregion
|
|
33616
|
-
//#region
|
|
33738
|
+
//#region node_modules/undici/lib/web/fetch/headers.js
|
|
33617
33739
|
var require_headers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33618
33740
|
var { kConstruct } = require_symbols$4();
|
|
33619
33741
|
var { kEnumerableProperty } = require_util$7();
|
|
@@ -33978,7 +34100,7 @@ var require_headers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
33978
34100
|
};
|
|
33979
34101
|
}));
|
|
33980
34102
|
//#endregion
|
|
33981
|
-
//#region
|
|
34103
|
+
//#region node_modules/undici/lib/web/fetch/response.js
|
|
33982
34104
|
var require_response = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
33983
34105
|
var { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers();
|
|
33984
34106
|
var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body();
|
|
@@ -34291,7 +34413,7 @@ var require_response = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
34291
34413
|
};
|
|
34292
34414
|
}));
|
|
34293
34415
|
//#endregion
|
|
34294
|
-
//#region
|
|
34416
|
+
//#region node_modules/undici/lib/web/fetch/dispatcher-weakref.js
|
|
34295
34417
|
var require_dispatcher_weakref = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
34296
34418
|
var { kConnected, kSize } = require_symbols$4();
|
|
34297
34419
|
var CompatWeakRef = class {
|
|
@@ -34328,7 +34450,7 @@ var require_dispatcher_weakref = /* @__PURE__ */ __commonJSMin(((exports, module
|
|
|
34328
34450
|
};
|
|
34329
34451
|
}));
|
|
34330
34452
|
//#endregion
|
|
34331
|
-
//#region
|
|
34453
|
+
//#region node_modules/undici/lib/web/fetch/request.js
|
|
34332
34454
|
var require_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
34333
34455
|
var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body();
|
|
34334
34456
|
var { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers();
|
|
@@ -34837,7 +34959,7 @@ var require_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
34837
34959
|
};
|
|
34838
34960
|
}));
|
|
34839
34961
|
//#endregion
|
|
34840
|
-
//#region
|
|
34962
|
+
//#region node_modules/undici/lib/web/fetch/index.js
|
|
34841
34963
|
var require_fetch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
34842
34964
|
var { makeNetworkError, makeAppropriateNetworkError, filterResponse, makeResponse, fromInnerResponse } = require_response();
|
|
34843
34965
|
var { HeadersList } = require_headers();
|
|
@@ -35535,7 +35657,7 @@ var require_fetch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
35535
35657
|
};
|
|
35536
35658
|
}));
|
|
35537
35659
|
//#endregion
|
|
35538
|
-
//#region
|
|
35660
|
+
//#region node_modules/undici/lib/web/fileapi/symbols.js
|
|
35539
35661
|
var require_symbols$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
35540
35662
|
module.exports = {
|
|
35541
35663
|
kState: Symbol("FileReader state"),
|
|
@@ -35547,7 +35669,7 @@ var require_symbols$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
35547
35669
|
};
|
|
35548
35670
|
}));
|
|
35549
35671
|
//#endregion
|
|
35550
|
-
//#region
|
|
35672
|
+
//#region node_modules/undici/lib/web/fileapi/progressevent.js
|
|
35551
35673
|
var require_progressevent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
35552
35674
|
var { webidl } = require_webidl();
|
|
35553
35675
|
var kState = Symbol("ProgressEvent state");
|
|
@@ -35613,7 +35735,7 @@ var require_progressevent = /* @__PURE__ */ __commonJSMin(((exports, module) =>
|
|
|
35613
35735
|
module.exports = { ProgressEvent };
|
|
35614
35736
|
}));
|
|
35615
35737
|
//#endregion
|
|
35616
|
-
//#region
|
|
35738
|
+
//#region node_modules/undici/lib/web/fileapi/encoding.js
|
|
35617
35739
|
var require_encoding = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
35618
35740
|
/**
|
|
35619
35741
|
* @see https://encoding.spec.whatwg.org/#concept-encoding-get
|
|
@@ -35855,7 +35977,7 @@ var require_encoding = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
35855
35977
|
module.exports = { getEncoding };
|
|
35856
35978
|
}));
|
|
35857
35979
|
//#endregion
|
|
35858
|
-
//#region
|
|
35980
|
+
//#region node_modules/undici/lib/web/fileapi/util.js
|
|
35859
35981
|
var require_util$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
35860
35982
|
var { kState, kError, kResult, kAborted, kLastProgressEventFired } = require_symbols$2();
|
|
35861
35983
|
var { ProgressEvent } = require_progressevent();
|
|
@@ -36031,7 +36153,7 @@ var require_util$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
36031
36153
|
};
|
|
36032
36154
|
}));
|
|
36033
36155
|
//#endregion
|
|
36034
|
-
//#region
|
|
36156
|
+
//#region node_modules/undici/lib/web/fileapi/filereader.js
|
|
36035
36157
|
var require_filereader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
36036
36158
|
var { staticPropertyDescriptors, readOperation, fireAProgressEvent } = require_util$4();
|
|
36037
36159
|
var { kState, kError, kResult, kEvents, kAborted } = require_symbols$2();
|
|
@@ -36244,12 +36366,12 @@ var require_filereader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
36244
36366
|
module.exports = { FileReader };
|
|
36245
36367
|
}));
|
|
36246
36368
|
//#endregion
|
|
36247
|
-
//#region
|
|
36369
|
+
//#region node_modules/undici/lib/web/cache/symbols.js
|
|
36248
36370
|
var require_symbols$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
36249
36371
|
module.exports = { kConstruct: require_symbols$4().kConstruct };
|
|
36250
36372
|
}));
|
|
36251
36373
|
//#endregion
|
|
36252
|
-
//#region
|
|
36374
|
+
//#region node_modules/undici/lib/web/cache/util.js
|
|
36253
36375
|
var require_util$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
36254
36376
|
var assert$3 = require("node:assert");
|
|
36255
36377
|
var { URLSerializer } = require_data_url();
|
|
@@ -36283,7 +36405,7 @@ var require_util$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
36283
36405
|
};
|
|
36284
36406
|
}));
|
|
36285
36407
|
//#endregion
|
|
36286
|
-
//#region
|
|
36408
|
+
//#region node_modules/undici/lib/web/cache/cache.js
|
|
36287
36409
|
var require_cache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
36288
36410
|
var { kConstruct } = require_symbols$1();
|
|
36289
36411
|
var { urlEquals, getFieldValues } = require_util$3();
|
|
@@ -36732,7 +36854,7 @@ var require_cache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
36732
36854
|
module.exports = { Cache };
|
|
36733
36855
|
}));
|
|
36734
36856
|
//#endregion
|
|
36735
|
-
//#region
|
|
36857
|
+
//#region node_modules/undici/lib/web/cache/cachestorage.js
|
|
36736
36858
|
var require_cachestorage = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
36737
36859
|
var { kConstruct } = require_symbols$1();
|
|
36738
36860
|
var { Cache } = require_cache();
|
|
@@ -36822,7 +36944,7 @@ var require_cachestorage = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
36822
36944
|
module.exports = { CacheStorage };
|
|
36823
36945
|
}));
|
|
36824
36946
|
//#endregion
|
|
36825
|
-
//#region
|
|
36947
|
+
//#region node_modules/undici/lib/web/cookies/constants.js
|
|
36826
36948
|
var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
36827
36949
|
module.exports = {
|
|
36828
36950
|
maxAttributeValueSize: 1024,
|
|
@@ -36830,7 +36952,7 @@ var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
36830
36952
|
};
|
|
36831
36953
|
}));
|
|
36832
36954
|
//#endregion
|
|
36833
|
-
//#region
|
|
36955
|
+
//#region node_modules/undici/lib/web/cookies/util.js
|
|
36834
36956
|
var require_util$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
36835
36957
|
/**
|
|
36836
36958
|
* @param {string} value
|
|
@@ -37024,7 +37146,7 @@ var require_util$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
37024
37146
|
};
|
|
37025
37147
|
}));
|
|
37026
37148
|
//#endregion
|
|
37027
|
-
//#region
|
|
37149
|
+
//#region node_modules/undici/lib/web/cookies/parse.js
|
|
37028
37150
|
var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
37029
37151
|
var { maxNameValuePairSize, maxAttributeValueSize } = require_constants$1();
|
|
37030
37152
|
var { isCTLExcludingHtab } = require_util$2();
|
|
@@ -37126,7 +37248,7 @@ var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
37126
37248
|
};
|
|
37127
37249
|
}));
|
|
37128
37250
|
//#endregion
|
|
37129
|
-
//#region
|
|
37251
|
+
//#region node_modules/undici/lib/web/cookies/index.js
|
|
37130
37252
|
var require_cookies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
37131
37253
|
var { parseSetCookie } = require_parse();
|
|
37132
37254
|
var { stringify } = require_util$2();
|
|
@@ -37277,7 +37399,7 @@ var require_cookies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
37277
37399
|
};
|
|
37278
37400
|
}));
|
|
37279
37401
|
//#endregion
|
|
37280
|
-
//#region
|
|
37402
|
+
//#region node_modules/undici/lib/web/websocket/events.js
|
|
37281
37403
|
var require_events = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
37282
37404
|
var { webidl } = require_webidl();
|
|
37283
37405
|
var { kEnumerableProperty } = require_util$7();
|
|
@@ -37540,7 +37662,7 @@ var require_events = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
37540
37662
|
};
|
|
37541
37663
|
}));
|
|
37542
37664
|
//#endregion
|
|
37543
|
-
//#region
|
|
37665
|
+
//#region node_modules/undici/lib/web/websocket/constants.js
|
|
37544
37666
|
var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
37545
37667
|
module.exports = {
|
|
37546
37668
|
uid: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",
|
|
@@ -37585,7 +37707,7 @@ var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
37585
37707
|
};
|
|
37586
37708
|
}));
|
|
37587
37709
|
//#endregion
|
|
37588
|
-
//#region
|
|
37710
|
+
//#region node_modules/undici/lib/web/websocket/symbols.js
|
|
37589
37711
|
var require_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
37590
37712
|
module.exports = {
|
|
37591
37713
|
kWebSocketURL: Symbol("url"),
|
|
@@ -37599,7 +37721,7 @@ var require_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
37599
37721
|
};
|
|
37600
37722
|
}));
|
|
37601
37723
|
//#endregion
|
|
37602
|
-
//#region
|
|
37724
|
+
//#region node_modules/undici/lib/web/websocket/util.js
|
|
37603
37725
|
var require_util$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
37604
37726
|
var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols();
|
|
37605
37727
|
var { states, opcodes } = require_constants();
|
|
@@ -37781,7 +37903,7 @@ var require_util$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
37781
37903
|
};
|
|
37782
37904
|
}));
|
|
37783
37905
|
//#endregion
|
|
37784
|
-
//#region
|
|
37906
|
+
//#region node_modules/undici/lib/web/websocket/frame.js
|
|
37785
37907
|
var require_frame = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
37786
37908
|
var { maxUnsigned16Bit } = require_constants();
|
|
37787
37909
|
var BUFFER_SIZE = 16386;
|
|
@@ -37853,7 +37975,7 @@ var require_frame = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
37853
37975
|
module.exports = { WebsocketFrameSend };
|
|
37854
37976
|
}));
|
|
37855
37977
|
//#endregion
|
|
37856
|
-
//#region
|
|
37978
|
+
//#region node_modules/undici/lib/web/websocket/connection.js
|
|
37857
37979
|
var require_connection = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
37858
37980
|
var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants();
|
|
37859
37981
|
var { kReadyState, kSentClose, kByteParser, kReceivedClose, kResponse } = require_symbols();
|
|
@@ -38018,7 +38140,7 @@ var require_connection = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
38018
38140
|
};
|
|
38019
38141
|
}));
|
|
38020
38142
|
//#endregion
|
|
38021
|
-
//#region
|
|
38143
|
+
//#region node_modules/undici/lib/web/websocket/permessage-deflate.js
|
|
38022
38144
|
var require_permessage_deflate = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
38023
38145
|
var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require("node:zlib");
|
|
38024
38146
|
var { isValidClientWindowBits } = require_util$1();
|
|
@@ -38097,7 +38219,7 @@ var require_permessage_deflate = /* @__PURE__ */ __commonJSMin(((exports, module
|
|
|
38097
38219
|
module.exports = { PerMessageDeflate };
|
|
38098
38220
|
}));
|
|
38099
38221
|
//#endregion
|
|
38100
|
-
//#region
|
|
38222
|
+
//#region node_modules/undici/lib/web/websocket/receiver.js
|
|
38101
38223
|
var require_receiver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
38102
38224
|
var { Writable } = require("node:stream");
|
|
38103
38225
|
var assert = require("node:assert");
|
|
@@ -38414,7 +38536,7 @@ var require_receiver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
38414
38536
|
module.exports = { ByteParser };
|
|
38415
38537
|
}));
|
|
38416
38538
|
//#endregion
|
|
38417
|
-
//#region
|
|
38539
|
+
//#region node_modules/undici/lib/web/websocket/sender.js
|
|
38418
38540
|
var require_sender = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
38419
38541
|
var { WebsocketFrameSend } = require_frame();
|
|
38420
38542
|
var { opcodes, sendHints } = require_constants();
|
|
@@ -38494,7 +38616,7 @@ var require_sender = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
38494
38616
|
module.exports = { SendQueue };
|
|
38495
38617
|
}));
|
|
38496
38618
|
//#endregion
|
|
38497
|
-
//#region
|
|
38619
|
+
//#region node_modules/undici/lib/web/websocket/websocket.js
|
|
38498
38620
|
var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
38499
38621
|
var { webidl } = require_webidl();
|
|
38500
38622
|
var { URLSerializer } = require_data_url();
|
|
@@ -38795,7 +38917,7 @@ var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
38795
38917
|
module.exports = { WebSocket };
|
|
38796
38918
|
}));
|
|
38797
38919
|
//#endregion
|
|
38798
|
-
//#region
|
|
38920
|
+
//#region node_modules/undici/lib/web/eventsource/util.js
|
|
38799
38921
|
var require_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
38800
38922
|
/**
|
|
38801
38923
|
* Checks if the given value is a valid LastEventId.
|
|
@@ -38827,7 +38949,7 @@ var require_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
38827
38949
|
};
|
|
38828
38950
|
}));
|
|
38829
38951
|
//#endregion
|
|
38830
|
-
//#region
|
|
38952
|
+
//#region node_modules/undici/lib/web/eventsource/eventsource-stream.js
|
|
38831
38953
|
var require_eventsource_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
38832
38954
|
var { Transform } = require("node:stream");
|
|
38833
38955
|
var { isASCIINumber, isValidLastEventId } = require_util();
|
|
@@ -39049,7 +39171,7 @@ var require_eventsource_stream = /* @__PURE__ */ __commonJSMin(((exports, module
|
|
|
39049
39171
|
module.exports = { EventSourceStream };
|
|
39050
39172
|
}));
|
|
39051
39173
|
//#endregion
|
|
39052
|
-
//#region
|
|
39174
|
+
//#region node_modules/undici/lib/web/eventsource/eventsource.js
|
|
39053
39175
|
var require_eventsource = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
39054
39176
|
var { pipeline } = require("node:stream");
|
|
39055
39177
|
var { fetching } = require_fetch();
|
|
@@ -39362,7 +39484,7 @@ var require_eventsource = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
39362
39484
|
};
|
|
39363
39485
|
}));
|
|
39364
39486
|
//#endregion
|
|
39365
|
-
//#region
|
|
39487
|
+
//#region node_modules/undici/index.js
|
|
39366
39488
|
var require_undici = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
39367
39489
|
var Client = require_client();
|
|
39368
39490
|
var Dispatcher = require_dispatcher();
|
|
@@ -39487,7 +39609,7 @@ var require_undici = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
39487
39609
|
module.exports.EventSource = EventSource;
|
|
39488
39610
|
}));
|
|
39489
39611
|
//#endregion
|
|
39490
|
-
//#region
|
|
39612
|
+
//#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/util.js
|
|
39491
39613
|
var util;
|
|
39492
39614
|
(function(util) {
|
|
39493
39615
|
util.assertEqual = (_) => {};
|
|
@@ -39583,7 +39705,7 @@ var getParsedType = (data) => {
|
|
|
39583
39705
|
}
|
|
39584
39706
|
};
|
|
39585
39707
|
//#endregion
|
|
39586
|
-
//#region
|
|
39708
|
+
//#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/ZodError.js
|
|
39587
39709
|
var ZodIssueCode = util.arrayToEnum([
|
|
39588
39710
|
"invalid_type",
|
|
39589
39711
|
"invalid_literal",
|
|
@@ -39682,7 +39804,7 @@ ZodError.create = (issues) => {
|
|
|
39682
39804
|
return new ZodError(issues);
|
|
39683
39805
|
};
|
|
39684
39806
|
//#endregion
|
|
39685
|
-
//#region
|
|
39807
|
+
//#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/locales/en.js
|
|
39686
39808
|
var errorMap = (issue, _ctx) => {
|
|
39687
39809
|
let message;
|
|
39688
39810
|
switch (issue.code) {
|
|
@@ -39759,13 +39881,13 @@ var errorMap = (issue, _ctx) => {
|
|
|
39759
39881
|
return { message };
|
|
39760
39882
|
};
|
|
39761
39883
|
//#endregion
|
|
39762
|
-
//#region
|
|
39884
|
+
//#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/errors.js
|
|
39763
39885
|
var overrideErrorMap = errorMap;
|
|
39764
39886
|
function getErrorMap() {
|
|
39765
39887
|
return overrideErrorMap;
|
|
39766
39888
|
}
|
|
39767
39889
|
//#endregion
|
|
39768
|
-
//#region
|
|
39890
|
+
//#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/parseUtil.js
|
|
39769
39891
|
var makeIssue = (params) => {
|
|
39770
39892
|
const { data, path, errorMaps, issueData } = params;
|
|
39771
39893
|
const fullPath = [...path, ...issueData.path || []];
|
|
@@ -39869,14 +39991,14 @@ var isDirty = (x) => x.status === "dirty";
|
|
|
39869
39991
|
var isValid = (x) => x.status === "valid";
|
|
39870
39992
|
var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
|
|
39871
39993
|
//#endregion
|
|
39872
|
-
//#region
|
|
39994
|
+
//#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/errorUtil.js
|
|
39873
39995
|
var errorUtil;
|
|
39874
39996
|
(function(errorUtil) {
|
|
39875
39997
|
errorUtil.errToObj = (message) => typeof message === "string" ? { message } : message || {};
|
|
39876
39998
|
errorUtil.toString = (message) => typeof message === "string" ? message : message?.message;
|
|
39877
39999
|
})(errorUtil || (errorUtil = {}));
|
|
39878
40000
|
//#endregion
|
|
39879
|
-
//#region
|
|
40001
|
+
//#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/types.js
|
|
39880
40002
|
var ParseInputLazyPath = class {
|
|
39881
40003
|
constructor(parent, value, path, key) {
|
|
39882
40004
|
this._cachedPath = [];
|
|
@@ -43028,7 +43150,7 @@ ZodNullable.create;
|
|
|
43028
43150
|
ZodEffects.createWithPreprocess;
|
|
43029
43151
|
ZodPipeline.create;
|
|
43030
43152
|
//#endregion
|
|
43031
|
-
//#region
|
|
43153
|
+
//#region node_modules/@apocaliss92/nodewitt/dist/index.js
|
|
43032
43154
|
var import_undici = require_undici();
|
|
43033
43155
|
var DEFAULT_PORT = 80;
|
|
43034
43156
|
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
@@ -43982,6 +44104,71 @@ var fixed = {
|
|
|
43982
44104
|
combo: [...COMBO_KEYS],
|
|
43983
44105
|
co2_pm: [...COMBO_KEYS]
|
|
43984
44106
|
};
|
|
44107
|
+
var WEATHER_STATION_MODELS = /* @__PURE__ */ new Set([
|
|
44108
|
+
"wh69",
|
|
44109
|
+
"wh65",
|
|
44110
|
+
"ws90",
|
|
44111
|
+
"wh80",
|
|
44112
|
+
"ws80",
|
|
44113
|
+
"wh90",
|
|
44114
|
+
"wh77",
|
|
44115
|
+
"wh85",
|
|
44116
|
+
"ws85",
|
|
44117
|
+
"wh68",
|
|
44118
|
+
"weather_station",
|
|
44119
|
+
"weather_station_wh69",
|
|
44120
|
+
"weather_station_ws90",
|
|
44121
|
+
"weather_station_wh90",
|
|
44122
|
+
"weather_station_wh77"
|
|
44123
|
+
]);
|
|
44124
|
+
var CHANNEL_SENSOR_MODELS = /* @__PURE__ */ new Set([
|
|
44125
|
+
"wh31",
|
|
44126
|
+
"wh41",
|
|
44127
|
+
"wh52",
|
|
44128
|
+
"wh51",
|
|
44129
|
+
"wh55",
|
|
44130
|
+
"wh34",
|
|
44131
|
+
"wn34",
|
|
44132
|
+
"wh35",
|
|
44133
|
+
"wn35",
|
|
44134
|
+
"wh54",
|
|
44135
|
+
"temp_hum",
|
|
44136
|
+
"pm25",
|
|
44137
|
+
"soil",
|
|
44138
|
+
"soil_ec",
|
|
44139
|
+
"leak",
|
|
44140
|
+
"temp_only",
|
|
44141
|
+
"leaf_wetness",
|
|
44142
|
+
"lds"
|
|
44143
|
+
]);
|
|
44144
|
+
var EXTERNAL_MODELS = /* @__PURE__ */ new Set([
|
|
44145
|
+
"wh57",
|
|
44146
|
+
"wh40",
|
|
44147
|
+
"wh45",
|
|
44148
|
+
"wh46",
|
|
44149
|
+
"lightning",
|
|
44150
|
+
"rain",
|
|
44151
|
+
"combo",
|
|
44152
|
+
"co2_pm"
|
|
44153
|
+
]);
|
|
44154
|
+
var GATEWAY_MODELS = /* @__PURE__ */ new Set([
|
|
44155
|
+
"wh25",
|
|
44156
|
+
"indoor_station",
|
|
44157
|
+
"wh26",
|
|
44158
|
+
"wn32",
|
|
44159
|
+
"outdoor_temp_hum",
|
|
44160
|
+
"wn38",
|
|
44161
|
+
"bgt"
|
|
44162
|
+
]);
|
|
44163
|
+
function categoryForModel(model) {
|
|
44164
|
+
const key = norm(model ?? "");
|
|
44165
|
+
if (key === "") return "gateway";
|
|
44166
|
+
if (WEATHER_STATION_MODELS.has(key)) return "weather-station";
|
|
44167
|
+
if (CHANNEL_SENSOR_MODELS.has(key)) return "channel-sensor";
|
|
44168
|
+
if (EXTERNAL_MODELS.has(key)) return "external";
|
|
44169
|
+
if (GATEWAY_MODELS.has(key)) return "gateway";
|
|
44170
|
+
return "gateway";
|
|
44171
|
+
}
|
|
43985
44172
|
function liveDataKeysForModel(model, channel) {
|
|
43986
44173
|
const key = norm(model);
|
|
43987
44174
|
const channelBuilder = Object.prototype.hasOwnProperty.call(channelized, key) ? channelized[key] : void 0;
|
|
@@ -44074,6 +44261,7 @@ var LocalPoller = class {
|
|
|
44074
44261
|
scanTimer;
|
|
44075
44262
|
mappingTimer;
|
|
44076
44263
|
started = false;
|
|
44264
|
+
mappingPrimed = false;
|
|
44077
44265
|
gatewayTempUnit = "C";
|
|
44078
44266
|
stationInfo = {};
|
|
44079
44267
|
/** Gateway identity (model/firmware) captured from the last `/get_version`. Best-effort. */
|
|
@@ -44110,6 +44298,7 @@ var LocalPoller = class {
|
|
|
44110
44298
|
this.scanTimer = void 0;
|
|
44111
44299
|
this.mappingTimer = void 0;
|
|
44112
44300
|
this.started = false;
|
|
44301
|
+
this.mappingPrimed = false;
|
|
44113
44302
|
}
|
|
44114
44303
|
/** Re-read the gateway unit + sensor list and rebuild the live-key -> hardware-id mapping. Offline-tolerant. */
|
|
44115
44304
|
async refreshMapping() {
|
|
@@ -44124,6 +44313,7 @@ var LocalPoller = class {
|
|
|
44124
44313
|
};
|
|
44125
44314
|
const sensors = await this.opts.endpoints.getAllSensors();
|
|
44126
44315
|
this.mapper.updateMapping(sensors);
|
|
44316
|
+
this.mappingPrimed = true;
|
|
44127
44317
|
} catch (error) {
|
|
44128
44318
|
this.opts.onError(error);
|
|
44129
44319
|
}
|
|
@@ -44131,12 +44321,14 @@ var LocalPoller = class {
|
|
|
44131
44321
|
/** Fetch + decode + resolve a single live-data snapshot, then emit it. Offline-tolerant. */
|
|
44132
44322
|
async poll() {
|
|
44133
44323
|
try {
|
|
44324
|
+
if (!this.mappingPrimed) await this.refreshMapping();
|
|
44134
44325
|
const raw = await this.opts.endpoints.getLiveData();
|
|
44135
44326
|
this.opts.onRawFrame?.(raw);
|
|
44136
44327
|
const resolved = decodeLiveData(raw, this.mapper, {}, this.gatewayTempUnit).map((reading) => ({
|
|
44137
44328
|
...reading,
|
|
44138
44329
|
hardwareId: GATEWAY_KEYS.has(reading.key) ? void 0 : reading.forceHardwareId ?? this.mapper.getHardwareId(reading.key)
|
|
44139
44330
|
}));
|
|
44331
|
+
if (!this.mappingPrimed) return;
|
|
44140
44332
|
this.opts.onReadings(resolved);
|
|
44141
44333
|
} catch (error) {
|
|
44142
44334
|
this.opts.onError(error);
|
|
@@ -44740,11 +44932,13 @@ var Station = class {
|
|
|
44740
44932
|
const info = lookup.getSensorInfoForKey(r.key) ?? (owner !== void 0 ? lookup.getSensorInfo(owner) : void 0);
|
|
44741
44933
|
const id = `${owner ?? GATEWAY_OWNER}:${r.key}`;
|
|
44742
44934
|
const signal = signalToNumber(info?.signal);
|
|
44935
|
+
const category = categoryForModel(info?.model);
|
|
44743
44936
|
this.upsert(id, {
|
|
44744
44937
|
id,
|
|
44745
44938
|
...owner !== void 0 ? { hardwareId: owner } : {},
|
|
44746
44939
|
...info?.model ? { model: info.model } : {},
|
|
44747
44940
|
...info?.channel !== void 0 ? { channel: info.channel } : {},
|
|
44941
|
+
category,
|
|
44748
44942
|
...cls.name !== void 0 ? { name: cls.name } : {},
|
|
44749
44943
|
quantity: cls.quantity,
|
|
44750
44944
|
value: r.value,
|
|
@@ -44776,9 +44970,11 @@ var Station = class {
|
|
|
44776
44970
|
if (cls.kind === "battery") continue;
|
|
44777
44971
|
if (cls.kind !== "measurement") continue;
|
|
44778
44972
|
const id = `${this.pushOwner(passkey, r.channel)}:${r.key}`;
|
|
44973
|
+
const category = r.channel !== void 0 ? "channel-sensor" : "gateway";
|
|
44779
44974
|
this.upsert(id, {
|
|
44780
44975
|
id,
|
|
44781
44976
|
...r.channel !== void 0 ? { channel: r.channel } : {},
|
|
44977
|
+
category,
|
|
44782
44978
|
...cls.name !== void 0 ? { name: cls.name } : {},
|
|
44783
44979
|
quantity: cls.quantity,
|
|
44784
44980
|
value: r.value,
|
|
@@ -45246,502 +45442,52 @@ var EcowittIntegrationManager = class {
|
|
|
45246
45442
|
await this.start();
|
|
45247
45443
|
}
|
|
45248
45444
|
};
|
|
45249
|
-
/** True when two configs are the "same connection" (no facade rebuild needed). */
|
|
45250
|
-
function sameConnection(a, b) {
|
|
45251
|
-
if (a === null || b === null) return false;
|
|
45252
|
-
if (a.transport !== b.transport) return false;
|
|
45253
|
-
if (a.transport === "local" && b.transport === "local") return a.host === b.host && a.port === b.port && a.password === b.password && a.pollIntervalMs === b.pollIntervalMs && a.mappingIntervalMs === b.mappingIntervalMs;
|
|
45254
|
-
if (a.transport === "listener" && b.transport === "listener") return a.listenPort === b.listenPort && a.listenHost === b.listenHost;
|
|
45255
|
-
return false;
|
|
45256
|
-
}
|
|
45257
45445
|
//#endregion
|
|
45258
45446
|
//#region src/ecowitt-gateway.ts
|
|
45259
45447
|
/**
|
|
45260
|
-
* Per-
|
|
45261
|
-
*
|
|
45448
|
+
* Per-gateway registry that device classes use to reach the live {@link Ecowitt}
|
|
45449
|
+
* client (and its current sensor snapshot) for a given gateway. Keyed on the
|
|
45450
|
+
* gateway {@link import('@camstack/types').DeviceType.Hub} device's `stableId`
|
|
45451
|
+
* (standalone mode — the connection lives on the gateway device, not a broker).
|
|
45262
45452
|
*
|
|
45263
|
-
* Because the nodewitt
|
|
45264
|
-
* recreates the
|
|
45265
|
-
*
|
|
45266
|
-
* the new
|
|
45453
|
+
* Because the nodewitt client's `stop()` is TERMINAL, the gateway device
|
|
45454
|
+
* recreates the client on reconnect / settings change and re-publishes it here.
|
|
45455
|
+
* Container + sensor children always read through the resolver, so they
|
|
45456
|
+
* transparently pick up the new client. Mirrors the Homematic / Dreame in-process
|
|
45457
|
+
* facade resolver.
|
|
45267
45458
|
*/
|
|
45268
45459
|
var EcowittFacadeResolver = class {
|
|
45269
45460
|
#facades = /* @__PURE__ */ new Map();
|
|
45270
|
-
/** Publish or remove the
|
|
45271
|
-
set(
|
|
45461
|
+
/** Publish or remove the client for a gateway id. `null` removes the entry. */
|
|
45462
|
+
set(gatewayId, facade) {
|
|
45272
45463
|
if (facade === null) {
|
|
45273
|
-
this.#facades.delete(
|
|
45464
|
+
this.#facades.delete(gatewayId);
|
|
45274
45465
|
return;
|
|
45275
45466
|
}
|
|
45276
|
-
this.#facades.set(
|
|
45467
|
+
this.#facades.set(gatewayId, facade);
|
|
45277
45468
|
}
|
|
45278
|
-
/** The live
|
|
45279
|
-
get(
|
|
45280
|
-
return this.#facades.get(
|
|
45469
|
+
/** The live client for a gateway id, or null when unknown / stopped. */
|
|
45470
|
+
get(gatewayId) {
|
|
45471
|
+
return this.#facades.get(gatewayId) ?? null;
|
|
45281
45472
|
}
|
|
45282
|
-
/** All current sensors for a
|
|
45283
|
-
getSensors(
|
|
45284
|
-
return this.#facades.get(
|
|
45473
|
+
/** All current sensors for a gateway, or [] when unknown. */
|
|
45474
|
+
getSensors(gatewayId) {
|
|
45475
|
+
return this.#facades.get(gatewayId)?.getSensors() ?? [];
|
|
45285
45476
|
}
|
|
45286
|
-
/** Resolve a single sensor by its stable id for a
|
|
45287
|
-
getSensor(
|
|
45288
|
-
return this.getSensors(
|
|
45477
|
+
/** Resolve a single sensor by its stable id for a gateway, or null. */
|
|
45478
|
+
getSensor(gatewayId, sensorId) {
|
|
45479
|
+
return this.getSensors(gatewayId).find((s) => s.id === sensorId) ?? null;
|
|
45289
45480
|
}
|
|
45290
|
-
/** Remove all registered
|
|
45481
|
+
/** Remove all registered clients (called on full shutdown). */
|
|
45291
45482
|
clear() {
|
|
45292
45483
|
this.#facades.clear();
|
|
45293
45484
|
}
|
|
45294
45485
|
};
|
|
45295
|
-
/** The single in-process per-
|
|
45296
|
-
* and
|
|
45486
|
+
/** The single in-process per-gateway client resolver shared between the gateway
|
|
45487
|
+
* device and its container / sensor children. */
|
|
45297
45488
|
var ecowittFacades = new EcowittFacadeResolver();
|
|
45298
45489
|
//#endregion
|
|
45299
|
-
//#region src/ecowitt-
|
|
45300
|
-
/**
|
|
45301
|
-
* Manages N live Ecowitt gateway connections ("brokers"), each backed by an
|
|
45302
|
-
* {@link EcowittIntegrationManager}. Allocates stable ids (`ecowitt_001`, …),
|
|
45303
|
-
* CRUD, an integration FK index, lifecycle helpers. Mirrors the Homematic /
|
|
45304
|
-
* Dreame registry; on the default factory path it publishes each freshly-built
|
|
45305
|
-
* facade on `ecowittFacades` so device classes can read sensors in-process.
|
|
45306
|
-
*/
|
|
45307
|
-
var EcowittBrokerRegistry = class {
|
|
45308
|
-
#logger;
|
|
45309
|
-
#onBrokerConnected;
|
|
45310
|
-
#onBrokerDisconnected;
|
|
45311
|
-
#onSensorsChanged;
|
|
45312
|
-
#makeManager;
|
|
45313
|
-
#managers = /* @__PURE__ */ new Map();
|
|
45314
|
-
#integrationToBroker = /* @__PURE__ */ new Map();
|
|
45315
|
-
#nextId = 1;
|
|
45316
|
-
constructor(logger, deps = {}) {
|
|
45317
|
-
this.#logger = logger;
|
|
45318
|
-
this.#onBrokerConnected = deps.onBrokerConnected ?? (() => void 0);
|
|
45319
|
-
this.#onBrokerDisconnected = deps.onBrokerDisconnected ?? (() => void 0);
|
|
45320
|
-
this.#onSensorsChanged = deps.onSensorsChanged ?? (() => void 0);
|
|
45321
|
-
this.#makeManager = deps.makeManager ?? ((opts) => new EcowittIntegrationManager({
|
|
45322
|
-
id: opts.id,
|
|
45323
|
-
name: opts.name,
|
|
45324
|
-
connection: opts.connection,
|
|
45325
|
-
logger: opts.logger,
|
|
45326
|
-
onConnected: opts.onConnected,
|
|
45327
|
-
onDisconnected: opts.onDisconnected,
|
|
45328
|
-
onSensorsChanged: opts.onSensorsChanged,
|
|
45329
|
-
onFacadeBuilt: (id, facade) => ecowittFacades.set(id, facade)
|
|
45330
|
-
}));
|
|
45331
|
-
}
|
|
45332
|
-
async restore(entries) {
|
|
45333
|
-
for (const entry of entries) this.#seedCounter(entry.id);
|
|
45334
|
-
for (const entry of entries) try {
|
|
45335
|
-
await this.#startManager(entry);
|
|
45336
|
-
} catch (err) {
|
|
45337
|
-
this.#logger.warn("EcowittBrokerRegistry: failed to restore manager", {
|
|
45338
|
-
tags: { brokerId: entry.id },
|
|
45339
|
-
meta: { error: errMsg(err) }
|
|
45340
|
-
});
|
|
45341
|
-
}
|
|
45342
|
-
}
|
|
45343
|
-
async shutdown() {
|
|
45344
|
-
const ids = Array.from(this.#managers.keys());
|
|
45345
|
-
await Promise.all(ids.map(async (id) => {
|
|
45346
|
-
try {
|
|
45347
|
-
await this.#managers.get(id)?.stop();
|
|
45348
|
-
} catch (err) {
|
|
45349
|
-
this.#logger.warn("EcowittBrokerRegistry: shutdown stop failed", {
|
|
45350
|
-
tags: { brokerId: id },
|
|
45351
|
-
meta: { error: errMsg(err) }
|
|
45352
|
-
});
|
|
45353
|
-
}
|
|
45354
|
-
}));
|
|
45355
|
-
this.#managers.clear();
|
|
45356
|
-
this.#integrationToBroker.clear();
|
|
45357
|
-
ecowittFacades.clear();
|
|
45358
|
-
}
|
|
45359
|
-
setOnBrokerConnected(cb) {
|
|
45360
|
-
this.#onBrokerConnected = cb;
|
|
45361
|
-
}
|
|
45362
|
-
setOnBrokerDisconnected(cb) {
|
|
45363
|
-
this.#onBrokerDisconnected = cb;
|
|
45364
|
-
}
|
|
45365
|
-
setOnSensorsChanged(cb) {
|
|
45366
|
-
this.#onSensorsChanged = cb;
|
|
45367
|
-
}
|
|
45368
|
-
async createEntry(name, connection, opts = {}) {
|
|
45369
|
-
const id = this.#allocateId();
|
|
45370
|
-
const entry = {
|
|
45371
|
-
id,
|
|
45372
|
-
name,
|
|
45373
|
-
connection,
|
|
45374
|
-
...opts.integrationId !== void 0 ? { integrationId: opts.integrationId } : {}
|
|
45375
|
-
};
|
|
45376
|
-
await this.#startManager(entry);
|
|
45377
|
-
if (opts.integrationId !== void 0) this.#integrationToBroker.set(opts.integrationId, id);
|
|
45378
|
-
return entry;
|
|
45379
|
-
}
|
|
45380
|
-
async removeEntry(id) {
|
|
45381
|
-
const mgr = this.#managers.get(id);
|
|
45382
|
-
if (!mgr) throw new Error(`EcowittBrokerRegistry: unknown broker id "${id}"`);
|
|
45383
|
-
for (const [integrationId, brokerId] of this.#integrationToBroker.entries()) if (brokerId === id) this.#integrationToBroker.delete(integrationId);
|
|
45384
|
-
this.#managers.delete(id);
|
|
45385
|
-
ecowittFacades.set(id, null);
|
|
45386
|
-
try {
|
|
45387
|
-
await mgr.stop();
|
|
45388
|
-
} catch (err) {
|
|
45389
|
-
this.#logger.warn("EcowittBrokerRegistry: removeEntry stop failed", {
|
|
45390
|
-
tags: { brokerId: id },
|
|
45391
|
-
meta: { error: errMsg(err) }
|
|
45392
|
-
});
|
|
45393
|
-
}
|
|
45394
|
-
}
|
|
45395
|
-
async updateEntry(id, connection) {
|
|
45396
|
-
const mgr = this.#managers.get(id);
|
|
45397
|
-
if (!mgr) throw new Error(`EcowittBrokerRegistry: unknown broker id "${id}"`);
|
|
45398
|
-
await mgr.applyConnection(connection);
|
|
45399
|
-
return {
|
|
45400
|
-
id,
|
|
45401
|
-
name: mgr.getInfo().name,
|
|
45402
|
-
connection
|
|
45403
|
-
};
|
|
45404
|
-
}
|
|
45405
|
-
linkIntegration(integrationId, brokerId) {
|
|
45406
|
-
this.#integrationToBroker.set(integrationId, brokerId);
|
|
45407
|
-
}
|
|
45408
|
-
getBrokerIdByIntegrationId(integrationId) {
|
|
45409
|
-
const brokerId = this.#integrationToBroker.get(integrationId);
|
|
45410
|
-
if (brokerId === void 0) throw new Error(`EcowittBrokerRegistry: no broker linked for integration id "${integrationId}"`);
|
|
45411
|
-
return brokerId;
|
|
45412
|
-
}
|
|
45413
|
-
list() {
|
|
45414
|
-
return Array.from(this.#managers.values()).map((m) => m.getInfo());
|
|
45415
|
-
}
|
|
45416
|
-
get(id) {
|
|
45417
|
-
return this.#managers.get(id)?.getInfo() ?? null;
|
|
45418
|
-
}
|
|
45419
|
-
getConnection(id) {
|
|
45420
|
-
return this.#managers.get(id)?.getConnection() ?? null;
|
|
45421
|
-
}
|
|
45422
|
-
size() {
|
|
45423
|
-
return this.#managers.size;
|
|
45424
|
-
}
|
|
45425
|
-
connectedCount() {
|
|
45426
|
-
let count = 0;
|
|
45427
|
-
for (const mgr of this.#managers.values()) if (mgr.getInfo().status === "connected") count++;
|
|
45428
|
-
return count;
|
|
45429
|
-
}
|
|
45430
|
-
async #startManager(entry) {
|
|
45431
|
-
if (this.#managers.has(entry.id)) {
|
|
45432
|
-
if (entry.integrationId !== void 0) this.#integrationToBroker.set(entry.integrationId, entry.id);
|
|
45433
|
-
return;
|
|
45434
|
-
}
|
|
45435
|
-
const mgr = this.#makeManager({
|
|
45436
|
-
id: entry.id,
|
|
45437
|
-
name: entry.name,
|
|
45438
|
-
connection: entry.connection,
|
|
45439
|
-
logger: this.#logger,
|
|
45440
|
-
onConnected: (id) => this.#onBrokerConnected(id),
|
|
45441
|
-
onDisconnected: (id) => this.#onBrokerDisconnected(id),
|
|
45442
|
-
onSensorsChanged: (id, sensors) => this.#onSensorsChanged(id, sensors)
|
|
45443
|
-
});
|
|
45444
|
-
this.#managers.set(entry.id, mgr);
|
|
45445
|
-
if (entry.integrationId !== void 0) this.#integrationToBroker.set(entry.integrationId, entry.id);
|
|
45446
|
-
await mgr.start();
|
|
45447
|
-
}
|
|
45448
|
-
#allocateId() {
|
|
45449
|
-
const id = `ecowitt_${String(this.#nextId).padStart(3, "0")}`;
|
|
45450
|
-
this.#nextId++;
|
|
45451
|
-
return id;
|
|
45452
|
-
}
|
|
45453
|
-
#seedCounter(id) {
|
|
45454
|
-
const match = /^ecowitt_(\d+)$/.exec(id);
|
|
45455
|
-
if (match === null || match[1] === void 0) return;
|
|
45456
|
-
const n = parseInt(match[1], 10);
|
|
45457
|
-
if (!isNaN(n)) this.#nextId = Math.max(this.#nextId, n + 1);
|
|
45458
|
-
}
|
|
45459
|
-
};
|
|
45460
|
-
//#endregion
|
|
45461
|
-
//#region src/config.ts
|
|
45462
|
-
/**
|
|
45463
|
-
* Operator-supplied Ecowitt gateway settings for ONE broker (= one station).
|
|
45464
|
-
* Two transports behind a `transport` discriminator:
|
|
45465
|
-
*
|
|
45466
|
-
* - `local` (local-poll): the addon polls the gateway over HTTP (`host`/`port`/
|
|
45467
|
-
* optional `password`, with poll + mapping intervals).
|
|
45468
|
-
* - `listener` (push): the addon runs an HTTP server the gateway uploads to
|
|
45469
|
-
* (the gateway's "Customized" upload must point at the hub's LAN IP:port).
|
|
45470
|
-
*
|
|
45471
|
-
* Local-poll is the recommended default — it has no inbound-IP constraint.
|
|
45472
|
-
*/
|
|
45473
|
-
var baseFields = {
|
|
45474
|
-
/** Human-overridable station identity used to scope the adopted gateway. */
|
|
45475
|
-
stationId: string().default("").describe("Optional stable station id (auto-derived when blank)") };
|
|
45476
|
-
var ecowittConfigSchema = discriminatedUnion("transport", [object({
|
|
45477
|
-
transport: literal("local"),
|
|
45478
|
-
host: string().min(1).describe("Ecowitt gateway host name or IP address"),
|
|
45479
|
-
port: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(80)).describe("Gateway HTTP port"),
|
|
45480
|
-
password: string().default("").describe("Gateway password (optional — newer firmware)"),
|
|
45481
|
-
pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e3).max(36e5).default(6e4)).describe("Live-data poll interval (ms)"),
|
|
45482
|
-
mappingIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e4).max(864e5).default(6e5)).describe("Sensor-map refresh interval (ms)"),
|
|
45483
|
-
...baseFields
|
|
45484
|
-
}), object({
|
|
45485
|
-
transport: literal("listener"),
|
|
45486
|
-
listenPort: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(4199)).describe("Local TCP port the gateway uploads to"),
|
|
45487
|
-
listenHost: string().default("").describe("Optional bind host (blank = all interfaces)"),
|
|
45488
|
-
...baseFields
|
|
45489
|
-
})]);
|
|
45490
|
-
/** Top-level addon config — an ordered list of broker entries (default empty). */
|
|
45491
|
-
var ecowittAddonConfigSchema = object({ brokers: array(object({
|
|
45492
|
-
id: string().min(1),
|
|
45493
|
-
name: string().min(1),
|
|
45494
|
-
connection: ecowittConfigSchema,
|
|
45495
|
-
integrationId: string().optional()
|
|
45496
|
-
})).default([]) });
|
|
45497
|
-
/**
|
|
45498
|
-
* Narrow an `unknown` value to a shallow-cloned plain object record, or an empty
|
|
45499
|
-
* record when it is not a plain object. Mirrors the Homematic `toRecord` helper —
|
|
45500
|
-
* a cast-free boundary narrowing.
|
|
45501
|
-
*/
|
|
45502
|
-
function toRecord(value) {
|
|
45503
|
-
if (typeof value === "object" && value !== null && !Array.isArray(value)) return Object.fromEntries(Object.entries(value));
|
|
45504
|
-
return {};
|
|
45505
|
-
}
|
|
45506
|
-
/** Coerce a loose settings blob through the connection schema, applying defaults.
|
|
45507
|
-
* A blob with no `transport` defaults to `local` for back-compat with simple forms. */
|
|
45508
|
-
function settingsToEcowittConfig(settings) {
|
|
45509
|
-
const raw = toRecord(settings);
|
|
45510
|
-
if (raw["transport"] !== "local" && raw["transport"] !== "listener") raw["transport"] = "local";
|
|
45511
|
-
return ecowittConfigSchema.parse(raw);
|
|
45512
|
-
}
|
|
45513
|
-
/** Hand-written connection form for the broker/integration creation UI. */
|
|
45514
|
-
function buildConnectionFormSchema() {
|
|
45515
|
-
return { sections: [
|
|
45516
|
-
{
|
|
45517
|
-
id: "transport",
|
|
45518
|
-
title: "Transport",
|
|
45519
|
-
description: "Choose how CamStack reads the gateway. Local poll connects out to the gateway (recommended). Push listener runs a server the gateway uploads to — configure the gateway \"Customized\" upload to point at this hub.",
|
|
45520
|
-
columns: 1,
|
|
45521
|
-
fields: [{
|
|
45522
|
-
type: "select",
|
|
45523
|
-
key: "transport",
|
|
45524
|
-
label: "Transport",
|
|
45525
|
-
default: "local",
|
|
45526
|
-
options: [{
|
|
45527
|
-
value: "local",
|
|
45528
|
-
label: "Local poll (recommended)"
|
|
45529
|
-
}, {
|
|
45530
|
-
value: "listener",
|
|
45531
|
-
label: "Push listener"
|
|
45532
|
-
}]
|
|
45533
|
-
}]
|
|
45534
|
-
},
|
|
45535
|
-
{
|
|
45536
|
-
id: "local",
|
|
45537
|
-
title: "Local poll settings",
|
|
45538
|
-
columns: 2,
|
|
45539
|
-
fields: [
|
|
45540
|
-
{
|
|
45541
|
-
type: "text",
|
|
45542
|
-
key: "host",
|
|
45543
|
-
label: "Gateway host / IP",
|
|
45544
|
-
placeholder: "192.168.1.50",
|
|
45545
|
-
showWhen: {
|
|
45546
|
-
field: "transport",
|
|
45547
|
-
equals: "local"
|
|
45548
|
-
}
|
|
45549
|
-
},
|
|
45550
|
-
{
|
|
45551
|
-
type: "number",
|
|
45552
|
-
key: "port",
|
|
45553
|
-
label: "HTTP port",
|
|
45554
|
-
min: 1,
|
|
45555
|
-
max: 65535,
|
|
45556
|
-
default: 80,
|
|
45557
|
-
showWhen: {
|
|
45558
|
-
field: "transport",
|
|
45559
|
-
equals: "local"
|
|
45560
|
-
}
|
|
45561
|
-
},
|
|
45562
|
-
{
|
|
45563
|
-
type: "password",
|
|
45564
|
-
key: "password",
|
|
45565
|
-
label: "Password (optional)",
|
|
45566
|
-
showToggle: true,
|
|
45567
|
-
showWhen: {
|
|
45568
|
-
field: "transport",
|
|
45569
|
-
equals: "local"
|
|
45570
|
-
}
|
|
45571
|
-
},
|
|
45572
|
-
{
|
|
45573
|
-
type: "number",
|
|
45574
|
-
key: "pollIntervalMs",
|
|
45575
|
-
label: "Poll interval (ms)",
|
|
45576
|
-
min: 1e3,
|
|
45577
|
-
max: 36e5,
|
|
45578
|
-
default: 6e4,
|
|
45579
|
-
showWhen: {
|
|
45580
|
-
field: "transport",
|
|
45581
|
-
equals: "local"
|
|
45582
|
-
}
|
|
45583
|
-
}
|
|
45584
|
-
]
|
|
45585
|
-
},
|
|
45586
|
-
{
|
|
45587
|
-
id: "listener",
|
|
45588
|
-
title: "Push listener settings",
|
|
45589
|
-
columns: 2,
|
|
45590
|
-
fields: [{
|
|
45591
|
-
type: "number",
|
|
45592
|
-
key: "listenPort",
|
|
45593
|
-
label: "Listen port",
|
|
45594
|
-
min: 1,
|
|
45595
|
-
max: 65535,
|
|
45596
|
-
default: 4199,
|
|
45597
|
-
showWhen: {
|
|
45598
|
-
field: "transport",
|
|
45599
|
-
equals: "listener"
|
|
45600
|
-
}
|
|
45601
|
-
}, {
|
|
45602
|
-
type: "text",
|
|
45603
|
-
key: "listenHost",
|
|
45604
|
-
label: "Bind host (optional)",
|
|
45605
|
-
placeholder: "all interfaces",
|
|
45606
|
-
showWhen: {
|
|
45607
|
-
field: "transport",
|
|
45608
|
-
equals: "listener"
|
|
45609
|
-
}
|
|
45610
|
-
}]
|
|
45611
|
-
}
|
|
45612
|
-
] };
|
|
45613
|
-
}
|
|
45614
|
-
//#endregion
|
|
45615
|
-
//#region src/ecowitt-broker-provider.ts
|
|
45616
|
-
var ECOWITT_KIND = "ecowitt";
|
|
45617
|
-
/**
|
|
45618
|
-
* Construct the `broker` cap provider for the Ecowitt addon. Pure builder.
|
|
45619
|
-
* Mirrors `buildDreameBrokerProvider`. The connection has no single secret to
|
|
45620
|
-
* redact (the optional local password is the only one) — preserved on empty
|
|
45621
|
-
* round-trip like the other providers.
|
|
45622
|
-
*/
|
|
45623
|
-
function buildEcowittBrokerProvider(deps) {
|
|
45624
|
-
const { ownerAddonId, registry, getBrokers, persistBrokers, cascadeRemoveDevices, logger } = deps;
|
|
45625
|
-
const owns = (id) => getBrokers().some((b) => b.id === id);
|
|
45626
|
-
/** Redact the local-poll password for an outbound settings read. */
|
|
45627
|
-
const redact = (entry) => {
|
|
45628
|
-
if (entry.connection.transport === "local") return {
|
|
45629
|
-
...entry.connection,
|
|
45630
|
-
password: ""
|
|
45631
|
-
};
|
|
45632
|
-
return { ...entry.connection };
|
|
45633
|
-
};
|
|
45634
|
-
return {
|
|
45635
|
-
list: async ({ kind }) => {
|
|
45636
|
-
if (kind && kind !== ECOWITT_KIND) return [];
|
|
45637
|
-
return registry.list().map((info) => ({
|
|
45638
|
-
...info,
|
|
45639
|
-
addonId: ownerAddonId
|
|
45640
|
-
}));
|
|
45641
|
-
},
|
|
45642
|
-
get: async ({ id }) => {
|
|
45643
|
-
const info = registry.get(id);
|
|
45644
|
-
return info ? {
|
|
45645
|
-
...info,
|
|
45646
|
-
addonId: ownerAddonId
|
|
45647
|
-
} : null;
|
|
45648
|
-
},
|
|
45649
|
-
listProviders: async () => [{
|
|
45650
|
-
addonId: ownerAddonId,
|
|
45651
|
-
kinds: [{
|
|
45652
|
-
kind: ECOWITT_KIND,
|
|
45653
|
-
label: "Ecowitt"
|
|
45654
|
-
}]
|
|
45655
|
-
}],
|
|
45656
|
-
add: async ({ kind, name, settings }) => {
|
|
45657
|
-
if (kind !== ECOWITT_KIND) throw new Error(`provider-ecowitt: only kind '${ECOWITT_KIND}' is handled here (got '${kind}')`);
|
|
45658
|
-
const entry = await registry.createEntry(name, settingsToEcowittConfig(settings));
|
|
45659
|
-
await persistBrokers([...getBrokers(), entry]);
|
|
45660
|
-
return { id: entry.id };
|
|
45661
|
-
},
|
|
45662
|
-
remove: async ({ id }) => {
|
|
45663
|
-
if (!owns(id)) return;
|
|
45664
|
-
await registry.removeEntry(id);
|
|
45665
|
-
await cascadeRemoveDevices(id).catch((err) => {
|
|
45666
|
-
logger.warn("ecowitt: broker cascade-remove threw", {
|
|
45667
|
-
tags: { brokerId: id },
|
|
45668
|
-
meta: { error: errMsg(err) }
|
|
45669
|
-
});
|
|
45670
|
-
});
|
|
45671
|
-
await persistBrokers(getBrokers().filter((b) => b.id !== id));
|
|
45672
|
-
},
|
|
45673
|
-
testConnection: async ({ id }) => {
|
|
45674
|
-
if (!owns(id)) return {
|
|
45675
|
-
ok: false,
|
|
45676
|
-
error: "unknown broker"
|
|
45677
|
-
};
|
|
45678
|
-
const info = registry.get(id);
|
|
45679
|
-
if (!info) return {
|
|
45680
|
-
ok: false,
|
|
45681
|
-
error: "unknown broker"
|
|
45682
|
-
};
|
|
45683
|
-
if (info.status === "connected") return {
|
|
45684
|
-
ok: true,
|
|
45685
|
-
latencyMs: info.lastCheckedAt ? Math.max(0, Date.now() - info.lastCheckedAt) : 0
|
|
45686
|
-
};
|
|
45687
|
-
return {
|
|
45688
|
-
ok: false,
|
|
45689
|
-
error: info.error ?? `status: ${info.status}`
|
|
45690
|
-
};
|
|
45691
|
-
},
|
|
45692
|
-
getSettings: async ({ id }) => {
|
|
45693
|
-
const entry = getBrokers().find((b) => b.id === id);
|
|
45694
|
-
if (!entry) return null;
|
|
45695
|
-
return redact(entry);
|
|
45696
|
-
},
|
|
45697
|
-
setSettings: async ({ id, settings }) => {
|
|
45698
|
-
if (!owns(id)) return;
|
|
45699
|
-
const existing = getBrokers().find((b) => b.id === id);
|
|
45700
|
-
if (!existing) return;
|
|
45701
|
-
const parsed = settingsToEcowittConfig(settings);
|
|
45702
|
-
const merged = parsed.transport === "local" && existing.connection.transport === "local" ? {
|
|
45703
|
-
...parsed,
|
|
45704
|
-
password: parsed.password.length > 0 ? parsed.password : existing.connection.password
|
|
45705
|
-
} : parsed;
|
|
45706
|
-
const updated = await registry.updateEntry(id, merged);
|
|
45707
|
-
await persistBrokers(getBrokers().map((b) => b.id === id ? updated : b));
|
|
45708
|
-
},
|
|
45709
|
-
getBrokerConfig: async ({ id }) => {
|
|
45710
|
-
const entry = getBrokers().find((b) => b.id === id);
|
|
45711
|
-
if (!entry) return null;
|
|
45712
|
-
return redact(entry);
|
|
45713
|
-
},
|
|
45714
|
-
getSettingsSchema: async ({ kind }) => {
|
|
45715
|
-
if (kind !== ECOWITT_KIND) return null;
|
|
45716
|
-
return buildConnectionFormSchema();
|
|
45717
|
-
},
|
|
45718
|
-
testSettings: async ({ kind, settings }) => {
|
|
45719
|
-
if (kind !== ECOWITT_KIND) return {
|
|
45720
|
-
ok: false,
|
|
45721
|
-
error: `unsupported kind: ${kind}`
|
|
45722
|
-
};
|
|
45723
|
-
try {
|
|
45724
|
-
settingsToEcowittConfig(settings);
|
|
45725
|
-
return { ok: true };
|
|
45726
|
-
} catch (err) {
|
|
45727
|
-
return {
|
|
45728
|
-
ok: false,
|
|
45729
|
-
error: errMsg(err)
|
|
45730
|
-
};
|
|
45731
|
-
}
|
|
45732
|
-
},
|
|
45733
|
-
publish: async () => null,
|
|
45734
|
-
subscribe: async () => ({ subscriptionId: "" }),
|
|
45735
|
-
unsubscribe: async () => void 0,
|
|
45736
|
-
getState: async () => null,
|
|
45737
|
-
getStatus: async () => ({
|
|
45738
|
-
brokerCount: registry.size(),
|
|
45739
|
-
connectedCount: registry.connectedCount()
|
|
45740
|
-
})
|
|
45741
|
-
};
|
|
45742
|
-
}
|
|
45743
|
-
//#endregion
|
|
45744
|
-
//#region src/ecowitt-mapping.ts
|
|
45490
|
+
//#region src/ecowitt-mapping.ts
|
|
45745
45491
|
/**
|
|
45746
45492
|
* Map an Ecowitt quantity to its camstack sensor cap. Pure, total.
|
|
45747
45493
|
*
|
|
@@ -45901,18 +45647,63 @@ var QUANTITY_LABEL = {
|
|
|
45901
45647
|
lightning_count: "Lightning count",
|
|
45902
45648
|
vpd: "VPD"
|
|
45903
45649
|
};
|
|
45650
|
+
/** All device groups, in stable presentation order. */
|
|
45651
|
+
var ECOWITT_DEVICE_GROUPS = [
|
|
45652
|
+
"gateway",
|
|
45653
|
+
"weather-station",
|
|
45654
|
+
"temp-sensor-ch1"
|
|
45655
|
+
];
|
|
45656
|
+
/** Human label for a device group (used as the per-group Container name suffix). */
|
|
45657
|
+
function deviceGroupLabel(group) {
|
|
45658
|
+
switch (group) {
|
|
45659
|
+
case "gateway": return "Gateway";
|
|
45660
|
+
case "weather-station": return "Weather Station";
|
|
45661
|
+
case "temp-sensor-ch1": return "Temp Sensor CH1";
|
|
45662
|
+
}
|
|
45663
|
+
}
|
|
45664
|
+
/**
|
|
45665
|
+
* Map a sensor's self-describing nodewitt {@link SensorCategory} (+ its channel)
|
|
45666
|
+
* to the camstack {@link EcowittDeviceGroup} it belongs to. Pure, total.
|
|
45667
|
+
*
|
|
45668
|
+
* The split:
|
|
45669
|
+
* - `weather-station` → `'weather-station'`.
|
|
45670
|
+
* - `channel-sensor` with channel 1 → `'temp-sensor-ch1'` (the CH1 split-out).
|
|
45671
|
+
* - everything else → `'gateway'`.
|
|
45672
|
+
*
|
|
45673
|
+
* CH2..8 grouping (documented decision): channel-sensors on channels 2–8 are
|
|
45674
|
+
* deliberately grouped under `'gateway'`, NOT given their own group. The group
|
|
45675
|
+
* enum is intentionally a fixed THREE (the product wants exactly gateway /
|
|
45676
|
+
* weather-station / CH1-temp surfaces); the gateway device is the natural home
|
|
45677
|
+
* for "everything else" — it already owns the console's indoor readings and the
|
|
45678
|
+
* standalone external sensors. A per-channel device explosion (CH2…CH8 each their
|
|
45679
|
+
* own device) is out of scope here and can be layered on later by widening the
|
|
45680
|
+
* enum, without changing this function's `weather-station`/`temp-sensor-ch1`
|
|
45681
|
+
* branches. `external` (lightning/rain/combo) and `gateway` (console/indoor)
|
|
45682
|
+
* categories also fall here, by design.
|
|
45683
|
+
*
|
|
45684
|
+
* Accepts an optional `category` (a persisted/older sensor may lack one): an
|
|
45685
|
+
* absent category resolves to `'gateway'`, the same safe default nodewitt uses
|
|
45686
|
+
* for an unattributed reading.
|
|
45687
|
+
*/
|
|
45688
|
+
function deviceGroupForSensor(category, channel) {
|
|
45689
|
+
if (category === "weather-station") return "weather-station";
|
|
45690
|
+
if (category === "channel-sensor" && channel === 1) return "temp-sensor-ch1";
|
|
45691
|
+
return "gateway";
|
|
45692
|
+
}
|
|
45904
45693
|
//#endregion
|
|
45905
45694
|
//#region src/ecowitt-discovery.ts
|
|
45906
45695
|
/**
|
|
45907
|
-
*
|
|
45908
|
-
*
|
|
45909
|
-
*
|
|
45910
|
-
*
|
|
45911
|
-
* Per the plan (model A), each sensor maps to a typed sensor cap; the `weather`
|
|
45912
|
-
* cap is intentionally NOT used (a raw station has no sky-state `condition`).
|
|
45696
|
+
* The native id a group Container candidate is keyed on:
|
|
45697
|
+
* `ecowitt:<gatewayId>:<group>`. One physical gateway therefore yields THREE
|
|
45698
|
+
* candidates (one per {@link EcowittDeviceGroup}). Mirrors the persisted stable
|
|
45699
|
+
* id the group Container's `stableIdSuffix` derives for the same Container.
|
|
45913
45700
|
*/
|
|
45914
|
-
function
|
|
45915
|
-
|
|
45701
|
+
function groupNativeId(gatewayId, group) {
|
|
45702
|
+
return `ecowitt:${gatewayId}:${group}`;
|
|
45703
|
+
}
|
|
45704
|
+
/** A preview accessory child for one sensor. */
|
|
45705
|
+
function sensorChild(sensor) {
|
|
45706
|
+
return {
|
|
45916
45707
|
childNativeId: sensor.id,
|
|
45917
45708
|
name: sensorLabel(sensor.quantity, sensor.channel, sensor.name, sensor.id),
|
|
45918
45709
|
type: DeviceType.Sensor,
|
|
@@ -45921,215 +45712,61 @@ function buildEcowittGatewayCandidate(input) {
|
|
|
45921
45712
|
alreadyAdopted: false,
|
|
45922
45713
|
adoptedDeviceId: null,
|
|
45923
45714
|
capabilities: [capForQuantity(sensor.quantity)]
|
|
45924
|
-
}));
|
|
45925
|
-
return {
|
|
45926
|
-
childNativeId: input.brokerId,
|
|
45927
|
-
name: input.gatewayName,
|
|
45928
|
-
type: DeviceType.Container,
|
|
45929
|
-
status: "online",
|
|
45930
|
-
metadata: { serialNumber: input.brokerId },
|
|
45931
|
-
alreadyAdopted: input.adoptedDeviceId !== null,
|
|
45932
|
-
adoptedDeviceId: input.adoptedDeviceId,
|
|
45933
|
-
capabilities: [],
|
|
45934
|
-
children
|
|
45935
45715
|
};
|
|
45936
45716
|
}
|
|
45937
|
-
//#endregion
|
|
45938
|
-
//#region src/ecowitt-adoption-provider.ts
|
|
45939
|
-
/** Single granularity: the whole gateway adopts as one Container. */
|
|
45940
|
-
var DEVICES_FILTER = {
|
|
45941
|
-
id: "devices",
|
|
45942
|
-
label: "Devices",
|
|
45943
|
-
isDefault: true
|
|
45944
|
-
};
|
|
45945
|
-
/** Resolve the adopted gateway CamStack device id for a broker, or null. */
|
|
45946
|
-
async function adoptedGatewayId(brokerId, listAdoptedEcowitt) {
|
|
45947
|
-
const all = await listAdoptedEcowitt();
|
|
45948
|
-
for (const d of all) if (d.config["system"] === "ecowitt" && d.config["brokerId"] === brokerId) return d.id;
|
|
45949
|
-
return null;
|
|
45950
|
-
}
|
|
45951
|
-
/**
|
|
45952
|
-
* Construct the `device-adoption` cap provider for the Ecowitt addon. Pure
|
|
45953
|
-
* builder. One broker = one gateway = one Container candidate; its sensors are
|
|
45954
|
-
* preview accessory children that the Container's `getAccessoryChildren()`
|
|
45955
|
-
* materialises live on adoption. Mirrors the Dreame adoption provider.
|
|
45956
|
-
*/
|
|
45957
|
-
function buildEcowittAdoptionProvider(deps) {
|
|
45958
|
-
const { registry, getBrokerIdForIntegration, listAdoptedEcowitt, adoptGateway, removeDevice, findDeviceConfig, logger } = deps;
|
|
45959
|
-
async function gatewayCandidateForBroker(brokerId) {
|
|
45960
|
-
const facade = registry.getFacadeForBroker(brokerId);
|
|
45961
|
-
if (facade === null) return null;
|
|
45962
|
-
const info = registry.list().find((b) => b.id === brokerId);
|
|
45963
|
-
const adoptedDeviceId = await adoptedGatewayId(brokerId, listAdoptedEcowitt);
|
|
45964
|
-
return buildEcowittGatewayCandidate({
|
|
45965
|
-
brokerId,
|
|
45966
|
-
gatewayName: info?.name ?? "Ecowitt gateway",
|
|
45967
|
-
sensors: facade.getSensors(),
|
|
45968
|
-
adoptedDeviceId
|
|
45969
|
-
});
|
|
45970
|
-
}
|
|
45971
|
-
return {
|
|
45972
|
-
listCandidateFilters: async () => ({ filters: [DEVICES_FILTER] }),
|
|
45973
|
-
listCandidates: async ({ integrationId, page, pageSize }) => {
|
|
45974
|
-
const candidate = await gatewayCandidateForBroker(await getBrokerIdForIntegration(integrationId));
|
|
45975
|
-
const candidates = candidate !== null ? [candidate] : [];
|
|
45976
|
-
return {
|
|
45977
|
-
candidates,
|
|
45978
|
-
totalCount: candidates.length,
|
|
45979
|
-
page,
|
|
45980
|
-
pageSize
|
|
45981
|
-
};
|
|
45982
|
-
},
|
|
45983
|
-
getCandidate: async ({ integrationId, childNativeId }) => {
|
|
45984
|
-
const candidate = await gatewayCandidateForBroker(await getBrokerIdForIntegration(integrationId));
|
|
45985
|
-
return candidate !== null && candidate.childNativeId === childNativeId ? candidate : null;
|
|
45986
|
-
},
|
|
45987
|
-
getStatus: async () => {
|
|
45988
|
-
try {
|
|
45989
|
-
const brokers = registry.list();
|
|
45990
|
-
let candidateCount = 0;
|
|
45991
|
-
for (const broker of brokers) if (await gatewayCandidateForBroker(broker.id) !== null) candidateCount += 1;
|
|
45992
|
-
const adoptedCount = (await listAdoptedEcowitt()).filter((d) => d.config["system"] === "ecowitt").length;
|
|
45993
|
-
return {
|
|
45994
|
-
lastDiscoveryAt: Date.now(),
|
|
45995
|
-
candidateCount,
|
|
45996
|
-
adoptedCount,
|
|
45997
|
-
lastError: null
|
|
45998
|
-
};
|
|
45999
|
-
} catch (err) {
|
|
46000
|
-
logger.warn("ecowitt adoption: getStatus failed", { meta: { error: errMsg(err) } });
|
|
46001
|
-
return {
|
|
46002
|
-
lastDiscoveryAt: null,
|
|
46003
|
-
candidateCount: 0,
|
|
46004
|
-
adoptedCount: 0,
|
|
46005
|
-
lastError: errMsg(err)
|
|
46006
|
-
};
|
|
46007
|
-
}
|
|
46008
|
-
},
|
|
46009
|
-
refresh: async ({ integrationId }) => {
|
|
46010
|
-
const brokerId = await getBrokerIdForIntegration(integrationId);
|
|
46011
|
-
const candidate = await gatewayCandidateForBroker(brokerId);
|
|
46012
|
-
const adoptedCount = (await listAdoptedEcowitt()).filter((d) => d.config["system"] === "ecowitt" && d.config["brokerId"] === brokerId).length;
|
|
46013
|
-
return {
|
|
46014
|
-
lastDiscoveryAt: Date.now(),
|
|
46015
|
-
candidateCount: candidate !== null ? 1 : 0,
|
|
46016
|
-
adoptedCount,
|
|
46017
|
-
lastError: null
|
|
46018
|
-
};
|
|
46019
|
-
},
|
|
46020
|
-
adopt: async ({ integrationId, childNativeIds, perCandidate }) => {
|
|
46021
|
-
const brokerId = await getBrokerIdForIntegration(integrationId);
|
|
46022
|
-
if (registry.getFacadeForBroker(brokerId) === null) throw new Error(`ecowitt adopt: broker ${brokerId} not connected`);
|
|
46023
|
-
const adopted = [];
|
|
46024
|
-
let failures = 0;
|
|
46025
|
-
const info = registry.list().find((b) => b.id === brokerId);
|
|
46026
|
-
for (const nativeId of childNativeIds) {
|
|
46027
|
-
if (nativeId !== brokerId) {
|
|
46028
|
-
logger.warn("ecowitt adopt: only the gateway candidate is adoptable — skipping", { meta: {
|
|
46029
|
-
nativeId,
|
|
46030
|
-
brokerId
|
|
46031
|
-
} });
|
|
46032
|
-
failures++;
|
|
46033
|
-
continue;
|
|
46034
|
-
}
|
|
46035
|
-
try {
|
|
46036
|
-
const { deviceId, accessoryDeviceIds } = await adoptGateway({
|
|
46037
|
-
brokerId,
|
|
46038
|
-
integrationId,
|
|
46039
|
-
name: perCandidate?.[nativeId]?.name ?? info?.name ?? "Ecowitt gateway"
|
|
46040
|
-
});
|
|
46041
|
-
adopted.push({
|
|
46042
|
-
childNativeId: nativeId,
|
|
46043
|
-
parentDeviceId: deviceId,
|
|
46044
|
-
accessoryDeviceIds
|
|
46045
|
-
});
|
|
46046
|
-
} catch (err) {
|
|
46047
|
-
logger.warn("ecowitt adopt: failed to adopt gateway", { meta: {
|
|
46048
|
-
brokerId,
|
|
46049
|
-
error: errMsg(err)
|
|
46050
|
-
} });
|
|
46051
|
-
failures++;
|
|
46052
|
-
}
|
|
46053
|
-
}
|
|
46054
|
-
if (adopted.length === 0 && failures > 0) throw new Error(`ecowitt adopt: all ${failures} adopt(s) failed`);
|
|
46055
|
-
return { adopted };
|
|
46056
|
-
},
|
|
46057
|
-
release: async ({ camDeviceId }) => {
|
|
46058
|
-
await removeDevice(camDeviceId);
|
|
46059
|
-
},
|
|
46060
|
-
resync: async ({ camDeviceId }) => {
|
|
46061
|
-
const cfg = await findDeviceConfig(camDeviceId);
|
|
46062
|
-
if (cfg === null) throw new Error(`ecowitt resync: device ${camDeviceId} not found`);
|
|
46063
|
-
if (cfg["system"] !== "ecowitt") throw new Error(`ecowitt resync: device ${camDeviceId} is not an Ecowitt device`);
|
|
46064
|
-
const brokerId = String(cfg["brokerId"]);
|
|
46065
|
-
if (!(registry.getFacadeForBroker(brokerId) !== null)) throw new Error(`ecowitt resync: broker ${brokerId} no longer connected`);
|
|
46066
|
-
return {
|
|
46067
|
-
changed: false,
|
|
46068
|
-
rebuiltChildren: 0
|
|
46069
|
-
};
|
|
46070
|
-
}
|
|
46071
|
-
};
|
|
46072
|
-
}
|
|
46073
|
-
//#endregion
|
|
46074
|
-
//#region src/ecowitt-broker-device-cascade.ts
|
|
46075
|
-
/**
|
|
46076
|
-
* Remove every adopted Ecowitt PARENT device (children cascade via the kernel)
|
|
46077
|
-
* whose persisted config carries `{ system: 'ecowitt', brokerId }`. Used on
|
|
46078
|
-
* broker.remove and integration delete. Best-effort per device; returns the
|
|
46079
|
-
* count removed. Mirrors the Homematic / Dreame cascade helper.
|
|
46080
|
-
*/
|
|
46081
|
-
async function cascadeRemoveDevicesForBroker(input) {
|
|
46082
|
-
const { reg, devices, addonId, brokerId, logger } = input;
|
|
46083
|
-
let removed = 0;
|
|
46084
|
-
for (const d of reg.getAllForAddon(addonId)) {
|
|
46085
|
-
if (d.parentDeviceId !== null) continue;
|
|
46086
|
-
const cfg = await devices.loadConfig(d.id).catch(() => ({}));
|
|
46087
|
-
if (cfg["system"] !== "ecowitt" || cfg["brokerId"] !== brokerId) continue;
|
|
46088
|
-
try {
|
|
46089
|
-
await devices.remove(d.id);
|
|
46090
|
-
removed += 1;
|
|
46091
|
-
} catch (err) {
|
|
46092
|
-
logger.warn("ecowitt: broker cascade-remove failed", {
|
|
46093
|
-
tags: { deviceId: d.id },
|
|
46094
|
-
meta: {
|
|
46095
|
-
brokerId,
|
|
46096
|
-
error: errMsg(err)
|
|
46097
|
-
}
|
|
46098
|
-
});
|
|
46099
|
-
}
|
|
46100
|
-
}
|
|
46101
|
-
return removed;
|
|
46102
|
-
}
|
|
46103
|
-
//#endregion
|
|
46104
|
-
//#region src/ecowitt-broker-offline.ts
|
|
46105
45717
|
/**
|
|
46106
|
-
*
|
|
46107
|
-
*
|
|
46108
|
-
*
|
|
46109
|
-
*
|
|
45718
|
+
* Build the THREE gateway adoption candidates (one {@link DeviceType.Container}
|
|
45719
|
+
* per {@link EcowittDeviceGroup}) for a single physical gateway. Each Container
|
|
45720
|
+
* carries only the sensors whose device group matches, as preview accessory
|
|
45721
|
+
* children that the Container's `getAccessoryChildren()` materialises on
|
|
45722
|
+
* adoption. Pure: no I/O.
|
|
45723
|
+
*
|
|
45724
|
+
* Discovery option (documented decision): we return 3 SEPARATE top-level
|
|
45725
|
+
* Container candidates (not 1 parent with 3 group-tagged children). Each maps 1:1
|
|
45726
|
+
* to a real adopted device, so the existing per-candidate adopt/release/resync
|
|
45727
|
+
* machinery (keyed on `childNativeId`) extends directly — the alternative
|
|
45728
|
+
* (nested group children under one parent) would require a new two-level
|
|
45729
|
+
* adoption shape and is higher-risk. Sensors are split by
|
|
45730
|
+
* {@link deviceGroupForSensor}; an empty group still yields a Container so its
|
|
45731
|
+
* sensors can appear as they come online over time (additive reconcile).
|
|
45732
|
+
*
|
|
45733
|
+
* Per the plan (model A), each sensor maps to a typed sensor cap; the `weather`
|
|
45734
|
+
* cap is intentionally NOT used (a raw station has no sky-state `condition`).
|
|
46110
45735
|
*/
|
|
46111
|
-
function
|
|
46112
|
-
|
|
46113
|
-
for (const
|
|
46114
|
-
|
|
46115
|
-
|
|
46116
|
-
|
|
46117
|
-
|
|
46118
|
-
|
|
46119
|
-
|
|
46120
|
-
|
|
45736
|
+
function buildEcowittGatewayCandidates(input) {
|
|
45737
|
+
const byGroup = /* @__PURE__ */ new Map();
|
|
45738
|
+
for (const group of ECOWITT_DEVICE_GROUPS) byGroup.set(group, []);
|
|
45739
|
+
for (const sensor of input.sensors) {
|
|
45740
|
+
const group = deviceGroupForSensor(sensor.category, sensor.channel);
|
|
45741
|
+
byGroup.get(group)?.push(sensorChild(sensor));
|
|
45742
|
+
}
|
|
45743
|
+
return ECOWITT_DEVICE_GROUPS.map((group) => {
|
|
45744
|
+
const adoptedDeviceId = input.adoptedDeviceIdByGroup[group] ?? null;
|
|
45745
|
+
const children = byGroup.get(group) ?? [];
|
|
45746
|
+
return {
|
|
45747
|
+
childNativeId: groupNativeId(input.gatewayId, group),
|
|
45748
|
+
name: `${input.gatewayName} — ${deviceGroupLabel(group)}`,
|
|
45749
|
+
type: DeviceType.Container,
|
|
45750
|
+
status: "online",
|
|
45751
|
+
metadata: { serialNumber: input.gatewayId },
|
|
45752
|
+
alreadyAdopted: adoptedDeviceId !== null,
|
|
45753
|
+
adoptedDeviceId,
|
|
45754
|
+
capabilities: [],
|
|
45755
|
+
children
|
|
45756
|
+
};
|
|
45757
|
+
});
|
|
46121
45758
|
}
|
|
46122
45759
|
//#endregion
|
|
46123
45760
|
//#region src/devices/ecowitt-sensor-device.ts
|
|
46124
45761
|
/**
|
|
46125
45762
|
* Persisted config every Ecowitt sensor child carries. `sensorId` resolves the
|
|
46126
|
-
* live reading from the
|
|
46127
|
-
* the Ecowitt physical quantity that drives the cap
|
|
46128
|
-
* `system`/`integrationId` are provenance.
|
|
45763
|
+
* live reading from the gateway's client; `gatewayId` selects the gateway (its
|
|
45764
|
+
* Hub stableId); `quantity` is the Ecowitt physical quantity that drives the cap
|
|
45765
|
+
* selection; `system`/`integrationId` are provenance.
|
|
46129
45766
|
*/
|
|
46130
45767
|
var ecowittSensorSchema = object({
|
|
46131
45768
|
sensorId: string().min(1).describe("Ecowitt sensor stable id"),
|
|
46132
|
-
|
|
45769
|
+
gatewayId: string().min(1).describe("Parent gateway Hub stableId"),
|
|
46133
45770
|
quantity: string().min(1).describe("Ecowitt physical quantity"),
|
|
46134
45771
|
system: literal("ecowitt").optional(),
|
|
46135
45772
|
integrationId: string().optional()
|
|
@@ -46173,7 +45810,7 @@ var SUPPORTED_CAPS = new Set([
|
|
|
46173
45810
|
var EcowittSensorDevice = class extends BaseDevice {
|
|
46174
45811
|
features = [];
|
|
46175
45812
|
sensorId;
|
|
46176
|
-
|
|
45813
|
+
gatewayId;
|
|
46177
45814
|
capName;
|
|
46178
45815
|
valueKey;
|
|
46179
45816
|
/**
|
|
@@ -46189,7 +45826,7 @@ var EcowittSensorDevice = class extends BaseDevice {
|
|
|
46189
45826
|
const persisted = ecowittSensorSchema.parse(ctx.persistedConfig ?? {});
|
|
46190
45827
|
super(ctx, ecowittSensorSchema, { type: ctx.deviceMeta.type });
|
|
46191
45828
|
this.sensorId = persisted.sensorId;
|
|
46192
|
-
this.
|
|
45829
|
+
this.gatewayId = persisted.gatewayId;
|
|
46193
45830
|
const cap = capForQuantity(persisted.quantity);
|
|
46194
45831
|
this.capName = SUPPORTED_CAPS.has(cap) ? cap : "numeric-sensor";
|
|
46195
45832
|
this.valueKey = valueFieldForCap(this.capName);
|
|
@@ -46200,10 +45837,10 @@ var EcowittSensorDevice = class extends BaseDevice {
|
|
|
46200
45837
|
});
|
|
46201
45838
|
}
|
|
46202
45839
|
get facade() {
|
|
46203
|
-
return ecowittFacades.get(this.
|
|
45840
|
+
return ecowittFacades.get(this.gatewayId);
|
|
46204
45841
|
}
|
|
46205
45842
|
resolveSensor() {
|
|
46206
|
-
return ecowittFacades.getSensor(this.
|
|
45843
|
+
return ecowittFacades.getSensor(this.gatewayId, this.sensorId);
|
|
46207
45844
|
}
|
|
46208
45845
|
async onActivate() {
|
|
46209
45846
|
await super.onActivate();
|
|
@@ -46390,41 +46027,53 @@ var ecowittSensorEntrySchema = object({
|
|
|
46390
46027
|
sensorId: string(),
|
|
46391
46028
|
quantity: string(),
|
|
46392
46029
|
channel: number().optional(),
|
|
46393
|
-
name: string().optional()
|
|
46030
|
+
name: string().optional(),
|
|
46031
|
+
category: _enum([
|
|
46032
|
+
"gateway",
|
|
46033
|
+
"weather-station",
|
|
46034
|
+
"channel-sensor",
|
|
46035
|
+
"external"
|
|
46036
|
+
]).optional()
|
|
46394
46037
|
});
|
|
46395
46038
|
/**
|
|
46396
|
-
* Persisted config for
|
|
46397
|
-
* gateway
|
|
46398
|
-
*
|
|
46399
|
-
*
|
|
46039
|
+
* Persisted config for one Ecowitt gateway-group Container. `gatewayId` selects
|
|
46040
|
+
* the parent gateway's live nodewitt client (the gateway Hub device's
|
|
46041
|
+
* `stableId`); `sensors[]` is the additively-reconciled list of sensors that fan
|
|
46042
|
+
* out as accessory children (updated by the gateway device via `applyDerivedSpec`
|
|
46043
|
+
* on every `snapshot` push). `system`/`integrationId`/`name` are provenance.
|
|
46400
46044
|
*/
|
|
46401
46045
|
var ecowittContainerSchema = object({
|
|
46402
|
-
|
|
46046
|
+
gatewayId: string().min(1).describe("Parent gateway Hub stableId"),
|
|
46047
|
+
deviceGroup: _enum([
|
|
46048
|
+
"gateway",
|
|
46049
|
+
"weather-station",
|
|
46050
|
+
"temp-sensor-ch1"
|
|
46051
|
+
]).default("gateway"),
|
|
46403
46052
|
sensors: array(ecowittSensorEntrySchema).default([]),
|
|
46404
46053
|
integrationId: string().optional(),
|
|
46405
46054
|
system: literal("ecowitt").optional(),
|
|
46406
46055
|
name: string().optional()
|
|
46407
46056
|
});
|
|
46408
46057
|
/**
|
|
46409
|
-
*
|
|
46410
|
-
* declares `getAccessoryChildren()`
|
|
46411
|
-
* {@link EcowittSensorDevice} per sensor in the
|
|
46412
|
-
* reconciles additions/removals when the
|
|
46413
|
-
* `applyDerivedSpec`. Mirrors `HaContainerDevice` (which
|
|
46414
|
-
* live and is re-derived on reconcile).
|
|
46058
|
+
* One gateway-group Container for an Ecowitt station. A CHILD of the gateway Hub
|
|
46059
|
+
* (standalone mode). Owns no caps itself — it declares `getAccessoryChildren()`
|
|
46060
|
+
* so the kernel auto-spawns one {@link EcowittSensorDevice} per sensor in the
|
|
46061
|
+
* LIVE `sensors[]` config and reconciles additions/removals when the gateway
|
|
46062
|
+
* re-persists the list via `applyDerivedSpec`. Mirrors `HaContainerDevice` (which
|
|
46063
|
+
* reads its `entities[]` live and is re-derived on reconcile).
|
|
46415
46064
|
*/
|
|
46416
46065
|
var EcowittContainerDevice = class extends BaseDevice {
|
|
46417
46066
|
features = [DeviceFeature.Resyncable];
|
|
46418
|
-
|
|
46067
|
+
gatewayId;
|
|
46419
46068
|
integrationId;
|
|
46420
46069
|
constructor(ctx) {
|
|
46421
46070
|
const cfg = ecowittContainerSchema.parse(ctx.persistedConfig ?? {});
|
|
46422
46071
|
super(ctx, ecowittContainerSchema, { type: DeviceType.Container });
|
|
46423
|
-
this.
|
|
46072
|
+
this.gatewayId = cfg.gatewayId;
|
|
46424
46073
|
this.integrationId = cfg.integrationId;
|
|
46425
|
-
this.online = ecowittFacades.get(this.
|
|
46074
|
+
this.online = ecowittFacades.get(this.gatewayId) !== null;
|
|
46426
46075
|
this.updateSourceInfo({
|
|
46427
|
-
id: this.
|
|
46076
|
+
id: this.gatewayId,
|
|
46428
46077
|
system: "ecowitt"
|
|
46429
46078
|
});
|
|
46430
46079
|
}
|
|
@@ -46439,7 +46088,7 @@ var EcowittContainerDevice = class extends BaseDevice {
|
|
|
46439
46088
|
};
|
|
46440
46089
|
const config = {
|
|
46441
46090
|
sensorId: sensor.sensorId,
|
|
46442
|
-
|
|
46091
|
+
gatewayId: this.gatewayId,
|
|
46443
46092
|
quantity: sensor.quantity,
|
|
46444
46093
|
capabilities: [capForQuantity(sensor.quantity)],
|
|
46445
46094
|
system: "ecowitt",
|
|
@@ -46455,328 +46104,289 @@ var EcowittContainerDevice = class extends BaseDevice {
|
|
|
46455
46104
|
}
|
|
46456
46105
|
};
|
|
46457
46106
|
//#endregion
|
|
46458
|
-
//#region src/
|
|
46459
|
-
/** Default multi-broker config — a fresh install starts with no gateways. */
|
|
46460
|
-
var DEFAULTS = { brokers: [] };
|
|
46107
|
+
//#region src/devices/ecowitt-gateway-device.ts
|
|
46461
46108
|
/**
|
|
46462
|
-
* Ecowitt
|
|
46109
|
+
* Ecowitt gateway — a {@link DeviceType.Hub} device (standalone mode, Reolink
|
|
46110
|
+
* pattern). The operator-supplied CONNECTION lives on THIS device's config; the
|
|
46111
|
+
* gateway owns exactly one live `@apocaliss92/nodewitt` client (via an
|
|
46112
|
+
* {@link EcowittIntegrationManager}) keyed on its own `stableId` and published on
|
|
46113
|
+
* the in-process {@link ecowittFacades} resolver so its container + sensor
|
|
46114
|
+
* children read the live snapshot.
|
|
46463
46115
|
*
|
|
46464
|
-
*
|
|
46465
|
-
*
|
|
46466
|
-
*
|
|
46467
|
-
*
|
|
46468
|
-
*
|
|
46469
|
-
*
|
|
46470
|
-
* `applyDerivedSpec`, which spawns new sensor children + removes orphaned ones.
|
|
46116
|
+
* It registers the `device-discovery` cap: `refreshDiscovery`/`listDiscovered`
|
|
46117
|
+
* enumerate the THREE gateway-group Container candidates (gateway /
|
|
46118
|
+
* weather-station / temp-sensor-ch1) that actually have sensors; `adoptDevice`
|
|
46119
|
+
* spawns a group {@link EcowittContainerDevice} child whose sensors materialise
|
|
46120
|
+
* as entity children; `releaseDevice` removes it. On every nodewitt snapshot the
|
|
46121
|
+
* gateway re-derives each adopted group Container's `sensors[]` additively.
|
|
46471
46122
|
*/
|
|
46472
|
-
var
|
|
46473
|
-
|
|
46474
|
-
|
|
46475
|
-
|
|
46476
|
-
|
|
46477
|
-
constructor() {
|
|
46478
|
-
|
|
46123
|
+
var EcowittGatewayDevice = class extends BaseDevice {
|
|
46124
|
+
features = [];
|
|
46125
|
+
manager = null;
|
|
46126
|
+
eventUnsubscribers = [];
|
|
46127
|
+
latestSensors = [];
|
|
46128
|
+
constructor(ctx) {
|
|
46129
|
+
ecowittGatewaySchema.parse(ctx.persistedConfig ?? {});
|
|
46130
|
+
super(ctx, ecowittGatewaySchema, { type: DeviceType.Hub });
|
|
46131
|
+
this.online = false;
|
|
46132
|
+
this.registerDeviceDiscovery();
|
|
46133
|
+
this.updateSourceInfo({
|
|
46134
|
+
id: this.stableId,
|
|
46135
|
+
system: "ecowitt"
|
|
46136
|
+
});
|
|
46479
46137
|
}
|
|
46480
|
-
|
|
46481
|
-
|
|
46482
|
-
|
|
46483
|
-
|
|
46484
|
-
|
|
46485
|
-
|
|
46486
|
-
|
|
46487
|
-
this.registry.setOnBrokerDisconnected((brokerId) => {
|
|
46488
|
-
this.setBrokerDevicesOnline(brokerId, false);
|
|
46489
|
-
});
|
|
46490
|
-
this.registry.setOnSensorsChanged((brokerId, sensors) => {
|
|
46491
|
-
this.reconcileGatewaySensors(brokerId, sensors);
|
|
46492
|
-
});
|
|
46493
|
-
await this.registry.restore(this.config.brokers);
|
|
46494
|
-
this.ctx.logger.info("Ecowitt: provider initialised", { meta: { brokerCount: this.config.brokers.length } });
|
|
46495
|
-
await this.reconcileIntegrationsToBrokers();
|
|
46496
|
-
this.subscribeIntegrationLifecycle();
|
|
46497
|
-
return [
|
|
46498
|
-
...regs,
|
|
46499
|
-
{
|
|
46500
|
-
capability: brokerCapability,
|
|
46501
|
-
provider: this.buildBrokerProvider()
|
|
46502
|
-
},
|
|
46503
|
-
{
|
|
46504
|
-
capability: deviceAdoptionCapability,
|
|
46505
|
-
provider: this.buildAdoptionProvider()
|
|
46506
|
-
}
|
|
46507
|
-
];
|
|
46138
|
+
/** Adopt a pre-built manager (created by `onCreateDevice` so the live client
|
|
46139
|
+
* starts once) — mirrors `ReolinkHub.adoptApi`. Published on the resolver so
|
|
46140
|
+
* children pick it up. */
|
|
46141
|
+
adoptManager(manager) {
|
|
46142
|
+
this.manager = manager;
|
|
46143
|
+
const facade = manager.facade;
|
|
46144
|
+
if (facade !== null) ecowittFacades.set(this.stableId, facade);
|
|
46508
46145
|
}
|
|
46509
|
-
async
|
|
46510
|
-
|
|
46511
|
-
|
|
46512
|
-
|
|
46513
|
-
|
|
46514
|
-
|
|
46515
|
-
|
|
46516
|
-
|
|
46517
|
-
}
|
|
46518
|
-
this.ctx.logger.warn("Ecowitt onConfigChanged: removeEntry failed", { meta: {
|
|
46519
|
-
brokerId: liveId,
|
|
46520
|
-
error: errMsg(err)
|
|
46521
|
-
} });
|
|
46522
|
-
}
|
|
46523
|
-
for (const entry of persisted) {
|
|
46524
|
-
if (entry.id && liveIds.has(entry.id)) {
|
|
46525
|
-
if (sameConnection(entry.connection, reg.getConnection(entry.id))) continue;
|
|
46526
|
-
try {
|
|
46527
|
-
await reg.updateEntry(entry.id, entry.connection);
|
|
46528
|
-
} catch (err) {
|
|
46529
|
-
this.ctx.logger.warn("Ecowitt onConfigChanged: updateEntry failed", { meta: {
|
|
46530
|
-
brokerId: entry.id,
|
|
46531
|
-
error: errMsg(err)
|
|
46532
|
-
} });
|
|
46533
|
-
}
|
|
46534
|
-
continue;
|
|
46535
|
-
}
|
|
46536
|
-
try {
|
|
46537
|
-
const created = await reg.createEntry(entry.name, entry.connection);
|
|
46538
|
-
if (created.id !== entry.id) {
|
|
46539
|
-
const next = persisted.map((b) => b === entry ? {
|
|
46540
|
-
...b,
|
|
46541
|
-
id: created.id
|
|
46542
|
-
} : b);
|
|
46543
|
-
await this.updateGlobalSettings({ brokers: next });
|
|
46544
|
-
}
|
|
46545
|
-
} catch (err) {
|
|
46546
|
-
this.ctx.logger.warn("Ecowitt onConfigChanged: failed to start new broker", { meta: {
|
|
46547
|
-
brokerName: entry.name,
|
|
46548
|
-
error: errMsg(err)
|
|
46549
|
-
} });
|
|
46550
|
-
}
|
|
46551
|
-
}
|
|
46146
|
+
async onActivate() {
|
|
46147
|
+
if (this.manager === null) this.ensureManager().catch((err) => {
|
|
46148
|
+
this.ctx.logger.warn("Ecowitt gateway initial connect failed", { meta: { error: errMsg(err) } });
|
|
46149
|
+
});
|
|
46150
|
+
else this.refreshDiscoveryFromClient().catch(() => {});
|
|
46151
|
+
this.eventUnsubscribers.push(this.ctx.eventBus.subscribe({ category: EventCategory.DeviceUnregistered }, (event) => {
|
|
46152
|
+
if (event.data.parentDeviceId !== this.id) return;
|
|
46153
|
+
this.refreshDiscoveryFromClient().catch(() => {});
|
|
46154
|
+
}));
|
|
46552
46155
|
}
|
|
46553
|
-
async
|
|
46554
|
-
try {
|
|
46555
|
-
|
|
46156
|
+
async removeDevice() {
|
|
46157
|
+
for (const unsub of this.eventUnsubscribers) try {
|
|
46158
|
+
unsub();
|
|
46159
|
+
} catch {}
|
|
46160
|
+
this.eventUnsubscribers.length = 0;
|
|
46161
|
+
const mgr = this.manager;
|
|
46162
|
+
this.manager = null;
|
|
46163
|
+
ecowittFacades.set(this.stableId, null);
|
|
46164
|
+
if (mgr) try {
|
|
46165
|
+
await mgr.stop();
|
|
46556
46166
|
} catch (err) {
|
|
46557
|
-
this.ctx.logger.warn("Ecowitt:
|
|
46167
|
+
this.ctx.logger.warn("Ecowitt gateway: client stop failed", { meta: { error: errMsg(err) } });
|
|
46558
46168
|
}
|
|
46559
|
-
this.registry = null;
|
|
46560
|
-
await super.onShutdown();
|
|
46561
|
-
}
|
|
46562
|
-
/** Stable id, broker-scoped. One broker = one gateway, so the brokerId alone
|
|
46563
|
-
* is the unique key for the gateway Container. */
|
|
46564
|
-
generateStableId(_type, config) {
|
|
46565
|
-
return `ecowitt:${String(config?.["brokerId"] ?? "unknown")}`;
|
|
46566
46169
|
}
|
|
46567
|
-
|
|
46568
|
-
|
|
46569
|
-
|
|
46570
|
-
|
|
46571
|
-
|
|
46572
|
-
|
|
46573
|
-
|
|
46574
|
-
|
|
46575
|
-
|
|
46576
|
-
|
|
46577
|
-
if (!reg || !devices) return;
|
|
46578
|
-
let containerId = null;
|
|
46579
|
-
for (const d of reg.getAllForAddon(this.addonId)) {
|
|
46580
|
-
if (d.parentDeviceId !== null) continue;
|
|
46581
|
-
const cfg = await devices.loadConfig(d.id).catch(() => ({}));
|
|
46582
|
-
if (cfg["system"] === "ecowitt" && cfg["brokerId"] === brokerId) {
|
|
46583
|
-
containerId = d.id;
|
|
46584
|
-
break;
|
|
46585
|
-
}
|
|
46586
|
-
}
|
|
46587
|
-
if (containerId === null) return;
|
|
46588
|
-
const nextSensors = sensors.map((s) => ({
|
|
46589
|
-
sensorId: s.id,
|
|
46590
|
-
quantity: s.quantity,
|
|
46591
|
-
...s.channel !== void 0 ? { channel: s.channel } : {},
|
|
46592
|
-
...s.name !== void 0 ? { name: s.name } : {}
|
|
46593
|
-
}));
|
|
46594
|
-
const cfg = await devices.loadConfig(containerId).catch(() => ({}));
|
|
46595
|
-
if (sensorsEqual(Array.isArray(cfg["sensors"]) ? cfg["sensors"] : [], nextSensors)) return;
|
|
46596
|
-
await devices.applyDerivedSpec(containerId, { config: { sensors: nextSensors } });
|
|
46597
|
-
this.ctx.logger.info("Ecowitt: gateway sensors reconciled", { meta: {
|
|
46598
|
-
brokerId,
|
|
46599
|
-
deviceId: containerId,
|
|
46600
|
-
sensorCount: nextSensors.length
|
|
46601
|
-
} });
|
|
46170
|
+
async applySettingsPatch(patch) {
|
|
46171
|
+
if (!("connection" in patch)) return;
|
|
46172
|
+
const parsed = ecowittGatewaySchema.parse({
|
|
46173
|
+
connection: patch["connection"],
|
|
46174
|
+
system: "ecowitt-gateway"
|
|
46175
|
+
});
|
|
46176
|
+
await this.config.setAll({ connection: parsed.connection });
|
|
46177
|
+
const mgr = this.manager;
|
|
46178
|
+
if (mgr) try {
|
|
46179
|
+
await mgr.applyConnection(parsed.connection);
|
|
46602
46180
|
} catch (err) {
|
|
46603
|
-
this.ctx.logger.warn("Ecowitt
|
|
46604
|
-
brokerId,
|
|
46605
|
-
error: errMsg(err)
|
|
46606
|
-
} });
|
|
46181
|
+
this.ctx.logger.warn("Ecowitt gateway: applyConnection failed", { meta: { error: errMsg(err) } });
|
|
46607
46182
|
}
|
|
46608
|
-
|
|
46609
|
-
|
|
46610
|
-
return buildEcowittBrokerProvider({
|
|
46611
|
-
ownerAddonId: this.ctx.id,
|
|
46612
|
-
registry: this.requireRegistry(),
|
|
46613
|
-
getBrokers: () => this.config.brokers,
|
|
46614
|
-
persistBrokers: (brokers) => this.updateGlobalSettings({ brokers: [...brokers] }),
|
|
46615
|
-
cascadeRemoveDevices: (brokerId) => this.cascadeRemoveDevicesForBroker(brokerId),
|
|
46616
|
-
logger: this.ctx.logger
|
|
46183
|
+
else await this.ensureManager().catch((err) => {
|
|
46184
|
+
this.ctx.logger.warn("Ecowitt gateway re-connect after settings change failed", { meta: { error: errMsg(err) } });
|
|
46617
46185
|
});
|
|
46618
46186
|
}
|
|
46619
|
-
|
|
46620
|
-
|
|
46621
|
-
|
|
46622
|
-
|
|
46623
|
-
|
|
46624
|
-
|
|
46625
|
-
|
|
46626
|
-
|
|
46627
|
-
|
|
46628
|
-
|
|
46187
|
+
/** Build + start the per-device nodewitt client (if not already running). */
|
|
46188
|
+
async ensureManager() {
|
|
46189
|
+
if (this.manager !== null) return;
|
|
46190
|
+
const connection = this.config.values.connection;
|
|
46191
|
+
const mgr = new EcowittIntegrationManager({
|
|
46192
|
+
id: this.stableId,
|
|
46193
|
+
name: this.name,
|
|
46194
|
+
connection,
|
|
46195
|
+
logger: this.ctx.logger,
|
|
46196
|
+
onConnected: () => this.setGatewayOnline(true),
|
|
46197
|
+
onDisconnected: () => this.setGatewayOnline(false),
|
|
46198
|
+
onSensorsChanged: (_id, sensors) => this.handleSensorsChanged(sensors),
|
|
46199
|
+
onFacadeBuilt: (_id, facade) => ecowittFacades.set(this.stableId, facade)
|
|
46629
46200
|
});
|
|
46201
|
+
this.manager = mgr;
|
|
46202
|
+
await mgr.start();
|
|
46630
46203
|
}
|
|
46631
|
-
|
|
46632
|
-
|
|
46633
|
-
|
|
46634
|
-
|
|
46635
|
-
|
|
46636
|
-
|
|
46637
|
-
|
|
46638
|
-
|
|
46639
|
-
|
|
46640
|
-
|
|
46641
|
-
|
|
46642
|
-
|
|
46643
|
-
|
|
46644
|
-
|
|
46645
|
-
|
|
46646
|
-
|
|
46647
|
-
|
|
46648
|
-
|
|
46649
|
-
|
|
46650
|
-
|
|
46651
|
-
|
|
46652
|
-
|
|
46653
|
-
|
|
46654
|
-
|
|
46655
|
-
|
|
46656
|
-
|
|
46657
|
-
|
|
46658
|
-
|
|
46659
|
-
const nextBrokers = this.config.brokers.filter((b) => !toRemove.includes(b.id));
|
|
46660
|
-
await this.updateGlobalSettings({ brokers: nextBrokers });
|
|
46661
|
-
} catch (err) {
|
|
46662
|
-
this.ctx.logger.warn("Ecowitt integration→broker reconcile failed", { meta: { error: errMsg(err) } });
|
|
46663
|
-
}
|
|
46664
|
-
}
|
|
46665
|
-
subscribeIntegrationLifecycle() {
|
|
46666
|
-
const handler = (event) => {
|
|
46667
|
-
const addonId = event.data["addonId"];
|
|
46668
|
-
if (typeof addonId === "string" && addonId !== this.ctx.id) return;
|
|
46669
|
-
this.reconcileIntegrationsToBrokers();
|
|
46670
|
-
};
|
|
46671
|
-
this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationEnabled }, handler);
|
|
46672
|
-
this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationDisabled }, handler);
|
|
46673
|
-
this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationDeleted }, handler);
|
|
46674
|
-
}
|
|
46675
|
-
buildAdoptionProvider() {
|
|
46676
|
-
return buildEcowittAdoptionProvider({
|
|
46677
|
-
registry: {
|
|
46678
|
-
getFacadeForBroker: (id) => this.requireRegistry().get(id) !== null ? { getSensors: () => ecowittFacades.getSensors(id) } : null,
|
|
46679
|
-
list: () => this.requireRegistry().list().map((b) => ({
|
|
46680
|
-
id: b.id,
|
|
46681
|
-
name: b.name
|
|
46682
|
-
}))
|
|
46204
|
+
setGatewayOnline(online) {
|
|
46205
|
+
if (this.online === online) return;
|
|
46206
|
+
this.markOnline(online);
|
|
46207
|
+
this.ctx.logger.info("Ecowitt gateway " + (online ? "online" : "offline"), { tags: { deviceId: this.id } });
|
|
46208
|
+
this.setContainersOnline(online).catch(() => {});
|
|
46209
|
+
}
|
|
46210
|
+
async setContainersOnline(online) {
|
|
46211
|
+
const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
|
|
46212
|
+
for (const child of children) {
|
|
46213
|
+
if (child.type !== DeviceType.Container) continue;
|
|
46214
|
+
if (child.online === online) continue;
|
|
46215
|
+
child.markOnline(online);
|
|
46216
|
+
}
|
|
46217
|
+
}
|
|
46218
|
+
/** On each snapshot: cache sensors, re-derive discovery, additively reconcile
|
|
46219
|
+
* every adopted group Container's `sensors[]`. */
|
|
46220
|
+
handleSensorsChanged(sensors) {
|
|
46221
|
+
this.latestSensors = sensors;
|
|
46222
|
+
this.refreshDiscoveryFromClient().catch(() => {});
|
|
46223
|
+
this.reconcileGroupSensors(sensors).catch((err) => {
|
|
46224
|
+
this.ctx.logger.warn("Ecowitt gateway: sensor reconcile failed", { meta: { error: errMsg(err) } });
|
|
46225
|
+
});
|
|
46226
|
+
}
|
|
46227
|
+
registerDeviceDiscovery() {
|
|
46228
|
+
this.ctx.registerNativeCap(deviceDiscoveryCapability, {
|
|
46229
|
+
getStatus: async ({ deviceId }) => {
|
|
46230
|
+
if (deviceId !== this.id) return null;
|
|
46231
|
+
return this.runtimeState.getCapState("device-discovery") ?? null;
|
|
46683
46232
|
},
|
|
46684
|
-
|
|
46685
|
-
|
|
46686
|
-
|
|
46687
|
-
if (typeof brokerId !== "string") throw new Error(`integration ${id} has no linked brokerId`);
|
|
46688
|
-
return brokerId;
|
|
46233
|
+
listDiscovered: async ({ deviceId }) => {
|
|
46234
|
+
if (deviceId !== this.id) return [];
|
|
46235
|
+
return this.runtimeState.getCapState("device-discovery")?.discovered ?? [];
|
|
46689
46236
|
},
|
|
46690
|
-
|
|
46691
|
-
|
|
46692
|
-
|
|
46693
|
-
|
|
46694
|
-
const out = [];
|
|
46695
|
-
for (const d of reg.getAllForAddon(this.addonId)) {
|
|
46696
|
-
if (d.parentDeviceId !== null) continue;
|
|
46697
|
-
const config = await devices.loadConfig(d.id).catch(() => ({}));
|
|
46698
|
-
out.push({
|
|
46699
|
-
id: d.id,
|
|
46700
|
-
config
|
|
46701
|
-
});
|
|
46702
|
-
}
|
|
46703
|
-
return out;
|
|
46237
|
+
refreshDiscovery: async ({ deviceId }) => {
|
|
46238
|
+
if (deviceId !== this.id) return [];
|
|
46239
|
+
await this.refreshDiscoveryFromClient();
|
|
46240
|
+
return this.runtimeState.getCapState("device-discovery")?.discovered ?? [];
|
|
46704
46241
|
},
|
|
46705
|
-
|
|
46706
|
-
|
|
46707
|
-
|
|
46708
|
-
const config = {
|
|
46709
|
-
brokerId,
|
|
46710
|
-
sensors: ecowittFacades.getSensors(brokerId).map((s) => ({
|
|
46711
|
-
sensorId: s.id,
|
|
46712
|
-
quantity: s.quantity,
|
|
46713
|
-
...s.channel !== void 0 ? { channel: s.channel } : {},
|
|
46714
|
-
...s.name !== void 0 ? { name: s.name } : {}
|
|
46715
|
-
})),
|
|
46716
|
-
system: "ecowitt",
|
|
46717
|
-
integrationId,
|
|
46718
|
-
name
|
|
46719
|
-
};
|
|
46720
|
-
const stableId = this.generateStableId(DeviceType.Container, config);
|
|
46721
|
-
const device = await devices.create(stableId, EcowittContainerDevice, config, null, {
|
|
46722
|
-
type: DeviceType.Container,
|
|
46723
|
-
name,
|
|
46724
|
-
integrationId
|
|
46725
|
-
});
|
|
46726
|
-
const children = await devices.getChildren(device.id);
|
|
46727
|
-
return {
|
|
46728
|
-
deviceId: device.id,
|
|
46729
|
-
accessoryDeviceIds: children.map((c) => c.id)
|
|
46730
|
-
};
|
|
46731
|
-
},
|
|
46732
|
-
removeDevice: async (id) => {
|
|
46733
|
-
await this.ctx.kernel.devices?.remove(id);
|
|
46242
|
+
adoptDevice: async ({ deviceId, childNativeId, name }) => {
|
|
46243
|
+
if (deviceId !== this.id) throw new Error(`adoptDevice: deviceId mismatch — got ${deviceId}, expected ${this.id}`);
|
|
46244
|
+
return this.adoptGroupContainer(childNativeId, name);
|
|
46734
46245
|
},
|
|
46735
|
-
|
|
46736
|
-
|
|
46737
|
-
|
|
46738
|
-
return devices.loadConfig(id).catch(() => null);
|
|
46246
|
+
releaseDevice: async ({ deviceId, childDeviceId }) => {
|
|
46247
|
+
if (deviceId !== this.id) return;
|
|
46248
|
+
await this.releaseGroupContainer(childDeviceId);
|
|
46739
46249
|
}
|
|
46740
46250
|
});
|
|
46251
|
+
this.setCapSlice(deviceDiscoveryCapability, {
|
|
46252
|
+
discovered: [],
|
|
46253
|
+
lastDiscoveryAt: null,
|
|
46254
|
+
lastError: null,
|
|
46255
|
+
lastFetchedAt: 0
|
|
46256
|
+
});
|
|
46741
46257
|
}
|
|
46742
|
-
|
|
46743
|
-
|
|
46744
|
-
|
|
46745
|
-
|
|
46746
|
-
|
|
46747
|
-
|
|
46748
|
-
|
|
46749
|
-
|
|
46750
|
-
|
|
46751
|
-
|
|
46752
|
-
|
|
46753
|
-
|
|
46754
|
-
|
|
46755
|
-
|
|
46756
|
-
|
|
46757
|
-
|
|
46758
|
-
|
|
46759
|
-
|
|
46760
|
-
|
|
46258
|
+
/** Enumerate the three gateway-group Container candidates from the live client
|
|
46259
|
+
* snapshot, flag `alreadyAdopted` per group, persist into the slice. */
|
|
46260
|
+
async refreshDiscoveryFromClient() {
|
|
46261
|
+
let lastError = null;
|
|
46262
|
+
let discovered = [];
|
|
46263
|
+
try {
|
|
46264
|
+
const sensors = ecowittFacades.get(this.stableId)?.getSensors() ?? this.latestSensors;
|
|
46265
|
+
const adoptedByGroup = await this.adoptedContainerIdByGroup();
|
|
46266
|
+
discovered = buildEcowittGatewayCandidates({
|
|
46267
|
+
gatewayId: this.stableId,
|
|
46268
|
+
gatewayName: this.name,
|
|
46269
|
+
sensors,
|
|
46270
|
+
adoptedDeviceIdByGroup: adoptedByGroup
|
|
46271
|
+
});
|
|
46272
|
+
} catch (err) {
|
|
46273
|
+
lastError = errMsg(err);
|
|
46274
|
+
this.ctx.logger.warn("Ecowitt gateway discovery refresh failed", { meta: { error: lastError } });
|
|
46275
|
+
}
|
|
46276
|
+
this.runtimeState.setCapState(deviceDiscoveryCapability.name, {
|
|
46277
|
+
discovered,
|
|
46278
|
+
lastDiscoveryAt: Date.now(),
|
|
46279
|
+
lastError,
|
|
46280
|
+
lastFetchedAt: Date.now()
|
|
46281
|
+
});
|
|
46761
46282
|
}
|
|
46762
|
-
|
|
46763
|
-
|
|
46283
|
+
/** Map each device group → the adopted group Container's device id (null when
|
|
46284
|
+
* not adopted), by walking this gateway's direct children. */
|
|
46285
|
+
async adoptedContainerIdByGroup() {
|
|
46286
|
+
const out = {};
|
|
46287
|
+
const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
|
|
46288
|
+
for (const child of children) {
|
|
46289
|
+
if (child.type !== DeviceType.Container) continue;
|
|
46290
|
+
const cfg = await this.ctx.devices.loadConfig(child.id).catch(() => ({}));
|
|
46291
|
+
if (cfg["system"] !== "ecowitt") continue;
|
|
46292
|
+
out[configDeviceGroup(cfg)] = child.id;
|
|
46293
|
+
}
|
|
46294
|
+
return out;
|
|
46764
46295
|
}
|
|
46765
|
-
|
|
46766
|
-
|
|
46767
|
-
|
|
46768
|
-
|
|
46769
|
-
|
|
46770
|
-
|
|
46771
|
-
|
|
46772
|
-
|
|
46296
|
+
/** Promote a discovered group candidate to a real group Container child. */
|
|
46297
|
+
async adoptGroupContainer(childNativeId, nameOverride) {
|
|
46298
|
+
const group = ECOWITT_DEVICE_GROUPS.find((g) => groupNativeId(this.stableId, g) === childNativeId);
|
|
46299
|
+
if (group === void 0) throw new Error(`adoptDevice: ${childNativeId} does not match any gateway group`);
|
|
46300
|
+
const existingId = (await this.adoptedContainerIdByGroup())[group];
|
|
46301
|
+
if (typeof existingId === "number") {
|
|
46302
|
+
const existing = (await this.ctx.devices.getAll()).find((d) => d.id === existingId);
|
|
46303
|
+
if (existing) return {
|
|
46304
|
+
deviceId: existing.id,
|
|
46305
|
+
stableId: existing.stableId
|
|
46306
|
+
};
|
|
46307
|
+
}
|
|
46308
|
+
const sensors = (ecowittFacades.get(this.stableId)?.getSensors() ?? this.latestSensors).filter((s) => deviceGroupForSensor(s.category, s.channel) === group).map(sensorToEntry);
|
|
46309
|
+
const name = nameOverride ?? `${this.name} — ${group}`;
|
|
46310
|
+
const config = {
|
|
46311
|
+
gatewayId: this.stableId,
|
|
46312
|
+
deviceGroup: group,
|
|
46313
|
+
sensors,
|
|
46314
|
+
system: "ecowitt",
|
|
46315
|
+
name
|
|
46316
|
+
};
|
|
46317
|
+
const stableId = `${this.stableId}:${group}`;
|
|
46318
|
+
const created = await this.ctx.devices.create(stableId, EcowittContainerDevice, config, this.id, {
|
|
46319
|
+
type: DeviceType.Container,
|
|
46320
|
+
name
|
|
46321
|
+
});
|
|
46322
|
+
this.ctx.logger.info("Ecowitt gateway: adopted group container", {
|
|
46323
|
+
tags: { deviceId: created.id },
|
|
46324
|
+
meta: {
|
|
46325
|
+
group,
|
|
46326
|
+
stableId,
|
|
46327
|
+
sensorCount: sensors.length
|
|
46328
|
+
}
|
|
46329
|
+
});
|
|
46330
|
+
await this.refreshDiscoveryFromClient().catch(() => {});
|
|
46331
|
+
return {
|
|
46332
|
+
deviceId: created.id,
|
|
46333
|
+
stableId
|
|
46334
|
+
};
|
|
46773
46335
|
}
|
|
46774
|
-
|
|
46775
|
-
|
|
46776
|
-
|
|
46336
|
+
async releaseGroupContainer(childDeviceId) {
|
|
46337
|
+
const child = (await this.ctx.devices.getAll()).find((d) => d.id === childDeviceId);
|
|
46338
|
+
if (!child || child.parentDeviceId !== this.id) throw new Error(`releaseDevice: ${childDeviceId} is not a child of gateway ${this.id}`);
|
|
46339
|
+
await this.ctx.devices.remove(childDeviceId);
|
|
46340
|
+
await this.refreshDiscoveryFromClient().catch(() => {});
|
|
46341
|
+
}
|
|
46342
|
+
/** Re-derive every adopted group Container's `sensors[]` from the live
|
|
46343
|
+
* snapshot (group-filtered) and re-persist via `applyDerivedSpec` when it
|
|
46344
|
+
* changed. Best-effort. */
|
|
46345
|
+
async reconcileGroupSensors(sensors) {
|
|
46346
|
+
const byGroup = bucketSensorsByGroup(sensors);
|
|
46347
|
+
const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
|
|
46348
|
+
for (const child of children) {
|
|
46349
|
+
if (child.type !== DeviceType.Container) continue;
|
|
46350
|
+
const cfg = await this.ctx.devices.loadConfig(child.id).catch(() => ({}));
|
|
46351
|
+
if (cfg["system"] !== "ecowitt") continue;
|
|
46352
|
+
const group = configDeviceGroup(cfg);
|
|
46353
|
+
const nextSensors = byGroup.get(group) ?? [];
|
|
46354
|
+
if (sensorsEqual(Array.isArray(cfg["sensors"]) ? cfg["sensors"] : [], nextSensors)) continue;
|
|
46355
|
+
await this.ctx.devices.applyDerivedSpec(child.id, { config: { sensors: nextSensors } });
|
|
46356
|
+
this.ctx.logger.info("Ecowitt gateway: group sensors reconciled", { meta: {
|
|
46357
|
+
deviceId: child.id,
|
|
46358
|
+
group,
|
|
46359
|
+
sensorCount: nextSensors.length
|
|
46360
|
+
} });
|
|
46361
|
+
}
|
|
46777
46362
|
}
|
|
46778
46363
|
};
|
|
46779
|
-
/**
|
|
46364
|
+
/** Resolve `deviceGroup` from a persisted container config (defaults to 'gateway'). */
|
|
46365
|
+
function configDeviceGroup(config) {
|
|
46366
|
+
const g = config["deviceGroup"];
|
|
46367
|
+
return ECOWITT_DEVICE_GROUPS.find((group) => group === g) ?? "gateway";
|
|
46368
|
+
}
|
|
46369
|
+
/** Build the persisted sensor entry (incl. self-describing category) from a live Sensor. */
|
|
46370
|
+
function sensorToEntry(s) {
|
|
46371
|
+
return {
|
|
46372
|
+
sensorId: s.id,
|
|
46373
|
+
quantity: s.quantity,
|
|
46374
|
+
...s.channel !== void 0 ? { channel: s.channel } : {},
|
|
46375
|
+
...s.name !== void 0 ? { name: s.name } : {},
|
|
46376
|
+
...s.category !== void 0 ? { category: s.category } : {}
|
|
46377
|
+
};
|
|
46378
|
+
}
|
|
46379
|
+
/** Bucket live sensors into their device group. */
|
|
46380
|
+
function bucketSensorsByGroup(sensors) {
|
|
46381
|
+
const byGroup = /* @__PURE__ */ new Map();
|
|
46382
|
+
for (const group of ECOWITT_DEVICE_GROUPS) byGroup.set(group, []);
|
|
46383
|
+
for (const s of sensors) {
|
|
46384
|
+
const group = deviceGroupForSensor(s.category, s.channel);
|
|
46385
|
+
byGroup.get(group)?.push(sensorToEntry(s));
|
|
46386
|
+
}
|
|
46387
|
+
return byGroup;
|
|
46388
|
+
}
|
|
46389
|
+
/** Structural equality of two persisted sensor lists (order-independent by id + name). */
|
|
46780
46390
|
function sensorsEqual(a, b) {
|
|
46781
46391
|
if (a.length !== b.length) return false;
|
|
46782
46392
|
const aById = /* @__PURE__ */ new Map();
|
|
@@ -46794,12 +46404,120 @@ function sensorsEqual(a, b) {
|
|
|
46794
46404
|
return true;
|
|
46795
46405
|
}
|
|
46796
46406
|
//#endregion
|
|
46407
|
+
//#region src/addon.ts
|
|
46408
|
+
/**
|
|
46409
|
+
* Ecowitt weather-station device-provider addon — `mode: standalone` (the
|
|
46410
|
+
* Reolink pattern). No broker, no device-adoption cap. A gateway is added as a
|
|
46411
|
+
* DEVICE via the manual-creation form: the CONNECTION (transport / host / port /
|
|
46412
|
+
* password OR listener) lives on the gateway DEVICE config. The created gateway
|
|
46413
|
+
* is a {@link DeviceType.Hub} ({@link EcowittGatewayDevice}) that owns its own
|
|
46414
|
+
* live `@apocaliss92/nodewitt` client and registers `device-discovery` to adopt
|
|
46415
|
+
* its own children: up to THREE group {@link DeviceType.Container} children
|
|
46416
|
+
* (gateway / weather-station / temp-sensor-ch1), each fanning out one typed
|
|
46417
|
+
* sensor child per `Sensor.quantity`.
|
|
46418
|
+
*
|
|
46419
|
+
* `instanceMode: multiple` — many gateways may be added.
|
|
46420
|
+
*/
|
|
46421
|
+
var EcowittProviderAddon = class extends BaseDeviceProvider {
|
|
46422
|
+
addonId = "provider-ecowitt";
|
|
46423
|
+
providerName = "Ecowitt";
|
|
46424
|
+
deviceClasses = {
|
|
46425
|
+
[DeviceType.Hub]: EcowittGatewayDevice,
|
|
46426
|
+
[DeviceType.Container]: EcowittContainerDevice
|
|
46427
|
+
};
|
|
46428
|
+
constructor() {
|
|
46429
|
+
super({});
|
|
46430
|
+
}
|
|
46431
|
+
async supportsDiscovery() {
|
|
46432
|
+
return false;
|
|
46433
|
+
}
|
|
46434
|
+
async supportsManualCreation() {
|
|
46435
|
+
return true;
|
|
46436
|
+
}
|
|
46437
|
+
async onGetCreationSchema(type) {
|
|
46438
|
+
if (type !== DeviceType.Hub) return null;
|
|
46439
|
+
return buildConnectionFormSchema();
|
|
46440
|
+
}
|
|
46441
|
+
async onCreateDevice(type, config) {
|
|
46442
|
+
if (type !== DeviceType.Hub) throw new Error(`Ecowitt provider does not support device type: ${type}`);
|
|
46443
|
+
const name = typeof config["name"] === "string" ? config["name"].trim() : "";
|
|
46444
|
+
if (!name) throw new Error("Gateway name is required");
|
|
46445
|
+
const connection = settingsToEcowittConfig(config);
|
|
46446
|
+
if (connection.transport === "local" && connection.host.trim().length === 0) throw new Error("Gateway host is required for local-poll transport");
|
|
46447
|
+
const stableId = this.generateStableId(DeviceType.Hub, { connection });
|
|
46448
|
+
const manager = new EcowittIntegrationManager({
|
|
46449
|
+
id: stableId,
|
|
46450
|
+
name,
|
|
46451
|
+
connection,
|
|
46452
|
+
logger: this.ctx.logger,
|
|
46453
|
+
onConnected: () => void 0,
|
|
46454
|
+
onDisconnected: () => void 0,
|
|
46455
|
+
onSensorsChanged: () => void 0,
|
|
46456
|
+
onFacadeBuilt: (_id, facade) => ecowittFacades.set(stableId, facade)
|
|
46457
|
+
});
|
|
46458
|
+
try {
|
|
46459
|
+
await manager.start();
|
|
46460
|
+
} catch (err) {
|
|
46461
|
+
this.ctx.logger.warn("Ecowitt create: initial client start failed — device kept", { meta: {
|
|
46462
|
+
stableId,
|
|
46463
|
+
error: errMsg(err)
|
|
46464
|
+
} });
|
|
46465
|
+
}
|
|
46466
|
+
return {
|
|
46467
|
+
meta: {
|
|
46468
|
+
type: DeviceType.Hub,
|
|
46469
|
+
name
|
|
46470
|
+
},
|
|
46471
|
+
config: {
|
|
46472
|
+
connection,
|
|
46473
|
+
system: "ecowitt-gateway"
|
|
46474
|
+
},
|
|
46475
|
+
onAfterCreate: async (device) => {
|
|
46476
|
+
if (device instanceof EcowittGatewayDevice) device.adoptManager(manager);
|
|
46477
|
+
}
|
|
46478
|
+
};
|
|
46479
|
+
}
|
|
46480
|
+
/**
|
|
46481
|
+
* Gateway stableId — derived from the connection (Reolink-style host/identity
|
|
46482
|
+
* key), NOT a broker id. Priority: `stationId` (operator-provided stable id) →
|
|
46483
|
+
* `host` (local transport) → `listen:<port>` (listener transport). Re-adding
|
|
46484
|
+
* the same gateway reuses its persisted row.
|
|
46485
|
+
*/
|
|
46486
|
+
generateStableId(_type, config) {
|
|
46487
|
+
const connection = extractConnection(config);
|
|
46488
|
+
const station = typeof connection?.stationId === "string" ? connection.stationId.trim() : "";
|
|
46489
|
+
if (station.length > 0) return `ecowitt:${slug(station)}`;
|
|
46490
|
+
if (connection?.transport === "local") {
|
|
46491
|
+
const host = connection.host.trim();
|
|
46492
|
+
if (host.length > 0) return `ecowitt:${slug(host)}`;
|
|
46493
|
+
}
|
|
46494
|
+
if (connection?.transport === "listener") return `ecowitt:listen-${connection.listenPort}`;
|
|
46495
|
+
throw new Error("Ecowitt: gateway resolved neither a station id nor a host/listen endpoint — cannot persist a stable row key.");
|
|
46496
|
+
}
|
|
46497
|
+
};
|
|
46498
|
+
/** Narrow the create-spec config's `connection` field to an {@link EcowittConfig}. */
|
|
46499
|
+
function extractConnection(config) {
|
|
46500
|
+
const raw = config?.["connection"];
|
|
46501
|
+
if (typeof raw !== "object" || raw === null) return null;
|
|
46502
|
+
const transport = raw.transport;
|
|
46503
|
+
if (transport !== "local" && transport !== "listener") return null;
|
|
46504
|
+
return settingsToEcowittConfig(raw);
|
|
46505
|
+
}
|
|
46506
|
+
/** Flatten a host / station id into a readable row-key slug. */
|
|
46507
|
+
function slug(value) {
|
|
46508
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
46509
|
+
}
|
|
46510
|
+
//#endregion
|
|
46511
|
+
exports.ECOWITT_DEVICE_GROUPS = ECOWITT_DEVICE_GROUPS;
|
|
46797
46512
|
exports.EcowittProviderAddon = EcowittProviderAddon;
|
|
46798
46513
|
exports.buildConnectionFormSchema = buildConnectionFormSchema;
|
|
46799
|
-
exports.
|
|
46514
|
+
exports.buildEcowittGatewayCandidates = buildEcowittGatewayCandidates;
|
|
46800
46515
|
exports.capForQuantity = capForQuantity;
|
|
46801
|
-
exports.
|
|
46516
|
+
exports.deviceGroupForSensor = deviceGroupForSensor;
|
|
46517
|
+
exports.deviceGroupLabel = deviceGroupLabel;
|
|
46802
46518
|
exports.ecowittConfigSchema = ecowittConfigSchema;
|
|
46519
|
+
exports.ecowittGatewaySchema = ecowittGatewaySchema;
|
|
46520
|
+
exports.groupNativeId = groupNativeId;
|
|
46803
46521
|
exports.sensorLabel = sensorLabel;
|
|
46804
46522
|
exports.settingsToEcowittConfig = settingsToEcowittConfig;
|
|
46805
46523
|
exports.valueFieldForCap = valueFieldForCap;
|