ghost 5.95.0 → 5.96.1

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 (200) hide show
  1. package/components/tryghost-adapter-cache-memory-ttl-5.96.1.tgz +0 -0
  2. package/components/{tryghost-adapter-cache-redis-5.95.0.tgz → tryghost-adapter-cache-redis-5.96.1.tgz} +0 -0
  3. package/components/tryghost-adapter-manager-5.96.1.tgz +0 -0
  4. package/components/tryghost-announcement-bar-settings-5.96.1.tgz +0 -0
  5. package/components/{tryghost-api-framework-5.95.0.tgz → tryghost-api-framework-5.96.1.tgz} +0 -0
  6. package/components/tryghost-api-version-compatibility-service-5.96.1.tgz +0 -0
  7. package/components/tryghost-audience-feedback-5.96.1.tgz +0 -0
  8. package/components/tryghost-bookshelf-repository-5.96.1.tgz +0 -0
  9. package/components/tryghost-bootstrap-socket-5.96.1.tgz +0 -0
  10. package/components/tryghost-collections-5.96.1.tgz +0 -0
  11. package/components/tryghost-constants-5.96.1.tgz +0 -0
  12. package/components/{tryghost-custom-theme-settings-service-5.95.0.tgz → tryghost-custom-theme-settings-service-5.96.1.tgz} +0 -0
  13. package/components/{tryghost-data-generator-5.95.0.tgz → tryghost-data-generator-5.96.1.tgz} +0 -0
  14. package/components/{tryghost-domain-events-5.95.0.tgz → tryghost-domain-events-5.96.1.tgz} +0 -0
  15. package/components/tryghost-donations-5.96.1.tgz +0 -0
  16. package/components/tryghost-dynamic-routing-events-5.96.1.tgz +0 -0
  17. package/components/tryghost-email-addresses-5.96.1.tgz +0 -0
  18. package/components/tryghost-email-analytics-provider-mailgun-5.96.1.tgz +0 -0
  19. package/components/{tryghost-email-analytics-service-5.95.0.tgz → tryghost-email-analytics-service-5.96.1.tgz} +0 -0
  20. package/components/tryghost-email-content-generator-5.96.1.tgz +0 -0
  21. package/components/tryghost-email-events-5.96.1.tgz +0 -0
  22. package/components/tryghost-email-service-5.96.1.tgz +0 -0
  23. package/components/tryghost-email-suppression-list-5.96.1.tgz +0 -0
  24. package/components/tryghost-express-dynamic-redirects-5.96.1.tgz +0 -0
  25. package/components/{tryghost-external-media-inliner-5.95.0.tgz → tryghost-external-media-inliner-5.96.1.tgz} +0 -0
  26. package/components/tryghost-extract-api-key-5.96.1.tgz +0 -0
  27. package/components/tryghost-ghost-5.96.1.tgz +0 -0
  28. package/components/tryghost-html-to-plaintext-5.96.1.tgz +0 -0
  29. package/components/tryghost-i18n-5.96.1.tgz +0 -0
  30. package/components/{tryghost-importer-handler-content-files-5.95.0.tgz → tryghost-importer-handler-content-files-5.96.1.tgz} +0 -0
  31. package/components/{tryghost-importer-revue-5.95.0.tgz → tryghost-importer-revue-5.96.1.tgz} +0 -0
  32. package/components/tryghost-in-memory-repository-5.96.1.tgz +0 -0
  33. package/components/{tryghost-job-manager-5.95.0.tgz → tryghost-job-manager-5.96.1.tgz} +0 -0
  34. package/components/tryghost-link-redirects-5.96.1.tgz +0 -0
  35. package/components/tryghost-link-replacer-5.96.1.tgz +0 -0
  36. package/components/{tryghost-link-tracking-5.95.0.tgz → tryghost-link-tracking-5.96.1.tgz} +0 -0
  37. package/components/tryghost-magic-link-5.96.1.tgz +0 -0
  38. package/components/tryghost-mail-events-5.96.1.tgz +0 -0
  39. package/components/{tryghost-mailgun-client-5.95.0.tgz → tryghost-mailgun-client-5.96.1.tgz} +0 -0
  40. package/components/{tryghost-member-attribution-5.95.0.tgz → tryghost-member-attribution-5.96.1.tgz} +0 -0
  41. package/components/tryghost-member-events-5.96.1.tgz +0 -0
  42. package/components/{tryghost-members-api-5.95.0.tgz → tryghost-members-api-5.96.1.tgz} +0 -0
  43. package/components/tryghost-members-csv-5.96.1.tgz +0 -0
  44. package/components/{tryghost-members-events-service-5.95.0.tgz → tryghost-members-events-service-5.96.1.tgz} +0 -0
  45. package/components/tryghost-members-importer-5.96.1.tgz +0 -0
  46. package/components/tryghost-members-offers-5.96.1.tgz +0 -0
  47. package/components/tryghost-members-payments-5.96.1.tgz +0 -0
  48. package/components/tryghost-members-ssr-5.96.1.tgz +0 -0
  49. package/components/tryghost-members-stripe-service-5.96.1.tgz +0 -0
  50. package/components/{tryghost-mentions-email-report-5.95.0.tgz → tryghost-mentions-email-report-5.96.1.tgz} +0 -0
  51. package/components/tryghost-metrics-server-5.96.1.tgz +0 -0
  52. package/components/{tryghost-milestones-5.95.0.tgz → tryghost-milestones-5.96.1.tgz} +0 -0
  53. package/components/tryghost-minifier-5.96.1.tgz +0 -0
  54. package/components/tryghost-model-to-domain-event-interceptor-5.96.1.tgz +0 -0
  55. package/components/tryghost-mw-api-version-mismatch-5.96.1.tgz +0 -0
  56. package/components/tryghost-mw-cache-control-5.96.1.tgz +0 -0
  57. package/components/tryghost-mw-error-handler-5.96.1.tgz +0 -0
  58. package/components/{tryghost-mw-session-from-token-5.95.0.tgz → tryghost-mw-session-from-token-5.96.1.tgz} +0 -0
  59. package/components/tryghost-mw-update-user-last-seen-5.96.1.tgz +0 -0
  60. package/components/{tryghost-mw-version-match-5.95.0.tgz → tryghost-mw-version-match-5.96.1.tgz} +0 -0
  61. package/components/tryghost-mw-vhost-5.96.1.tgz +0 -0
  62. package/components/tryghost-nql-filter-expansions-5.96.1.tgz +0 -0
  63. package/components/tryghost-oembed-service-5.96.1.tgz +0 -0
  64. package/components/tryghost-package-json-5.96.1.tgz +0 -0
  65. package/components/tryghost-post-events-5.96.1.tgz +0 -0
  66. package/components/{tryghost-post-revisions-5.95.0.tgz → tryghost-post-revisions-5.96.1.tgz} +0 -0
  67. package/components/tryghost-posts-service-5.96.1.tgz +0 -0
  68. package/components/tryghost-recommendations-5.96.1.tgz +0 -0
  69. package/components/tryghost-referrers-5.96.1.tgz +0 -0
  70. package/components/{tryghost-security-5.95.0.tgz → tryghost-security-5.96.1.tgz} +0 -0
  71. package/components/{tryghost-session-service-5.95.0.tgz → tryghost-session-service-5.96.1.tgz} +0 -0
  72. package/components/tryghost-settings-path-manager-5.96.1.tgz +0 -0
  73. package/components/tryghost-slack-notifications-5.96.1.tgz +0 -0
  74. package/components/{tryghost-staff-service-5.95.0.tgz → tryghost-staff-service-5.96.1.tgz} +0 -0
  75. package/components/{tryghost-stats-service-5.95.0.tgz → tryghost-stats-service-5.96.1.tgz} +0 -0
  76. package/components/{tryghost-tiers-5.95.0.tgz → tryghost-tiers-5.96.1.tgz} +0 -0
  77. package/components/{tryghost-update-check-service-5.95.0.tgz → tryghost-update-check-service-5.96.1.tgz} +0 -0
  78. package/components/tryghost-verification-trigger-5.96.1.tgz +0 -0
  79. package/components/tryghost-version-notifications-data-service-5.96.1.tgz +0 -0
  80. package/components/tryghost-webmentions-5.96.1.tgz +0 -0
  81. package/core/boot.js +43 -0
  82. package/core/bridge.js +11 -8
  83. package/core/built/admin/assets/admin-x-activitypub/admin-x-activitypub.js +3 -3
  84. package/core/built/admin/assets/admin-x-activitypub/{index-6868a2ce.mjs → index-def21e23.mjs} +4359 -3811
  85. package/core/built/admin/assets/admin-x-activitypub/modals-09282c4e.mjs +250 -0
  86. package/core/built/admin/assets/admin-x-demo/admin-x-demo.js +1 -1
  87. package/core/built/admin/assets/admin-x-demo/{index-2575d977.mjs → index-3d57e7aa.mjs} +766 -762
  88. package/core/built/admin/assets/admin-x-demo/{modals-3cdb55d2.mjs → modals-191eb359.mjs} +2 -2
  89. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-c5fded51.mjs → CodeEditorView-85a3642c.mjs} +2 -2
  90. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
  91. package/core/built/admin/assets/admin-x-settings/{index-baad1fa3.mjs → index-ebbd8de9.mjs} +2939 -2942
  92. package/core/built/admin/assets/admin-x-settings/{index-b78b238b.mjs → index-eeeca6f6.mjs} +2 -2
  93. package/core/built/admin/assets/admin-x-settings/{modals-d557f15c.mjs → modals-8a98634b.mjs} +11206 -16095
  94. package/core/built/admin/assets/chunk.524.9b3ed6b39dd6c575a36f.js +35 -0
  95. package/core/built/admin/assets/{chunk.582.57a31e68e4e9afe84109.js → chunk.582.5218d47941a18a44ead8.js} +6 -6
  96. package/core/built/admin/assets/{chunk.602.a3d38ba0a516decd78ce.js → chunk.874.e1d421507701daac30fb.js} +5226 -6255
  97. package/core/built/admin/assets/{ghost-9397fa4c9aadec9cff772a6d4db6b1f8.js → ghost-286f9a114755e8c3c7e9c37550f624a9.js} +86 -82
  98. package/core/built/admin/assets/ghost-c75b9d653495f9cfce528f6e10900b3f.css +1 -0
  99. package/core/built/admin/assets/ghost-dark-6ea629e177f77314f5d75c0ca97190ab.css +1 -0
  100. package/core/built/admin/assets/{vendor-b83f61eee071be0ef00075df9ff7782d.js → vendor-88cd9f5cf5eba65221e2d2a636531eaa.js} +19 -17
  101. package/core/built/admin/index.html +6 -6
  102. package/core/frontend/helpers/content_api_key.js +19 -0
  103. package/core/frontend/helpers/get.js +24 -41
  104. package/core/frontend/helpers/ghost_head.js +3 -3
  105. package/core/frontend/meta/generate-excerpt.js +1 -2
  106. package/core/frontend/services/{admin-auth-assets/AdminAuthAssetsService.js → assets-minification/AdminAuthAssets.js} +22 -62
  107. package/core/frontend/services/assets-minification/AssetsMinificationBase.js +79 -0
  108. package/core/frontend/services/{card-assets/CardAssetService.js → assets-minification/CardAssets.js} +20 -37
  109. package/core/frontend/services/assets-minification/CommentCountsAssets.js +34 -0
  110. package/core/frontend/services/assets-minification/MemberAttributionAssets.js +46 -0
  111. package/core/frontend/services/assets-minification/index.js +16 -0
  112. package/core/frontend/services/sitemap/BaseSiteMapGenerator.js +4 -1
  113. package/core/frontend/web/site.js +5 -4
  114. package/core/server/data/importer/importers/data/PostsImporter.js +2 -2
  115. package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +1 -1
  116. package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +1 -1
  117. package/core/server/data/migrations/versions/5.0/2022-05-21-00-00-regenerate-posts-html.js +1 -1
  118. package/core/server/data/schema/schema.js +2 -2
  119. package/core/server/lib/mobiledoc.js +4 -0
  120. package/core/server/models/member.js +1 -1
  121. package/core/server/models/post.js +1 -1
  122. package/core/server/services/email-service/EmailServiceWrapper.js +1 -1
  123. package/core/server/services/themes/activate.js +2 -2
  124. package/core/server/services/themes/index.js +4 -1
  125. package/core/server/services/themes/validate.js +7 -5
  126. package/core/server/views/maintenance.html +3 -3
  127. package/core/server/web/admin/app.js +2 -1
  128. package/core/shared/config/defaults.json +7 -4
  129. package/core/shared/config/env/config.testing-browser.json +3 -0
  130. package/core/shared/config/env/config.testing-mysql.json +3 -0
  131. package/core/shared/config/env/config.testing.json +3 -0
  132. package/core/shared/config/helpers.js +4 -1
  133. package/core/shared/config/utils.js +5 -6
  134. package/core/shared/prometheus-client.js +36 -0
  135. package/package.json +156 -153
  136. package/yarn.lock +433 -264
  137. package/components/tryghost-adapter-cache-memory-ttl-5.95.0.tgz +0 -0
  138. package/components/tryghost-adapter-manager-5.95.0.tgz +0 -0
  139. package/components/tryghost-announcement-bar-settings-5.95.0.tgz +0 -0
  140. package/components/tryghost-api-version-compatibility-service-5.95.0.tgz +0 -0
  141. package/components/tryghost-audience-feedback-5.95.0.tgz +0 -0
  142. package/components/tryghost-bookshelf-repository-5.95.0.tgz +0 -0
  143. package/components/tryghost-bootstrap-socket-5.95.0.tgz +0 -0
  144. package/components/tryghost-collections-5.95.0.tgz +0 -0
  145. package/components/tryghost-constants-5.95.0.tgz +0 -0
  146. package/components/tryghost-donations-5.95.0.tgz +0 -0
  147. package/components/tryghost-dynamic-routing-events-5.95.0.tgz +0 -0
  148. package/components/tryghost-email-addresses-5.95.0.tgz +0 -0
  149. package/components/tryghost-email-analytics-provider-mailgun-5.95.0.tgz +0 -0
  150. package/components/tryghost-email-content-generator-5.95.0.tgz +0 -0
  151. package/components/tryghost-email-events-5.95.0.tgz +0 -0
  152. package/components/tryghost-email-service-5.95.0.tgz +0 -0
  153. package/components/tryghost-email-suppression-list-5.95.0.tgz +0 -0
  154. package/components/tryghost-express-dynamic-redirects-5.95.0.tgz +0 -0
  155. package/components/tryghost-extract-api-key-5.95.0.tgz +0 -0
  156. package/components/tryghost-ghost-5.95.0.tgz +0 -0
  157. package/components/tryghost-html-to-plaintext-5.95.0.tgz +0 -0
  158. package/components/tryghost-i18n-5.95.0.tgz +0 -0
  159. package/components/tryghost-in-memory-repository-5.95.0.tgz +0 -0
  160. package/components/tryghost-link-redirects-5.95.0.tgz +0 -0
  161. package/components/tryghost-link-replacer-5.95.0.tgz +0 -0
  162. package/components/tryghost-magic-link-5.95.0.tgz +0 -0
  163. package/components/tryghost-mail-events-5.95.0.tgz +0 -0
  164. package/components/tryghost-member-events-5.95.0.tgz +0 -0
  165. package/components/tryghost-members-csv-5.95.0.tgz +0 -0
  166. package/components/tryghost-members-importer-5.95.0.tgz +0 -0
  167. package/components/tryghost-members-offers-5.95.0.tgz +0 -0
  168. package/components/tryghost-members-payments-5.95.0.tgz +0 -0
  169. package/components/tryghost-members-ssr-5.95.0.tgz +0 -0
  170. package/components/tryghost-members-stripe-service-5.95.0.tgz +0 -0
  171. package/components/tryghost-minifier-5.95.0.tgz +0 -0
  172. package/components/tryghost-model-to-domain-event-interceptor-5.95.0.tgz +0 -0
  173. package/components/tryghost-mw-api-version-mismatch-5.95.0.tgz +0 -0
  174. package/components/tryghost-mw-cache-control-5.95.0.tgz +0 -0
  175. package/components/tryghost-mw-error-handler-5.95.0.tgz +0 -0
  176. package/components/tryghost-mw-update-user-last-seen-5.95.0.tgz +0 -0
  177. package/components/tryghost-mw-vhost-5.95.0.tgz +0 -0
  178. package/components/tryghost-nql-filter-expansions-5.95.0.tgz +0 -0
  179. package/components/tryghost-oembed-service-5.95.0.tgz +0 -0
  180. package/components/tryghost-package-json-5.95.0.tgz +0 -0
  181. package/components/tryghost-post-events-5.95.0.tgz +0 -0
  182. package/components/tryghost-posts-service-5.95.0.tgz +0 -0
  183. package/components/tryghost-recommendations-5.95.0.tgz +0 -0
  184. package/components/tryghost-referrers-5.95.0.tgz +0 -0
  185. package/components/tryghost-settings-path-manager-5.95.0.tgz +0 -0
  186. package/components/tryghost-slack-notifications-5.95.0.tgz +0 -0
  187. package/components/tryghost-verification-trigger-5.95.0.tgz +0 -0
  188. package/components/tryghost-version-notifications-data-service-5.95.0.tgz +0 -0
  189. package/components/tryghost-webmentions-5.95.0.tgz +0 -0
  190. package/core/built/admin/assets/admin-x-activitypub/modals-d56ac37e.mjs +0 -342
  191. package/core/built/admin/assets/chunk.524.d49d5b3795688b5f880d.js +0 -35
  192. package/core/built/admin/assets/ghost-8f07a67edb1191d1cdddd8a296bbdc4d.css +0 -1
  193. package/core/built/admin/assets/ghost-dark-fe1f347ef1a04509da6bbac199a51d23.css +0 -1
  194. package/core/frontend/services/admin-auth-assets/index.js +0 -4
  195. package/core/frontend/services/card-assets/index.js +0 -4
  196. package/core/frontend/services/comment-counts-assets/CommentCountsAssetsService.js +0 -59
  197. package/core/frontend/services/comment-counts-assets/index.js +0 -4
  198. package/core/frontend/services/member-attribution-assets/MemberAttributionAssetsService.js +0 -83
  199. package/core/frontend/services/member-attribution-assets/index.js +0 -4
  200. /package/core/built/admin/assets/{chunk.602.a3d38ba0a516decd78ce.js.LICENSE.txt → chunk.874.e1d421507701daac30fb.js.LICENSE.txt} +0 -0
