ghost 5.97.3 → 5.98.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 (189) hide show
  1. package/components/tryghost-adapter-cache-memory-ttl-5.98.0.tgz +0 -0
  2. package/components/tryghost-adapter-cache-redis-5.98.0.tgz +0 -0
  3. package/components/tryghost-adapter-manager-5.98.0.tgz +0 -0
  4. package/components/tryghost-announcement-bar-settings-5.98.0.tgz +0 -0
  5. package/components/{tryghost-api-framework-5.97.3.tgz → tryghost-api-framework-5.98.0.tgz} +0 -0
  6. package/components/tryghost-api-version-compatibility-service-5.98.0.tgz +0 -0
  7. package/components/tryghost-audience-feedback-5.98.0.tgz +0 -0
  8. package/components/tryghost-bookshelf-repository-5.98.0.tgz +0 -0
  9. package/components/tryghost-bootstrap-socket-5.98.0.tgz +0 -0
  10. package/components/tryghost-collections-5.98.0.tgz +0 -0
  11. package/components/tryghost-constants-5.98.0.tgz +0 -0
  12. package/components/tryghost-custom-fonts-5.98.0.tgz +0 -0
  13. package/components/tryghost-custom-theme-settings-service-5.98.0.tgz +0 -0
  14. package/components/{tryghost-data-generator-5.97.3.tgz → tryghost-data-generator-5.98.0.tgz} +0 -0
  15. package/components/tryghost-domain-events-5.98.0.tgz +0 -0
  16. package/components/tryghost-donations-5.98.0.tgz +0 -0
  17. package/components/tryghost-dynamic-routing-events-5.98.0.tgz +0 -0
  18. package/components/tryghost-email-addresses-5.98.0.tgz +0 -0
  19. package/components/tryghost-email-analytics-provider-mailgun-5.98.0.tgz +0 -0
  20. package/components/tryghost-email-analytics-service-5.98.0.tgz +0 -0
  21. package/components/tryghost-email-content-generator-5.98.0.tgz +0 -0
  22. package/components/tryghost-email-events-5.98.0.tgz +0 -0
  23. package/components/{tryghost-email-service-5.97.3.tgz → tryghost-email-service-5.98.0.tgz} +0 -0
  24. package/components/tryghost-email-suppression-list-5.98.0.tgz +0 -0
  25. package/components/tryghost-express-dynamic-redirects-5.98.0.tgz +0 -0
  26. package/components/tryghost-external-media-inliner-5.98.0.tgz +0 -0
  27. package/components/tryghost-extract-api-key-5.98.0.tgz +0 -0
  28. package/components/tryghost-ghost-5.98.0.tgz +0 -0
  29. package/components/{tryghost-html-to-plaintext-5.97.3.tgz → tryghost-html-to-plaintext-5.98.0.tgz} +0 -0
  30. package/components/tryghost-i18n-5.98.0.tgz +0 -0
  31. package/components/tryghost-importer-handler-content-files-5.98.0.tgz +0 -0
  32. package/components/{tryghost-importer-revue-5.97.3.tgz → tryghost-importer-revue-5.98.0.tgz} +0 -0
  33. package/components/tryghost-in-memory-repository-5.98.0.tgz +0 -0
  34. package/components/{tryghost-job-manager-5.97.3.tgz → tryghost-job-manager-5.98.0.tgz} +0 -0
  35. package/components/tryghost-link-redirects-5.98.0.tgz +0 -0
  36. package/components/tryghost-link-replacer-5.98.0.tgz +0 -0
  37. package/components/{tryghost-link-tracking-5.97.3.tgz → tryghost-link-tracking-5.98.0.tgz} +0 -0
  38. package/components/{tryghost-magic-link-5.97.3.tgz → tryghost-magic-link-5.98.0.tgz} +0 -0
  39. package/components/{tryghost-mail-events-5.97.3.tgz → tryghost-mail-events-5.98.0.tgz} +0 -0
  40. package/components/tryghost-mailgun-client-5.98.0.tgz +0 -0
  41. package/components/tryghost-member-attribution-5.98.0.tgz +0 -0
  42. package/components/{tryghost-member-events-5.97.3.tgz → tryghost-member-events-5.98.0.tgz} +0 -0
  43. package/components/{tryghost-members-api-5.97.3.tgz → tryghost-members-api-5.98.0.tgz} +0 -0
  44. package/components/{tryghost-members-csv-5.97.3.tgz → tryghost-members-csv-5.98.0.tgz} +0 -0
  45. package/components/tryghost-members-events-service-5.98.0.tgz +0 -0
  46. package/components/{tryghost-members-importer-5.97.3.tgz → tryghost-members-importer-5.98.0.tgz} +0 -0
  47. package/components/tryghost-members-offers-5.98.0.tgz +0 -0
  48. package/components/tryghost-members-payments-5.98.0.tgz +0 -0
  49. package/components/tryghost-members-ssr-5.98.0.tgz +0 -0
  50. package/components/{tryghost-members-stripe-service-5.97.3.tgz → tryghost-members-stripe-service-5.98.0.tgz} +0 -0
  51. package/components/tryghost-mentions-email-report-5.98.0.tgz +0 -0
  52. package/components/tryghost-metrics-server-5.98.0.tgz +0 -0
  53. package/components/tryghost-milestones-5.98.0.tgz +0 -0
  54. package/components/tryghost-minifier-5.98.0.tgz +0 -0
  55. package/components/tryghost-model-to-domain-event-interceptor-5.98.0.tgz +0 -0
  56. package/components/tryghost-mw-api-version-mismatch-5.98.0.tgz +0 -0
  57. package/components/tryghost-mw-cache-control-5.98.0.tgz +0 -0
  58. package/components/tryghost-mw-error-handler-5.98.0.tgz +0 -0
  59. package/components/tryghost-mw-session-from-token-5.98.0.tgz +0 -0
  60. package/components/tryghost-mw-update-user-last-seen-5.98.0.tgz +0 -0
  61. package/components/tryghost-mw-version-match-5.98.0.tgz +0 -0
  62. package/components/tryghost-mw-vhost-5.98.0.tgz +0 -0
  63. package/components/tryghost-nql-filter-expansions-5.98.0.tgz +0 -0
  64. package/components/tryghost-oembed-service-5.98.0.tgz +0 -0
  65. package/components/tryghost-package-json-5.98.0.tgz +0 -0
  66. package/components/tryghost-post-events-5.98.0.tgz +0 -0
  67. package/components/tryghost-post-revisions-5.98.0.tgz +0 -0
  68. package/components/{tryghost-posts-service-5.97.3.tgz → tryghost-posts-service-5.98.0.tgz} +0 -0
  69. package/components/tryghost-recommendations-5.98.0.tgz +0 -0
  70. package/components/tryghost-referrers-5.98.0.tgz +0 -0
  71. package/components/{tryghost-security-5.97.3.tgz → tryghost-security-5.98.0.tgz} +0 -0
  72. package/components/tryghost-session-service-5.98.0.tgz +0 -0
  73. package/components/tryghost-settings-path-manager-5.98.0.tgz +0 -0
  74. package/components/tryghost-slack-notifications-5.98.0.tgz +0 -0
  75. package/components/{tryghost-staff-service-5.97.3.tgz → tryghost-staff-service-5.98.0.tgz} +0 -0
  76. package/components/{tryghost-stats-service-5.97.3.tgz → tryghost-stats-service-5.98.0.tgz} +0 -0
  77. package/components/{tryghost-tiers-5.97.3.tgz → tryghost-tiers-5.98.0.tgz} +0 -0
  78. package/components/tryghost-update-check-service-5.98.0.tgz +0 -0
  79. package/components/tryghost-verification-trigger-5.98.0.tgz +0 -0
  80. package/components/{tryghost-version-notifications-data-service-5.97.3.tgz → tryghost-version-notifications-data-service-5.98.0.tgz} +0 -0
  81. package/components/tryghost-webmentions-5.98.0.tgz +0 -0
  82. package/content/themes/source/assets/built/screen.css +1 -1
  83. package/content/themes/source/assets/built/screen.css.map +1 -1
  84. package/content/themes/source/assets/css/screen.css +3 -2
  85. package/content/themes/source/package.json +2 -2
  86. package/core/built/admin/assets/admin-x-activitypub/admin-x-activitypub.js +3 -3
  87. package/core/built/admin/assets/admin-x-activitypub/{index-ce1044b4.mjs → index-d0087e93.mjs} +4049 -3812
  88. package/core/built/admin/assets/admin-x-activitypub/modals-aaaeb2ed.mjs +218 -0
  89. package/core/built/admin/assets/admin-x-demo/admin-x-demo.js +2 -2
  90. package/core/built/admin/assets/admin-x-demo/{index-4e95bd22.mjs → index-ec1c4705.mjs} +1516 -1510
  91. package/core/built/admin/assets/admin-x-demo/{modals-1dd517c9.mjs → modals-3bfb50e8.mjs} +2 -2
  92. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-56b3751e.mjs → CodeEditorView-72579105.mjs} +2 -2
  93. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +3 -3
  94. package/core/built/admin/assets/admin-x-settings/{index-a57b83d6.mjs → index-253cc6ec.mjs} +6929 -6721
  95. package/core/built/admin/assets/admin-x-settings/{index-ae6dfa81.mjs → index-c8b38805.mjs} +2 -2
  96. package/core/built/admin/assets/admin-x-settings/{modals-8dbfe675.mjs → modals-e1b17636.mjs} +7277 -7295
  97. package/core/built/admin/assets/{chunk.524.b095de8463657e362a7a.js → chunk.524.3ed488a4afaa8dc49de8.js} +5 -5
  98. package/core/built/admin/assets/{chunk.582.32fd06c8434d4db3f0a8.js → chunk.582.4832ffb3f13ae2b00734.js} +6 -6
  99. package/core/built/admin/assets/{ghost-b7702081322ac2a966ad205b1d07416c.js → ghost-7a6db87f125f7ea41beb7a88d500e8dc.js} +173 -144
  100. package/core/built/admin/index.html +3 -3
  101. package/core/frontend/apps/amp/lib/views/amp.hbs +1 -1
  102. package/core/frontend/helpers/body_class.js +32 -0
  103. package/core/frontend/helpers/content_api_url.js +28 -0
  104. package/core/frontend/helpers/ghost_head.js +32 -3
  105. package/core/frontend/meta/schema.js +1 -0
  106. package/core/frontend/services/theme-engine/preview.js +3 -1
  107. package/core/server/api/endpoints/session.js +12 -2
  108. package/core/server/data/migrations/versions/5.97/2024-10-09-14-04-10-add-session-verification-field.js +25 -0
  109. package/core/server/models/comment.js +25 -0
  110. package/core/server/services/auth/session/SessionStore.js +0 -6
  111. package/core/server/services/auth/session/index.js +22 -1
  112. package/core/server/services/auth/session/middleware.js +55 -6
  113. package/core/server/services/url/Queue.js +14 -13
  114. package/core/server/services/url/Resources.js +4 -3
  115. package/core/server/services/url/UrlGenerator.js +4 -8
  116. package/core/server/services/url/UrlService.js +2 -3
  117. package/core/server/services/url/Urls.js +3 -6
  118. package/core/server/web/api/endpoints/admin/routes.js +2 -0
  119. package/core/server/web/shared/middleware/api/spam-prevention.js +62 -0
  120. package/core/server/web/shared/middleware/brute.js +22 -0
  121. package/core/shared/config/defaults.json +15 -3
  122. package/core/shared/config/env/config.testing-browser.json +12 -0
  123. package/core/shared/config/env/config.testing-mysql.json +12 -0
  124. package/core/shared/config/env/config.testing.json +12 -0
  125. package/core/shared/labs.js +3 -1
  126. package/nodemon.json +3 -0
  127. package/package.json +160 -154
  128. package/yarn.lock +191 -103
  129. package/components/tryghost-adapter-cache-memory-ttl-5.97.3.tgz +0 -0
  130. package/components/tryghost-adapter-cache-redis-5.97.3.tgz +0 -0
  131. package/components/tryghost-adapter-manager-5.97.3.tgz +0 -0
  132. package/components/tryghost-announcement-bar-settings-5.97.3.tgz +0 -0
  133. package/components/tryghost-api-version-compatibility-service-5.97.3.tgz +0 -0
  134. package/components/tryghost-audience-feedback-5.97.3.tgz +0 -0
  135. package/components/tryghost-bookshelf-repository-5.97.3.tgz +0 -0
  136. package/components/tryghost-bootstrap-socket-5.97.3.tgz +0 -0
  137. package/components/tryghost-collections-5.97.3.tgz +0 -0
  138. package/components/tryghost-constants-5.97.3.tgz +0 -0
  139. package/components/tryghost-custom-theme-settings-service-5.97.3.tgz +0 -0
  140. package/components/tryghost-domain-events-5.97.3.tgz +0 -0
  141. package/components/tryghost-donations-5.97.3.tgz +0 -0
  142. package/components/tryghost-dynamic-routing-events-5.97.3.tgz +0 -0
  143. package/components/tryghost-email-addresses-5.97.3.tgz +0 -0
  144. package/components/tryghost-email-analytics-provider-mailgun-5.97.3.tgz +0 -0
  145. package/components/tryghost-email-analytics-service-5.97.3.tgz +0 -0
  146. package/components/tryghost-email-content-generator-5.97.3.tgz +0 -0
  147. package/components/tryghost-email-events-5.97.3.tgz +0 -0
  148. package/components/tryghost-email-suppression-list-5.97.3.tgz +0 -0
  149. package/components/tryghost-express-dynamic-redirects-5.97.3.tgz +0 -0
  150. package/components/tryghost-external-media-inliner-5.97.3.tgz +0 -0
  151. package/components/tryghost-extract-api-key-5.97.3.tgz +0 -0
  152. package/components/tryghost-ghost-5.97.3.tgz +0 -0
  153. package/components/tryghost-i18n-5.97.3.tgz +0 -0
  154. package/components/tryghost-importer-handler-content-files-5.97.3.tgz +0 -0
  155. package/components/tryghost-in-memory-repository-5.97.3.tgz +0 -0
  156. package/components/tryghost-link-redirects-5.97.3.tgz +0 -0
  157. package/components/tryghost-link-replacer-5.97.3.tgz +0 -0
  158. package/components/tryghost-mailgun-client-5.97.3.tgz +0 -0
  159. package/components/tryghost-member-attribution-5.97.3.tgz +0 -0
  160. package/components/tryghost-members-events-service-5.97.3.tgz +0 -0
  161. package/components/tryghost-members-offers-5.97.3.tgz +0 -0
  162. package/components/tryghost-members-payments-5.97.3.tgz +0 -0
  163. package/components/tryghost-members-ssr-5.97.3.tgz +0 -0
  164. package/components/tryghost-mentions-email-report-5.97.3.tgz +0 -0
  165. package/components/tryghost-metrics-server-5.97.3.tgz +0 -0
  166. package/components/tryghost-milestones-5.97.3.tgz +0 -0
  167. package/components/tryghost-minifier-5.97.3.tgz +0 -0
  168. package/components/tryghost-model-to-domain-event-interceptor-5.97.3.tgz +0 -0
  169. package/components/tryghost-mw-api-version-mismatch-5.97.3.tgz +0 -0
  170. package/components/tryghost-mw-cache-control-5.97.3.tgz +0 -0
  171. package/components/tryghost-mw-error-handler-5.97.3.tgz +0 -0
  172. package/components/tryghost-mw-session-from-token-5.97.3.tgz +0 -0
  173. package/components/tryghost-mw-update-user-last-seen-5.97.3.tgz +0 -0
  174. package/components/tryghost-mw-version-match-5.97.3.tgz +0 -0
  175. package/components/tryghost-mw-vhost-5.97.3.tgz +0 -0
  176. package/components/tryghost-nql-filter-expansions-5.97.3.tgz +0 -0
  177. package/components/tryghost-oembed-service-5.97.3.tgz +0 -0
  178. package/components/tryghost-package-json-5.97.3.tgz +0 -0
  179. package/components/tryghost-post-events-5.97.3.tgz +0 -0
  180. package/components/tryghost-post-revisions-5.97.3.tgz +0 -0
  181. package/components/tryghost-recommendations-5.97.3.tgz +0 -0
  182. package/components/tryghost-referrers-5.97.3.tgz +0 -0
  183. package/components/tryghost-session-service-5.97.3.tgz +0 -0
  184. package/components/tryghost-settings-path-manager-5.97.3.tgz +0 -0
  185. package/components/tryghost-slack-notifications-5.97.3.tgz +0 -0
  186. package/components/tryghost-update-check-service-5.97.3.tgz +0 -0
  187. package/components/tryghost-verification-trigger-5.97.3.tgz +0 -0
  188. package/components/tryghost-webmentions-5.97.3.tgz +0 -0
  189. package/core/built/admin/assets/admin-x-activitypub/modals-35dd1224.mjs +0 -250
