iobroker.parcelapp 0.2.1 → 0.2.3

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 CHANGED
@@ -94,6 +94,12 @@ parcelapp.0.
94
94
 
95
95
  ## Changelog
96
96
 
97
+ ### 0.2.3 (2026-03-28)
98
+ - Fix carrier name cache not retrying after initial failure
99
+
100
+ ### 0.2.2 (2026-03-28)
101
+ - Adapter-managed timers, CI on Windows/macOS, consistent i18n keys, full MIT license in README
102
+
97
103
  ### 0.2.1 (2026-03-25)
98
104
  - Robust error handling: rate limit detection, connection error deduplication, poll throttling
99
105
 
@@ -111,12 +117,6 @@ parcelapp.0.
111
117
  ### 0.1.3 (2026-03-24)
112
118
  - Added Dependabot automerge workflow
113
119
 
114
- ### 0.1.2 (2026-03-23)
115
- - Updated devDependencies
116
-
117
- ### 0.1.1 (2026-03-23)
118
- - Redesigned adapter logo
119
-
120
120
  Older changelog: [CHANGELOG.md](CHANGELOG.md)
121
121
 
122
122
  ---
@@ -137,10 +137,28 @@ This adapter is free and open source. If you find it useful, consider buying me
137
137
 
138
138
  ## License
139
139
 
140
- MIT License - see [LICENSE](LICENSE)
140
+ MIT License
141
141
 
142
142
  Copyright (c) 2026 krobi <krobi@power-dreams.com>
143
143
 
144
+ Permission is hereby granted, free of charge, to any person obtaining a copy
145
+ of this software and associated documentation files (the "Software"), to deal
146
+ in the Software without restriction, including without limitation the rights
147
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
148
+ copies of the Software, and to permit persons to whom the Software is
149
+ furnished to do so, subject to the following conditions:
150
+
151
+ The above copyright notice and this permission notice shall be included in all
152
+ copies or substantial portions of the Software.
153
+
154
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
155
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
156
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
157
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
158
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
159
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
160
+ SOFTWARE.
161
+
144
162
  ---
145
163
 
146
164
  *Developed with assistance from Claude.ai*
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Unterstütze diesen Adapter",
2
+ "supportHeader": "Unterstütze diesen Adapter",
3
3
  "aboutInfo": "Dieser Adapter ist kostenlos und Open Source. Wenn du ihn nützlich findest, unterstütze die Entwicklung gerne mit einer kleinen Spende.",
4
- "aboutTab": "Info",
5
4
  "apiKeyInfo": "Gib deinen parcel.app API-Schlüssel ein. Ein Premium-Abo wird benötigt. Den Schlüssel findest du unter web.parcelapp.net → API-Bereich.",
6
5
  "btn_checkConnection": "Verbindung testen",
7
6
  "donateKofi": "Unterstützen auf Ko-fi",
@@ -16,8 +16,7 @@
16
16
  "tooltip_language": "Language for delivery status labels (e.g. 'In Transit' vs 'Unterwegs')",
17
17
  "lang_de": "German",
18
18
  "lang_en": "English",
19
- "aboutTab": "About",
20
- "aboutHeader": "Support this Adapter",
19
+ "supportHeader": "Support this Adapter",
21
20
  "aboutInfo": "This adapter is free and open source. If you find it useful, please consider supporting its development with a small donation.",
22
21
  "donateKofi": "Support on Ko-fi",
23
22
  "donatePaypal": "Donate via PayPal"
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Apoya este adaptador",
2
+ "supportHeader": "Apoya este adaptador",
3
3
  "aboutInfo": "Este adaptador es gratuito y de código abierto. Si lo encuentras útil, considera apoyar el desarrollo con una pequeña donación.",
4
- "aboutTab": "Acerca de",
5
4
  "apiKeyInfo": "Introduce tu clave API de parcel.app. Se requiere una suscripción Premium. Obtén tu clave en web.parcelapp.net → panel API.",
6
5
  "btn_checkConnection": "Probar conexión",
7
6
  "donateKofi": "Apoyar en Ko-fi",
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Soutenez cet adaptateur",
2
+ "supportHeader": "Soutenez cet adaptateur",
3
3
  "aboutInfo": "Cet adaptateur est gratuit et open source. Si vous le trouvez utile, pensez à soutenir son développement par un petit don.",
4
- "aboutTab": "À propos",
5
4
  "apiKeyInfo": "Entrez votre clé API parcel.app. Un abonnement Premium est requis. Obtenez votre clé sur web.parcelapp.net → panneau API.",
6
5
  "btn_checkConnection": "Tester la connexion",
