iobroker.sun2000 1.3.0 → 1.4.1-alpha.2
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/README.md +9 -6
- package/io-package.json +27 -27
- package/lib/controls/config_map.js +41 -8
- package/lib/register.js +45 -9
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -64,14 +64,17 @@ browse in the [wiki](https://github.com/bolliy/ioBroker.sun2000/wiki)
|
|
|
64
64
|
Placeholder for the next version (at the beginning of the line):
|
|
65
65
|
### **WORK IN PROGRESS**
|
|
66
66
|
-->
|
|
67
|
-
### 1.
|
|
68
|
-
*
|
|
67
|
+
### 1.4.1-alpha.2 (2025-05-20)
|
|
68
|
+
* update dependencies
|
|
69
|
+
* fix: surplus power during battery discharge
|
|
70
|
+
* control: new control value `sun2000.0.control.usableSurplus.bufferHysteresis`
|
|
69
71
|
|
|
70
|
-
### 1.
|
|
71
|
-
*
|
|
72
|
+
### 1.4.0 (2025-04-07)
|
|
73
|
+
* control: new control state `sun2000.0.control.externalPower` #76
|
|
74
|
+
* fixed issue detected by repository checker #166
|
|
72
75
|
|
|
73
|
-
### 1.
|
|
74
|
-
*
|
|
76
|
+
### 1.3.0 (2025-04-02)
|
|
77
|
+
* usableSurplusPower: new control state `sun2000.0.control.usableSurplus.allowNegativeValue`
|
|
75
78
|
|
|
76
79
|
### 1.2.0 (2025-04-01)
|
|
77
80
|
* dependency and configuration updates
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "sun2000",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.1-alpha.2",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.4.1-alpha.2": {
|
|
7
|
+
"en": "update dependencies\nfix: surplus power during battery discharge\ncontrol: new control value `sun2000.0.control.usableSurplus.bufferHysteresis`",
|
|
8
|
+
"de": "aktualisierung der abhängigkeiten\nfix: überschussleistung während der batterieentladung\nsteuerung: neuer Steuerwert `sun2000.0.control.usableSurplus.bufferHysteresis`",
|
|
9
|
+
"ru": "обновление зависимостей\nисправление: избыточная мощность во время разрядки батареи\nконтроль: новое значение управления 'sun2000.0.control.usableSurplus.bufferHysteresis'",
|
|
10
|
+
"pt": "dependências\ncorreção: energia excedente durante a descarga da bateria\ncontrol: novo valor de controle `sun2000.0.control.usableSurplus.bufferHysteresis`",
|
|
11
|
+
"nl": "afhankelijkheden bijwerken\nfix: overtollig vermogen tijdens batterijontlading\ncontrole: nieuwe controlewaarde ",
|
|
12
|
+
"fr": "mettre à jour les dépendances\nfix: puissance excédentaire pendant la décharge de la batterie\ncontrôle: nouvelle valeur de contrôle `sun2000.0.control.usableSurplus.bufferHystérésis`",
|
|
13
|
+
"it": "aggiornamento dipendenze\nfix: potenza in eccesso durante la scarica della batteria\ncontrollo: nuovo valore di controllo `sun2000.0.control.usableSurplus.bufferHysteresis`",
|
|
14
|
+
"es": "dependencias de actualización\nfijación: superávit durante la descarga de la batería\ncontrol: nuevo valor de control `sun2000.0.control.usableSurplus.bufferHysteresis`",
|
|
15
|
+
"pl": "aktualizacji zależności\nfix: nadwyżka mocy podczas rozładowania akumulatora\ncontrol: nowa wartość kontrolna 'sun2000.0.control.usableSurplus.buverHysteresis'",
|
|
16
|
+
"uk": "оновлення залежності\nвиправити: надлишок живлення при розряді акумулятора\n`sun2000.0.control.usableSurplus.bufferHysteresis`",
|
|
17
|
+
"zh-cn": "更新依赖关系\n固定:电池放电时的剩余功率\n控制: 新的控制值 `sun2000.control.ulySurplus.bufferHysteresis'"
|
|
18
|
+
},
|
|
19
|
+
"1.4.0": {
|
|
20
|
+
"en": "control: new control state `sun2000.0.control.externalPower` #76\nfixed issue detected by repository checker #166",
|
|
21
|
+
"de": "steuerung: neuer Steuerzustand `sun2000.0.control.externalPower` #76\nbehobenes problem erkannt von repository checker #166",
|
|
22
|
+
"ru": "новый контрольный режим «sun2000.0.control.externalPower» #76\nфиксированная проблема, обнаруженная проверкой репозитория #166",
|
|
23
|
+
"pt": "controle: novo estado de controle `sun2000.0.control.externalPower` #76\nproblema fixo detectado pelo verificador de repositório #166",
|
|
24
|
+
"nl": "controle: nieuwe controle staat #76\nvaste uitgifte gedetecteerd door repository checker #166",
|
|
25
|
+
"fr": "contrôle: nouvel état de contrôle `sun2000.0.control.externalPower` #76\nproblème corrigé détecté par le vérificateur de dépôt #166",
|
|
26
|
+
"it": "controllo: nuovo stato di controllo `sun2000.0.control.externalPower` #76\nproblema fisso rilevato da repository checker #166",
|
|
27
|
+
"es": "control: nuevo estado de control `sun2000.0.control.externalPower` #76\nnúmero fijo detectado por el repositorio #166",
|
|
28
|
+
"pl": "control: nowy stan kontroli 'sun2000.0.control.externalPower' # 76\nstała emisja wykryta przez kontroler repozytorium # 166",
|
|
29
|
+
"uk": "контроль: новий стан управління `sun2000.0.control.externalPower` #76\nвиправлено проблему, виявлену репозиторійною перевіркою #166",
|
|
30
|
+
"zh-cn": "控制:新的控制状态`sun 2000.0.control.external Power ' 76号\n仓库检查器检测到的固定问题 # 166"
|
|
31
|
+
},
|
|
6
32
|
"1.3.0": {
|
|
7
33
|
"en": "usableSurplusPower: new control state `sun2000.0.control.usableSurplus.allowNegativeValue`",
|
|
8
34
|
"de": "usableSurplusPower: neuer Steuerzustand `sun2000.0.control.usableSurplus.allowNegativeValue `",
|
|
@@ -42,32 +68,6 @@
|
|
|
42
68
|
"uk": "тестовий реліз",
|
|
43
69
|
"zh-cn": "测试发布"
|
|
44
70
|
},
|
|
45
|
-
"1.2.1": {
|
|
46
|
-
"en": "dependency update",
|
|
47
|
-
"de": "aktualisierung der abhängigkeit",
|
|
48
|
-
"ru": "обновление зависимостей",
|
|
49
|
-
"pt": "atualização de dependência",
|
|
50
|
-
"nl": "afhankelijkheidsupdate",
|
|
51
|
-
"fr": "mise à jour de la dépendance",
|
|
52
|
-
"it": "aggiornamento della dipendenza",
|
|
53
|
-
"es": "actualización de la dependencia",
|
|
54
|
-
"pl": "aktualizacja zależności",
|
|
55
|
-
"uk": "оновлення залежності",
|
|
56
|
-
"zh-cn": "依赖性更新"
|
|
57
|
-
},
|
|
58
|
-
"1.2.0": {
|
|
59
|
-
"en": "dependency and configuration updates updates\nfix: Object state sDongle.OSVersion to short\nnew setting path for controlling the usableSurplus parameters `control.usableSurplus`",
|
|
60
|
-
"de": "abhängigkeit und konfiguration updates\nfix: Objektzustand sDongle. OSVersion kurz\nneuer Einstellpfad zur Steuerung des Nutzbar Überschüssige Parameter `control.usableSurplus `",
|
|
61
|
-
"ru": "обновления зависимостей и конфигураций\nобсуждение Object State sDongle. OSVersion to Short\nновый путь настройки для контроля полезного Дополнительные параметры 'control.usable Surplus пункт",
|
|
62
|
-
"pt": "atualizações de dependência e configuração\ncorreção: Objeto estado sDongle. OSVersion to short\nnovo caminho de configuração para controlar a usável Parâmetros do Surplus `control.usableSurplus \"",
|
|
63
|
-
"nl": "afhankelijkheid en configuratie updates\nfix: Object state sDongle. OSVersion to short\nnieuw instellingspad voor het bedienen van het bruikbare Overschotparameters Controle.bruikbaarSurplus Wat",
|
|
64
|
-
"fr": "mises à jour de la dépendance et de la configuration\ncorrection : État de l'objet sDongle. OSVersion à court\nnouveau chemin de réglage pour contrôler l'utilisable Paramètres excédentaires \"control.usableExcédent \"",
|
|
65
|
-
"it": "aggiornamenti di dipendenza e configurazione\ncorrezione: SDongle di stato dell'oggetto. OSVersione a breve\nnuovo percorso di regolazione per il controllo dell'utilizzabile Parametri in eccesso `control.usableSurplus #",
|
|
66
|
-
"es": "actualizaciones de dependencia y configuración\nresolver: \"Objeto estado sDongle\". OSVersion to short\nnuevo camino de configuración para controlar el usable Parámetros adicionales `control.usableSurplus `",
|
|
67
|
-
"pl": "aktualizacje zależności i konfiguracji\nfix: Object state sDongle. OSVersion to short\nnowa ścieżka ustawień do sterowania użytecznym Parametry nadwyżki 'control.usableSurplus'",
|
|
68
|
-
"uk": "оновлення залежності та конфігурації\nвиправити: Об'єктний стан sDongle. OSVersion до короткого\nновий шлях налаштування для контролю Параметри Surplus `control.usableSurplus й",
|
|
69
|
-
"zh-cn": "依赖性和配置更新\n固定:对象状态 sDongle。 OSVsion 缩写\n用于控制可用的新设置路径 盈余参数 `控制.可使用余额' `"
|
|
70
|
-
},
|
|
71
71
|
"1.1.0": {
|
|
72
72
|
"en": "startupTime/shutdownTime are read from the inverter as local time and not as UTC - fixed times are saved in path `derived`\nnew state [usableSurplusPower](https://github.com/bolliy/ioBroker.sun2000/wiki/%C3%9Cberschuss-(surplus))\ncontrol: checking and rounding integer numbers\nbetter solution for math rounding",
|
|
73
73
|
"de": "startzeit/Shutdown Zeit wird vom Wechselrichter als Ortszeit gelesen und nicht als UTC - Festzeiten werden im Pfad gespeichert `derived `\nneuer Staat [usableSurplusPower](https://github.com/bolliy/ioBroker.sun2000/wiki/%C3%9Cberschuss-(surplus))\nsteuerung: überprüfung und rundung ganzzahliger zahlen\nbessere lösung für matherundung",
|
|
@@ -26,6 +26,7 @@ class ConfigMap {
|
|
|
26
26
|
if (event.value < 0) {
|
|
27
27
|
event.value = 0;
|
|
28
28
|
}
|
|
29
|
+
event.value = Math.round(event.value);
|
|
29
30
|
return true;
|
|
30
31
|
},
|
|
31
32
|
},
|
|
@@ -45,6 +46,7 @@ class ConfigMap {
|
|
|
45
46
|
if (event.value < 0) {
|
|
46
47
|
event.value = 0;
|
|
47
48
|
}
|
|
49
|
+
event.value = Math.round(event.value);
|
|
48
50
|
return true;
|
|
49
51
|
},
|
|
50
52
|
},
|
|
@@ -64,6 +66,7 @@ class ConfigMap {
|
|
|
64
66
|
if (event.value < 0) {
|
|
65
67
|
event.value = 0;
|
|
66
68
|
}
|
|
69
|
+
event.value = Math.round(event.value);
|
|
67
70
|
return true;
|
|
68
71
|
},
|
|
69
72
|
},
|
|
@@ -83,6 +86,27 @@ class ConfigMap {
|
|
|
83
86
|
if (event.value < -1000) {
|
|
84
87
|
event.value = -1000;
|
|
85
88
|
}
|
|
89
|
+
event.value = Math.round(event.value);
|
|
90
|
+
return true;
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
state: {
|
|
95
|
+
id: 'usableSurplus.bufferHysteresis',
|
|
96
|
+
name: 'BufferSoc hysteresis',
|
|
97
|
+
type: 'number',
|
|
98
|
+
unit: '%',
|
|
99
|
+
role: 'level',
|
|
100
|
+
desc: 'Hysteresis of the bufferSoc [0..10%]',
|
|
101
|
+
},
|
|
102
|
+
fn: async event => {
|
|
103
|
+
if (event.value > 10) {
|
|
104
|
+
event.value = 10;
|
|
105
|
+
}
|
|
106
|
+
if (event.value < 0) {
|
|
107
|
+
event.value = 0;
|
|
108
|
+
}
|
|
109
|
+
event.value = Math.round(event.value);
|
|
86
110
|
return true;
|
|
87
111
|
},
|
|
88
112
|
},
|
|
@@ -101,6 +125,21 @@ class ConfigMap {
|
|
|
101
125
|
return true;
|
|
102
126
|
},
|
|
103
127
|
},
|
|
128
|
+
{
|
|
129
|
+
state: {
|
|
130
|
+
id: 'externalPower',
|
|
131
|
+
name: 'external power',
|
|
132
|
+
type: 'number',
|
|
133
|
+
role: 'level.power',
|
|
134
|
+
unit: 'kW',
|
|
135
|
+
desc: 'external energy production',
|
|
136
|
+
},
|
|
137
|
+
fn: async event => {
|
|
138
|
+
if (event.value < 0) event.values = 0;
|
|
139
|
+
event.value = Math.round(event.value * 1000) / 1000;
|
|
140
|
+
return true;
|
|
141
|
+
},
|
|
142
|
+
},
|
|
104
143
|
];
|
|
105
144
|
}
|
|
106
145
|
|
|
@@ -121,11 +160,6 @@ class ConfigMap {
|
|
|
121
160
|
}
|
|
122
161
|
this.adapter.subscribeStates(`${this._path}.*`);
|
|
123
162
|
this._initialized = true;
|
|
124
|
-
/*
|
|
125
|
-
if (this._initialized) {
|
|
126
|
-
this.log.info('Control: Config map initialized');
|
|
127
|
-
}
|
|
128
|
-
*/
|
|
129
163
|
}
|
|
130
164
|
|
|
131
165
|
/**
|
|
@@ -150,7 +184,7 @@ class ConfigMap {
|
|
|
150
184
|
const service = this._serviceMap.get(id);
|
|
151
185
|
if (state && service) {
|
|
152
186
|
if (state.val !== null) {
|
|
153
|
-
if (!state.ack) this.log.
|
|
187
|
+
if (!state.ack) this.log.debug(`Control: Event - state: ${this._path}.${id} changed: ${state.val} ack: ${state.ack}`);
|
|
154
188
|
const event = this._eventMap.get(id);
|
|
155
189
|
if (event) {
|
|
156
190
|
event.value = state.val;
|
|
@@ -185,11 +219,10 @@ class ConfigMap {
|
|
|
185
219
|
const service = this._serviceMap.get(event.id);
|
|
186
220
|
if (event.value !== null && service.fn) {
|
|
187
221
|
if (service.state.type === 'number') {
|
|
188
|
-
if (!this.isNumber(event)) {
|
|
222
|
+
if (!this.isNumber(event, false)) {
|
|
189
223
|
this.log.warn(`Control: Event is discarded because the value ${event.value} is not a number. State: ${this._path}.${event.id}`);
|
|
190
224
|
return;
|
|
191
225
|
}
|
|
192
|
-
event.value = Math.round(event.value * 100) / 100;
|
|
193
226
|
}
|
|
194
227
|
if (await service.fn(event)) {
|
|
195
228
|
await this.adapter.setState(`${this._path}.${event.id}`, { val: event.value, ack: true });
|
package/lib/register.js
CHANGED
|
@@ -42,38 +42,68 @@ class Registers {
|
|
|
42
42
|
role: 'value.power',
|
|
43
43
|
},
|
|
44
44
|
{ id: 'collected.usableSurplusPower', name: 'usable surplus power', type: 'number', unit: 'kW', role: 'value.power' },
|
|
45
|
+
{ id: 'collected.externalPower', name: 'external power', type: 'number', unit: 'kW', role: 'value.power' },
|
|
46
|
+
//{ id: 'collected.ratedPower', name: 'rated power', type: 'number', unit: 'kW', role: 'value.power' },
|
|
45
47
|
],
|
|
46
48
|
fn: inverters => {
|
|
47
49
|
let actPower = 0;
|
|
48
50
|
let inPower = 0;
|
|
49
51
|
let inPowerEff = 0;
|
|
50
52
|
let chargeDischarge = 0;
|
|
53
|
+
let ratedPower = 0;
|
|
51
54
|
|
|
52
55
|
function calcUsableSurplus() {
|
|
53
56
|
let surplusPower = 0;
|
|
54
57
|
if (this.adapter.control) {
|
|
55
58
|
surplusPower += meterPower;
|
|
56
|
-
|
|
59
|
+
|
|
60
|
+
let minSoc = this.adapter.control.get('usableSurplus.minSoc')?.value ?? 0;
|
|
57
61
|
const bufferSoc = this.adapter.control.get('usableSurplus.bufferSoc')?.value ?? 0;
|
|
58
62
|
const residualPower = this.adapter.control.get('usableSurplus.residualPower')?.value ?? 0;
|
|
59
63
|
const soc = this.stateCache.get('collected.SOC')?.value ?? 0;
|
|
60
64
|
const allowNegativeValue = this.adapter.control.get('usableSurplus.allowNegativeValue')?.value ?? false;
|
|
65
|
+
const hysterese = this.adapter.control.get('usableSurplus.bufferHysteresis')?.value ?? 0;
|
|
66
|
+
// chargeDischarge
|
|
67
|
+
if (chargeDischarge < 0) {
|
|
68
|
+
surplusPower += chargeDischarge;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (bufferSoc > 0) {
|
|
72
|
+
let threshold = hysterese / 2;
|
|
73
|
+
if (minSoc > bufferSoc - threshold) {
|
|
74
|
+
minSoc = bufferSoc - threshold;
|
|
75
|
+
}
|
|
76
|
+
if (this.bufferOn) {
|
|
77
|
+
threshold = -threshold;
|
|
78
|
+
}
|
|
79
|
+
if (soc >= bufferSoc + threshold) {
|
|
80
|
+
this.bufferOn = true;
|
|
81
|
+
const bufferPower = this.adapter.control.get('usableSurplus.bufferPower')?.value ?? 0;
|
|
82
|
+
surplusPower += bufferPower / 1000;
|
|
83
|
+
} else {
|
|
84
|
+
this.bufferOn = false;
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
this.bufferOn = false;
|
|
88
|
+
}
|
|
61
89
|
|
|
62
90
|
if (soc >= minSoc) {
|
|
63
|
-
surplusPower += chargeDischarge;
|
|
64
|
-
if (
|
|
91
|
+
if (chargeDischarge > 0) surplusPower += chargeDischarge;
|
|
92
|
+
if (!this.bufferOn) {
|
|
65
93
|
surplusPower -= residualPower / 1000;
|
|
66
94
|
}
|
|
67
95
|
}
|
|
68
|
-
if (soc >= bufferSoc && bufferSoc > 0) {
|
|
69
|
-
const bufferPower = this.adapter.control.get('usableSurplus.bufferPower')?.value ?? 0;
|
|
70
|
-
surplusPower += bufferPower / 1000;
|
|
71
|
-
}
|
|
72
96
|
|
|
73
|
-
|
|
97
|
+
if (surplusPower > ratedPower) {
|
|
98
|
+
surplusPower = ratedPower;
|
|
99
|
+
}
|
|
74
100
|
if (!allowNegativeValue) {
|
|
75
101
|
if (surplusPower < 0.1) surplusPower = 0;
|
|
76
102
|
}
|
|
103
|
+
|
|
104
|
+
this.adapter.log.debug(
|
|
105
|
+
`### Caculate usableSurplus power ${surplusPower} bufferOn ${this.bufferOn} soc ${soc} minSoc ${minSoc} bufferSoc ${bufferSoc} threshold ${hysterese / 2}`,
|
|
106
|
+
);
|
|
77
107
|
}
|
|
78
108
|
return surplusPower;
|
|
79
109
|
}
|
|
@@ -86,12 +116,16 @@ class Registers {
|
|
|
86
116
|
inPower += this.stateCache.get(`${inverter.path}.inputPower`)?.value ?? 0;
|
|
87
117
|
inPowerEff += this.stateCache.get(`${inverter.path}.derived.inputPowerWithEfficiencyLoss`)?.value ?? 0;
|
|
88
118
|
chargeDischarge += this.stateCache.get(`${inverter.path}.battery.chargeDischargePower`)?.value ?? 0;
|
|
119
|
+
ratedPower += this.stateCache.get(`${inverter.path}.info.ratedPower`)?.value ?? 0;
|
|
120
|
+
//maxChargePower = this.stateCache.get(`${inverter.path}.battery.maximumChargingPower`)?.value ?? 0;
|
|
89
121
|
}
|
|
90
122
|
|
|
91
123
|
const meterPower = this.stateCache.get('meter.activePower')?.value ?? 0;
|
|
124
|
+
const extPower = this.adapter.control.get('externalPower')?.value ?? 0;
|
|
125
|
+
//extPower = extPower / 1000;
|
|
92
126
|
|
|
93
127
|
//Zu geringe Erzeugerenegie
|
|
94
|
-
let houseConsum = actPower - meterPower;
|
|
128
|
+
let houseConsum = actPower - meterPower + extPower;
|
|
95
129
|
if (houseConsum < 0) {
|
|
96
130
|
houseConsum = 0;
|
|
97
131
|
}
|
|
@@ -106,6 +140,8 @@ class Registers {
|
|
|
106
140
|
this.stateCache.set('collected.usableSurplusPower', surplusPower, {
|
|
107
141
|
type: 'number',
|
|
108
142
|
});
|
|
143
|
+
this.stateCache.set('collected.externalPower', extPower, { type: 'number' });
|
|
144
|
+
//this.stateCache.set('collected.ratedPower', ratedPower, { type: 'number' });
|
|
109
145
|
},
|
|
110
146
|
},
|
|
111
147
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.sun2000",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1-alpha.2",
|
|
4
4
|
"description": "sun2000",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "bolliy",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@iobroker/adapter-core": "^3.2.3",
|
|
31
|
-
"modbus-serial": "^8.0.
|
|
31
|
+
"modbus-serial": "^8.0.21",
|
|
32
32
|
"suncalc2": "^1.8.1",
|
|
33
33
|
"tcp-port-used": "^1.0.2"
|
|
34
34
|
},
|
|
@@ -38,26 +38,26 @@
|
|
|
38
38
|
"@alcalzone/release-script-plugin-license": "^3.7.0",
|
|
39
39
|
"@alcalzone/release-script-plugin-manual-review": "^3.7.0",
|
|
40
40
|
"@eslint/eslintrc": "^3.3.1",
|
|
41
|
-
"@eslint/js": "^9.
|
|
41
|
+
"@eslint/js": "^9.25.0",
|
|
42
42
|
"@iobroker/adapter-dev": "^1.4.0",
|
|
43
|
-
"@iobroker/eslint-config": "^
|
|
43
|
+
"@iobroker/eslint-config": "^2.0.2",
|
|
44
44
|
"@iobroker/testing": "^5.0.4",
|
|
45
45
|
"@tsconfig/node20": "^20.1.5",
|
|
46
46
|
"@types/chai": "^4.3.20",
|
|
47
47
|
"@types/chai-as-promised": "^7.1.8",
|
|
48
48
|
"@types/mocha": "^10.0.10",
|
|
49
|
-
"@types/node": "^22.
|
|
49
|
+
"@types/node": "^22.15.24",
|
|
50
50
|
"@types/proxyquire": "^1.3.31",
|
|
51
51
|
"@types/sinon": "^17.0.4",
|
|
52
52
|
"@types/sinon-chai": "^3.2.12",
|
|
53
53
|
"chai": "^4.5.0",
|
|
54
54
|
"chai-as-promised": "^7.1.2",
|
|
55
|
-
"globals": "^
|
|
56
|
-
"mocha": "^11.
|
|
55
|
+
"globals": "^16.2.0",
|
|
56
|
+
"mocha": "^11.5.0",
|
|
57
57
|
"proxyquire": "^2.1.3",
|
|
58
58
|
"sinon": "^19.0.5",
|
|
59
59
|
"sinon-chai": "^3.7.0",
|
|
60
|
-
"typescript": "~5.
|
|
60
|
+
"typescript": "~5.8.3"
|
|
61
61
|
},
|
|
62
62
|
"main": "main.js",
|
|
63
63
|
"files": [
|