@@ -29,6 +29,8 @@ let spamGlobalBlock = spam.global_block || {};
29
29
  let spamGlobalReset = spam.global_reset || {};
30
30
  let spamUserReset = spam.user_reset || {};
31
31
  let spamUserLogin = spam.user_login || {};
32
+ let spamSendVerificationCode = spam.send_verification_code || {};
33
+ let spamUserVerification = spam.user_verification || {};
32
34
  let spamMemberLogin = spam.member_login || {};
33
35
  let spamContentApiKey = spam.content_api_key || {};
34
36
  let spamWebmentionsBlock = spam.webmentions_block || {};
@@ -44,6 +46,8 @@ let userLoginInstance;
44
46
  let membersAuthInstance;
45
47
  let membersAuthEnumerationInstance;
46
48
  let userResetInstance;
49
+ let sendVerificationCodeInstance;
50
+ let userVerificationInstance;
47
51
  let contentApiKeyInstance;
48
52
  let emailPreviewBlockInstance;
49
53
 
@@ -308,6 +312,58 @@ const userReset = function userReset() {
308
312
  return userResetInstance;
309
313
  };
310
314
 
315
+ const userVerification = function userVerification() {
316
+ const ExpressBrute = require('express-brute');
317
+ const BruteKnex = require('brute-knex');
318
+ const db = require('../../../../data/db');
319
+
320
+ store = store || new BruteKnex({
321
+ tablename: 'brute',
322
+ createTable: false,
323
+ knex: db.knex
324
+ });
325
+
326
+ userVerificationInstance = userVerificationInstance || new ExpressBrute(store,
327
+ extend({
328
+ attachResetToRequest: true,
329
+ failCallback(req, res, next) {
330
+ return next(new errors.TooManyRequestsError({
331
+ message: tpl(messages.tooManyAttempts)
332
+ }));
333
+ },
334
+ handleStoreError: handleStoreError
335
+ }, pick(spamUserVerification, spamConfigKeys))
336
+ );
337
+
338
+ return userVerificationInstance;
339
+ };
340
+
341
+ const sendVerificationCode = function sendVerificationCode() {
342
+ const ExpressBrute = require('express-brute');
343
+ const BruteKnex = require('brute-knex');
344
+ const db = require('../../../../data/db');
345
+
346
+ store = store || new BruteKnex({
347
+ tablename: 'brute',
348
+ createTable: false,
349
+ knex: db.knex
350
+ });
351
+
352
+ sendVerificationCodeInstance = sendVerificationCodeInstance || new ExpressBrute(store,
353
+ extend({
354
+ attachResetToRequest: true,
355
+ failCallback(req, res, next) {
356
+ return next(new errors.TooManyRequestsError({
357
+ message: tpl(messages.tooManyAttempts)
358
+ }));
359
+ },
360
+ handleStoreError: handleStoreError
361
+ }, pick(spamSendVerificationCode, spamConfigKeys))
362
+ );
363
+
364
+ return sendVerificationCodeInstance;
365
+ };
366
+
311
367
  // This protects a private blog from spam attacks. The defaults here allow 10 attempts per IP per hour