@@ -8916,7 +8916,9 @@ e.default={content:'<path d="M23.56 8.73a1.51 1.51 0 00-1.41-1h-6.09a.5.5 0 01-.
8916
8916
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8917
8917
  e.default={content:'<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12.71 1.436l3.272 6.482 6.296.624a.787.787 0 01.489 1.343l-5.182 5.136 1.921 6.98a.796.796 0 01-1.125.914l-6.383-3.161-6.375 3.157a.794.794 0 01-1.125-.914l1.92-6.98-5.185-5.136a.787.787 0 01.489-1.343l6.296-.624 3.267-6.478a.801.801 0 011.425 0z"/>',attrs:{fill:"none",viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/stats-outline",["exports"],(function(e){"use strict"
8918
8918
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8919
- e.default={content:'<path d="M1.836 3.027c-.209.03-.452.108-.659.213-.55.277-.926.774-1.113 1.473l-.052.195v14.256l.054.204c.212.797.778 1.336 1.647 1.568l.195.052h20.256l.204-.054c.112-.029.314-.108.45-.174.2-.099.285-.16.46-.326.118-.113.253-.262.3-.332.19-.287.356-.708.39-.986.008-.072.024-.125.035-.118.012.007.021-3.057.021-6.995 0-4.646-.008-7.013-.024-7.023-.013-.008-.024-.05-.024-.094 0-.134-.092-.449-.194-.662-.273-.572-.76-.954-1.482-1.16l-.184-.052-10.068-.003c-5.596-.002-10.132.006-10.212.018m.101 1.524c-.15.046-.284.181-.356.36l-.057.141V19.02l.057.116c.07.144.2.241.405.304.154.048.24.048 10.048.048 8.88 0 9.906-.004 10.019-.037a.586.586 0 00.366-.362l.057-.141V4.98l-.057-.116c-.07-.144-.2-.241-.405-.304-.154-.048-.238-.048-10.059-.046-8.65.001-9.918.006-10.018.037M.012 12.024c0 3.861.003 5.44.006 3.51.003-1.93.003-5.09 0-7.02-.003-1.93-.006-.351-.006 3.51m20.07-4.511a.746.746 0 00-.37.219c-.054.057-.987 1.438-2.072 3.068a649.896 649.896 0 01-1.995 2.987c-.014.015-.489-.442-1.251-1.202-1.4-1.396-1.334-1.343-1.685-1.324a.72.72 0 00-.301.066c-.074.037-.48.425-1.294 1.237l-1.187 1.183-1.193-2.2c-.656-1.21-1.23-2.242-1.277-2.295a.749.749 0 00-1.065-.05c-.123.118-3.298 5.398-3.36 5.586a.809.809 0 00.039.533.83.83 0 00.377.368c.113.052.157.059.327.051.236-.01.386-.076.52-.228.048-.055.637-1.016 1.307-2.136.671-1.12 1.232-2.049 1.247-2.065.02-.02.303.482 1.131 2.01.607 1.121 1.142 2.09 1.189 2.152.122.165.311.256.551.267.342.016.274.07 1.734-1.385l1.29-1.286 1.278 1.275c.882.88 1.311 1.292 1.386 1.33.077.039.164.057.304.065.174.01.21.004.336-.053a.964.964 0 00.209-.13c.087-.081 4.61-6.86 4.686-7.023.16-.342-.02-.799-.377-.966a.879.879 0 00-.484-.054" fill="currentColor" fill-rule="evenodd"/>',attrs:{viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/stats",["exports"],(function(e){"use strict"
8919
+ e.default={content:'<path d="M1.836 3.027c-.209.03-.452.108-.659.213-.55.277-.926.774-1.113 1.473l-.052.195v14.256l.054.204c.212.797.778 1.336 1.647 1.568l.195.052h20.256l.204-.054c.112-.029.314-.108.45-.174.2-.099.285-.16.46-.326.118-.113.253-.262.3-.332.19-.287.356-.708.39-.986.008-.072.024-.125.035-.118.012.007.021-3.057.021-6.995 0-4.646-.008-7.013-.024-7.023-.013-.008-.024-.05-.024-.094 0-.134-.092-.449-.194-.662-.273-.572-.76-.954-1.482-1.16l-.184-.052-10.068-.003c-5.596-.002-10.132.006-10.212.018m.101 1.524c-.15.046-.284.181-.356.36l-.057.141V19.02l.057.116c.07.144.2.241.405.304.154.048.24.048 10.048.048 8.88 0 9.906-.004 10.019-.037a.586.586 0 00.366-.362l.057-.141V4.98l-.057-.116c-.07-.144-.2-.241-.405-.304-.154-.048-.238-.048-10.059-.046-8.65.001-9.918.006-10.018.037M.012 12.024c0 3.861.003 5.44.006 3.51.003-1.93.003-5.09 0-7.02-.003-1.93-.006-.351-.006 3.51m20.07-4.511a.746.746 0 00-.37.219c-.054.057-.987 1.438-2.072 3.068a649.896 649.896 0 01-1.995 2.987c-.014.015-.489-.442-1.251-1.202-1.4-1.396-1.334-1.343-1.685-1.324a.72.72 0 00-.301.066c-.074.037-.48.425-1.294 1.237l-1.187 1.183-1.193-2.2c-.656-1.21-1.23-2.242-1.277-2.295a.749.749 0 00-1.065-.05c-.123.118-3.298 5.398-3.36 5.586a.809.809 0 00.039.533.83.83 0 00.377.368c.113.052.157.059.327.051.236-.01.386-.076.52-.228.048-.055.637-1.016 1.307-2.136.671-1.12 1.232-2.049 1.247-2.065.02-.02.303.482 1.131 2.01.607 1.121 1.142 2.09 1.189 2.152.122.165.311.256.551.267.342.016.274.07 1.734-1.385l1.29-1.286 1.278 1.275c.882.88 1.311 1.292 1.386 1.33.077.039.164.057.304.065.174.01.21.004.336-.053a.964.964 0 00.209-.13c.087-.081 4.61-6.86 4.686-7.023.16-.342-.02-.799-.377-.966a.879.879 0 00-.484-.054" fill="currentColor" fill-rule="evenodd"/>',attrs:{viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/stats-placeholder",["exports"],(function(e){"use strict"
8920
+ Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8921
+ e.default={content:'<desc>Analytics Board Graph Line Streamline Icon: https://streamlinehq.com</desc><path d="M4.313 7.188h37.374s2.876 0 2.876 2.875v25.874s0 2.876-2.876 2.876H4.313s-2.875 0-2.875-2.876V10.064s0-2.876 2.875-2.876" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="M7.188 28.75l6.037-10.063 5.463 10.063 5.75-5.75 5.75 5.75 8.625-12.938" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>',attrs:{viewBox:"-1 -1 48 48"}}})),define("ember-svg-jar/inlined/stats",["exports"],(function(e){"use strict"
8920
8922
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8921
8923
  e.default={content:'<path d="M14 3h-4v18h4V3zM5 14H1v7h4v-7zm18-5h-4v12h4V9z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>',attrs:{fill:"none",viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/stripe-verified-partner-badge",["exports"],(function(e){"use strict"
8922
8924
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@@ -8924,10 +8926,10 @@ e.default={content:'<g fill="none"><rect fill="#FFF" width="174" height="28" rx=
8924
8926
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8925
8927
  e.default={content:'<g fill="none" fill-rule="evenodd"><path d="M.5.5h173v119H.5z"/><path d="M141.406 39.442a58.61 58.61 0 013.626 20.359c0 32.453-26.347 58.8-58.8 58.8-32.453 0-58.801-26.347-58.801-58.8 0-5.592.782-11.003 2.244-16.13m13.228-23.605C53.655 8.35 69.092 1 86.232 1A58.52 58.52 0 01111.3 6.604" stroke="#9BAEB8"/><path d="M28.25 67.39c1.17-.677 1.966-1.134 3.137-1.134 4.495 0 8.99 6.742 13.485 6.742.256 0 .512-.022.768-.063m3.392-1.466c3.108-1.989 6.217-5.213 9.325-5.213 4.495 0 8.99 6.742 13.485 6.742 4.496 0 8.99-6.742 13.486-6.742 4.495 0 8.99 6.742 13.485 6.742 4.495 0 8.99-6.742 13.485-6.742 4.495 0 8.99 6.742 13.485 6.742 4.496 0 8.99-6.742 13.485-6.742 1.747 0 3.216 1.018 4.963 2.263M29.134 73.677c.75-.314 1.502-.502 2.253-.502 4.495 0 8.99 6.742 13.485 6.742.643 0 1.287-.138 1.93-.375m3.328-1.9c2.742-1.957 5.485-4.467 8.227-4.467 4.495 0 8.99 6.742 13.485 6.742 4.496 0 8.99-6.742 13.486-6.742 4.495 0 8.99 6.742 13.485 6.742 4.495 0 8.99-6.742 13.485-6.742 4.495 0 8.99 6.742 13.485 6.742 4.496 0 8.99-6.742 13.485-6.742 1.292 0 2.584.557 3.876 1.35M31.387 80.934c4.495 0 8.99 6.743 13.485 6.743 1.088 0 2.176-.395 3.264-.994m3.236-2.196c2.329-1.744 4.657-3.553 6.985-3.553 4.495 0 8.99 6.743 13.485 6.743 4.496 0 8.99-6.743 13.486-6.743 4.495 0 8.99 6.743 13.485 6.743 4.495 0 8.99-6.743 13.485-6.743 4.495 0 8.99 6.743 13.485 6.743 4.496 0 8.99-6.743 13.485-6.743.599 0 1.197.12 1.796.327" opacity=".6" stroke="#9BAEB8" stroke-linecap="round" stroke-linejoin="round"/><path d="M37.5 91.958H49m3.648 0h82.802" stroke="#9BAEB8" stroke-linecap="round" stroke-linejoin="round"/><path d="M62.934 98.943h2.915m-2.915 12.633h2.915m-9.658-5.891h2.915m18.072-6.643h2.915m-2.915 12.633h2.915m-9.658-5.891h2.915m18.072-6.644h2.914m-2.914 12.634h2.914m-9.657-5.891h2.915m18.071-6.643h2.915m-2.915 12.633h2.915m-9.657-5.891h2.915m18.072-6.644h2.915m-9.659 6.742h2.916" opacity=".6" stroke="#9BAEB8" stroke-linecap="round" stroke-linejoin="round"/><path d="M124.204 2.259c12.425 0 22.513 10.088 22.513 22.513 0 12.426-10.088 22.514-22.513 22.514-12.426 0-22.514-10.088-22.514-22.514 0-12.425 10.088-22.513 22.514-22.513zM40.658 45.534l9.62 52.937 3.57.033-9.607-53.532" stroke="#9BAEB8" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M1 54.092s4.315-6.154 9.489-7.083c5.173-.929 11.36 3.341 11.36 3.341s4.234-6.14 9.488-7.083c5.254-.942 11.36 3.341 11.36 3.341s4.276-6.147 9.488-7.082c5.213-.936 11.36 3.34 11.36 3.34s4.885-6.256 9.488-7.082c4.604-.826 11.36 3.341 11.36 3.341S65.225 15.665 38.02 20.548C10.813 25.431 1 54.092 1 54.092z" stroke="#9BAEB8" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M21.138 49.682s.187-10.218 3.941-17.137c3.754-6.918 8.836-8.89 12.421-11.407" stroke="#9BAEB8" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M63.025 42.198s-3.728-9.515-9.654-14.696c-5.926-5.182-14.612-6.364-15.871-6.364m1.007 0l4.027 24.802" stroke="#9BAEB8" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></g>',attrs:{viewBox:"0 0 174 120"}}})),define("ember-svg-jar/inlined/sun",["exports"],(function(e){"use strict"
8926
8928
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8927
- e.default={content:'<defs><style>.sun_svg__a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px}</style></defs><circle class="sun_svg__a" cx="12" cy="12" r="4.5"/><path class="sun_svg__a" d="M12 .75V4.5m0 15v3.75M23.25 12H19.5m-15 0H.75m19.5-8.25l-3 3m-10.5 10.5l-3 3m16.5 0l-3-3M6.75 6.75l-3-3"/>',attrs:{viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/suppression-notice-bounced",["exports"],(function(e){"use strict"
8929
+ e.default={content:'<defs><style>.sun_svg__a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px}</style></defs><circle class="sun_svg__a" cx="12" cy="12" r="4.5"/><path class="sun_svg__a" d="M12 .75V4.5m0 15v3.75M23.25 12H19.5m-15 0H.75m19.5-8.25l-3 3m-10.5 10.5l-3 3m16.5 0l-3-3M6.75 6.75l-3-3"/>',attrs:{viewBox:"0 0 24 24"}}}))
8930
+ define("ember-svg-jar/inlined/suppression-notice-bounced",["exports"],(function(e){"use strict"
8928
8931
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8929
- e.default={content:'<path d="M37.2 37.127l12.237 12.238M37.2 49.362l12.237-12.237" stroke="red" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"/><path d="M31.316 53.983l-7.99-7.956-8.58 4.433.334-12.717m0 0L5.033 27.697a4.033 4.033 0 01-1.1-3.667 4.106 4.106 0 012.713-3.15L45.98 7.757a4.106 4.106 0 015.28 5.276L45 30m-29.92 7.743l35.006-29.18" stroke="#CAD1D8" stroke-width="2.8" stroke-linecap="round" stroke-linejoin="round"/>',attrs:{fill:"none",viewBox:"0 0 60 60"}}}))
8930
- define("ember-svg-jar/inlined/suppression-notice-flagged",["exports"],(function(e){"use strict"
8932
+ e.default={content:'<path d="M37.2 37.127l12.237 12.238M37.2 49.362l12.237-12.237" stroke="red" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"/><path d="M31.316 53.983l-7.99-7.956-8.58 4.433.334-12.717m0 0L5.033 27.697a4.033 4.033 0 01-1.1-3.667 4.106 4.106 0 012.713-3.15L45.98 7.757a4.106 4.106 0 015.28 5.276L45 30m-29.92 7.743l35.006-29.18" stroke="#CAD1D8" stroke-width="2.8" stroke-linecap="round" stroke-linejoin="round"/>',attrs:{fill:"none",viewBox:"0 0 60 60"}}})),define("ember-svg-jar/inlined/suppression-notice-flagged",["exports"],(function(e){"use strict"
8931
8933
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8932
8934
  e.default={content:'<path d="M31.316 53.983l-7.99-7.956-8.58 4.433.334-12.717m0 0L5.033 27.697a4.033 4.033 0 01-1.1-3.667 4.106 4.106 0 012.713-3.15L45.98 7.757a4.106 4.106 0 015.28 5.276L45 30m-29.92 7.743l35.006-29.18" stroke="#CAD1D8" stroke-width="2.8" stroke-linecap="round" stroke-linejoin="round"/><path d="M41.474 37.2v7.65" stroke="#F50B23" stroke-width="2.8" stroke-linecap="round" stroke-linejoin="round"/><circle cx="41.399" cy="51.1" r="1.5" fill="#F50B23"/>',attrs:{fill:"none",viewBox:"0 0 60 60"}}})),define("ember-svg-jar/inlined/sync",["exports"],(function(e){"use strict"
8933
8935
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@@ -8985,7 +8987,8 @@ e.default={content:'<path d="M12 20.251c-.62 0-1.125-.505-1.125-1.125s.505-1.125
8985
8987
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8986
8988
  e.default={content:'<desc>Pencil Write Streamline Icon: https://streamlinehq.com</desc><path d="M13.045 14.136l-3.712.531.53-3.713 9.546-9.546a2.25 2.25 0 013.182 3.182zM18.348 2.469l3.182 3.182" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/><path d="M18.75 14.25v7.5a1.5 1.5 0 01-1.5 1.5h-15a1.5 1.5 0 01-1.5-1.5v-15a1.5 1.5 0 011.5-1.5h7.5" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>',attrs:{viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/x-logo",["exports"],(function(e){"use strict"
8987
8989
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
8988
- e.default={content:'<path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M16.769 21.5L2.5 2.5h4.731l14.269 19h-4.731zm4.06-19l-7.522 8.093M3.171 21.5l7.516-8.087"/>',attrs:{fill:"none",viewBox:"0 0 24 24"}}})),define("ember-svg-jar/utils/make-svg",["exports"],(function(e){"use strict"
8990
+ e.default={content:'<path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M16.769 21.5L2.5 2.5h4.731l14.269 19h-4.731zm4.06-19l-7.522 8.093M3.171 21.5l7.516-8.087"/>',attrs:{fill:"none",viewBox:"0 0 24 24"}}}))
8991
+ define("ember-svg-jar/utils/make-svg",["exports"],(function(e){"use strict"
8989
8992
  function t(){return([3e7]+-1e3+-4e3+-2e3+-1e11).replace(/[0-3]/g,(e=>(4*e^16*Math.random()>>(2&e)).toString(16)))}Object.defineProperty(e,"__esModule",{value:!0}),e.createAccessibilityElements=a,e.createAriaLabel=l,e.default=function(e,t={},r){if(!e)return void console.warn("ember-svg-jar: asset name should not be undefined or null")
8990
8993
  t=s(t=o(t))
8991
8994
  let n=0===e.lastIndexOf("#",0)?c(e,t):d(e,r,t)
@@ -8998,8 +9001,7 @@ return t||n?r.reduce(((t,r)=>e[r]?t.concat(`<${r} id="${e[r].id}">${e[r].text}</
8998
9001
  return t||n?`aria-labelledby="${r.filter((t=>e[t])).map((t=>e[t].id)).join(" ")}"`:""}function u(e){return Object.keys(e).filter((e=>!r.includes(e))).map((t=>!Ember.isNone(e[t])&&`${t}="${e[t]}"`)).filter((e=>e)).join(" ")}function c(e,t={}){return`<svg ${u(t)}${l(t)}><use xlink:href="${e}" />${a(t)}</svg>`}function d(e,t,r={}){let n=t(e)
8999
9002
  if(!n)return void console.warn(`ember-svg-jar: Missing inline SVG for ${e}`)
9000
9003
  let i=n.attrs?Object.assign({},n.attrs,r):r,{size:o}=r
9001
- return o&&(i.width=parseFloat(i.width)*o||i.width,i.height=parseFloat(i.height)*o||i.height,delete i.size),`<svg ${u(i)}${l(r)}>${a(r)}${n.content}</svg>`}}))
9002
- define("ember-test-waiters/index",["exports","@ember/test-waiters"],(function(e,t){"use strict"
9004
+ return o&&(i.width=parseFloat(i.width)*o||i.width,i.height=parseFloat(i.height)*o||i.height,delete i.size),`<svg ${u(i)}${l(r)}>${a(r)}${n.content}</svg>`}})),define("ember-test-waiters/index",["exports","@ember/test-waiters"],(function(e,t){"use strict"
9003
9005
  Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(t).forEach((function(r){"default"!==r&&"__esModule"!==r&&(r in e&&e[r]===t[r]||Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[r]}}))}))})),define("ember-text-measurer/services/text-measurer",["exports"],(function(e){"use strict"
9004
9006
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9005
9007
  e.default=Ember.Service.extend({init(){this._super(...arguments),this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d")},width(e,t=null){return t&&(this.ctx.font=t),this.ctx.measureText(e).width},lines(e,t,r=null){r&&(this.ctx.font=r)
@@ -9141,7 +9143,8 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9141
9143
  let r=Ember.Component.extend({layout:t.default,tagName:"",positionalParams:["value"],forwardMatchContext:Ember.computed("matchContext",(function(){let e=this.matchContext
9142
9144
  return e||(e={}),e.helperName||(e.helperName="liquid-bind"),e}))})
9143
9145
  r.reopenClass({positionalParams:["value"]})
9144
- e.default=r})),define("liquid-fire/components/liquid-child",["exports"],(function(e){"use strict"
9146
+ e.default=r}))
9147
+ define("liquid-fire/components/liquid-child",["exports"],(function(e){"use strict"
9145
9148
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9146
9149
  e.default=Ember.Component.extend({classNames:["liquid-child"],init(){this._super(...arguments),this._waitingFor=[]},didInsertElement(){this._super(...arguments),this.element&&(this.element.style.visibility="hidden"),this._waitForAll().then((()=>{if(!this.isDestroying){this._waitingFor=null
9147
9150
  const e=this.liquidChildDidRender
@@ -9149,8 +9152,7 @@ const e=this.liquidChildDidRender
9149
9152
  this._waitingFor.push(e)
9150
9153
  let t=this.nearestWithProperty("_isLiquidChild")
9151
9154
  t&&t._waitForMe(e)},_waitForAll(){const e=this._waitingFor
9152
- return this._waitingFor=[],Ember.RSVP.Promise.all(e).then((()=>{if(this._waitingFor.length>0)return this._waitForAll()}))}})}))
9153
- define("liquid-fire/components/liquid-container",["exports","liquid-fire/mixins/growable","liquid-fire/components/liquid-measured","liquid-fire/templates/components/liquid-container","jquery"],(function(e,t,r,n,i){"use strict"
9155
+ return this._waitingFor=[],Ember.RSVP.Promise.all(e).then((()=>{if(this._waitingFor.length>0)return this._waitForAll()}))}})})),define("liquid-fire/components/liquid-container",["exports","liquid-fire/mixins/growable","liquid-fire/components/liquid-measured","liquid-fire/templates/components/liquid-container","jquery"],(function(e,t,r,n,i){"use strict"
9154
9156
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9155
9157
  e.default=Ember.Component.extend(t.default,{layout:n.default,classNames:["liquid-container"],lockSize(e,t){e.outerWidth(t.width),e.outerHeight(t.height)},unlockSize(){let e=()=>{this.updateAnimatingClass(!1),this.element&&(this.element.style.width="",this.element.style.height="")}
9156
9158
  this._scaling?this._scaling.then(e):e()},updateAnimatingClass(e){this.isDestroyed||(e?this.element.classList.add("liquid-animating"):this.element.classList.remove("liquid-animating"))},didInsertElement(){this._super(...arguments),this._wasInserted=!0},actions:{willTransition(e){if(!this._wasInserted)return
@@ -9328,10 +9330,10 @@ e.default=Ember.HTMLBars.template({id:"1SjLDrzQ",block:'{"symbols":["&default"],
9328
9330
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9329
9331
  e.default=Ember.HTMLBars.template({id:"dS0w+JQh",block:'{"symbols":["container","version","version","&default"],"statements":[[6,[37,0],[[32,0,["containerless"]]],null,[["default","else"],[{"statements":[[6,[37,1],null,[["value","use","rules","matchContext","versionEquality","renderWhenFalse","class"],[[32,0,["value"]],[32,0,["use"]],[32,0,["rules"]],[32,0,["forwardMatchContext"]],[32,0,["versionEquality"]],true,[32,0,["class"]]]],[["default"],[{"statements":[[6,[37,0],[[27,[32,4]]],null,[["default","else"],[{"statements":[[18,4,[[32,3]]]],"parameters":[]},{"statements":[[1,[32,3]]],"parameters":[]}]]]],"parameters":[3]}]]]],"parameters":[]},{"statements":[[6,[37,2],null,[["id","class","growDuration","growPixelsPerSecond","growEasing","shrinkDelay","growDelay","enableGrowth"],[[32,0,["containerId"]],[32,0,["class"]],[32,0,["growDuration"]],[32,0,["growPixelsPerSecond"]],[32,0,["growEasing"]],[32,0,["shrinkDelay"]],[32,0,["growDelay"]],[32,0,["enableGrowth"]]]],[["default"],[{"statements":[[6,[37,1],null,[["value","notify","use","rules","matchContext","versionEquality","renderWhenFalse"],[[32,0,["value"]],[32,1],[32,0,["use"]],[32,0,["rules"]],[32,0,["forwardMatchContext"]],[32,0,["versionEquality"]],true]],[["default"],[{"statements":[[6,[37,0],[[27,[32,4]]],null,[["default","else"],[{"statements":[[18,4,[[32,2]]]],"parameters":[]},{"statements":[[1,[32,2]]],"parameters":[]}]]]],"parameters":[2]}]]]],"parameters":[1]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["if","liquid-versions","liquid-container"]}',moduleName:"liquid-fire/templates/components/liquid-bind.hbs"})})),define("liquid-fire/templates/components/liquid-container",["exports"],(function(e){"use strict"
9330
9332
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9331
- e.default=Ember.HTMLBars.template({id:"CXFd+X02",block:'{"symbols":["&default"],"statements":[[18,1,[[32,0]]]],"hasEval":false,"upvars":[]}',moduleName:"liquid-fire/templates/components/liquid-container.hbs"})})),define("liquid-fire/templates/components/liquid-if",["exports"],(function(e){"use strict"
9333
+ e.default=Ember.HTMLBars.template({id:"CXFd+X02",block:'{"symbols":["&default"],"statements":[[18,1,[[32,0]]]],"hasEval":false,"upvars":[]}',moduleName:"liquid-fire/templates/components/liquid-container.hbs"})}))
9334
+ define("liquid-fire/templates/components/liquid-if",["exports"],(function(e){"use strict"
9332
9335
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9333
- e.default=Ember.HTMLBars.template({id:"HOnDajqQ",block:'{"symbols":["container","valueVersion","valueVersion","&else","&default"],"statements":[[6,[37,0],[[32,0,["containerless"]]],null,[["default","else"],[{"statements":[[2,"\\n "],[8,"liquid-versions",[],[["@value","@matchContext","@use","@rules","@renderWhenFalse","@class"],[[30,[36,0],[[32,0,["inverted"]],[30,[36,0],[[32,0,["predicate"]],false,true],null],[30,[36,0],[[32,0,["predicate"]],true,false],null]],null],[30,[36,1],null,[["helperName"],[[32,0,["helperName"]]]]],[32,0,["use"]],[32,0,["rules"]],[27,[32,4]],[32,0,["class"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[32,3]],null,[["default","else"],[{"statements":[[2," "],[18,5,null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[18,4,null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[3]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"liquid-container",[],[["@id","@class","@growDuration","@growPixelsPerSecond","@growEasing","@shrinkDelay","@growDelay","@enableGrowth"],[[32,0,["containerId"]],[32,0,["class"]],[32,0,["growDuration"]],[32,0,["growPixelsPerSecond"]],[32,0,["growEasing"]],[32,0,["shrinkDelay"]],[32,0,["growDelay"]],[32,0,["enableGrowth"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"liquid-versions",[],[["@value","@notify","@matchContext","@use","@rules","@renderWhenFalse"],[[30,[36,0],[[32,0,["inverted"]],[30,[36,0],[[32,0,["predicate"]],false,true],null],[30,[36,0],[[32,0,["predicate"]],true,false],null]],null],[32,1],[30,[36,1],null,[["helperName"],[[32,0,["helperName"]]]]],[32,0,["use"]],[32,0,["rules"]],[27,[32,4]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[32,2]],null,[["default","else"],[{"statements":[[2," "],[18,5,null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[18,4,null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[2]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["if","hash"]}',moduleName:"liquid-fire/templates/components/liquid-if.hbs"})}))
9334
- define("liquid-fire/templates/components/liquid-measured",["exports"],(function(e){"use strict"
9336
+ e.default=Ember.HTMLBars.template({id:"HOnDajqQ",block:'{"symbols":["container","valueVersion","valueVersion","&else","&default"],"statements":[[6,[37,0],[[32,0,["containerless"]]],null,[["default","else"],[{"statements":[[2,"\\n "],[8,"liquid-versions",[],[["@value","@matchContext","@use","@rules","@renderWhenFalse","@class"],[[30,[36,0],[[32,0,["inverted"]],[30,[36,0],[[32,0,["predicate"]],false,true],null],[30,[36,0],[[32,0,["predicate"]],true,false],null]],null],[30,[36,1],null,[["helperName"],[[32,0,["helperName"]]]]],[32,0,["use"]],[32,0,["rules"]],[27,[32,4]],[32,0,["class"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[32,3]],null,[["default","else"],[{"statements":[[2," "],[18,5,null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[18,4,null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[3]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"liquid-container",[],[["@id","@class","@growDuration","@growPixelsPerSecond","@growEasing","@shrinkDelay","@growDelay","@enableGrowth"],[[32,0,["containerId"]],[32,0,["class"]],[32,0,["growDuration"]],[32,0,["growPixelsPerSecond"]],[32,0,["growEasing"]],[32,0,["shrinkDelay"]],[32,0,["growDelay"]],[32,0,["enableGrowth"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"liquid-versions",[],[["@value","@notify","@matchContext","@use","@rules","@renderWhenFalse"],[[30,[36,0],[[32,0,["inverted"]],[30,[36,0],[[32,0,["predicate"]],false,true],null],[30,[36,0],[[32,0,["predicate"]],true,false],null]],null],[32,1],[30,[36,1],null,[["helperName"],[[32,0,["helperName"]]]]],[32,0,["use"]],[32,0,["rules"]],[27,[32,4]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[32,2]],null,[["default","else"],[{"statements":[[2," "],[18,5,null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[18,4,null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[2]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["if","hash"]}',moduleName:"liquid-fire/templates/components/liquid-if.hbs"})})),define("liquid-fire/templates/components/liquid-measured",["exports"],(function(e){"use strict"
9335
9337
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9336
9338
  e.default=Ember.HTMLBars.template({id:"ZXmeP7J9",block:'{"symbols":["&default"],"statements":[[18,1,null],[2,"\\n"]],"hasEval":false,"upvars":[]}',moduleName:"liquid-fire/templates/components/liquid-measured.hbs"})})),define("liquid-fire/templates/components/liquid-outlet",["exports"],(function(e){"use strict"
9337
9339
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@@ -9481,10 +9483,10 @@ return r.set("extraClassesString","default-liquid-destination"),e.rootElement?r.
9481
9483
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9482
9484
  e.default=Ember.HTMLBars.template({id:"Qr2N4/XN",block:'{"symbols":["@replaceNodes","@notify","@nodes","&default"],"statements":[[2,"\\n"],[11,"div"],[4,[38,0],[[32,0,["_didInsert"]],[32,3],[32,2],[32,1]],null],[4,[38,1],[[32,0,["_didUpdate"]],[32,3],[32,2],[32,1]],null],[12],[2,"\\n "],[18,4,null],[2,"\\n"],[13]],"hasEval":false,"upvars":["did-insert","did-update"]}',moduleName:"liquid-wormhole/templates/components/liquid-append.hbs"})})),define("liquid-wormhole/templates/components/liquid-destination",["exports"],(function(e){"use strict"
9483
9485
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9484
- e.default=Ember.HTMLBars.template({id:"P8POU6zX",block:'{"symbols":["stack","item"],"statements":[[10,"div"],[15,0,[31,["liquid-destination ",[32,0,["extraClassesString"]]," ",[30,[36,0],[[32,0,["hasWormholes"]],"has-wormholes"],null]]]],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[30,[36,1],[[32,0,["stacks"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"liquid-destination-stack"],[12],[2,"\\n "],[8,"liquid-versions",[],[["@value","@notify","@renderWhenFalse","@name","@matchContext","@stackName"],[[32,1,["lastObject"]],[32,0],true,"liquid-wormhole",[32,0,["matchContext"]],[32,1,["name"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"liquid-append",[],[["@nodes","@replaceNodes","@notify","@click"],[[32,2,["nodes"]],[32,2,["_replaceNodes"]],[32,2,["wormhole"]],[32,2,["wormhole","click"]]]],null],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[13]],"hasEval":false,"upvars":["if","-track-array","each"]}',moduleName:"liquid-wormhole/templates/components/liquid-destination.hbs"})})),define("liquid-wormhole/templates/components/liquid-wormhole",["exports"],(function(e){"use strict"
9486
+ e.default=Ember.HTMLBars.template({id:"P8POU6zX",block:'{"symbols":["stack","item"],"statements":[[10,"div"],[15,0,[31,["liquid-destination ",[32,0,["extraClassesString"]]," ",[30,[36,0],[[32,0,["hasWormholes"]],"has-wormholes"],null]]]],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[30,[36,1],[[32,0,["stacks"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"liquid-destination-stack"],[12],[2,"\\n "],[8,"liquid-versions",[],[["@value","@notify","@renderWhenFalse","@name","@matchContext","@stackName"],[[32,1,["lastObject"]],[32,0],true,"liquid-wormhole",[32,0,["matchContext"]],[32,1,["name"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"liquid-append",[],[["@nodes","@replaceNodes","@notify","@click"],[[32,2,["nodes"]],[32,2,["_replaceNodes"]],[32,2,["wormhole"]],[32,2,["wormhole","click"]]]],null],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[13]],"hasEval":false,"upvars":["if","-track-array","each"]}',moduleName:"liquid-wormhole/templates/components/liquid-destination.hbs"})}))
9487
+ define("liquid-wormhole/templates/components/liquid-wormhole",["exports"],(function(e){"use strict"
9485
9488
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
9486
- e.default=Ember.HTMLBars.template({id:"FcVE2XL/",block:'{"symbols":["details","&default"],"statements":[[6,[37,0],[[32,0,["hasSend"]]],null,[["default","else"],[{"statements":[[6,[37,0],[[27,[32,2]]],null,[["default","else"],[{"statements":[[2," "],[8,[32,0,["sendComponent"]],[[16,1,[32,0,["wormholeId"]]],[16,0,[31,[[32,0,["wormholeClass"]]," liquid-wormhole-element"]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[18,2,[[32,1]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,0,["sendComponent"]],[[16,1,[32,0,["wormholeId"]]],[16,0,[31,[[32,0,["wormholeClass"]]," liquid-wormhole-element"]]]],[[],[]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[10,"div"],[15,1,[32,0,["wormholeId"]]],[15,0,[31,[[32,0,["wormholeClass"]]," liquid-wormhole-element"]]],[12],[2,"\\n "],[18,2,null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["if"]}',moduleName:"liquid-wormhole/templates/components/liquid-wormhole.hbs"})}))
9487
- define("liquid-wormhole/transitions/wormhole",["exports"],(function(e){"use strict"
9489
+ e.default=Ember.HTMLBars.template({id:"FcVE2XL/",block:'{"symbols":["details","&default"],"statements":[[6,[37,0],[[32,0,["hasSend"]]],null,[["default","else"],[{"statements":[[6,[37,0],[[27,[32,2]]],null,[["default","else"],[{"statements":[[2," "],[8,[32,0,["sendComponent"]],[[16,1,[32,0,["wormholeId"]]],[16,0,[31,[[32,0,["wormholeClass"]]," liquid-wormhole-element"]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[18,2,[[32,1]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,0,["sendComponent"]],[[16,1,[32,0,["wormholeId"]]],[16,0,[31,[[32,0,["wormholeClass"]]," liquid-wormhole-element"]]]],[[],[]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[10,"div"],[15,1,[32,0,["wormholeId"]]],[15,0,[31,[[32,0,["wormholeClass"]]," liquid-wormhole-element"]]],[12],[2,"\\n "],[18,2,null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["if"]}',moduleName:"liquid-wormhole/templates/components/liquid-wormhole.hbs"})})),define("liquid-wormhole/transitions/wormhole",["exports"],(function(e){"use strict"
9488
9490
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let r,n,{use:i}=e
9489
9491
  if(this.oldElement&&(r=this.oldElement.find(".liquid-wormhole-element:last-child"),this.oldElement=null,r.length>0)){const e=r.clone()
9490
9492
  e.addClass("liquid-wormhole-temp-element"),t(e),r.css({visibility:"hidden"}),r.find(".liquid-child").css({visibility:"hidden"})
@@ -9520,4 +9522,4 @@ e.default=class{constructor(e){if(this._data=new t.default,e)for(let t=0;t<e.len
9520
9522
  return this}get(e){let t=this._data[e]
9521
9523
  return t===r.UNDEFINED_KEY?void 0:t}set(e,t){return this._data[e]=t,this}delete(e){return this._data[e]=r.UNDEFINED_KEY,!0}}}))
9522
9524
 
9523
- //# sourceMappingURL=vendor-939d4c13e18563bdb323ea7d667d4247.map
9525
+ //# sourceMappingURL=vendor-7422d2d850a0590d48b9a941a0c791af.map
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.95%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22ee37f0b9eb%22%2C%22adminXDemoFilename%22%3A%22admin-x-demo.js%22%2C%22adminXDemoHash%22%3A%222ee8481c97%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%22b7079ed298%22%2C%22adminXActivitypubFilename%22%3A%22admin-x-activitypub.js%22%2C%22adminXActivitypubHash%22%3A%228d212584f3%22%2C%22adminXActivitypubCustomUrl%22%3A%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tryghost%2Fadmin-x-activitypub%400%2Fdist%2Fadmin-x-activitypub.js%22%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.96%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22ee37f0b9eb%22%2C%22adminXDemoFilename%22%3A%22admin-x-demo.js%22%2C%22adminXDemoHash%22%3A%22eb50ad82db%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%223e886898df%22%2C%22adminXActivitypubFilename%22%3A%22admin-x-activitypub.js%22%2C%22adminXActivitypubHash%22%3A%2268888cb677%22%2C%22adminXActivitypubCustomUrl%22%3A%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tryghost%2Fadmin-x-activitypub%400%2Fdist%2Fadmin-x-activitypub.js%22%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -37,7 +37,7 @@
37
37
  </style>
38
38
 
39
39
  <link integrity="" rel="stylesheet" href="assets/vendor-0ede59da8efb5e28fa929557f7ff7154.css">
40
- <link integrity="" rel="stylesheet" href="assets/ghost-8f07a67edb1191d1cdddd8a296bbdc4d.css" title="light">
40
+ <link integrity="" rel="stylesheet" href="assets/ghost-c75b9d653495f9cfce528f6e10900b3f.css" title="light">
41
41
 
42
42
 
43
43
  </head>
@@ -56,9 +56,9 @@
56
56
 
57
57
  <div id="ember-basic-dropdown-wormhole"></div>
58
58
 
59
- <script src="assets/vendor-b83f61eee071be0ef00075df9ff7782d.js"></script>
60
- <script src="assets/chunk.602.a3d38ba0a516decd78ce.js"></script>
61
- <script src="assets/chunk.524.d49d5b3795688b5f880d.js"></script>
62
- <script src="assets/ghost-9397fa4c9aadec9cff772a6d4db6b1f8.js"></script>
59
+ <script src="assets/vendor-88cd9f5cf5eba65221e2d2a636531eaa.js"></script>
60
+ <script src="assets/chunk.874.e1d421507701daac30fb.js"></script>
61
+ <script src="assets/chunk.524.9b3ed6b39dd6c575a36f.js"></script>
62
+ <script src="assets/ghost-286f9a114755e8c3c7e9c37550f624a9.js"></script>
63
63
  </body>
64
64
  </html>
@@ -0,0 +1,19 @@
1
+ const {SafeString} = require('../services/handlebars');
2
+ const logging = require('@tryghost/logging');
3
+ const {getFrontendKey} = require('../services/proxy');
4
+
5
+ module.exports = async function content_api_key() { // eslint-disable-line camelcase
6
+ try {
7
+ const frontendKey = await getFrontendKey();
8
+
9
+ if (!frontendKey) {
10
+ logging.warn('contentkey: No content key found');
11
+ return '';
12
+ }
13
+ return new SafeString(frontendKey);
14
+ } catch (error) {
15
+ logging.error(error);
16
+ return '';
17
+ }
18
+ };
19
+ module.exports.async = true;
@@ -7,7 +7,6 @@ const {hbs, SafeString} = require('../services/handlebars');
7
7
  const logging = require('@tryghost/logging');
8
8
  const errors = require('@tryghost/errors');
9
9
  const tpl = require('@tryghost/tpl');
10
- const Sentry = require('@sentry/node');
11
10
 
12
11
  const _ = require('lodash');
13
12
  const jsonpath = require('jsonpath');
@@ -292,53 +291,37 @@ module.exports = async function get(resource, options) {
292
291
 
293
292
  // Parse the options we're going to pass to the API
294
293
  apiOptions = parseOptions(ghostGlobals, this, apiOptions);
295
- let apiOptionsString = Object.entries(apiOptions)
296
- .map(([key, value]) => ` ${key}="${value}"`)
297
- .join('');
298
294
  apiOptions.context = {member: data.member};
299
295
  try {
300
- const spanName = `{{#get "${resource}"${apiOptionsString}}} ${data.member ? 'member' : 'public'}`;
301
- const result = await Sentry.startSpan({
302
- op: 'frontend.helpers.get',
303
- name: spanName,
304
- tags: {
305
- resource,
306
- ...apiOptions,
307
- context: data.member ? 'member' : 'public'
308
- }
309
- }, async (span) => {
310
- const response = await makeAPICall(resource, controllerName, action, apiOptions);
311
-
312
- // prepare data properties for use with handlebars
313
- if (response[resource] && response[resource].length) {
314
- response[resource].forEach(prepareContextResource);
315
- }
296
+ const response = await makeAPICall(resource, controllerName, action, apiOptions);
316
297
 
317
- // used for logging details of slow requests
318
- returnedRowsCount = response[resource] && response[resource].length;
319
- span?.setTag('returnedRows', returnedRowsCount);
298
+ // prepare data properties for use with handlebars
299
+ if (response[resource] && response[resource].length) {
300
+ response[resource].forEach(prepareContextResource);
301
+ }
320
302
 
321
- // block params allows the theme developer to name the data using something like
322
- // `{{#get "posts" as |result pageInfo|}}`
323
- const blockParams = [response[resource]];
324
- if (response.meta && response.meta.pagination) {
325
- response.pagination = response.meta.pagination;
326
- blockParams.push(response.meta.pagination);
327
- }
303
+ // used for logging details of slow requests
304
+ returnedRowsCount = response[resource] && response[resource].length;
328
305
 
329
- // Call the main template function
330
- const rendered = options.fn(response, {
331
- data: data,
332
- blockParams: blockParams
333
- });
306
+ // block params allows the theme developer to name the data using something like
307
+ // `{{#get "posts" as |result pageInfo|}}`
308
+ const blockParams = [response[resource]];
309
+ if (response.meta && response.meta.pagination) {
310
+ response.pagination = response.meta.pagination;
311
+ blockParams.push(response.meta.pagination);
312
+ }
334
313
 
335
- if (response['@@ABORTED_GET_HELPER@@']) {
336
- return new SafeString(`<span data-aborted-get-helper>Could not load content</span>` + rendered);
337
- } else {
338
- return rendered;
339
- }
314
+ // Call the main template function
315
+ const rendered = options.fn(response, {
316
+ data: data,
317
+ blockParams: blockParams
340
318
  });
341
- return result;
319
+
320
+ if (response['@@ABORTED_GET_HELPER@@']) {
321
+ return new SafeString(`<span data-aborted-get-helper>Could not load content</span>` + rendered);
322
+ } else {
323
+ return rendered;
324
+ }
342
325
  } catch (error) {
343
326
  logging.error(error);
344
327
  data.error = error.message;
@@ -7,7 +7,7 @@ const {escapeExpression, SafeString} = require('../services/handlebars');
7
7
 
8
8
  // BAD REQUIRE
9
9
  // @TODO fix this require
10
- const cardAssetService = require('../services/card-assets');
10
+ const {cardAssets} = require('../services/assets-minification');
11
11
 
12
12
  const logging = require('@tryghost/logging');
13
13
  const _ = require('lodash');
@@ -297,10 +297,10 @@ module.exports = async function ghost_head(options) { // eslint-disable-line cam
297
297
  }
298
298
 
299
299
  // @TODO do this in a more "frameworky" way
300
- if (cardAssetService.hasFile('js')) {
300
+ if (cardAssets.hasFile('js')) {
301
301
  head.push(`<script defer src="${getAssetUrl('public/cards.min.js')}"></script>`);
302
302
  }
303
- if (cardAssetService.hasFile('css')) {
303
+ if (cardAssets.hasFile('css')) {
304
304
  head.push(`<link rel="stylesheet" type="text/css" href="${getAssetUrl('public/cards.min.css')}">`);
305
305
  }
306
306
 
@@ -1,5 +1,3 @@
1
- const downsize = require('downsize');
2
-
3
1
  function generateExcerpt(excerpt, truncateOptions) {
4
2
  truncateOptions = truncateOptions || {};
5
3
 
@@ -8,6 +6,7 @@ function generateExcerpt(excerpt, truncateOptions) {
8
6
  }
9
7
 
10
8
  // Just uses downsize to truncate, not format
9
+ const downsize = require('downsize');
11
10
  return downsize(excerpt, truncateOptions);
12
11
  }
13
12
 
@@ -1,23 +1,38 @@
1
1
  // const debug = require('@tryghost/debug')('comments-counts-assets');
2
2
  const Minifier = require('@tryghost/minifier');
3
3
  const path = require('path');
4
- const fs = require('fs').promises;
4
+ const fs = require('fs');
5
5
  const logging = require('@tryghost/logging');
6
6
  const config = require('../../../shared/config');
7
7
  const urlUtils = require('../../../shared/url-utils');
8
+ const AssetsMinificationBase = require('./AssetsMinificationBase');
8
9
 
9
- class AdminAuthAssetsService {
10
+ module.exports = class AdminAuthAssets extends AssetsMinificationBase {
10
11
  constructor(options = {}) {
11
- /** @private */
12
+ super(options);
13
+
12
14
  this.src = options.src || path.join(config.get('paths').assetSrc, 'admin-auth');
13
15
  /** @private */
14
16
  this.dest = options.dest || path.join(config.getContentPath('public'), 'admin-auth');
15
- /** @private */
17
+
16
18
  this.minifier = new Minifier({src: this.src, dest: this.dest});
19
+
20
+ try {
21
+ // TODO: don't do this synchronously
22
+ fs.mkdirSync(this.dest, {recursive: true});
23
+ fs.copyFileSync(path.join(this.src, 'index.html'), path.join(this.dest, 'index.html'));
24
+ } catch (error) {
25
+ if (error.code === 'EACCES') {
26
+ logging.error('Ghost was not able to write admin-auth asset files due to permissions.');
27
+ return;
28
+ }
29
+
30
+ throw error;
31
+ }
17
32
  }
18
33
 
19
34
  /**
20
- * @private
35
+ * @override
21
36
  */
22
37
  generateGlobs() {
23
38
  return {
@@ -39,62 +54,10 @@ class AdminAuthAssetsService {
39
54
  };
40
55
  }
41
56
 
42
- /**
43
- * @private
44
- * @returns {Promise<void>}
45
- */
46
- async minify(globs, options) {
47
- try {
48
- await this.minifier.minify(globs, options);
49
- } catch (error) {
50
- if (error.code === 'EACCES') {
51
- logging.error('Ghost was not able to write admin-auth asset files due to permissions.');
52
- return;
53
- }
54
-
55
- throw error;
56
- }
57
- }
58
-
59
- /**
60
- * @private
61
- * @returns {Promise<void>}
62
- */
63
- async copyStatic() {
64
- try {
65
- await fs.copyFile(path.join(this.src, 'index.html'), path.join(this.dest, 'index.html'));
66
- } catch (error) {
67
- if (error.code === 'EACCES') {
68
- logging.error('Ghost was not able to write admin-auth asset files due to permissions.');
69
- return;
70
- }
71
-
72
- throw error;
73
- }
74
- }
75
-
76
- /**
77
- * @private
78
- * @returns {Promise<void>}
79
- */
80
- async clearFiles() {
81
- const rmFile = async (name) => {
82
- await fs.unlink(path.join(this.dest, name));
83
- };
84
-
85
- let promises = [
86
- // @deprecated switch this to use fs.rm when we drop support for Node v12
87
- rmFile('admin-auth.min.js'),
88
- rmFile('index.html')
89
- ];
90
-
91
- // We don't care if removing these files fails as it's valid for them to not exist
92
- await Promise.allSettled(promises);
93
- }
94
-
95
57
  /**
96
58
  * Minify, move into the destination directory, and clear existing asset files.
97
59
  *
60
+ * @override
98
61
  * @returns {Promise<void>}
99
62
  */
100
63
  async load() {
@@ -102,8 +65,5 @@ class AdminAuthAssetsService {
102
65
  const replacements = this.generateReplacements();
103
66
  await this.clearFiles();
104
67
  await this.minify(globs, {replacements});
105
- await this.copyStatic();
106
68
  }
107
- }
108
-
109
- module.exports = AdminAuthAssetsService;
69
+ };
@@ -0,0 +1,79 @@
1
+ const path = require('path');
2
+ const fs = require('fs').promises;
3
+ const errors = require('@tryghost/errors');
4
+ const logging = require('@tryghost/logging');
5
+
6
+ module.exports = class AssetsMinificationBase {
7
+ minifier;
8
+
9
+ ready = false;
10
+
11
+ constructor(options = {}) {
12
+ this.options = options;
13
+ }
14
+
15
+ invalidate() {
16
+ this.ready = false;
17
+ }
18
+
19
+ generateGlobs() {
20
+ throw new errors.InternalServerError({
21
+ message: 'generateGlobs not implemented'
22
+ });
23
+ }
24
+
25
+ async load() {
26
+ throw new errors.InternalServerError({
27
+ message: 'load not implemented'
28
+ });
29
+ }
30
+
31
+ /**
32
+ * @returns {Promise<void>}
33
+ */
34
+ async clearFiles() {
35
+ const rmFile = async (name) => {
36
+ await fs.unlink(path.join(this.dest, name));
37
+ };
38
+
39
+ const promises = [];
40
+ for (const key of Object.keys(this.generateGlobs())) {
41
+ // @deprecated switch this to use fs.rm when we drop support for Node v12
42
+ promises.push(rmFile(key));
43
+ }
44
+
45
+ // We don't care if removing these files fails as it's valid for them to not exist
46
+ await Promise.allSettled(promises);
47
+ }
48
+
49
+ async minify(globs, options) {
50
+ try {
51
+ return await this.minifier.minify(globs, options);
52
+ } catch (error) {
53
+ if (error.code === 'EACCES') {
54
+ logging.error('Ghost was not able to write asset files due to permissions.');
55
+ return;
56
+ }
57
+
58
+ throw error;
59
+ } finally {
60
+ this.ready = true;
61
+ }
62
+ }
63
+
64
+ serveMiddleware() {
65
+ const self = this;
66
+ /**
67
+ * @param {import('express').Request} req
68
+ * @param {import('express').Response} res
69
+ * @param {import('express').NextFunction} next
70
+ */
71
+ return async function serveMiddleware(req, res, next) {
72
+ if (!self.ready) {
73
+ await self.load();
74
+ }
75
+
76
+ next();
77
+ };
78
+ }
79
+ };
@@ -2,12 +2,13 @@ const debug = require('@tryghost/debug')('card-assets');
2
2
  const Minifier = require('@tryghost/minifier');
3
3
  const _ = require('lodash');
4
4
  const path = require('path');
5
- const fs = require('fs').promises;
6
- const logging = require('@tryghost/logging');
7
5
  const config = require('../../../shared/config');
6
+ const AssetsMinificationBase = require('./AssetsMinificationBase');
8
7
 
9
- class CardAssetService {
8
+ module.exports = class CardAssets extends AssetsMinificationBase {
10
9
  constructor(options = {}) {
10
+ super(options);
11
+
11
12
  this.src = options.src || path.join(config.get('paths').assetSrc, 'cards');
12
13
  this.dest = options.dest || config.getContentPath('public');
13
14
  this.minifier = new Minifier({src: this.src, dest: this.dest});
@@ -19,6 +20,9 @@ class CardAssetService {
19
20
  this.files = [];
20
21
  }
21
22
 
23
+ /**
24
+ * @override
25
+ */
22
26
  generateGlobs() {
23
27
  // CASE: The theme has asked for all card assets to be included by default
24
28
  if (this.config === true) {
@@ -50,52 +54,33 @@ class CardAssetService {
50
54
  return {};
51
55
  }
52
56
 
53
- async minify(globs) {
54
- try {
55
- return await this.minifier.minify(globs);
56
- } catch (error) {
57
- if (error.code === 'EACCES') {
58
- logging.error('Ghost was not able to write card asset files due to permissions.');
59
- return;
60
- }
61
-
62
- throw error;
57
+ hasFile(type) {
58
+ if (this.files.length) {
59
+ return this.files.indexOf(`cards.min.${type}`) > -1;
63
60
  }
64
- }
65
-
66
- async clearFiles() {
67
- this.files = [];
68
61
 
69
- const rmFile = async (name) => {
70
- await fs.unlink(path.join(this.dest, name));
71
- };
72
-
73
- let promises = [
74
- // @deprecated switch this to use fs.rm when we drop support for Node v12
75
- rmFile('cards.min.css'),
76
- rmFile('cards.min.js')
77
- ];
78
-
79
- // We don't care if removing these files fails as it's valid for them to not exist
80
- return Promise.allSettled(promises);
62
+ return Object.keys(this.generateGlobs()).indexOf(`cards.min.${type}`) > -1;
81
63
  }
82
64
 
83
- hasFile(type) {
84
- return this.files.indexOf(`cards.min.${type}`) > -1;
65
+ invalidate(cardAssetConfig) {
66
+ if (cardAssetConfig) {
67
+ this.config = cardAssetConfig;
68
+ }
69
+
70
+ return super.invalidate();
85
71
  }
86
72
 
87
73
  /**
88
74
  * A theme can declare which cards it supports, and we'll do the rest
89
75
  *
90
- * @param {Array|boolean} cardAssetConfig
91
- * @returns
76
+ * @override
92
77
  */
93
78
  async load(cardAssetConfig) {
94
79
  if (cardAssetConfig) {
95
80
  this.config = cardAssetConfig;
96
81
  }
97
82
 
98
- debug('loading with config', cardAssetConfig);
83
+ debug('loading with config', this.config);
99
84
 
100
85
  await this.clearFiles();
101
86
 
@@ -105,6 +90,4 @@ class CardAssetService {
105
90
 
106
91
  this.files = await this.minify(globs) || [];
107
92
  }
108
- }
109
-
110
- module.exports = CardAssetService;
93
+ };