emailengine-app 2.68.0 → 2.69.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.
- package/.github/codeql/codeql-config.yml +16 -0
- package/.github/workflows/codeql.yml +102 -0
- package/.github/workflows/deploy.yml +8 -0
- package/.github/workflows/release.yaml +4 -0
- package/.github/workflows/test.yml +3 -0
- package/CHANGELOG.md +49 -0
- package/SECURITY.md +80 -0
- package/SECURITY.txt +27 -0
- package/config/default.toml +2 -0
- package/data/google-crawlers.json +13 -1
- package/lib/account.js +62 -25
- package/lib/api-routes/account-routes.js +493 -75
- package/lib/api-routes/blocklist-routes.js +337 -0
- package/lib/api-routes/delivery-test-routes.js +321 -0
- package/lib/api-routes/export-routes.js +1 -12
- package/lib/api-routes/gateway-routes.js +376 -0
- package/lib/api-routes/license-routes.js +142 -0
- package/lib/api-routes/mailbox-routes.js +318 -0
- package/lib/api-routes/message-routes.js +21 -129
- package/lib/api-routes/oauth2-app-routes.js +631 -0
- package/lib/api-routes/outbox-routes.js +173 -0
- package/lib/api-routes/pubsub-routes.js +98 -0
- package/lib/api-routes/route-helpers.js +45 -0
- package/lib/api-routes/settings-routes.js +331 -0
- package/lib/api-routes/stats-routes.js +77 -0
- package/lib/api-routes/submit-routes.js +472 -0
- package/lib/api-routes/template-routes.js +7 -55
- package/lib/api-routes/token-routes.js +297 -0
- package/lib/api-routes/webhook-route-routes.js +152 -0
- package/lib/email-client/gmail-client.js +14 -0
- package/lib/email-client/imap/mailbox.js +34 -11
- package/lib/email-client/imap/subconnection.js +20 -12
- package/lib/email-client/imap/sync-operations.js +130 -2
- package/lib/email-client/imap-client.js +116 -58
- package/lib/email-client/outlook-client.js +85 -13
- package/lib/export.js +60 -19
- package/lib/imapproxy/imap-core/lib/commands/starttls.js +18 -0
- package/lib/imapproxy/imap-core/lib/imap-command.js +7 -2
- package/lib/imapproxy/imap-core/lib/imap-connection.js +113 -23
- package/lib/imapproxy/imap-core/lib/imap-server.js +25 -1
- package/lib/imapproxy/imap-core/lib/imap-stream.js +26 -0
- package/lib/imapproxy/imap-server.js +92 -29
- package/lib/message-port-stream.js +113 -16
- package/lib/reject-worker-calls.js +42 -0
- package/lib/routes-ui.js +37 -8778
- package/lib/schemas.js +26 -1
- package/lib/tools.js +73 -0
- package/lib/ui-routes/account-routes.js +40 -210
- package/lib/ui-routes/admin-config-routes.js +913 -487
- package/lib/ui-routes/admin-entities-routes.js +1 -0
- package/lib/ui-routes/auth-routes.js +1339 -0
- package/lib/ui-routes/dashboard-routes.js +188 -0
- package/lib/ui-routes/document-store-routes.js +800 -0
- package/lib/ui-routes/export-routes.js +217 -0
- package/lib/ui-routes/internals-routes.js +354 -0
- package/lib/ui-routes/network-config-routes.js +759 -0
- package/lib/ui-routes/{oauth-routes.js → oauth-config-routes.js} +371 -91
- package/lib/ui-routes/route-helpers.js +316 -0
- package/lib/ui-routes/smtp-test-routes.js +236 -0
- package/lib/ui-routes/unsubscribe-routes.js +234 -0
- package/lib/webhook-request.js +36 -0
- package/package.json +17 -17
- package/sbom.json +1 -1
- package/server.js +217 -19
- package/static/licenses.html +52 -182
- package/translations/messages.pot +131 -151
- package/views/dashboard.hbs +7 -26
- package/views/internals/index.hbs +15 -0
- package/views/tokens/index.hbs +9 -0
- package/workers/api.js +198 -4401
- package/workers/export.js +87 -54
- package/workers/imap.js +29 -13
- package/workers/submit.js +20 -11
- package/workers/webhooks.js +6 -20
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
msgid ""
|
|
2
2
|
msgstr ""
|
|
3
3
|
"Content-Type: text/plain; charset=ascii\n"
|
|
4
|
-
"POT-Creation-Date: 2026-
|
|
4
|
+
"POT-Creation-Date: 2026-06-09 18:01+0000\n"
|
|
5
5
|
|
|
6
6
|
#: views/error.hbs:4
|
|
7
|
-
#: workers/api.js:
|
|
7
|
+
#: workers/api.js:2959
|
|
8
8
|
msgid "Something went wrong"
|
|
9
9
|
msgstr ""
|
|
10
10
|
|
|
@@ -21,12 +21,16 @@ msgid "Dashboard"
|
|
|
21
21
|
msgstr ""
|
|
22
22
|
|
|
23
23
|
#: views/config/license.hbs:45
|
|
24
|
-
#: lib/routes-
|
|
24
|
+
#: lib/ui-routes/oauth-config-routes.js:219
|
|
25
25
|
msgid "%d day"
|
|
26
26
|
msgid_plural "%d days"
|
|
27
27
|
msgstr[0] ""
|
|
28
28
|
msgstr[1] ""
|
|
29
29
|
|
|
30
|
+
#: views/redirect.hbs:1
|
|
31
|
+
msgid "Click <a href=\"%s\">here</a> to continue…"
|
|
32
|
+
msgstr ""
|
|
33
|
+
|
|
30
34
|
#: views/oauth-scope-error.hbs:2
|
|
31
35
|
msgid "Insufficient Permissions"
|
|
32
36
|
msgstr ""
|
|
@@ -51,8 +55,44 @@ msgstr ""
|
|
|
51
55
|
msgid "Try Again"
|
|
52
56
|
msgstr ""
|
|
53
57
|
|
|
54
|
-
#: views/
|
|
55
|
-
msgid "
|
|
58
|
+
#: views/accounts/register/imap.hbs:11
|
|
59
|
+
msgid "Your name"
|
|
60
|
+
msgstr ""
|
|
61
|
+
|
|
62
|
+
#: views/accounts/register/imap.hbs:17
|
|
63
|
+
msgid "Enter your full name"
|
|
64
|
+
msgstr ""
|
|
65
|
+
|
|
66
|
+
#: views/accounts/register/imap.hbs:21
|
|
67
|
+
#: views/unsubscribe.hbs:75
|
|
68
|
+
msgid "Email address"
|
|
69
|
+
msgstr ""
|
|
70
|
+
|
|
71
|
+
#: views/accounts/register/imap.hbs:27
|
|
72
|
+
#: views/unsubscribe.hbs:81
|
|
73
|
+
msgid "Enter your email address"
|
|
74
|
+
msgstr ""
|
|
75
|
+
|
|
76
|
+
#: views/accounts/register/imap.hbs:31
|
|
77
|
+
#: views/accounts/register/imap-server.hbs:36
|
|
78
|
+
#: views/accounts/register/imap-server.hbs:128
|
|
79
|
+
msgid "Password"
|
|
80
|
+
msgstr ""
|
|
81
|
+
|
|
82
|
+
#: views/accounts/register/imap.hbs:37
|
|
83
|
+
msgid "Enter your account password"
|
|
84
|
+
msgstr ""
|
|
85
|
+
|
|
86
|
+
#: views/accounts/register/imap.hbs:51
|
|
87
|
+
msgid "Continue"
|
|
88
|
+
msgstr ""
|
|
89
|
+
|
|
90
|
+
#: views/accounts/register/index.hbs:2
|
|
91
|
+
msgid "Choose your email account provider"
|
|
92
|
+
msgstr ""
|
|
93
|
+
|
|
94
|
+
#: views/accounts/register/index.hbs:15
|
|
95
|
+
msgid "Standard IMAP"
|
|
56
96
|
msgstr ""
|
|
57
97
|
|
|
58
98
|
#: views/unsubscribe.hbs:3
|
|
@@ -94,46 +134,6 @@ msgstr ""
|
|
|
94
134
|
msgid "Your email address <em>%s</em> was re-subscribed."
|
|
95
135
|
msgstr ""
|
|
96
136
|
|
|
97
|
-
#: views/unsubscribe.hbs:75
|
|
98
|
-
#: views/accounts/register/imap.hbs:21
|
|
99
|
-
msgid "Email address"
|
|
100
|
-
msgstr ""
|
|
101
|
-
|
|
102
|
-
#: views/unsubscribe.hbs:81
|
|
103
|
-
#: views/accounts/register/imap.hbs:27
|
|
104
|
-
msgid "Enter your email address"
|
|
105
|
-
msgstr ""
|
|
106
|
-
|
|
107
|
-
#: views/accounts/register/imap.hbs:11
|
|
108
|
-
msgid "Your name"
|
|
109
|
-
msgstr ""
|
|
110
|
-
|
|
111
|
-
#: views/accounts/register/imap.hbs:17
|
|
112
|
-
msgid "Enter your full name"
|
|
113
|
-
msgstr ""
|
|
114
|
-
|
|
115
|
-
#: views/accounts/register/imap.hbs:31
|
|
116
|
-
#: views/accounts/register/imap-server.hbs:36
|
|
117
|
-
#: views/accounts/register/imap-server.hbs:128
|
|
118
|
-
msgid "Password"
|
|
119
|
-
msgstr ""
|
|
120
|
-
|
|
121
|
-
#: views/accounts/register/imap.hbs:37
|
|
122
|
-
msgid "Enter your account password"
|
|
123
|
-
msgstr ""
|
|
124
|
-
|
|
125
|
-
#: views/accounts/register/imap.hbs:51
|
|
126
|
-
msgid "Continue"
|
|
127
|
-
msgstr ""
|
|
128
|
-
|
|
129
|
-
#: views/accounts/register/index.hbs:2
|
|
130
|
-
msgid "Choose your email account provider"
|
|
131
|
-
msgstr ""
|
|
132
|
-
|
|
133
|
-
#: views/accounts/register/index.hbs:15
|
|
134
|
-
msgid "Standard IMAP"
|
|
135
|
-
msgstr ""
|
|
136
|
-
|
|
137
137
|
#: views/accounts/register/imap-server.hbs:19
|
|
138
138
|
msgid "IMAP"
|
|
139
139
|
msgstr ""
|
|
@@ -249,169 +249,149 @@ msgstr ""
|
|
|
249
249
|
msgid "Request failed."
|
|
250
250
|
msgstr ""
|
|
251
251
|
|
|
252
|
-
#:
|
|
253
|
-
#:
|
|
254
|
-
|
|
252
|
+
#: workers/api.js:2178
|
|
253
|
+
#: workers/api.js:2506
|
|
254
|
+
#: lib/ui-routes/account-routes.js:399
|
|
255
|
+
#: lib/ui-routes/account-routes.js:434
|
|
256
|
+
#: lib/ui-routes/account-routes.js:549
|
|
257
|
+
#: lib/ui-routes/account-routes.js:596
|
|
258
|
+
#: lib/ui-routes/account-routes.js:843
|
|
259
|
+
#: lib/ui-routes/account-routes.js:879
|
|
260
|
+
msgid "Email Account Setup"
|
|
255
261
|
msgstr ""
|
|
256
262
|
|
|
257
|
-
#:
|
|
258
|
-
#:
|
|
259
|
-
msgid "
|
|
263
|
+
#: workers/api.js:2958
|
|
264
|
+
#: workers/api.js:3075
|
|
265
|
+
msgid "Requested page not found"
|
|
260
266
|
msgstr ""
|
|
261
267
|
|
|
262
|
-
#: lib/
|
|
263
|
-
#: lib/ui-routes/
|
|
264
|
-
msgid ""
|
|
265
|
-
"Connection timed out. This usually occurs if you are behind a firewall or "
|
|
266
|
-
"connecting to the wrong port."
|
|
268
|
+
#: lib/tools.js:958
|
|
269
|
+
#: lib/ui-routes/unsubscribe-routes.js:30
|
|
270
|
+
msgid "Invalid input"
|
|
267
271
|
msgstr ""
|
|
268
272
|
|
|
269
|
-
#: lib/
|
|
270
|
-
|
|
271
|
-
msgid "The server unexpectedly closed the connection."
|
|
273
|
+
#: lib/tools.js:1725
|
|
274
|
+
msgid "Signature validation failed"
|
|
272
275
|
msgstr ""
|
|
273
276
|
|
|
274
|
-
#: lib/
|
|
275
|
-
#: lib/
|
|
276
|
-
msgid ""
|
|
277
|
-
"The server unexpectedly closed the connection. This usually happens when "
|
|
278
|
-
"attempting to connect to a TLS port without TLS enabled."
|
|
277
|
+
#: lib/tools.js:1734
|
|
278
|
+
#: lib/tools.js:1739
|
|
279
|
+
msgid "Invalid or expired account setup URL"
|
|
279
280
|
msgstr ""
|
|
280
281
|
|
|
281
|
-
#: lib/
|
|
282
|
-
#: lib/ui-routes/account-routes.js:122
|
|
282
|
+
#: lib/autodetect-imap-settings.js:80
|
|
283
283
|
msgid ""
|
|
284
|
-
"
|
|
285
|
-
"
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
#: lib/routes-ui.js:573
|
|
289
|
-
msgid "Invalid API key for OpenAI"
|
|
290
|
-
msgstr ""
|
|
291
|
-
|
|
292
|
-
#: lib/routes-ui.js:2490
|
|
293
|
-
msgid "Unknown"
|
|
294
|
-
msgstr ""
|
|
295
|
-
|
|
296
|
-
#: lib/routes-ui.js:2499
|
|
297
|
-
msgid "Indefinite"
|
|
298
|
-
msgstr ""
|
|
299
|
-
|
|
300
|
-
#: lib/routes-ui.js:5133
|
|
301
|
-
#: lib/routes-ui.js:5168
|
|
302
|
-
#: lib/routes-ui.js:5283
|
|
303
|
-
#: lib/routes-ui.js:5330
|
|
304
|
-
#: lib/routes-ui.js:5577
|
|
305
|
-
#: lib/routes-ui.js:5613
|
|
306
|
-
#: workers/api.js:2279
|
|
307
|
-
#: workers/api.js:2607
|
|
308
|
-
#: lib/ui-routes/account-routes.js:554
|
|
309
|
-
#: lib/ui-routes/account-routes.js:590
|
|
310
|
-
#: lib/ui-routes/account-routes.js:707
|
|
311
|
-
#: lib/ui-routes/account-routes.js:754
|
|
312
|
-
#: lib/ui-routes/account-routes.js:1003
|
|
313
|
-
#: lib/ui-routes/account-routes.js:1039
|
|
314
|
-
msgid "Email Account Setup"
|
|
315
|
-
msgstr ""
|
|
316
|
-
|
|
317
|
-
#: lib/routes-ui.js:5193
|
|
318
|
-
#: lib/routes-ui.js:5226
|
|
319
|
-
#: lib/routes-ui.js:8186
|
|
320
|
-
#: lib/ui-routes/account-routes.js:615
|
|
321
|
-
#: lib/ui-routes/account-routes.js:649
|
|
322
|
-
msgid "Invalid request. Check your input and try again."
|
|
284
|
+
"Microsoft has disabled password-based sign-ins (including app passwords) "
|
|
285
|
+
"for Outlook.com, Hotmail.com, and Microsoft 365 email accounts. To "
|
|
286
|
+
"continue, please use the \"Sign in with Microsoft\" button to securely "
|
|
287
|
+
"connect your account."
|
|
323
288
|
msgstr ""
|
|
324
289
|
|
|
325
|
-
#: lib/routes-ui.js:5386
|
|
326
|
-
#: lib/routes-ui.js:5397
|
|
327
|
-
#: lib/ui-routes/account-routes.js:811
|
|
328
|
-
#: lib/ui-routes/account-routes.js:822
|
|
329
290
|
#: lib/ui-routes/admin-entities-routes.js:2020
|
|
291
|
+
#: lib/ui-routes/account-routes.js:652
|
|
292
|
+
#: lib/ui-routes/account-routes.js:663
|
|
330
293
|
msgid "Server hostname was not found"
|
|
331
294
|
msgstr ""
|
|
332
295
|
|
|
333
|
-
#: lib/routes-ui.js:5389
|
|
334
|
-
#: lib/routes-ui.js:5400
|
|
335
|
-
#: lib/ui-routes/account-routes.js:814
|
|
336
|
-
#: lib/ui-routes/account-routes.js:825
|
|
337
296
|
#: lib/ui-routes/admin-entities-routes.js:2023
|
|
297
|
+
#: lib/ui-routes/account-routes.js:655
|
|
298
|
+
#: lib/ui-routes/account-routes.js:666
|
|
338
299
|
msgid "Invalid username or password"
|
|
339
300
|
msgstr ""
|
|
340
301
|
|
|
341
|
-
#: lib/routes-ui.js:5403
|
|
342
|
-
#: lib/ui-routes/account-routes.js:828
|
|
343
302
|
#: lib/ui-routes/admin-entities-routes.js:2026
|
|
303
|
+
#: lib/ui-routes/account-routes.js:669
|
|
344
304
|
msgid "Authentication credentials were not provided"
|
|
345
305
|
msgstr ""
|
|
346
306
|
|
|
347
|
-
#: lib/routes-ui.js:5406
|
|
348
|
-
#: lib/ui-routes/account-routes.js:831
|
|
349
307
|
#: lib/ui-routes/admin-entities-routes.js:2029
|
|
308
|
+
#: lib/ui-routes/account-routes.js:672
|
|
350
309
|
msgid "OAuth2 authentication failed"
|
|
351
310
|
msgstr ""
|
|
352
311
|
|
|
353
|
-
#: lib/routes-ui.js:5409
|
|
354
|
-
#: lib/routes-ui.js:5413
|
|
355
|
-
#: lib/ui-routes/account-routes.js:834
|
|
356
|
-
#: lib/ui-routes/account-routes.js:838
|
|
357
312
|
#: lib/ui-routes/admin-entities-routes.js:2032
|
|
358
313
|
#: lib/ui-routes/admin-entities-routes.js:2036
|
|
314
|
+
#: lib/ui-routes/account-routes.js:675
|
|
315
|
+
#: lib/ui-routes/account-routes.js:679
|
|
359
316
|
msgid "TLS protocol error"
|
|
360
317
|
msgstr ""
|
|
361
318
|
|
|
362
|
-
#: lib/routes-ui.js:5417
|
|
363
|
-
#: lib/ui-routes/account-routes.js:842
|
|
364
319
|
#: lib/ui-routes/admin-entities-routes.js:2040
|
|
320
|
+
#: lib/ui-routes/account-routes.js:683
|
|
365
321
|
msgid "Connection timed out"
|
|
366
322
|
msgstr ""
|
|
367
323
|
|
|
368
|
-
#: lib/routes-ui.js:5420
|
|
369
|
-
#: lib/ui-routes/account-routes.js:845
|
|
370
324
|
#: lib/ui-routes/admin-entities-routes.js:2043
|
|
325
|
+
#: lib/ui-routes/account-routes.js:686
|
|
371
326
|
msgid "Could not connect to server"
|
|
372
327
|
msgstr ""
|
|
373
328
|
|
|
374
|
-
#: lib/routes-ui.js:5423
|
|
375
|
-
#: lib/ui-routes/account-routes.js:848
|
|
376
329
|
#: lib/ui-routes/admin-entities-routes.js:2046
|
|
330
|
+
#: lib/ui-routes/account-routes.js:689
|
|
377
331
|
msgid "Unexpected server response"
|
|
378
332
|
msgstr ""
|
|
379
333
|
|
|
380
|
-
#: lib/routes-
|
|
381
|
-
#: lib/
|
|
382
|
-
|
|
334
|
+
#: lib/ui-routes/account-routes.js:459
|
|
335
|
+
#: lib/ui-routes/account-routes.js:492
|
|
336
|
+
#: lib/ui-routes/unsubscribe-routes.js:67
|
|
337
|
+
msgid "Invalid request. Check your input and try again."
|
|
383
338
|
msgstr ""
|
|
384
339
|
|
|
385
|
-
#: lib/routes-
|
|
386
|
-
#: lib/routes-
|
|
387
|
-
|
|
388
|
-
#: lib/routes-ui.js:8330
|
|
389
|
-
msgid "Subscription Management"
|
|
340
|
+
#: lib/ui-routes/account-routes.js:589
|
|
341
|
+
#: lib/ui-routes/account-routes.js:872
|
|
342
|
+
msgid "Couldn't set up account. Try again."
|
|
390
343
|
msgstr ""
|
|
391
344
|
|
|
392
|
-
#:
|
|
393
|
-
|
|
394
|
-
msgid "Requested page not found"
|
|
345
|
+
#: lib/ui-routes/oauth-config-routes.js:212
|
|
346
|
+
msgid "Unknown"
|
|
395
347
|
msgstr ""
|
|
396
348
|
|
|
397
|
-
#: lib/
|
|
398
|
-
msgid "
|
|
349
|
+
#: lib/ui-routes/oauth-config-routes.js:221
|
|
350
|
+
msgid "Indefinite"
|
|
399
351
|
msgstr ""
|
|
400
352
|
|
|
401
|
-
#: lib/
|
|
402
|
-
|
|
403
|
-
msgid "Invalid or expired account setup URL"
|
|
353
|
+
#: lib/ui-routes/admin-config-routes.js:144
|
|
354
|
+
msgid "Invalid API key for OpenAI"
|
|
404
355
|
msgstr ""
|
|
405
356
|
|
|
406
|
-
#: lib/
|
|
357
|
+
#: lib/ui-routes/route-helpers.js:83
|
|
358
|
+
msgid "Delegated"
|
|
359
|
+
msgstr ""
|
|
360
|
+
|
|
361
|
+
#: lib/ui-routes/route-helpers.js:84
|
|
362
|
+
msgid "Using credentials from \"%s\""
|
|
363
|
+
msgstr ""
|
|
364
|
+
|
|
365
|
+
#: lib/ui-routes/route-helpers.js:134
|
|
407
366
|
msgid ""
|
|
408
|
-
"
|
|
409
|
-
"
|
|
410
|
-
"continue, please use the \"Sign in with Microsoft\" button to securely "
|
|
411
|
-
"connect your account."
|
|
367
|
+
"Connection timed out. This usually occurs if you are behind a firewall or "
|
|
368
|
+
"connecting to the wrong port."
|
|
412
369
|
msgstr ""
|
|
413
370
|
|
|
414
|
-
#: lib/ui-routes/
|
|
415
|
-
|
|
416
|
-
|
|
371
|
+
#: lib/ui-routes/route-helpers.js:137
|
|
372
|
+
msgid "The server unexpectedly closed the connection."
|
|
373
|
+
msgstr ""
|
|
374
|
+
|
|
375
|
+
#: lib/ui-routes/route-helpers.js:140
|
|
376
|
+
msgid ""
|
|
377
|
+
"The server unexpectedly closed the connection. This usually happens when "
|
|
378
|
+
"attempting to connect to a TLS port without TLS enabled."
|
|
379
|
+
msgstr ""
|
|
380
|
+
|
|
381
|
+
#: lib/ui-routes/route-helpers.js:145
|
|
382
|
+
msgid ""
|
|
383
|
+
"The server refused the connection. This typically occurs if the server is "
|
|
384
|
+
"not running, is overloaded, or you are connecting to the wrong host or port."
|
|
385
|
+
msgstr ""
|
|
386
|
+
|
|
387
|
+
#: lib/ui-routes/unsubscribe-routes.js:40
|
|
388
|
+
#: lib/ui-routes/unsubscribe-routes.js:158
|
|
389
|
+
#: lib/ui-routes/unsubscribe-routes.js:175
|
|
390
|
+
#: lib/ui-routes/unsubscribe-routes.js:211
|
|
391
|
+
msgid "Subscription Management"
|
|
392
|
+
msgstr ""
|
|
393
|
+
|
|
394
|
+
#: lib/ui-routes/unsubscribe-routes.js:169
|
|
395
|
+
#: lib/ui-routes/unsubscribe-routes.js:204
|
|
396
|
+
msgid "Couldn't process request. Try again."
|
|
417
397
|
msgstr ""
|
package/views/dashboard.hbs
CHANGED
|
@@ -5,16 +5,16 @@
|
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
{{#
|
|
9
|
-
<div class="card border-left-
|
|
8
|
+
{{#each redisWarnings}}
|
|
9
|
+
<div class="card border-left-{{color}} mt-4">
|
|
10
10
|
<div class="card-body">
|
|
11
11
|
<div class="row no-gutters align-items-center">
|
|
12
12
|
<div class="col mr-2">
|
|
13
|
-
<div class="text-xs font-weight-bold text-
|
|
13
|
+
<div class="text-xs font-weight-bold text-{{color}} text-uppercase mb-1">{{title}}
|
|
14
14
|
</div>
|
|
15
|
-
|
|
16
|
-
<p>
|
|
17
|
-
|
|
15
|
+
{{#each details}}
|
|
16
|
+
<p>{{this}}</p>
|
|
17
|
+
{{/each}}
|
|
18
18
|
</div>
|
|
19
19
|
<div class="col-auto">
|
|
20
20
|
<i class="fas fa-exclamation-circle fa-2x text-gray-300"></i>
|
|
@@ -22,26 +22,7 @@
|
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
24
24
|
</div>
|
|
25
|
-
{{/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
{{#if isRedisCluster}}
|
|
29
|
-
<div class="card border-left-danger mt-4">
|
|
30
|
-
<div class="card-body">
|
|
31
|
-
<div class="row no-gutters align-items-center">
|
|
32
|
-
<div class="col mr-2">
|
|
33
|
-
<div class="text-xs font-weight-bold text-danger text-uppercase mb-1">Compatibility warning
|
|
34
|
-
</div>
|
|
35
|
-
<p>EmailEngine is incompatible with Redis Cluster setup.</p>
|
|
36
|
-
<p>Please switch to a standard Redis primary instance.</p>
|
|
37
|
-
</div>
|
|
38
|
-
<div class="col-auto">
|
|
39
|
-
<i class="fas fa-exclamation-circle fa-2x text-gray-300"></i>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
{{/if}}
|
|
25
|
+
{{/each}}
|
|
45
26
|
|
|
46
27
|
|
|
47
28
|
{{#unless hasAccounts}}
|
|
@@ -5,6 +5,21 @@
|
|
|
5
5
|
</h1>
|
|
6
6
|
</div>
|
|
7
7
|
|
|
8
|
+
{{#if apiWorkerWarning}}
|
|
9
|
+
<div class="alert alert-warning mt-4" role="alert">
|
|
10
|
+
<i class="fas fa-exclamation-triangle"></i>
|
|
11
|
+
<strong>Multiple API workers are not active.</strong>
|
|
12
|
+
{{#equals apiWorkerWarning.reason "port"}}
|
|
13
|
+
<code>EENGINE_WORKERS_API</code> is set to {{apiWorkerWarning.requested}}, but EmailEngine could not verify
|
|
14
|
+
<code>SO_REUSEPORT</code> support because the API port was unavailable while probing at startup, so only a single
|
|
15
|
+
API worker was started. This is usually a transient conflict and may clear on the next restart.
|
|
16
|
+
{{else}}
|
|
17
|
+
<code>EENGINE_WORKERS_API</code> is set to {{apiWorkerWarning.requested}}, but this platform does not support
|
|
18
|
+
<code>SO_REUSEPORT</code> (requires Linux with Node.js 23.1 or newer), so only a single API worker was started.
|
|
19
|
+
{{/equals}}
|
|
20
|
+
</div>
|
|
21
|
+
{{/if}}
|
|
22
|
+
|
|
8
23
|
<div class="card mb-4 mt-4">
|
|
9
24
|
|
|
10
25
|
<div class="table-responsive">
|
package/views/tokens/index.hbs
CHANGED
|
@@ -34,6 +34,9 @@
|
|
|
34
34
|
<th class="p-0">
|
|
35
35
|
<div class="p-2">Scopes</div>
|
|
36
36
|
</th>
|
|
37
|
+
<th class="p-0">
|
|
38
|
+
<div class="p-2">Token ID</div>
|
|
39
|
+
</th>
|
|
37
40
|
<th class="p-0">
|
|
38
41
|
<div class="p-2">Last used</div>
|
|
39
42
|
</th>
|
|
@@ -56,6 +59,12 @@
|
|
|
56
59
|
{{/if}}
|
|
57
60
|
</td>
|
|
58
61
|
|
|
62
|
+
<td class="p-2">
|
|
63
|
+
{{#if idShort}}
|
|
64
|
+
<code data-toggle="tooltip" data-placement="top" title="{{id}}" style="cursor: help;">{{idShort}}</code>
|
|
65
|
+
{{/if}}
|
|
66
|
+
</td>
|
|
67
|
+
|
|
59
68
|
<td class="p-2">
|
|
60
69
|
{{#if access.timeStr}}
|
|
61
70
|
<span class="relative-time" data-time="{{access.timeStr}}"></span>
|