emailengine-app 2.63.4 → 2.65.0

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.
Files changed (59) hide show
  1. package/.github/workflows/test.yml +4 -0
  2. package/CHANGELOG.md +70 -0
  3. package/copy-static-files.sh +1 -1
  4. package/data/google-crawlers.json +1 -1
  5. package/eslint.config.js +2 -0
  6. package/lib/account.js +13 -9
  7. package/lib/api-routes/account-routes.js +7 -1
  8. package/lib/consts.js +17 -1
  9. package/lib/email-client/gmail/gmail-api.js +1 -12
  10. package/lib/email-client/imap-client.js +5 -3
  11. package/lib/email-client/outlook/graph-api.js +9 -15
  12. package/lib/email-client/outlook-client.js +406 -177
  13. package/lib/export.js +17 -0
  14. package/lib/imapproxy/imap-server.js +3 -2
  15. package/lib/oauth/gmail.js +12 -1
  16. package/lib/oauth/outlook.js +99 -1
  17. package/lib/oauth/pubsub/google.js +253 -85
  18. package/lib/oauth2-apps.js +620 -389
  19. package/lib/outbox.js +1 -1
  20. package/lib/routes-ui.js +193 -238
  21. package/lib/schemas.js +189 -12
  22. package/lib/ui-routes/account-routes.js +7 -2
  23. package/lib/ui-routes/admin-entities-routes.js +3 -3
  24. package/lib/ui-routes/oauth-routes.js +27 -175
  25. package/package.json +21 -21
  26. package/sbom.json +1 -1
  27. package/server.js +54 -22
  28. package/static/licenses.html +30 -90
  29. package/translations/de.mo +0 -0
  30. package/translations/de.po +54 -42
  31. package/translations/en.mo +0 -0
  32. package/translations/en.po +55 -43
  33. package/translations/et.mo +0 -0
  34. package/translations/et.po +54 -42
  35. package/translations/fr.mo +0 -0
  36. package/translations/fr.po +54 -42
  37. package/translations/ja.mo +0 -0
  38. package/translations/ja.po +54 -42
  39. package/translations/messages.pot +93 -71
  40. package/translations/nl.mo +0 -0
  41. package/translations/nl.po +54 -42
  42. package/translations/pl.mo +0 -0
  43. package/translations/pl.po +54 -42
  44. package/views/config/oauth/app.hbs +12 -0
  45. package/views/config/oauth/edit.hbs +2 -0
  46. package/views/config/oauth/index.hbs +4 -1
  47. package/views/config/oauth/new.hbs +2 -0
  48. package/views/config/oauth/subscriptions.hbs +175 -0
  49. package/views/error.hbs +4 -4
  50. package/views/partials/oauth_form.hbs +179 -4
  51. package/views/partials/oauth_tabs.hbs +8 -0
  52. package/views/partials/scope_info.hbs +10 -0
  53. package/workers/api.js +174 -96
  54. package/workers/documents.js +1 -0
  55. package/workers/export.js +6 -2
  56. package/workers/imap.js +33 -49
  57. package/workers/smtp.js +1 -0
  58. package/workers/submit.js +1 -0
  59. package/workers/webhooks.js +42 -30
package/server.js CHANGED
@@ -2753,30 +2753,61 @@ async function onCommand(worker, message) {
2753
2753
  return await call(assignedWorker, message, []);
2754
2754
  }
2755
2755
 