7
6
  "donateKofi": "Soutenir sur Ko-fi",
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Supporta questo adattatore",
2
+ "supportHeader": "Supporta questo adattatore",
3
3
  "aboutInfo": "Questo adattatore è gratuito e open source. Se lo trovi utile, considera di supportare lo sviluppo con una piccola donazione.",
4
- "aboutTab": "Info",
5
4
  "apiKeyInfo": "Inserisci la tua chiave API parcel.app. È necessario un abbonamento Premium. Ottieni la tua chiave su web.parcelapp.net → pannello API.",
6
5
  "btn_checkConnection": "Testa connessione",
7
6
  "donateKofi": "Supporta su Ko-fi",
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Steun deze adapter",
2
+ "supportHeader": "Steun deze adapter",
3
3
  "aboutInfo": "Deze adapter is gratis en open source. Als je hem nuttig vindt, overweeg dan de ontwikkeling te steunen met een kleine donatie.",
4
- "aboutTab": "Over",
5
4
  "apiKeyInfo": "Voer je parcel.app API-sleutel in. Een Premium-abonnement is vereist. Haal je sleutel op via web.parcelapp.net → API-paneel.",
6
5
  "btn_checkConnection": "Verbinding testen",
7
6
  "donateKofi": "Steunen op Ko-fi",
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Wesprzyj ten adapter",
2
+ "supportHeader": "Wesprzyj ten adapter",
3
3
  "aboutInfo": "Ten adapter jest darmowy i open source. Jeśli uważasz go za przydatny, rozważ wsparcie rozwoju niewielką darowizną.",
4
- "aboutTab": "O programie",
5
4
  "apiKeyInfo": "Wprowadź klucz API parcel.app. Wymagana subskrypcja Premium. Uzyskaj klucz na web.parcelapp.net → panel API.",
6
5
  "btn_checkConnection": "Testuj połączenie",
7
6
  "donateKofi": "Wesprzyj na Ko-fi",
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Apoie este adaptador",
2
+ "supportHeader": "Apoie este adaptador",
3
3
  "aboutInfo": "Este adaptador é gratuito e de código aberto. Se você o achar útil, considere apoiar o desenvolvimento com uma pequena doação.",
4
- "aboutTab": "Sobre",
5
4
  "apiKeyInfo": "Insira sua chave API do parcel.app. É necessária uma assinatura Premium. Obtenha sua chave em web.parcelapp.net → painel API.",
6
5
  "btn_checkConnection": "Testar Conexão",
7
6
  "donateKofi": "Apoiar no Ko-fi",
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Поддержите этот адаптер",
2
+ "supportHeader": "Поддержите этот адаптер",
3
3
  "aboutInfo": "Этот адаптер бесплатный и с открытым исходным кодом. Если он вам полезен, поддержите разработку небольшим пожертвованием.",
4
- "aboutTab": "О программе",
5
4
  "apiKeyInfo": "Введите API-ключ parcel.app. Требуется Premium-подписка. Получите ключ на web.parcelapp.net → раздел API.",
6
5
  "btn_checkConnection": "Проверить соединение",
7
6
  "donateKofi": "Поддержать на Ko-fi",
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "Підтримайте цей адаптер",
2
+ "supportHeader": "Підтримайте цей адаптер",
3
3
  "aboutInfo": "Цей адаптер безкоштовний та з відкритим кодом. Якщо він вам корисний, підтримайте розробку невеликою пожертвою.",
4
- "aboutTab": "Про програму",
5
4
  "apiKeyInfo": "Введіть ваш API-ключ parcel.app. Потрібна Premium-підписка. Отримайте ключ на web.parcelapp.net → панель API.",
6
5
  "btn_checkConnection": "Перевірити з'єднання",
7
6
  "donateKofi": "Підтримати на Ko-fi",
@@ -1,7 +1,6 @@
1
1
  {
2
- "aboutHeader": "支持此适配器",
2
+ "supportHeader": "支持此适配器",
3
3
  "aboutInfo": "此适配器免费且开源。如果您觉得有用,请考虑通过小额捐赠支持开发。",
4
- "aboutTab": "关于",
5
4
  "apiKeyInfo": "输入你的 parcel.app API 密钥。需要 Premium 订阅。在 web.parcelapp.net → API 面板获取密钥。",
6
5
  "btn_checkConnection": "测试连接",
7
6
  "donateKofi": "在 Ko-fi 上支持",
@@ -79,13 +79,13 @@
79
79
  ],
80
80
  "xs": 12, "sm": 12, "md": 6, "lg": 6, "xl": 6
81
81
  },