312
368
  // The endpoint is then locked for an hour
313
369
  const privateBlog = () => {
@@ -372,6 +428,8 @@ module.exports = {
372
428
  globalBlock: globalBlock,
373
429
  globalReset: globalReset,
374
430
  userLogin: userLogin,
431
+ sendVerificationCode: sendVerificationCode,
432
+ userVerification: userVerification,
375
433
  membersAuth: membersAuth,
376
434
  membersAuthEnumeration: membersAuthEnumeration,
377
435
  userReset: userReset,
@@ -389,6 +447,8 @@ module.exports = {
389
447
  membersAuthInstance = undefined;
390
448
  membersAuthEnumerationInstance = undefined;
391
449
  userResetInstance = undefined;
450
+ sendVerificationCodeInstance = undefined;
451
+ userVerificationInstance = undefined;
392
452
  contentApiKeyInstance = undefined;
393
453
 
394
454
  spam = config.get('spam') || {};
@@ -397,6 +457,8 @@ module.exports = {
397
457
  spamGlobalReset = spam.global_reset || {};
398
458
  spamUserReset = spam.user_reset || {};
399
459
  spamUserLogin = spam.user_login || {};
460
+ spamSendVerificationCode = spam.send_verification_code || {};
461
+ spamUserVerification = spam.user_verification || {};
400
462
  spamMemberLogin = spam.member_login || {};
401
463
  spamContentApiKey = spam.content_api_key || {};
402
464
  }
@@ -50,6 +50,28 @@ module.exports = {
50
50
  }
51
51
  })(req, res, next);
52
52
  },
