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