ghost 4.22.4 → 4.23.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.
@@ -3538,7 +3538,7 @@ var r=t.default.extend(n.default,{init(){this.properties=this.properties||["name
3538
3538
  i.default.isLength(t||"",1)||(e.get("errors").add("name","Please enter a name."),e.get("hasValidated").addObject("email"),this.invalidate())},email(e){let t=e.get("email")
3539
3539
  Ember.isBlank(t)?(e.get("errors").add("email","Please enter an email."),this.invalidate()):i.default.isEmail(t)||(e.get("errors").add("email","Invalid Email."),this.invalidate()),e.get("hasValidated").addObject("email")},password(e){this.passwordValidation(e)}})
3540
3540
  e.default=r})),define("ghost-admin/validators/offer",["exports","ghost-admin/validators/base","validator"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3541
- var i=t.default.create({properties:["name","amount","displayTitle","displayDescription","code","durationInMonths"],name(e){e.name||(e.errors.add("name","Please enter a name."),this.invalidate()),n.default.isLength(e.name||"",0,191)||(e.errors.add("name","Name cannot be longer than 191 characters."),this.invalidate())},amount(e){e.amount||(e.errors.add("amount","Please enter the amount."),this.invalidate())},displayDescription(e){n.default.isLength(e.displayDescription||"",0,191)||(e.errors.add("displayDescription","Display description cannot be longer than 191 characters."),this.invalidate())},durationInMonths(e){"repeating"!==e.duration||e.durationInMonths||(e.errors.add("durationInMonths","Please enter the duration in months."),this.invalidate())},code(e){e.code||(e.errors.add("code","Please enter an offer code."),this.invalidate())}})
3541
+ var i=t.default.create({properties:["name","amount","displayTitle","displayDescription","code","durationInMonths"],name(e){e.name||(e.errors.add("name","Please enter a name."),this.invalidate()),n.default.isLength(e.name||"",0,40)||(e.errors.add("name","Name cannot be longer than 40 characters."),this.invalidate())},amount(e){e.amount||(e.errors.add("amount","Please enter the amount."),this.invalidate())},displayDescription(e){n.default.isLength(e.displayDescription||"",0,191)||(e.errors.add("displayDescription","Display description cannot be longer than 191 characters."),this.invalidate())},durationInMonths(e){"repeating"!==e.duration||e.durationInMonths||(e.errors.add("durationInMonths","Please enter the duration in months."),this.invalidate())},code(e){e.code||(e.errors.add("code","Please enter an offer code."),this.invalidate())}})
3542
3542
  e.default=i})),define("ghost-admin/validators/post",["exports","ghost-admin/validators/base","moment","validator"],(function(e,t,n,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3543
3543
  var r=t.default.create({properties:["title","authors","customExcerpt","canonicalUrl","codeinjectionHead","codeinjectionFoot","metaTitle","metaDescription","ogtitle","ogDescription","twitterTitle","twitterDescription","publishedAtBlogTime","publishedAtBlogDate","emailSubject","featureImageAlt"],title(e){Ember.isBlank(e.title)&&(e.errors.add("title","You must specify a title for the post."),this.invalidate()),i.default.isLength(e.title||"",0,255)||(e.errors.add("title","Title cannot be longer than 255 characters."),this.invalidate())},authors(e){Ember.isEmpty(e.authors)&&(e.errors.add("authors","At least one author is required."),this.invalidate())},canonicalUrl(e){let t=new RegExp(/^(\/|[a-zA-Z0-9-]+:)/),n=e.canonicalUrl
3544
3544
  Ember.isBlank(n)||(n.match(/\s/)||!i.default.isURL(n,{require_protocol:!0})&&!n.match(t)?(e.errors.add("canonicalUrl","Please enter a valid URL"),this.invalidate()):i.default.isLength(e.canonicalUrl,0,2e3)||(e.errors.add("canonicalUrl","Canonical URL is too long, max 2000 chars"),this.invalidate()))},customExcerpt(e){i.default.isLength(e.customExcerpt||"",0,300)||(e.errors.add("customExcerpt","Excerpt cannot be longer than 300 characters."),this.invalidate())},visibility(e){Ember.isBlank(e.visibility)&&!e.isNew&&(e.errors.add("visibility","Please select at least one tier"),this.invalidate())},visibilityFilter(e){!Ember.isBlank(e.visibilityFilter)||Ember.isBlank(e.visibility)||"filter"!==e.visibility||e.isNew||(e.errors.add("visibilityFilter","Please select at least one tier"),this.invalidate())},codeinjectionFoot(e){i.default.isLength(e.codeinjectionFoot||"",0,65535)||(e.errors.add("codeinjectionFoot","Footer code cannot be longer than 65535 characters."),this.invalidate())},codeinjectionHead(e){i.default.isLength(e.codeinjectionHead||"",0,65535)||(e.errors.add("codeinjectionHead","Header code cannot be longer than 65535 characters."),this.invalidate())},metaTitle(e){i.default.isLength(e.metaTitle||"",0,300)||(e.errors.add("metaTitle","Meta Title cannot be longer than 300 characters."),this.invalidate())},metaDescription(e){i.default.isLength(e.metaDescription||"",0,500)||(e.errors.add("metaDescription","Meta Description cannot be longer than 500 characters."),this.invalidate())},ogTitle(e){i.default.isLength(e.ogTitle||"",0,300)||(e.errors.add("ogTitle","Facebook Title cannot be longer than 300 characters."),this.invalidate())},ogDescription(e){i.default.isLength(e.ogDescription||"",0,500)||(e.errors.add("ogDescription","Facebook Description cannot be longer than 500 characters."),this.invalidate())},twitterTitle(e){i.default.isLength(e.twitterTitle||"",0,300)||(e.errors.add("twitterTitle","Twitter Title cannot be longer than 300 characters."),this.invalidate())},twitterDescription(e){i.default.isLength(e.twitterDescription||"",0,500)||(e.errors.add("twitterDescription","Twitter Description cannot be longer than 500 characters."),this.invalidate())},emailSubject(e){i.default.isLength(e.emailSubject||"",0,300)||(e.errors.add("emailSubject","Email Subject cannot be longer than 300 characters."),this.invalidate())},_shouldValidatePublishedAtBlog:e=>Ember.isPresent(e.publishedAtUTC)||Ember.isPresent(e.publishedAtBlogDate)||Ember.isPresent(e.publishedAtBlogTime),publishedAtBlog(e){this.publishedAtBlogTime(e),this.publishedAtBlogDate(e)},publishedAtBlogTime(e){!/^(([0-1]?[0-9])|([2][0-3])):([0-5][0-9])$/.test(e.publishedAtBlogTime)&&this._shouldValidatePublishedAtBlog(e)&&(e.errors.add("publishedAtBlogTime",'Must be in format: "15:00"'),this.invalidate())},publishedAtBlogDate(e){let t=e.publishedAtBlogDate,i=e.publishedAtBlogTime
@@ -3601,6 +3601,6 @@ var i=t.default.create({properties:["name","event","targetUrl"],name(e){Ember.is
3601
3601
  e.default=i})),define("ghost-admin/views/application",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3602
3602
  var t=Ember.Component.extend({})
3603
3603
  e.default=t})),define("ghost-admin/config/environment",[],(function(){try{var e="ghost-admin/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),n={default:JSON.parse(decodeURIComponent(t))}
3604
- return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(i){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"4.22",name:"ghost-admin"})
3604
+ return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(i){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"4.23",name:"ghost-admin"})
3605
3605
 
3606
- //# sourceMappingURL=ghost.min-2e3e64eb258cf424c59c3e308b4bc6e6.map
3606
+ //# sourceMappingURL=ghost.min-cccc107e881b74c7aaf1a73e1e5e0dee.map
@@ -0,0 +1,58 @@
1
+ const logging = require('@tryghost/logging');
2
+ const {createTransactionalMigration} = require('../../utils');
3
+
4
+ /**
5
+ * @param {(val: string) => boolean} exists
6
+ * @param {string} requested
7
+ * @param {string} attempt
8
+ * @param {number} n
9
+ *
10
+ * @returns {string}
11
+ */
12
+ function getUnique(exists, requested, attempt = requested, n = 1) {
13
+ if (!exists(attempt)) {
14
+ return attempt;
15
+ }
16
+ const newAttempt = requested.slice(0, -n.toString().length) + n;
17
+ return getUnique(exists, requested, newAttempt, n + 1);
18
+ }
19
+
20
+ module.exports = createTransactionalMigration(
21
+ async function up(knex) {
22
+ const allOffers = await knex
23
+ .select('id', 'name')
24
+ .from('offers');
25
+
26
+ const offersNeedingTrunctation = allOffers.filter((row) => {
27
+ return row.name.length >= 40;
28
+ });
29
+
30
+ if (offersNeedingTrunctation.length === 0) {
31
+ logging.warn('No Offers found needing truncation');
32
+ return;
33
+ } else {
34
+ logging.info(`Found ${offersNeedingTrunctation.length} Offers needing truncation`);
35
+ }
36
+
37
+ const truncatedOffers = offersNeedingTrunctation.reduce((offers, row) => {
38
+ function exists(name) {
39
+ return offers.find(offer => offer.name === name) !== undefined;
40
+ }
41
+
42
+ const updatedRow = {
43
+ id: row.id,
44
+ name: getUnique(exists, row.name.slice(0, 40))
45
+ };
46
+
47
+ return offers.concat(updatedRow);
48
+ }, []);
49
+
50
+ for (const truncatedOffer of truncatedOffers) {
51
+ await knex('offers')
52
+ .update('name', truncatedOffer.name)
53
+ .where('id', truncatedOffer.id);
54
+ }
55
+ },
56
+ // no-op we've lost the data required to roll this back
57
+ async function down() {}
58
+ );
@@ -63,6 +63,7 @@ class OEmbed {
63
63
  */
64
64
  constructor({config, externalRequest}) {
65
65
  this.config = config;
66
+
66
67
  /** @type {IExternalRequest} */
67
68
  this.externalRequest = async (url, requestConfig) => {
68
69
  if (this.isIpOrLocalhost(url)) {
@@ -74,6 +75,7 @@ class OEmbed {
74
75
  }
75
76
  return response;
76
77
  };
78
+
77
79
  /** @type {ICustomProvider[]} */
78
80
  this.customProviders = [];
79
81
  }
@@ -108,27 +110,6 @@ class OEmbed {
108
110
  }
109
111
  }
110
112
 
111
- /**
112
- * @param {string} url
113
- */
114
- errorHandler(url) {
115
- /**
116
- * @param {Error|errors.GhostError} err
117
- */
118
- return async (err) => {
119
- // allow specific validation errors through for better error messages
120
- if (errors.utils.isIgnitionError(err) && err.errorType === 'ValidationError') {
121
- throw err;
122
- }
123
-
124
- // log the real error because we're going to throw a generic "Unknown provider" error
125
- logging.error(new errors.GhostError({err}));
126
-
127
- // default to unknown provider to avoid leaking any app specifics
128
- return this.unknownProvider(url);
129
- };
130
- }
131
-
132
113
  async fetchBookmarkData(url) {
133
114
  const metascraper = require('metascraper')([
134
115
  require('metascraper-url')(),
@@ -300,10 +281,9 @@ class OEmbed {
300
281
  * @returns {Promise<Object>}
301
282
  */
302
283
  async fetchOembedDataFromUrl(url, type) {
303
- let data;
304
-
305
284
  try {
306
285
  const urlObject = new URL(url);
286
+
307
287
  for (const provider of this.customProviders) {
308
288
  if (await provider.canSupportRequest(urlObject)) {
309
289
  const result = await provider.getOEmbedData(urlObject, this.externalRequest);
@@ -313,23 +293,39 @@ class OEmbed {
313
293
  }
314
294
  }
315
295
 
296
+ // fetch only bookmark when explicitly requested
316
297
  if (type === 'bookmark') {
317
298
  return this.fetchBookmarkData(url);
318
299
  }
319
300
 
320
- data = await this.fetchOembedData(url);
301
+ // attempt to fetch oembed
302
+ let data = await this.fetchOembedData(url);
321
303
 
304
+ // fallback to bookmark when we can't get oembed
322
305
  if (!data && !type) {
323
306
  data = await this.fetchBookmarkData(url);
324
307
  }
325
308
 
309
+ // couldn't get anything, throw a validation error
326
310
  if (!data) {
327
- data = await this.unknownProvider(url);
311
+ return this.unknownProvider(url);
328
312
  }
329
313
 
330
314
  return data;
331
- } catch (e) {
332
- return this.errorHandler(url);
315
+ } catch (err) {
316
+ // allow specific validation errors through for better error messages
317
+ if (errors.utils.isIgnitionError(err) && err.errorType === 'ValidationError') {
318
+ throw err;
319
+ }
320
+
321
+ // log the real error because we're going to throw a generic "Unknown provider" error
322
+ logging.error(new errors.GhostError({
323
+ message: 'Encountered error when fetching oembed',
324
+ err
325
+ }));
326
+
327
+ // default to unknown provider to avoid leaking any app specifics
328
+ return this.unknownProvider(url);
333
329
  }
334
330
  }
335
331
  }
@@ -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%22rootURL%22%3A%22%2F%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%224.22%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%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%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%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%224.23%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%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%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
  <script src="assets/vendor.min-c9002845b6c30ac978abdadde9f33d7c.js"></script>
63
- <script src="assets/ghost.min-2e3e64eb258cf424c59c3e308b4bc6e6.js"></script>
63
+ <script src="assets/ghost.min-cccc107e881b74c7aaf1a73e1e5e0dee.js"></script>
64
64
 
65
65
  </body>
66
66
  </html>
@@ -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%22rootURL%22%3A%22%2F%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%224.22%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%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%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%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%224.23%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%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%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
  <script src="assets/vendor.min-c9002845b6c30ac978abdadde9f33d7c.js"></script>
63
- <script src="assets/ghost.min-2e3e64eb258cf424c59c3e308b4bc6e6.js"></script>
63
+ <script src="assets/ghost.min-cccc107e881b74c7aaf1a73e1e5e0dee.js"></script>
64
64
 
65
65
  </body>
66
66
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "4.22.4",
3
+ "version": "4.23.0",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -79,10 +79,10 @@
79
79
  "@tryghost/limit-service": "1.0.0",
80
80
  "@tryghost/logging": "1.0.1",
81
81
  "@tryghost/magic-link": "1.0.14",
82
- "@tryghost/members-api": "2.7.4",
82
+ "@tryghost/members-api": "2.7.5",
83
83
  "@tryghost/members-csv": "1.1.8",
84
84
  "@tryghost/members-importer": "0.3.4",
85
- "@tryghost/members-offers": "0.10.2",
85
+ "@tryghost/members-offers": "0.10.3",
86
86
  "@tryghost/members-ssr": "1.0.15",
87
87
  "@tryghost/metrics": "1.0.1",
88
88
  "@tryghost/minifier": "0.1.1",
@@ -159,7 +159,7 @@
159
159
  "mysql": "2.18.1",
160
160
  "nconf": "0.11.3",
161
161
  "node-jose": "2.0.0",
162
- "oembed-parser": "1.5.2",
162
+ "oembed-parser": "1.4.9",
163
163
  "passport": "0.5.0",
164
164
  "passport-google-oauth": "2.0.0",
165
165
  "path-match": "1.2.4",
package/yarn.lock CHANGED
@@ -1866,10 +1866,10 @@
1866
1866
  "@tryghost/domain-events" "^0.1.3"
1867
1867
  "@tryghost/member-events" "^0.3.1"
1868
1868
 
1869
- "@tryghost/members-api@2.7.4":
1870
- version "2.7.4"
1871
- resolved "https://registry.yarnpkg.com/@tryghost/members-api/-/members-api-2.7.4.tgz#0941f8d892fb72c15f820947b2ac444bd570cd6d"
1872
- integrity sha512-C7w/aKRzDwR3Aol0mVborOQAv6mE8cVV4G0J2L757BjhyKuMeVAOb6X+uCYBLNhe0zabiKow6GwN+f1M/qXp4A==
1869
+ "@tryghost/members-api@2.7.5":
1870
+ version "2.7.5"
1871
+ resolved "https://registry.yarnpkg.com/@tryghost/members-api/-/members-api-2.7.5.tgz#693aad037697757e8c5f69f267606208bbb9c19f"
1872
+ integrity sha512-KieQlWshDAUG3CxHjN1J8k3IH5tl/oCDEB7SM3nnbZoVV2frSnFInAHXCLFwkjunGx0dpJEdzVUgr/VdNlb9DA==
1873
1873
  dependencies:
1874
1874
  "@tryghost/debug" "^0.1.2"
1875
1875
  "@tryghost/domain-events" "^0.1.3"
@@ -1879,7 +1879,7 @@
1879
1879
  "@tryghost/member-analytics-service" "^0.1.4"
1880
1880
  "@tryghost/member-events" "^0.3.1"
1881
1881
  "@tryghost/members-analytics-ingress" "^0.1.5"
1882
- "@tryghost/members-payments" "^0.1.4"
1882
+ "@tryghost/members-payments" "^0.1.5"
1883
1883
  "@tryghost/members-stripe-service" "^0.5.0"
1884
1884
  "@tryghost/tpl" "^0.1.2"
1885
1885
  "@types/jsonwebtoken" "^8.5.1"
@@ -1914,21 +1914,21 @@
1914
1914
  "@tryghost/tpl" "^0.1.3"
1915
1915
  moment-timezone "0.5.23"
1916
1916
 
1917
- "@tryghost/members-offers@0.10.2", "@tryghost/members-offers@^0.10.2":
1918
- version "0.10.2"
1919
- resolved "https://registry.yarnpkg.com/@tryghost/members-offers/-/members-offers-0.10.2.tgz#5716e9be902ef924c3fb9fad48a7ab38cd58b7c0"
1920
- integrity sha512-LL+Rrn5VHwGf8cMnIVCFhkkBI6Eg1CkVjLa3qi0/NRncy28IhVn0jjg1aJa6hoicCWZLg1/efT2RhI5RvC4Gzw==
1917
+ "@tryghost/members-offers@0.10.3", "@tryghost/members-offers@^0.10.3":
1918
+ version "0.10.3"
1919
+ resolved "https://registry.yarnpkg.com/@tryghost/members-offers/-/members-offers-0.10.3.tgz#759cf2c0650b09309e9295f178aff17990d29d5c"
1920
+ integrity sha512-W0lGfOfJkRrESxBEgkBW5XqQuhW/5Cj+QIzOb2b6nT8u3VCE4dX0VCkLWrc6HJq+Hpgv0potmGOLoj37xvFmEw==
1921
1921
  dependencies:
1922
1922
  "@nexes/mongo-utils" "^0.3.1"
1923
1923
  "@tryghost/string" "^0.1.20"
1924
1924
 
1925
- "@tryghost/members-payments@^0.1.4":
1926
- version "0.1.4"
1927
- resolved "https://registry.yarnpkg.com/@tryghost/members-payments/-/members-payments-0.1.4.tgz#613e588b354a3e432f159f9179c946d90388bf85"
1928
- integrity sha512-0fA0uLRV5zPaZgEl7XuQYqtLZjJWWJVUXZq2xiKNi5jw4/koCPKjVicBOuMtRWBK0Nn5Mma6B9uBvhkMGUMqgw==
1925
+ "@tryghost/members-payments@^0.1.5":
1926
+ version "0.1.5"
1927
+ resolved "https://registry.yarnpkg.com/@tryghost/members-payments/-/members-payments-0.1.5.tgz#9d7f7f48e118a836c5825e19403dc4c0611d4976"
1928
+ integrity sha512-iT61ffRqVH89KUOUtzDrXTn7fG38/LUcKFaFgrnWhTwcVdcglKefE2cWAjm25BNcYKM3lHJFxG/3PTVHmcOvTw==
1929
1929
  dependencies:
1930
1930
  "@tryghost/domain-events" "^0.1.3"
1931
- "@tryghost/members-offers" "^0.10.2"
1931
+ "@tryghost/members-offers" "^0.10.3"
1932
1932
 
1933
1933
  "@tryghost/members-ssr@1.0.15":
1934
1934
  version "1.0.15"
@@ -3757,6 +3757,13 @@ cron-validate@^1.4.1, cron-validate@^1.4.3:
3757
3757
  dependencies:
3758
3758
  yup "0.32.9"
3759
3759
 
3760
+ cross-fetch@^3.1.4:
3761
+ version "3.1.4"
3762
+ resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39"
3763
+ integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==
3764
+ dependencies:
3765
+ node-fetch "2.6.1"
3766
+
3760
3767
  cross-spawn@^6.0.5:
3761
3768
  version "6.0.5"
3762
3769
  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
@@ -5683,7 +5690,7 @@ got@9.6.0, got@^9.6.0:
5683
5690
  to-readable-stream "^1.0.0"
5684
5691
  url-parse-lax "^3.0.0"
5685
5692
 
5686
- got@^11.8.2, got@~11.8.2:
5693
+ got@~11.8.2:
5687
5694
  version "11.8.2"
5688
5695
  resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599"
5689
5696
  integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==
@@ -8447,6 +8454,11 @@ node-addon-api@^4.2.0:
8447
8454
  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87"
8448
8455
  integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==
8449
8456
 
8457
+ node-fetch@2.6.1:
8458
+ version "2.6.1"
8459
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
8460
+ integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
8461
+
8450
8462
  node-fetch@^2.6.0:
8451
8463
  version "2.6.6"
8452
8464
  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89"
@@ -8758,12 +8770,12 @@ object.pick@^1.2.0, object.pick@^1.3.0:
8758
8770
  dependencies:
8759
8771
  isobject "^3.0.1"
8760
8772
 
8761
- oembed-parser@1.5.2:
8762
- version "1.5.2"
8763
- resolved "https://registry.yarnpkg.com/oembed-parser/-/oembed-parser-1.5.2.tgz#a35830793f0cf03519ffedb9a43b815d291f0327"
8764
- integrity sha512-Um9aqB6fu1+DmxyKawuVcP4TpNv7gw9jmd65mIVxkQxR40+BpEz2jrl/0xaahV67omOl9eGv/OxtK0O7zVh5JQ==
8773
+ oembed-parser@1.4.9:
8774
+ version "1.4.9"
8775
+ resolved "https://registry.yarnpkg.com/oembed-parser/-/oembed-parser-1.4.9.tgz#d23127c96185dfa2d998b8567e6c7df164f3d824"
8776
+ integrity sha512-RCOjuv20IMm9XekZB1ZefdYPc+x5qe8IyCeY/xcN71I2z70vQl+L420eI5Mjyy/NQFLv+QPEgj/aYh1vptO83w==
8765
8777
  dependencies:
8766
- got "^11.8.2"
8778
+ cross-fetch "^3.1.4"
8767
8779
 
8768
8780
  on-finished@^2.3.0, on-finished@~2.3.0:
8769
8781
  version "2.3.0"