53
+ /**
54
+ * block per IP
55
+ */
56
+ sendVerificationCode(req, res, next) {
57
+ return spamPrevention.sendVerificationCode().getMiddleware({
58
+ ignoreIP: false,
59
+ key(_req, _res, _next) {
60
+ return _next('send_verification_code');
61
+ }
62
+ })(req, res, next);
63
+ },
64
+ /**
65
+ * block per IP
66
+ */
67
+ userVerification(req, res, next) {
68
+ return spamPrevention.userVerification().getMiddleware({
69
+ ignoreIP: false,
70
+ key(_req, _res, _next) {
71
+ return _next('user_verification');
72
+ }
73
+ })(req, res, next);
74
+ },
53
75
  /**
54
76
  * block per ip
55
77
  */
@@ -73,6 +73,18 @@
73
73
  "lifetime": 3600,
74
74
  "freeRetries": 4
75
75
  },
76
+ "user_verification": {
77
+ "minWait": 3600000,
78
+ "maxWait": 3600000,
79
+ "lifetime": 3600,
80
+ "freeRetries": 4
81
+ },
82
+ "send_verification_code": {
83
+ "minWait": 3600000,
84
+ "maxWait": 3600000,
85
+ "lifetime": 3600,
86
+ "freeRetries": 4
87
+ },
76
88
  "global_reset": {
77
89
  "minWait": 3600000,
78
90
  "maxWait": 3600000,
@@ -185,12 +197,12 @@
185
197
  },