2756
- case 'googlePubSub': {
2757
- // Notify all webhook workers about PubSub app
2756
+ case 'googlePubSub':
2757
+ case 'googlePubSubRemove': {
2758
+ // Notify all webhook workers about PubSub app changes
2759
+ if (!workers.has('webhooks')) {
2760
+ return true;
2761
+ }
2762
+ let proms = [];
2758
2763
  for (let worker of workers.get('webhooks')) {
2759
- await call(worker, message);
2764
+ proms.push(
2765
+ call(worker, message).catch(err => {
2766
+ logger.error({ msg: 'Failed to notify webhook worker about PubSub change', cmd: message.cmd, err });
2767
+ })
2768
+ );
2760
2769
  }
2770
+ await Promise.all(proms);
2761
2771
  return true;
2762
2772
  }
2763
2773
 
2764
2774
  case 'externalNotify': {
2765
2775
  // External notification (e.g., Google Push)
2766
- for (let account of message.accounts) {
2776
+ let proms = [];
2777
+ for (let account of message.accounts || []) {
2767
2778
  if (!assigned.has(account)) {
2768
2779
  continue;
2769
2780
  }
2770
2781
 
2771
2782
  let assignedWorker = assigned.get(account);
2772
- try {
2773
- await call(assignedWorker, { cmd: 'externalNotify', account, historyId: message.historyId });
2774
- } catch (err) {
2775
- logger.error({ msg: 'External notification failed', cmd: 'externalNotify', account, historyId: message.historyId, err });
2776
- }
2783
+ proms.push(
2784
+ call(assignedWorker, { cmd: 'externalNotify', account, historyId: message.historyId }).catch(err => {
2785
+ logger.error({ msg: 'External notification failed', cmd: 'externalNotify', account, historyId: message.historyId, err });
2786
+ })
2787
+ );
2777
2788
  }
2789
+ await Promise.all(proms);
2778
2790
  return true;
2779
2791
  }
2792
+
2793
+ case 'subscriptionLifecycle': {
2794
+ // MS Graph subscription lifecycle event (reauthorizationRequired, subscriptionRemoved)
2795
+ if (!assigned.has(message.account)) {
2796
+ logger.warn({
2797
+ msg: 'Subscription lifecycle event for unassigned account',
2798
+ account: message.account,
2799
+ event: message.event
2800
+ });
2801
+ return false;
2802
+ }
2803
+ let assignedWorker = assigned.get(message.account);
2804
+ return await call(assignedWorker, {
2805
+ cmd: 'subscriptionLifecycle',
2806
+ account: message.account,
2807
+ event: message.event,
2808
+ timeout: message.timeout
2809
+ });
2810
+ }
2780
2811
  }
2781
2812
 
2782
2813
  return 999;
@@ -2853,20 +2884,22 @@ async function collectMetrics() {
2853
2884
  */
2854
2885
  const closeQueues = cb => {
2855
2886
  let proms = [];
2856
- if (queueEvents.notify) {
2857
- proms.push(queueEvents.notify.close());
2858
- }
2859
-
2860
- if (queueEvents.submit) {
2861
- proms.push(queueEvents.submit.close());
2862
- }
2863
2887
 
2864
- if (queueEvents.documents) {
2865
- proms.push(queueEvents.documents.close());
2888
+ // Signal webhooks workers to stop Pub/Sub pull loops before exiting
2889
+ if (workers.has('webhooks')) {
2890
+ for (let worker of workers.get('webhooks')) {
2891
+ proms.push(
2892
+ call(worker, { cmd: 'close', timeout: 4000 }).catch(err => {
2893
+ logger.error({ msg: 'Failed to signal webhooks worker to close', err });
2894
+ })
2895
+ );
2896
+ }
2866
2897
  }
2867
2898
 
2868
- if (queueEvents.export) {
2869
- proms.push(queueEvents.export.close());
2899
+ for (let name of ['notify', 'submit', 'documents', 'export']) {
2900
+ if (queueEvents[name]) {
2901
+ proms.push(queueEvents[name].close());
2902
+ }
2870
2903
  }
2871
2904
 
2872
2905
  if (!proms.length) {
@@ -2876,13 +2909,12 @@ const closeQueues = cb => {
2876
2909
  let returned;
2877
2910
 
2878
2911
  let closeTimeout = setTimeout(() => {
2879
- clearTimeout(closeTimeout);
2880
2912
  if (returned) {
2881
2913
  return;
2882
2914
  }
2883
2915
  returned = true;
2884
2916
  cb();
2885
- }, 2500);
2917
+ }, 5000);
2886
2918
 
2887
2919
  Promise.allSettled(proms).then(() => {
2888
2920
  clearTimeout(closeTimeout);
@@ -1,6 +1,6 @@
1
1
  <!doctype html><html><head><meta charset="utf-8"><title>EmailEngine Licenses</title><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous"></head><body>
2
2
  <div class="container-fluid">
3
- <h1>EmailEngine v2.63.3</h1><p>EmailEngine includes code from the following software packages:</p>
3
+ <h1>EmailEngine v2.64.0</h1><p>EmailEngine includes code from the following software packages:</p>
4
4
  <table class="table table-sm">
5
5
  <tr><thead class="thead-dark"><th>Package</th><th>Version</th><th>License</th><th>Publisher</th><th>Publisher's Email</th><th>Package URL</th></tr>
6
6
  <tbody>
@@ -146,7 +146,7 @@
146
146
  </tr>
147
147
  <tr>
148
148
  <td><a href="https://npmjs.com/package/@bull-board/api">@bull-board/api</a></td>
149
- <td>6.20.3</td>
149
+ <td>6.20.6</td>
150
150
  <td>MIT</td>
151
151
  <td>felixmosh</td>
152
152
  <td></td>
@@ -156,7 +156,7 @@
156
156
  </tr>
157
157
  <tr>
158
158
  <td><a href="https://npmjs.com/package/@bull-board/hapi">@bull-board/hapi</a></td>
159
- <td>6.20.3</td>
159
+ <td>6.20.6</td>
160
160
  <td>MIT</td>
161
161
  <td>felixmosh</td>
162
162
  <td></td>
@@ -166,7 +166,7 @@
166
166
  </tr>
167
167
  <tr>
168
168
  <td><a href="https://npmjs.com/package/@bull-board/ui">@bull-board/ui</a></td>
169
- <td>6.20.3</td>
169
+ <td>6.20.6</td>
170
170
  <td>MIT</td>
171
171
  <td>felixmosh</td>
172
172
  <td></td>
@@ -216,7 +216,7 @@
216
216
  </tr>
217
217
  <tr>
218
218
  <td><a href="https://npmjs.com/package/@csstools/css-syntax-patches-for-csstree">@csstools/css-syntax-patches-for-csstree</a></td>
219
- <td>1.1.0</td>
219
+ <td>1.1.1</td>
220
220
  <td>MIT-0</td>
221
221
  <td></td>
222
222
  <td></td>
@@ -906,7 +906,7 @@
906
906
  </tr>
907
907
  <tr>
908
908
  <td><a href="https://npmjs.com/package/@postalsys/bounce-classifier">@postalsys/bounce-classifier</a></td>
909
- <td>2.0.0</td>
909
+ <td>2.4.0</td>
910
910
  <td>MIT</td>
911
911
  <td>Andris Reinman</td>
912
912
  <td></td>
@@ -916,7 +916,7 @@
916
916
  </tr>
917
917
  <tr>
918
918
  <td><a href="https://npmjs.com/package/@postalsys/certs">@postalsys/certs</a></td>
919
- <td>1.0.12</td>
919
+ <td>1.0.14</td>
920
920
  <td>ISC</td>
921
921
  <td>Postal Systems O&#xDC;</td>
922
922
  <td>acme@postalsys.com</td>
@@ -936,7 +936,7 @@
936
936
  </tr>
937
937
  <tr>
938
938
  <td><a href="https://npmjs.com/package/@postalsys/email-ai-tools">@postalsys/email-ai-tools</a></td>
939
- <td>1.11.4</td>
939
+ <td>1.12.1</td>
940
940
  <td>MIT</td>
941
941
  <td>Postal Systems O&#xDC;</td>
942
942
  <td></td>
@@ -946,7 +946,7 @@
946
946
  </tr>
947
947
  <tr>
948
948
  <td><a href="https://npmjs.com/package/@postalsys/email-text-tools">@postalsys/email-text-tools</a></td>
949
- <td>2.4.2</td>
949
+ <td>2.4.3</td>
950
950
  <td>MIT</td>
951
951
  <td>Postal Systems O&#xDC;</td>
952
952
  <td></td>
@@ -1616,7 +1616,7 @@
1616
1616
  </tr>
1617
1617
  <tr>
1618
1618
  <td><a href="https://npmjs.com/package/bullmq">bullmq</a></td>
1619
- <td>5.70.4</td>
1619
+ <td>5.71.0</td>
1620
1620
  <td>MIT</td>
1621
1621
  <td>Taskforce.sh Inc.</td>
1622
1622
  <td></td>
@@ -2226,7 +2226,7 @@
2226
2226
  </tr>
2227
2227
  <tr>
2228
2228
  <td><a href="https://npmjs.com/package/dompurify">dompurify</a></td>
2229
- <td>3.3.2</td>
2229
+ <td>3.3.3</td>
2230
2230
  <td>(MPL-2.0 OR Apache-2.0)</td>
2231
2231
  <td>Dr.-Ing. Mario Heiderich, Cure53</td>
2232
2232
  <td>mario@cure53.de</td>
@@ -2525,7 +2525,7 @@
2525
2525
  </tr>
2526
2526
  <tr>
2527
2527
  <td><a href="https://npmjs.com/package/eslint">eslint</a></td>
2528
- <td>10.0.3</td>
2528
+ <td>10.1.0</td>
2529
2529
  <td>MIT</td>
2530
2530
  <td>Nicholas C. Zakas</td>
2531
2531
  <td>nicholas+npm@nczconsulting.com</td>
@@ -2845,7 +2845,7 @@
2845
2845
  </tr>
2846
2846
  <tr>
2847
2847
  <td><a href="https://npmjs.com/package/flatted">flatted</a></td>
2848
- <td>3.4.1</td>
2848
+ <td>3.4.2</td>
2849
2849
  <td>ISC</td>
2850
2850
  <td>Andrea Giammarchi</td>
2851
2851
  <td></td>
@@ -3475,7 +3475,7 @@
3475
3475
  </tr>
3476
3476
  <tr>
3477
3477
  <td><a href="https://npmjs.com/package/imapflow">imapflow</a></td>
3478
- <td>1.2.13</td>
3478
+ <td>1.2.16</td>
3479
3479
  <td>MIT</td>
3480
3480
  <td>Postal Systems O&#xDC;</td>
3481
3481
  <td></td>
@@ -3535,17 +3535,7 @@
3535
3535
  </tr>
3536
3536
  <tr>
3537
3537
  <td><a href="https://npmjs.com/package/ioredfour">ioredfour</a></td>
3538
- <td>1.3.0-ioredis-07</td>
3539
- <td>MIT</td>
3540
- <td>Mixmax</td>
3541
- <td>hello@mixmax.com</td>
3542
- <td>
3543
- <a href="https://github.com/nodemailer/ioredfour">github.com/nodemailer/ioredfour</a>
3544
- </td
3545
- </tr>
3546
- <tr>
3547
- <td><a href="https://npmjs.com/package/ioredfour">ioredfour</a></td>
3548
- <td>1.4.0</td>
3538
+ <td>1.4.1</td>
3549
3539
  <td>MIT</td>
3550
3540
  <td>Mixmax</td>
3551
3541
  <td>hello@mixmax.com</td>
@@ -3555,17 +3545,7 @@
3555
3545
  </tr>
3556
3546
  <tr>
3557
3547
  <td><a href="https://npmjs.com/package/ioredis">ioredis</a></td>
3558
- <td>5.10.0</td>
3559
- <td>MIT</td>
3560
- <td>Zihua Li</td>
3561
- <td>i@zihua.li</td>
3562
- <td>
3563
- <a href="https://github.com/luin/ioredis">github.com/luin/ioredis</a>
3564
- </td
3565
- </tr>
3566
- <tr>
3567
- <td><a href="https://npmjs.com/package/ioredis">ioredis</a></td>
3568
- <td>5.3.2</td>
3548
+ <td>5.10.1</td>
3569
3549
  <td>MIT</td>
3570
3550
  <td>Zihua Li</td>
3571
3551
  <td>i@zihua.li</td>
@@ -3815,7 +3795,7 @@
3815
3795
  </tr>
3816
3796
  <tr>
3817
3797
  <td><a href="https://npmjs.com/package/joi">joi</a></td>
3818
- <td>18.0.1</td>
3798
+ <td>18.0.2</td>
3819
3799
  <td>BSD-3-Clause</td>
3820
3800
  <td></td>
3821
3801
  <td></td>
@@ -4115,7 +4095,7 @@
4115
4095
  </tr>
4116
4096
  <tr>
4117
4097
  <td><a href="https://npmjs.com/package/lru-cache">lru-cache</a></td>
4118
- <td>11.2.6</td>
4098
+ <td>11.2.7</td>
4119
4099
  <td>BlueOak-1.0.0</td>
4120
4100
  <td>Isaac Z. Schlueter</td>
4121
4101
  <td>i@izs.me</td>
@@ -4155,7 +4135,7 @@
4155
4135
  </tr>
4156
4136
  <tr>
4157
4137
  <td><a href="https://npmjs.com/package/mailparser">mailparser</a></td>
4158
- <td>3.9.4</td>
4138
+ <td>3.9.5</td>
4159
4139
  <td>MIT</td>
4160
4140
  <td>Andris Reinman</td>
4161
4141
  <td></td>
@@ -4515,27 +4495,7 @@
4515
4495
  </tr>
4516
4496
  <tr>
4517
4497
  <td><a href="https://npmjs.com/package/nodemailer">nodemailer</a></td>
4518
- <td>7.0.13</td>
4519
- <td>MIT-0</td>
4520
- <td>Andris Reinman</td>
4521
- <td></td>
4522
- <td>
4523
- <a href="https://github.com/nodemailer/nodemailer">github.com/nodemailer/nodemailer</a>
4524
- </td
4525
- </tr>
4526
- <tr>
4527
- <td><a href="https://npmjs.com/package/nodemailer">nodemailer</a></td>
4528
- <td>8.0.1</td>
4529
- <td>MIT-0</td>
4530
- <td>Andris Reinman</td>
4531
- <td></td>
4532
- <td>
4533
- <a href="https://github.com/nodemailer/nodemailer">github.com/nodemailer/nodemailer</a>
4534
- </td
4535
- </tr>
4536
- <tr>
4537
- <td><a href="https://npmjs.com/package/nodemailer">nodemailer</a></td>
4538
- <td>8.0.2</td>
4498
+ <td>8.0.3</td>
4539
4499
  <td>MIT-0</td>
4540
4500
  <td>Andris Reinman</td>
4541
4501
  <td></td>
@@ -5005,16 +4965,6 @@
5005
4965
  </tr>
5006
4966
  <tr>
5007
4967
  <td><a href="https://npmjs.com/package/pino">pino</a></td>
5008
- <td>9.12.0</td>
5009
- <td>MIT</td>
5010
- <td>Matteo Collina</td>
5011
- <td>hello@matteocollina.com</td>
5012
- <td>
5013
- <a href="https://github.com/pinojs/pino">github.com/pinojs/pino</a>
5014
- </td
5015
- </tr>
5016
- <tr>
5017
- <td><a href="https://npmjs.com/package/pino">pino</a></td>
5018
4968
  <td>9.14.0</td>
5019
4969
  <td>MIT</td>
5020
4970
  <td>Matteo Collina</td>
@@ -5115,7 +5065,7 @@
5115
5065
  </tr>
5116
5066
  <tr>
5117
5067
  <td><a href="https://npmjs.com/package/pubface">pubface</a></td>
5118
- <td>1.0.18</td>
5068
+ <td>1.0.19</td>
5119
5069
  <td>MIT-0</td>
5120
5070
  <td>Postal Systems O&#xDC;</td>
5121
5071
  <td></td>
@@ -5445,7 +5395,7 @@
5445
5395
  </tr>
5446
5396
  <tr>
5447
5397
  <td><a href="https://npmjs.com/package/sax">sax</a></td>
5448
- <td>1.5.0</td>
5398
+ <td>1.6.0</td>
5449
5399
  <td>BlueOak-1.0.0</td>
5450
5400
  <td>Isaac Z. Schlueter</td>
5451
5401
  <td>i@izs.me</td>
@@ -5604,16 +5554,6 @@
5604
5554
  </td
5605
5555
  </tr>
5606
5556
  <tr>
5607
- <td><a href="https://npmjs.com/package/slow-redact">slow-redact</a></td>
5608
- <td>0.3.2</td>
5609
- <td>MIT</td>
5610
- <td>Matteo Collina</td>
5611
- <td>hello@matteocollina.com</td>
5612
- <td>
5613
- <a href="https://github.com/pinojs/slow-redact">github.com/pinojs/slow-redact</a>
5614
- </td
5615
- </tr>
5616
- <tr>
5617
5557
  <td><a href="https://npmjs.com/package/smart-buffer">smart-buffer</a></td>
5618
5558
  <td>4.2.0</td>
5619
5559
  <td>MIT</td>
@@ -5625,7 +5565,7 @@
5625
5565
  </tr>
5626
5566
  <tr>
5627
5567
  <td><a href="https://npmjs.com/package/smtp-server">smtp-server</a></td>
5628
- <td>3.18.1</td>
5568
+ <td>3.18.2</td>
5629
5569
  <td>MIT-0</td>
5630
5570
  <td>Andris Reinman</td>
5631
5571
  <td></td>
@@ -5945,7 +5885,7 @@
5945
5885
  </tr>
5946
5886
  <tr>
5947
5887
  <td><a href="https://npmjs.com/package/swagger-ui-dist">swagger-ui-dist</a></td>
5948
- <td>5.32.0</td>
5888
+ <td>5.32.1</td>
5949
5889
  <td>Apache-2.0</td>
5950
5890
  <td></td>
5951
5891
  <td></td>
@@ -6025,7 +5965,7 @@
6025
5965
  </tr>
6026
5966
  <tr>
6027
5967
  <td><a href="https://npmjs.com/package/tldts-core">tldts-core</a></td>
6028
- <td>7.0.25</td>
5968
+ <td>7.0.27</td>
6029
5969
  <td>MIT</td>
6030
5970
  <td>R&#xE9;mi Berson</td>
6031
5971
  <td></td>
@@ -6035,7 +5975,7 @@
6035
5975
  </tr>
6036
5976
  <tr>
6037
5977
  <td><a href="https://npmjs.com/package/tldts">tldts</a></td>
6038
- <td>7.0.25</td>
5978
+ <td>7.0.27</td>
6039
5979
  <td>MIT</td>
6040
5980
  <td>R&#xE9;mi Berson</td>
6041
5981
  <td></td>
@@ -6075,7 +6015,7 @@
6075
6015
  </tr>
6076
6016
  <tr>
6077
6017
  <td><a href="https://npmjs.com/package/tough-cookie">tough-cookie</a></td>
6078
- <td>6.0.0</td>
6018
+ <td>6.0.1</td>
6079
6019
  <td>BSD-3-Clause</td>
6080
6020
  <td>Jeremy Stashewsky</td>
6081
6021
  <td>jstash@gmail.com</td>
@@ -6195,7 +6135,7 @@
6195
6135
  </tr>
6196
6136
  <tr>
6197
6137
  <td><a href="https://npmjs.com/package/undici">undici</a></td>
6198
- <td>6.23.0</td>
6138
+ <td>6.24.1</td>
6199
6139
  <td>MIT</td>
6200
6140
  <td></td>
6201
6141
  <td></td>
@@ -6205,7 +6145,7 @@
6205
6145
  </tr>
6206
6146
  <tr>
6207
6147
  <td><a href="https://npmjs.com/package/undici">undici</a></td>
6208
- <td>7.22.0</td>
6148
+ <td>7.24.5</td>
6209
6149
  <td>MIT</td>
6210
6150
  <td></td>
6211
6151
  <td></td>
@@ -6455,7 +6395,7 @@
6455
6395
  </tr>
6456
6396
  <tr>
6457
6397
  <td><a href="https://npmjs.com/package/ws">ws</a></td>
6458
- <td>8.19.0</td>
6398
+ <td>8.20.0</td>
6459
6399
  <td>MIT</td>
6460
6400
  <td>Einar Otto Stangvik</td>
6461
6401
  <td>einaros@gmail.com</td>
Binary file
@@ -1,7 +1,7 @@
1
1
  msgid ""
2
2
  msgstr ""
3
3
  "Project-Id-Version: \n"
4
- "POT-Creation-Date: 2026-02-05 09:12+0000\n"
4
+ "POT-Creation-Date: 2026-03-10 13:39+0000\n"
5
5
  "PO-Revision-Date: \n"
6
6
  "Last-Translator: \n"
7
7
  "Language-Team: \n"
@@ -12,16 +12,28 @@ msgstr ""
12
12
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13
13
  "X-Generator: Poedit 3.8\n"
14
14
 
15
+ #: views/error.hbs:4 workers/api.js:7043
16
+ msgid "Something went wrong"
17
+ msgstr "Leider ist ein Fehler aufgetreten"
18
+
19
+ #: views/error.hbs:6
20
+ msgid "Error code: %s"
21
+ msgstr "Fehlercode: %s"
22
+
23
+ #: views/error.hbs:14
24
+ msgid "Go back"
25
+ msgstr "Zurueck"
26
+
27
+ #: views/error.hbs:17
28
+ msgid "Dashboard"
29
+ msgstr "Dashboard"
30
+
15
31
  #: views/config/license.hbs:45
16
32
  msgid "%d day"
17
33
  msgid_plural "%d days"
18
34
  msgstr[0] "%d Tag"
19
35
  msgstr[1] "%d Tage"
20
36
 
21
- #: views/redirect.hbs:1
22
- msgid "Click <a href=\"%s\">here</a> to continue&mldr;"
23
- msgstr "Klicken Sie <a href=\"%s\">hier</a>, um fortzufahren&mldr;"
24
-
25
37
  #: views/unsubscribe.hbs:3 views/unsubscribe.hbs:62 views/unsubscribe.hbs:85
26
38
  msgid "Unsubscribe"
27
39
  msgstr "Abmelden"
@@ -69,6 +81,10 @@ msgstr "E-Mail-Adresse"
69
81
  msgid "Enter your email address"
70
82
  msgstr "Geben Sie Ihre E-Mail-Adresse ein"
71
83
 
84
+ #: views/redirect.hbs:1
85
+ msgid "Click <a href=\"%s\">here</a> to continue&mldr;"
86
+ msgstr "Klicken Sie <a href=\"%s\">hier</a>, um fortzufahren&mldr;"
87
+
72
88
  #: views/accounts/register/imap.hbs:11
73
89
  msgid "Your name"
74
90
  msgstr "Ihr Name"
@@ -91,14 +107,6 @@ msgstr "Passwort für Ihr Konto eingeben"
91
107
  msgid "Continue"
92
108
  msgstr "Weiter"
93
109
 
94
- #: views/accounts/register/index.hbs:2
95
- msgid "Choose your email account provider"
96
- msgstr "Wählen Sie Ihren E-Mail-Kontoanbieter"
97
-
98
- #: views/accounts/register/index.hbs:15
99
- msgid "Standard IMAP"
100
- msgstr "Standard IMAP"
101
-
102
110
  #: views/accounts/register/imap-server.hbs:19
103
111
  msgid "IMAP"
104
112
  msgstr "IMAP"
@@ -222,15 +230,23 @@ msgstr "Verbindung zum SMTP-Server nicht moeglich"
222
230
  msgid "Request failed."
223
231
  msgstr "Anfrage fehlgeschlagen."
224
232
 
225
- #: lib/routes-ui.js:520 lib/ui-routes/account-routes.js:60
233
+ #: views/accounts/register/index.hbs:2
234
+ msgid "Choose your email account provider"
235
+ msgstr "Wählen Sie Ihren E-Mail-Kontoanbieter"
236
+
237
+ #: views/accounts/register/index.hbs:15
238
+ msgid "Standard IMAP"
239
+ msgstr "Standard IMAP"
240
+
241
+ #: lib/routes-ui.js:523 lib/ui-routes/account-routes.js:60
226
242
  msgid "Delegated"
227
243
  msgstr "Delegiert"
228
244
 
229
- #: lib/routes-ui.js:521 lib/ui-routes/account-routes.js:61
245
+ #: lib/routes-ui.js:524 lib/ui-routes/account-routes.js:61
230
246
  msgid "Using credentials from \"%s\""
231
247
  msgstr "Verwendung von Anmeldeinformationen aus \"%s\""
232
248
 
233
- #: lib/routes-ui.js:571 lib/ui-routes/account-routes.js:111
249
+ #: lib/routes-ui.js:574 lib/ui-routes/account-routes.js:111
234
250
  msgid ""
235
251
  "Connection timed out. This usually occurs if you are behind a firewall or "
236
252
  "connecting to the wrong port."
@@ -239,11 +255,11 @@ msgstr ""
239
255
  "sich hinter einer Firewall befinden oder eine Verbindung zum falschen Port "
240
256
  "herstellen."
241
257
 
242
- #: lib/routes-ui.js:574 lib/ui-routes/account-routes.js:114
258
+ #: lib/routes-ui.js:577 lib/ui-routes/account-routes.js:114
243
259
  msgid "The server unexpectedly closed the connection."
244
260
  msgstr "Der Server hat die Verbindung unerwartet geschlossen."
245
261
 
246
- #: lib/routes-ui.js:577 lib/ui-routes/account-routes.js:117
262
+ #: lib/routes-ui.js:580 lib/ui-routes/account-routes.js:117
247
263
  msgid ""
248
264
  "The server unexpectedly closed the connection. This usually happens when "
249
265
  "attempting to connect to a TLS port without TLS enabled."
@@ -252,7 +268,7 @@ msgstr ""
252
268
  "Regel, wenn versucht wird, eine Verbindung zu einem TLS-Port ohne "
253
269
  "aktiviertes TLS herzustellen."
254
270
 
255
- #: lib/routes-ui.js:582 lib/ui-routes/account-routes.js:122
271
+ #: lib/routes-ui.js:585 lib/ui-routes/account-routes.js:122
256
272
  msgid ""
257
273
  "The server refused the connection. This typically occurs if the server is "
258
274
  "not running, is overloaded, or you are connecting to the wrong host or port."
@@ -261,90 +277,86 @@ msgstr ""
261
277
  "der Server nicht läuft, überlastet ist oder Sie sich mit dem falschen Host "
262
278
  "oder Port verbinden."
263
279
 
264
- #: lib/routes-ui.js:709
280
+ #: lib/routes-ui.js:712
265
281
  msgid "Invalid API key for OpenAI"
266
282
  msgstr "Ungültiger API-Schlüssel für OpenAI"
267
283
 
268
- #: lib/routes-ui.js:4671 lib/routes-ui.js:4706 lib/routes-ui.js:4821
269
- #: lib/routes-ui.js:4868 lib/routes-ui.js:5115 lib/routes-ui.js:5151
270
- #: workers/api.js:2413 lib/ui-routes/account-routes.js:549
284
+ #: lib/routes-ui.js:4754 lib/routes-ui.js:4789 lib/routes-ui.js:4904
285
+ #: lib/routes-ui.js:4951 lib/routes-ui.js:5198 lib/routes-ui.js:5234
286
+ #: workers/api.js:2557 lib/ui-routes/account-routes.js:549
271
287
  #: lib/ui-routes/account-routes.js:585 lib/ui-routes/account-routes.js:702
272
288
  #: lib/ui-routes/account-routes.js:749 lib/ui-routes/account-routes.js:998
273
289
  #: lib/ui-routes/account-routes.js:1034
274
290
  msgid "Email Account Setup"
275
291
  msgstr "E-Mail-Konto einrichten"
276
292
 
277
- #: lib/routes-ui.js:4731 lib/routes-ui.js:4764 lib/routes-ui.js:7701
293
+ #: lib/routes-ui.js:4814 lib/routes-ui.js:4847 lib/routes-ui.js:7807
278
294
  #: lib/ui-routes/account-routes.js:610 lib/ui-routes/account-routes.js:644
279
295
  msgid "Invalid request. Check your input and try again."
280
296
  msgstr "Validierung der Anforderungsargumente fehlgeschlagen."
281
297
 
282
- #: lib/routes-ui.js:4924 lib/routes-ui.js:4935
298
+ #: lib/routes-ui.js:5007 lib/routes-ui.js:5018
283
299
  #: lib/ui-routes/account-routes.js:806 lib/ui-routes/account-routes.js:817
284
300
  #: lib/ui-routes/admin-entities-routes.js:2020
285
301
  msgid "Server hostname was not found"
286
302
  msgstr "Server-Hostname wurde nicht gefunden"
287
303
 
288
- #: lib/routes-ui.js:4927 lib/routes-ui.js:4938
304
+ #: lib/routes-ui.js:5010 lib/routes-ui.js:5021
289
305
  #: lib/ui-routes/account-routes.js:809 lib/ui-routes/account-routes.js:820
290
306
  #: lib/ui-routes/admin-entities-routes.js:2023
291
307
  msgid "Invalid username or password"
292
308
  msgstr "Ungültiger Benutzername oder Passwort"
293
309
 
294
- #: lib/routes-ui.js:4941 lib/ui-routes/account-routes.js:823
310
+ #: lib/routes-ui.js:5024 lib/ui-routes/account-routes.js:823
295
311
  #: lib/ui-routes/admin-entities-routes.js:2026
296
312
  msgid "Authentication credentials were not provided"
297
313
  msgstr "Es wurden keine Authentifizierungsdaten angegeben"
298
314
 
299
- #: lib/routes-ui.js:4944 lib/ui-routes/account-routes.js:826
315
+ #: lib/routes-ui.js:5027 lib/ui-routes/account-routes.js:826
300
316
  #: lib/ui-routes/admin-entities-routes.js:2029
301
317
  msgid "OAuth2 authentication failed"
302
318
  msgstr "OAuth2-Authentifizierung fehlgeschlagen"
303
319
 
304
- #: lib/routes-ui.js:4947 lib/routes-ui.js:4951
320
+ #: lib/routes-ui.js:5030 lib/routes-ui.js:5034
305
321
  #: lib/ui-routes/account-routes.js:829 lib/ui-routes/account-routes.js:833
306
322
  #: lib/ui-routes/admin-entities-routes.js:2032
307
323
  #: lib/ui-routes/admin-entities-routes.js:2036
308
324
  msgid "TLS protocol error"
309
325
  msgstr "TLS-Protokollfehler"
310
326
 
311
- #: lib/routes-ui.js:4955 lib/ui-routes/account-routes.js:837
327
+ #: lib/routes-ui.js:5038 lib/ui-routes/account-routes.js:837
312
328
  #: lib/ui-routes/admin-entities-routes.js:2040
313
329
  msgid "Connection timed out"
314
330
  msgstr "Verbindung abgelaufen"
315
331
 
316
- #: lib/routes-ui.js:4958 lib/ui-routes/account-routes.js:840
332
+ #: lib/routes-ui.js:5041 lib/ui-routes/account-routes.js:840
317
333
  #: lib/ui-routes/admin-entities-routes.js:2043
318
334
  msgid "Could not connect to server"
319
335
  msgstr "Es konnte keine Verbindung zum Server hergestellt werden"
320
336
 
321
- #: lib/routes-ui.js:4961 lib/ui-routes/account-routes.js:843
337
+ #: lib/routes-ui.js:5044 lib/ui-routes/account-routes.js:843
322
338
  #: lib/ui-routes/admin-entities-routes.js:2046
323
339
  msgid "Unexpected server response"
324
340
  msgstr "Unerwartete Serverantwort"
325
341
 
326
- #: lib/routes-ui.js:7664 lib/tools.js:778
342
+ #: lib/routes-ui.js:7770 lib/tools.js:950
327
343
  msgid "Invalid input"
328
344
  msgstr "Ungültige Eingabe"
329
345
 
330
- #: lib/routes-ui.js:7674 lib/routes-ui.js:7792 lib/routes-ui.js:7809
331
- #: lib/routes-ui.js:7845
346
+ #: lib/routes-ui.js:7780 lib/routes-ui.js:7898 lib/routes-ui.js:7915
347
+ #: lib/routes-ui.js:7951
332
348
  msgid "Subscription Management"
333
349
  msgstr "Mitgliederverwaltung"
334
350
 
335
- #: workers/api.js:6904 workers/api.js:7020
351
+ #: workers/api.js:7042 workers/api.js:7159
336
352
  msgid "Requested page not found"
337
353
  msgstr "Gewünschte Seite nicht gefunden"
338
354
 
339
- #: workers/api.js:6905
340
- msgid "Something went wrong"
341
- msgstr "Leider ist ein Fehler aufgetreten"
342
-
343
- #: lib/tools.js:1477
355
+ #: lib/tools.js:1653
344
356
  msgid "Signature validation failed"
345
357
  msgstr "Signaturüberprüfung fehlgeschlagen"
346
358
 
347
- #: lib/tools.js:1486 lib/tools.js:1491
359
+ #: lib/tools.js:1662 lib/tools.js:1667
348
360
  msgid "Invalid or expired account setup URL"
349
361
  msgstr "Ungültige oder abgelaufene URL für die Kontoeinrichtung"
350
362