82
- "aboutHeader": {
82
+ "_supportHeader": {
83
83
  "newLine": true,
84
84
  "type": "header",
85
- "text": "aboutHeader",
85
+ "text": "supportHeader",
86
86
  "size": 5
87
87
  },
88
- "aboutInfo": {
88
+ "_aboutInfo": {
89
89
  "type": "staticText",
90
90
  "text": "aboutInfo",
91
91
  "xs": 12, "sm": 12, "md": 12, "lg": 12, "xl": 12,
@@ -1 +1 @@
1
- {"version":3,"file":"parcel-client.d.ts","sourceRoot":"","sources":["../../src/lib/parcel-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACX,MAAM,SAAS,CAAC;AAKjB,yCAAyC;AACzC,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA2B;IAE/C,2CAA2C;gBAC/B,MAAM,EAAE,MAAM;IAI1B;;;;OAIG;IACG,aAAa,CACjB,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,OAAO,CAAC,cAAc,EAAE,CAAC;IAqB5B;;;;OAIG;IACG,WAAW,CACf,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B,kDAAkD;IAC5C,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC;IAkB5C;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,mCAAmC;IAC7B,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAatE;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;CAiFhB"}
1
+ {"version":3,"file":"parcel-client.d.ts","sourceRoot":"","sources":["../../src/lib/parcel-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACX,MAAM,SAAS,CAAC;AAKjB,yCAAyC;AACzC,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA2B;IAE/C,2CAA2C;gBAC/B,MAAM,EAAE,MAAM;IAI1B;;;;OAIG;IACG,aAAa,CACjB,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,OAAO,CAAC,cAAc,EAAE,CAAC;IAqB5B;;;;OAIG;IACG,WAAW,CACf,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B,kDAAkD;IAC5C,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC;IAmB5C;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,mCAAmC;IAC7B,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAatE;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;CAiFhB"}
@@ -77,7 +77,8 @@ class ParcelClient {
77
77
  this.carrierCache = await this.request("GET", "/supported_carriers.json", false);
78
78
  }
79
79
  catch {
80
- this.carrierCache = {};
80
+ // Return empty map but don't cache it — allow retry next time
81
+ return {};
81
82
  }
82
83
  return this.carrierCache;
83
84
  }
package/build/main.js CHANGED
@@ -45,7 +45,7 @@ const MIN_POLL_GAP_MS = 60_000; // Minimum 60s between polls
45
45
  class ParcelappAdapter extends utils.Adapter {
46
46
  client = null;
47
47
  stateManager = null;
48
- pollTimer = null;
48
+ pollTimer = undefined;
49
49
  isPolling = false;
50
50
  lastPollTime = 0;
51
51
  rateLimitedUntil = 0;
@@ -78,13 +78,13 @@ class ParcelappAdapter extends utils.Adapter {
78
78
  // Set up recurring poll
79
79
  const interval = Math.max(MIN_POLL_INTERVAL, Math.min(MAX_POLL_INTERVAL, this.config.pollInterval ?? DEFAULT_POLL_INTERVAL));
80
80
  const intervalMs = interval * 60 * 1000;
81
- this.pollTimer = setInterval(() => void this.poll(), intervalMs);
81
+ this.pollTimer = this.setInterval(() => void this.poll(), intervalMs);
82
82
  this.log.info(`Parcel tracking started — polling every ${interval} minutes`);
83
83
  }
84
84
  onUnload(callback) {
85
85
  if (this.pollTimer) {
86
- clearInterval(this.pollTimer);
87
- this.pollTimer = null;
86
+ this.clearInterval(this.pollTimer);
87
+ this.pollTimer = undefined;
88
88
  }
89
89
  void this.setState("info.connection", { val: false, ack: true });
90
90
  callback();
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "parcelapp",
4
- "version": "0.2.1",
4
+ "version": "0.2.3",
5
5
  "news": {
6
+ "0.2.3": {
7
+ "en": "Fix carrier name cache not retrying after initial failure",
8
+ "de": "Fix: Carrier-Namen-Cache versucht nach initialem Fehler erneut zu laden",
9
+ "ru": "Исправление: кэш имен перевозчиков повторяет попытку после начального сбоя",
10
+ "pt": "Correção: cache de nomes de transportadoras tenta novamente após falha inicial",
11
+ "nl": "Fix: carrier naam cache probeert opnieuw na initiële fout",
12
+ "fr": "Correction: le cache des noms de transporteurs réessaie après un échec initial",
13
+ "it": "Fix: la cache dei nomi dei corrieri riprova dopo un errore iniziale",
14
+ "es": "Corrección: la caché de nombres de transportistas reintenta tras fallo inicial",
15
+ "pl": "Poprawka: pamięć podręczna nazw przewoźników ponawia próbę po początkowym błędzie",
16
+ "uk": "Виправлення: кеш назв перевізників повторює спробу після початкової помилки",
17
+ "zh-cn": "修复:运营商名称缓存在初次失败后重新尝试加载"
18
+ },
19
+ "0.2.2": {
20
+ "en": "Adapter-managed timers, CI on Windows/macOS, consistent admin UI i18n keys, full MIT license in README",
21
+ "de": "Adapter-verwaltete Timer, CI auf Windows/macOS, konsistente Admin-UI i18n-Keys, vollständige MIT-Lizenz in README",
22
+ "ru": "Таймеры, управляемые адаптером, CI на Windows/macOS, согласованные ключи i18n в Admin UI, полная лицензия MIT в README",
23
+ "pt": "Timers gerenciados pelo adaptador, CI no Windows/macOS, chaves i18n consistentes na UI admin, licença MIT completa no README",
24
+ "nl": "Adapter-beheerde timers, CI op Windows/macOS, consistente admin-UI i18n-sleutels, volledige MIT-licentie in README",
25
+ "fr": "Minuteries gérées par l adaptateur, CI sur Windows/macOS, clés i18n cohérentes dans l interface admin, licence MIT complète dans README",
26
+ "it": "Timer gestiti dall adattatore, CI su Windows/macOS, chiavi i18n coerenti nell interfaccia admin, licenza MIT completa nel README",
27
+ "es": "Temporizadores gestionados por el adaptador, CI en Windows/macOS, claves i18n consistentes en la UI de admin, licencia MIT completa en README",
28
+ "pl": "Timery zarządzane przez adapter, CI na Windows/macOS, spójne klucze i18n w admin UI, pełna licencja MIT w README",
29
+ "uk": "Таймери, керовані адаптером, CI на Windows/macOS, узгоджені ключі i18n в Admin UI, повна ліцензія MIT в README",
30
+ "zh-cn": "适配器管理的定时器,Windows/macOS CI,一致的管理界面 i18n 键,README 中的完整 MIT 许可证"
31
+ },
6
32
  "0.2.1": {
7
33
  "en": "Robust error handling: API rate limit detection, connection error deduplication, poll throttling",
8
34
  "de": "Robuste Fehlerbehandlung: Erkennung von API-Ratenlimits, Deduplizierung von Verbindungsfehlern, Polling-Drosselung",
@@ -67,32 +93,6 @@
67
93
  "pl": "Dodano workflow automerge Dependabot, losowy harmonogram",
68
94
  "uk": "Додано робочий процес автозлиття Dependabot, рандомізований розклад",
69
95
  "zh-cn": "添加 Dependabot 自动合并工作流,随机化调度"
70
- },
71
- "0.1.2": {
72
- "en": "Updated devDependencies",
73
- "de": "Entwicklungsabhängigkeiten aktualisiert",
74
- "ru": "Обновлены зависимости разработки",
75
- "pt": "Dependências de desenvolvimento atualizadas",
76
- "nl": "Ontwikkelingsafhankelijkheden bijgewerkt",
77
- "fr": "Dépendances de développement mises à jour",
78
- "it": "Dipendenze di sviluppo aggiornate",
79
- "es": "Dependencias de desarrollo actualizadas",
80
- "pl": "Zaktualizowano zależności deweloperskie",
81
- "uk": "Оновлено залежності розробки",
82
- "zh-cn": "更新开发依赖"
83
- },
84
- "0.1.1": {
85
- "en": "Redesigned adapter logo, fixed repochecker issues",
86
- "de": "Adapter-Logo überarbeitet, Repochecker-Probleme behoben",
87
- "ru": "Обновлён логотип адаптера, исправлены проблемы repochecker",
88
- "pt": "Logo do adaptador redesenhado, problemas do repochecker corrigidos",
89
- "nl": "Adapter-logo opnieuw ontworpen, repochecker-problemen opgelost",
90
- "fr": "Logo de l'adaptateur redessiné, problèmes repochecker corrigés",
91
- "it": "Logo dell'adattatore ridisegnato, problemi repochecker risolti",
92
- "es": "Logo del adaptador rediseñado, problemas de repochecker corregidos",
93
- "pl": "Przeprojektowano logo adaptera, naprawiono problemy repochecker",
94
- "uk": "Оновлено логотип адаптера, виправлено проблеми repochecker",
95
- "zh-cn": "重新设计适配器图标,修复 repochecker 问题"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.parcelapp",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "ioBroker adapter for parcel.app — track packages from 300+ carriers",
5
5
  "author": {
6
6
  "name": "krobi",