186
198
  "portal": {
187
199
  "url": "https://cdn.jsdelivr.net/ghost/portal@~{version}/umd/portal.min.js",
188
- "version": "2.44"
200
+ "version": "2.45"
189
201
  },
190
202
  "sodoSearch": {
191
203
  "url": "https://cdn.jsdelivr.net/ghost/sodo-search@~{version}/umd/sodo-search.min.js",
192
204
  "styles": "https://cdn.jsdelivr.net/ghost/sodo-search@~{version}/umd/main.css",
193
- "version": "1.3"
205
+ "version": "1.4"
194
206
  },
195
207
  "announcementBar": {
196
208
  "url": "https://cdn.jsdelivr.net/ghost/announcement-bar@~{version}/umd/announcement-bar.min.js",
@@ -198,7 +210,7 @@
198
210
  },
199
211
  "comments": {
200
212
  "url": "https://cdn.jsdelivr.net/ghost/comments-ui@~{version}/umd/comments-ui.min.js",
201
- "version": "0.19"
213
+ "version": "0.20"
202
214
  },
203
215
  "signupForm": {
204
216
  "url": "https://cdn.jsdelivr.net/ghost/signup-form@~{version}/umd/signup-form.min.js",
@@ -29,6 +29,18 @@
29
29
  "lifetime": 3600,
30
30
  "freeRetries": 4
31
31
  },
32
+ "user_verification": {
33
+ "minWait": 3600000,
34
+ "maxWait": 3600000,
35
+ "lifetime": 3600,
36
+ "freeRetries": 4
37
+ },
38
+ "send_verification_code": {
39
+ "minWait": 3600000,
40
+ "maxWait": 3600000,
41
+ "lifetime": 3600,
42
+ "freeRetries": 4
43
+ },
32
44
  "global_reset": {
33
45
  "minWait": 3600000,
34
46
  "maxWait": 3600000,
@@ -30,6 +30,18 @@
30
30
  "lifetime": 3600,
31
31
  "freeRetries": 4
32
32
  },
33
+ "user_verification": {
34
+ "minWait": 3600000,
35
+ "maxWait": 3600000,
36
+ "lifetime": 3600,
37
+ "freeRetries": 4
38
+ },
39
+ "send_verification_code": {
40
+ "minWait": 3600000,
41
+ "maxWait": 3600000,
42
+ "lifetime": 3600,
43
+ "freeRetries": 4
44
+ },
33
45
  "global_reset": {
34
46
  "minWait": 3600000,
35
47
  "maxWait": 3600000,
@@ -29,6 +29,18 @@
29
29
  "lifetime": 3600,
30
30
  "freeRetries": 4
31
31
  },
32
+ "user_verification": {
33
+ "minWait": 3600000,
34
+ "maxWait": 3600000,
35
+ "lifetime": 3600,
36
+ "freeRetries": 4
37
+ },
38
+ "send_verification_code": {
39
+ "minWait": 3600000,
40
+ "maxWait": 3600000,
41
+ "lifetime": 3600,
42
+ "freeRetries": 4
43
+ },
32
44
  "global_reset": {
33
45
  "minWait": 3600000,
34
46
  "maxWait": 3600000,
@@ -45,7 +45,9 @@ const ALPHA_FEATURES = [
45
45
  'lexicalIndicators',
46
46
  'adminXDemo',
47
47
  'contentVisibility',
48
- 'commentImprovements'
48
+ 'commentImprovements',
49
+ 'staff2fa',
50
+ 'customFonts'
49
51
  ];
50
52
 
51
53
  module.exports.GA_KEYS = [...GA_FEATURES];
package/nodemon.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "ignore": ["*.test.js", "**/content/public/**", "**/core/built/**", ".yarncache/**"]
3
+ }