You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

@wordpress/api-fetch

Package Overview
Dependencies
Maintainers
21
Versions
262
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@wordpress/api-fetch - npm Package Compare versions

Comparing version
5.2.2
to
5.2.3
+35
src/middlewares/test/media-upload.js
/**
* Internal dependencies
*/
import mediaUploadMiddleware from '../media-upload';
describe( 'Media Upload Middleware', () => {
it( 'should defer to the next middleware with the same options', () => {
expect.hasAssertions();
const originalOptions = { path: '/wp/v2/media' };
const next = ( options ) => {
expect( options ).toBe( originalOptions );
};
mediaUploadMiddleware( originalOptions, next );
} );
it( 'should change options not to parse', () => {
expect.hasAssertions();
const requestOptions = { method: 'POST', path: '/wp/v2/media' };
const next = ( options ) => {
expect( options.parse ).toBe( false );
return Promise.resolve( {
status: 200,
json() {
return Promise.resolve( [ 'item' ] );
},
} );
};
mediaUploadMiddleware( requestOptions, next );
} );
} );
+12
-3

@@ -11,2 +11,12 @@ /**

/**
* @param {import('../types').APIFetchOptions} options
* @return {boolean} True if the request is for media upload.
*/
function isMediaUploadRequest(options) {
const isCreateMethod = !!options.method && options.method === 'POST';
const isMediaEndpoint = !!options.path && options.path.indexOf('/wp/v2/media') !== -1 || !!options.url && options.url.indexOf('/wp/v2/media') !== -1;
return isMediaEndpoint && isCreateMethod;
}
/**
* Middleware handling media upload failures and retries.

@@ -17,6 +27,5 @@ *

const mediaUploadMiddleware = (options, next) => {
const isMediaUploadRequest = options.path && options.path.indexOf('/wp/v2/media') !== -1 || options.url && options.url.indexOf('/wp/v2/media') !== -1;
if (!isMediaUploadRequest) {
if (!isMediaUploadRequest(options)) {
return next(options);

@@ -23,0 +32,0 @@ }

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/media-upload.js"],"names":["__","parseAndThrowError","parseResponseAndNormalizeError","mediaUploadMiddleware","options","next","isMediaUploadRequest","path","indexOf","url","retries","maxRetries","postProcess","attachmentId","method","data","action","parse","catch","Promise","reject","response","headers","get","status","code","message","then"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AAEA;AACA;AACA;;AACA,SACCC,kBADD,EAECC,8BAFD,QAGO,mBAHP;AAKA;AACA;AACA;AACA;AACA;;AACA,MAAMC,qBAAqB,GAAG,CAAEC,OAAF,EAAWC,IAAX,KAAqB;AAClD,QAAMC,oBAAoB,GACvBF,OAAO,CAACG,IAAR,IAAgBH,OAAO,CAACG,IAAR,CAAaC,OAAb,CAAsB,cAAtB,MAA2C,CAAC,CAA9D,IACEJ,OAAO,CAACK,GAAR,IAAeL,OAAO,CAACK,GAAR,CAAYD,OAAZ,CAAqB,cAArB,MAA0C,CAAC,CAF7D;;AAIA,MAAK,CAAEF,oBAAP,EAA8B;AAC7B,WAAOD,IAAI,CAAED,OAAF,CAAX;AACA;;AACD,MAAIM,OAAO,GAAG,CAAd;AACA,QAAMC,UAAU,GAAG,CAAnB;AAEA;AACD;AACA;AACA;;AACC,QAAMC,WAAW,GAAKC,YAAF,IAAoB;AACvCH,IAAAA,OAAO;AACP,WAAOL,IAAI,CAAE;AACZE,MAAAA,IAAI,EAAG,gBAAgBM,YAAc,eADzB;AAEZC,MAAAA,MAAM,EAAE,MAFI;AAGZC,MAAAA,IAAI,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHM;AAIZC,MAAAA,KAAK,EAAE;AAJK,KAAF,CAAJ,CAKHC,KALG,CAKI,MAAM;AAChB,UAAKR,OAAO,GAAGC,UAAf,EAA4B;AAC3B,eAAOC,WAAW,CAAEC,YAAF,CAAlB;AACA;;AACDR,MAAAA,IAAI,CAAE;AACLE,QAAAA,IAAI,EAAG,gBAAgBM,YAAc,aADhC;AAELC,QAAAA,MAAM,EAAE;AAFH,OAAF,CAAJ;AAKA,aAAOK,OAAO,CAACC,MAAR,EAAP;AACA,KAfM,CAAP;AAgBA,GAlBD;;AAoBA,SAAOf,IAAI,CAAE,EAAE,GAAGD,OAAL;AAAca,IAAAA,KAAK,EAAE;AAArB,GAAF,CAAJ,CACLC,KADK,CACIG,QAAF,IAAgB;AACvB,UAAMR,YAAY,GAAGQ,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CACpB,2BADoB,CAArB;;AAGA,QACCF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IACAH,QAAQ,CAACG,MAAT,GAAkB,GADlB,IAEAX,YAHD,EAIE;AACD,aAAOD,WAAW,CAAEC,YAAF,CAAX,CAA4BK,KAA5B,CAAmC,MAAM;AAC/C,YAAKd,OAAO,CAACa,KAAR,KAAkB,KAAvB,EAA+B;AAC9B,iBAAOE,OAAO,CAACC,MAAR,CAAgB;AACtBK,YAAAA,IAAI,EAAE,cADgB;AAEtBC,YAAAA,OAAO,EAAE1B,EAAE,CACV,+FADU;AAFW,WAAhB,CAAP;AAMA;;AAED,eAAOmB,OAAO,CAACC,MAAR,CAAgBC,QAAhB,CAAP;AACA,OAXM,CAAP;AAYA;;AACD,WAAOpB,kBAAkB,CAAEoB,QAAF,EAAYjB,OAAO,CAACa,KAApB,CAAzB;AACA,GAxBK,EAyBLU,IAzBK,CAyBGN,QAAF,IACNnB,8BAA8B,CAAEmB,QAAF,EAAYjB,OAAO,CAACa,KAApB,CA1BzB,CAAP;AA4BA,CA/DD;;AAiEA,eAAed,qBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tparseAndThrowError,\n\tparseResponseAndNormalizeError,\n} from '../utils/response';\n\n/**\n * Middleware handling media upload failures and retries.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst mediaUploadMiddleware = ( options, next ) => {\n\tconst isMediaUploadRequest =\n\t\t( options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||\n\t\t( options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );\n\n\tif ( ! isMediaUploadRequest ) {\n\t\treturn next( options );\n\t}\n\tlet retries = 0;\n\tconst maxRetries = 5;\n\n\t/**\n\t * @param {string} attachmentId\n\t * @return {Promise<any>} Processed post response.\n\t */\n\tconst postProcess = ( attachmentId ) => {\n\t\tretries++;\n\t\treturn next( {\n\t\t\tpath: `/wp/v2/media/${ attachmentId }/post-process`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { action: 'create-image-subsizes' },\n\t\t\tparse: false,\n\t\t} ).catch( () => {\n\t\t\tif ( retries < maxRetries ) {\n\t\t\t\treturn postProcess( attachmentId );\n\t\t\t}\n\t\t\tnext( {\n\t\t\t\tpath: `/wp/v2/media/${ attachmentId }?force=true`,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t} );\n\n\t\t\treturn Promise.reject();\n\t\t} );\n\t};\n\n\treturn next( { ...options, parse: false } )\n\t\t.catch( ( response ) => {\n\t\t\tconst attachmentId = response.headers.get(\n\t\t\t\t'x-wp-upload-attachment-id'\n\t\t\t);\n\t\t\tif (\n\t\t\t\tresponse.status >= 500 &&\n\t\t\t\tresponse.status < 600 &&\n\t\t\t\tattachmentId\n\t\t\t) {\n\t\t\t\treturn postProcess( attachmentId ).catch( () => {\n\t\t\t\t\tif ( options.parse !== false ) {\n\t\t\t\t\t\treturn Promise.reject( {\n\t\t\t\t\t\t\tcode: 'post_process',\n\t\t\t\t\t\t\tmessage: __(\n\t\t\t\t\t\t\t\t'Media upload failed. If this is a photo or a large image, please scale it down and try again.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject( response );\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn parseAndThrowError( response, options.parse );\n\t\t} )\n\t\t.then( ( response ) =>\n\t\t\tparseResponseAndNormalizeError( response, options.parse )\n\t\t);\n};\n\nexport default mediaUploadMiddleware;\n"]}
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/media-upload.js"],"names":["__","parseAndThrowError","parseResponseAndNormalizeError","isMediaUploadRequest","options","isCreateMethod","method","isMediaEndpoint","path","indexOf","url","mediaUploadMiddleware","next","retries","maxRetries","postProcess","attachmentId","data","action","parse","catch","Promise","reject","response","headers","get","status","code","message","then"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AAEA;AACA;AACA;;AACA,SACCC,kBADD,EAECC,8BAFD,QAGO,mBAHP;AAKA;AACA;AACA;AACA;;AACA,SAASC,oBAAT,CAA+BC,OAA/B,EAAyC;AACxC,QAAMC,cAAc,GAAG,CAAC,CAAED,OAAO,CAACE,MAAX,IAAqBF,OAAO,CAACE,MAAR,KAAmB,MAA/D;AACA,QAAMC,eAAe,GAClB,CAAC,CAAEH,OAAO,CAACI,IAAX,IAAmBJ,OAAO,CAACI,IAAR,CAAaC,OAAb,CAAsB,cAAtB,MAA2C,CAAC,CAAjE,IACE,CAAC,CAAEL,OAAO,CAACM,GAAX,IAAkBN,OAAO,CAACM,GAAR,CAAYD,OAAZ,CAAqB,cAArB,MAA0C,CAAC,CAFhE;AAIA,SAAOF,eAAe,IAAIF,cAA1B;AACA;AAED;AACA;AACA;AACA;AACA;;;AACA,MAAMM,qBAAqB,GAAG,CAAEP,OAAF,EAAWQ,IAAX,KAAqB;AAClD,MAAK,CAAET,oBAAoB,CAAEC,OAAF,CAA3B,EAAyC;AACxC,WAAOQ,IAAI,CAAER,OAAF,CAAX;AACA;;AAED,MAAIS,OAAO,GAAG,CAAd;AACA,QAAMC,UAAU,GAAG,CAAnB;AAEA;AACD;AACA;AACA;;AACC,QAAMC,WAAW,GAAKC,YAAF,IAAoB;AACvCH,IAAAA,OAAO;AACP,WAAOD,IAAI,CAAE;AACZJ,MAAAA,IAAI,EAAG,gBAAgBQ,YAAc,eADzB;AAEZV,MAAAA,MAAM,EAAE,MAFI;AAGZW,MAAAA,IAAI,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHM;AAIZC,MAAAA,KAAK,EAAE;AAJK,KAAF,CAAJ,CAKHC,KALG,CAKI,MAAM;AAChB,UAAKP,OAAO,GAAGC,UAAf,EAA4B;AAC3B,eAAOC,WAAW,CAAEC,YAAF,CAAlB;AACA;;AACDJ,MAAAA,IAAI,CAAE;AACLJ,QAAAA,IAAI,EAAG,gBAAgBQ,YAAc,aADhC;AAELV,QAAAA,MAAM,EAAE;AAFH,OAAF,CAAJ;AAKA,aAAOe,OAAO,CAACC,MAAR,EAAP;AACA,KAfM,CAAP;AAgBA,GAlBD;;AAoBA,SAAOV,IAAI,CAAE,EAAE,GAAGR,OAAL;AAAce,IAAAA,KAAK,EAAE;AAArB,GAAF,CAAJ,CACLC,KADK,CACIG,QAAF,IAAgB;AACvB,UAAMP,YAAY,GAAGO,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CACpB,2BADoB,CAArB;;AAGA,QACCF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IACAH,QAAQ,CAACG,MAAT,GAAkB,GADlB,IAEAV,YAHD,EAIE;AACD,aAAOD,WAAW,CAAEC,YAAF,CAAX,CAA4BI,KAA5B,CAAmC,MAAM;AAC/C,YAAKhB,OAAO,CAACe,KAAR,KAAkB,KAAvB,EAA+B;AAC9B,iBAAOE,OAAO,CAACC,MAAR,CAAgB;AACtBK,YAAAA,IAAI,EAAE,cADgB;AAEtBC,YAAAA,OAAO,EAAE5B,EAAE,CACV,+FADU;AAFW,WAAhB,CAAP;AAMA;;AAED,eAAOqB,OAAO,CAACC,MAAR,CAAgBC,QAAhB,CAAP;AACA,OAXM,CAAP;AAYA;;AACD,WAAOtB,kBAAkB,CAAEsB,QAAF,EAAYnB,OAAO,CAACe,KAApB,CAAzB;AACA,GAxBK,EAyBLU,IAzBK,CAyBGN,QAAF,IACNrB,8BAA8B,CAAEqB,QAAF,EAAYnB,OAAO,CAACe,KAApB,CA1BzB,CAAP;AA4BA,CA5DD;;AA8DA,eAAeR,qBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tparseAndThrowError,\n\tparseResponseAndNormalizeError,\n} from '../utils/response';\n\n/**\n * @param {import('../types').APIFetchOptions} options\n * @return {boolean} True if the request is for media upload.\n */\nfunction isMediaUploadRequest( options ) {\n\tconst isCreateMethod = !! options.method && options.method === 'POST';\n\tconst isMediaEndpoint =\n\t\t( !! options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||\n\t\t( !! options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );\n\n\treturn isMediaEndpoint && isCreateMethod;\n}\n\n/**\n * Middleware handling media upload failures and retries.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst mediaUploadMiddleware = ( options, next ) => {\n\tif ( ! isMediaUploadRequest( options ) ) {\n\t\treturn next( options );\n\t}\n\n\tlet retries = 0;\n\tconst maxRetries = 5;\n\n\t/**\n\t * @param {string} attachmentId\n\t * @return {Promise<any>} Processed post response.\n\t */\n\tconst postProcess = ( attachmentId ) => {\n\t\tretries++;\n\t\treturn next( {\n\t\t\tpath: `/wp/v2/media/${ attachmentId }/post-process`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { action: 'create-image-subsizes' },\n\t\t\tparse: false,\n\t\t} ).catch( () => {\n\t\t\tif ( retries < maxRetries ) {\n\t\t\t\treturn postProcess( attachmentId );\n\t\t\t}\n\t\t\tnext( {\n\t\t\t\tpath: `/wp/v2/media/${ attachmentId }?force=true`,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t} );\n\n\t\t\treturn Promise.reject();\n\t\t} );\n\t};\n\n\treturn next( { ...options, parse: false } )\n\t\t.catch( ( response ) => {\n\t\t\tconst attachmentId = response.headers.get(\n\t\t\t\t'x-wp-upload-attachment-id'\n\t\t\t);\n\t\t\tif (\n\t\t\t\tresponse.status >= 500 &&\n\t\t\t\tresponse.status < 600 &&\n\t\t\t\tattachmentId\n\t\t\t) {\n\t\t\t\treturn postProcess( attachmentId ).catch( () => {\n\t\t\t\t\tif ( options.parse !== false ) {\n\t\t\t\t\t\treturn Promise.reject( {\n\t\t\t\t\t\t\tcode: 'post_process',\n\t\t\t\t\t\t\tmessage: __(\n\t\t\t\t\t\t\t\t'Media upload failed. If this is a photo or a large image, please scale it down and try again.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject( response );\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn parseAndThrowError( response, options.parse );\n\t\t} )\n\t\t.then( ( response ) =>\n\t\t\tparseResponseAndNormalizeError( response, options.parse )\n\t\t);\n};\n\nexport default mediaUploadMiddleware;\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"media-upload.d.ts","sourceRoot":"","sources":["../../src/middlewares/media-upload.js"],"names":[],"mappings":";AAaA;;;;GAIG;AACH,qCAFU,OAAO,UAAU,EAAE,kBAAkB,CAiE7C"}
{"version":3,"file":"media-upload.d.ts","sourceRoot":"","sources":["../../src/middlewares/media-upload.js"],"names":[],"mappings":";AA0BA;;;;GAIG;AACH,qCAFU,OAAO,UAAU,EAAE,kBAAkB,CA8D7C"}

@@ -21,2 +21,11 @@ "use strict";

/**
* @param {import('../types').APIFetchOptions} options
* @return {boolean} True if the request is for media upload.
*/
function isMediaUploadRequest(options) {
const isCreateMethod = !!options.method && options.method === 'POST';
const isMediaEndpoint = !!options.path && options.path.indexOf('/wp/v2/media') !== -1 || !!options.url && options.url.indexOf('/wp/v2/media') !== -1;
return isMediaEndpoint && isCreateMethod;
}
/**
* Middleware handling media upload failures and retries.

@@ -26,6 +35,6 @@ *

*/
const mediaUploadMiddleware = (options, next) => {
const isMediaUploadRequest = options.path && options.path.indexOf('/wp/v2/media') !== -1 || options.url && options.url.indexOf('/wp/v2/media') !== -1;
if (!isMediaUploadRequest) {
if (!isMediaUploadRequest(options)) {
return next(options);

@@ -32,0 +41,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/media-upload.js"],"names":["mediaUploadMiddleware","options","next","isMediaUploadRequest","path","indexOf","url","retries","maxRetries","postProcess","attachmentId","method","data","action","parse","catch","Promise","reject","response","headers","get","status","code","message","then"],"mappings":";;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA,MAAMA,qBAAqB,GAAG,CAAEC,OAAF,EAAWC,IAAX,KAAqB;AAClD,QAAMC,oBAAoB,GACvBF,OAAO,CAACG,IAAR,IAAgBH,OAAO,CAACG,IAAR,CAAaC,OAAb,CAAsB,cAAtB,MAA2C,CAAC,CAA9D,IACEJ,OAAO,CAACK,GAAR,IAAeL,OAAO,CAACK,GAAR,CAAYD,OAAZ,CAAqB,cAArB,MAA0C,CAAC,CAF7D;;AAIA,MAAK,CAAEF,oBAAP,EAA8B;AAC7B,WAAOD,IAAI,CAAED,OAAF,CAAX;AACA;;AACD,MAAIM,OAAO,GAAG,CAAd;AACA,QAAMC,UAAU,GAAG,CAAnB;AAEA;AACD;AACA;AACA;;AACC,QAAMC,WAAW,GAAKC,YAAF,IAAoB;AACvCH,IAAAA,OAAO;AACP,WAAOL,IAAI,CAAE;AACZE,MAAAA,IAAI,EAAG,gBAAgBM,YAAc,eADzB;AAEZC,MAAAA,MAAM,EAAE,MAFI;AAGZC,MAAAA,IAAI,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHM;AAIZC,MAAAA,KAAK,EAAE;AAJK,KAAF,CAAJ,CAKHC,KALG,CAKI,MAAM;AAChB,UAAKR,OAAO,GAAGC,UAAf,EAA4B;AAC3B,eAAOC,WAAW,CAAEC,YAAF,CAAlB;AACA;;AACDR,MAAAA,IAAI,CAAE;AACLE,QAAAA,IAAI,EAAG,gBAAgBM,YAAc,aADhC;AAELC,QAAAA,MAAM,EAAE;AAFH,OAAF,CAAJ;AAKA,aAAOK,OAAO,CAACC,MAAR,EAAP;AACA,KAfM,CAAP;AAgBA,GAlBD;;AAoBA,SAAOf,IAAI,CAAE,EAAE,GAAGD,OAAL;AAAca,IAAAA,KAAK,EAAE;AAArB,GAAF,CAAJ,CACLC,KADK,CACIG,QAAF,IAAgB;AACvB,UAAMR,YAAY,GAAGQ,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CACpB,2BADoB,CAArB;;AAGA,QACCF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IACAH,QAAQ,CAACG,MAAT,GAAkB,GADlB,IAEAX,YAHD,EAIE;AACD,aAAOD,WAAW,CAAEC,YAAF,CAAX,CAA4BK,KAA5B,CAAmC,MAAM;AAC/C,YAAKd,OAAO,CAACa,KAAR,KAAkB,KAAvB,EAA+B;AAC9B,iBAAOE,OAAO,CAACC,MAAR,CAAgB;AACtBK,YAAAA,IAAI,EAAE,cADgB;AAEtBC,YAAAA,OAAO,EAAE,cACR,+FADQ;AAFa,WAAhB,CAAP;AAMA;;AAED,eAAOP,OAAO,CAACC,MAAR,CAAgBC,QAAhB,CAAP;AACA,OAXM,CAAP;AAYA;;AACD,WAAO,kCAAoBA,QAApB,EAA8BjB,OAAO,CAACa,KAAtC,CAAP;AACA,GAxBK,EAyBLU,IAzBK,CAyBGN,QAAF,IACN,8CAAgCA,QAAhC,EAA0CjB,OAAO,CAACa,KAAlD,CA1BK,CAAP;AA4BA,CA/DD;;eAiEed,qB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tparseAndThrowError,\n\tparseResponseAndNormalizeError,\n} from '../utils/response';\n\n/**\n * Middleware handling media upload failures and retries.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst mediaUploadMiddleware = ( options, next ) => {\n\tconst isMediaUploadRequest =\n\t\t( options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||\n\t\t( options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );\n\n\tif ( ! isMediaUploadRequest ) {\n\t\treturn next( options );\n\t}\n\tlet retries = 0;\n\tconst maxRetries = 5;\n\n\t/**\n\t * @param {string} attachmentId\n\t * @return {Promise<any>} Processed post response.\n\t */\n\tconst postProcess = ( attachmentId ) => {\n\t\tretries++;\n\t\treturn next( {\n\t\t\tpath: `/wp/v2/media/${ attachmentId }/post-process`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { action: 'create-image-subsizes' },\n\t\t\tparse: false,\n\t\t} ).catch( () => {\n\t\t\tif ( retries < maxRetries ) {\n\t\t\t\treturn postProcess( attachmentId );\n\t\t\t}\n\t\t\tnext( {\n\t\t\t\tpath: `/wp/v2/media/${ attachmentId }?force=true`,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t} );\n\n\t\t\treturn Promise.reject();\n\t\t} );\n\t};\n\n\treturn next( { ...options, parse: false } )\n\t\t.catch( ( response ) => {\n\t\t\tconst attachmentId = response.headers.get(\n\t\t\t\t'x-wp-upload-attachment-id'\n\t\t\t);\n\t\t\tif (\n\t\t\t\tresponse.status >= 500 &&\n\t\t\t\tresponse.status < 600 &&\n\t\t\t\tattachmentId\n\t\t\t) {\n\t\t\t\treturn postProcess( attachmentId ).catch( () => {\n\t\t\t\t\tif ( options.parse !== false ) {\n\t\t\t\t\t\treturn Promise.reject( {\n\t\t\t\t\t\t\tcode: 'post_process',\n\t\t\t\t\t\t\tmessage: __(\n\t\t\t\t\t\t\t\t'Media upload failed. If this is a photo or a large image, please scale it down and try again.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject( response );\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn parseAndThrowError( response, options.parse );\n\t\t} )\n\t\t.then( ( response ) =>\n\t\t\tparseResponseAndNormalizeError( response, options.parse )\n\t\t);\n};\n\nexport default mediaUploadMiddleware;\n"]}
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/media-upload.js"],"names":["isMediaUploadRequest","options","isCreateMethod","method","isMediaEndpoint","path","indexOf","url","mediaUploadMiddleware","next","retries","maxRetries","postProcess","attachmentId","data","action","parse","catch","Promise","reject","response","headers","get","status","code","message","then"],"mappings":";;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA,SAASA,oBAAT,CAA+BC,OAA/B,EAAyC;AACxC,QAAMC,cAAc,GAAG,CAAC,CAAED,OAAO,CAACE,MAAX,IAAqBF,OAAO,CAACE,MAAR,KAAmB,MAA/D;AACA,QAAMC,eAAe,GAClB,CAAC,CAAEH,OAAO,CAACI,IAAX,IAAmBJ,OAAO,CAACI,IAAR,CAAaC,OAAb,CAAsB,cAAtB,MAA2C,CAAC,CAAjE,IACE,CAAC,CAAEL,OAAO,CAACM,GAAX,IAAkBN,OAAO,CAACM,GAAR,CAAYD,OAAZ,CAAqB,cAArB,MAA0C,CAAC,CAFhE;AAIA,SAAOF,eAAe,IAAIF,cAA1B;AACA;AAED;AACA;AACA;AACA;AACA;;;AACA,MAAMM,qBAAqB,GAAG,CAAEP,OAAF,EAAWQ,IAAX,KAAqB;AAClD,MAAK,CAAET,oBAAoB,CAAEC,OAAF,CAA3B,EAAyC;AACxC,WAAOQ,IAAI,CAAER,OAAF,CAAX;AACA;;AAED,MAAIS,OAAO,GAAG,CAAd;AACA,QAAMC,UAAU,GAAG,CAAnB;AAEA;AACD;AACA;AACA;;AACC,QAAMC,WAAW,GAAKC,YAAF,IAAoB;AACvCH,IAAAA,OAAO;AACP,WAAOD,IAAI,CAAE;AACZJ,MAAAA,IAAI,EAAG,gBAAgBQ,YAAc,eADzB;AAEZV,MAAAA,MAAM,EAAE,MAFI;AAGZW,MAAAA,IAAI,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHM;AAIZC,MAAAA,KAAK,EAAE;AAJK,KAAF,CAAJ,CAKHC,KALG,CAKI,MAAM;AAChB,UAAKP,OAAO,GAAGC,UAAf,EAA4B;AAC3B,eAAOC,WAAW,CAAEC,YAAF,CAAlB;AACA;;AACDJ,MAAAA,IAAI,CAAE;AACLJ,QAAAA,IAAI,EAAG,gBAAgBQ,YAAc,aADhC;AAELV,QAAAA,MAAM,EAAE;AAFH,OAAF,CAAJ;AAKA,aAAOe,OAAO,CAACC,MAAR,EAAP;AACA,KAfM,CAAP;AAgBA,GAlBD;;AAoBA,SAAOV,IAAI,CAAE,EAAE,GAAGR,OAAL;AAAce,IAAAA,KAAK,EAAE;AAArB,GAAF,CAAJ,CACLC,KADK,CACIG,QAAF,IAAgB;AACvB,UAAMP,YAAY,GAAGO,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CACpB,2BADoB,CAArB;;AAGA,QACCF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IACAH,QAAQ,CAACG,MAAT,GAAkB,GADlB,IAEAV,YAHD,EAIE;AACD,aAAOD,WAAW,CAAEC,YAAF,CAAX,CAA4BI,KAA5B,CAAmC,MAAM;AAC/C,YAAKhB,OAAO,CAACe,KAAR,KAAkB,KAAvB,EAA+B;AAC9B,iBAAOE,OAAO,CAACC,MAAR,CAAgB;AACtBK,YAAAA,IAAI,EAAE,cADgB;AAEtBC,YAAAA,OAAO,EAAE,cACR,+FADQ;AAFa,WAAhB,CAAP;AAMA;;AAED,eAAOP,OAAO,CAACC,MAAR,CAAgBC,QAAhB,CAAP;AACA,OAXM,CAAP;AAYA;;AACD,WAAO,kCAAoBA,QAApB,EAA8BnB,OAAO,CAACe,KAAtC,CAAP;AACA,GAxBK,EAyBLU,IAzBK,CAyBGN,QAAF,IACN,8CAAgCA,QAAhC,EAA0CnB,OAAO,CAACe,KAAlD,CA1BK,CAAP;AA4BA,CA5DD;;eA8DeR,qB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tparseAndThrowError,\n\tparseResponseAndNormalizeError,\n} from '../utils/response';\n\n/**\n * @param {import('../types').APIFetchOptions} options\n * @return {boolean} True if the request is for media upload.\n */\nfunction isMediaUploadRequest( options ) {\n\tconst isCreateMethod = !! options.method && options.method === 'POST';\n\tconst isMediaEndpoint =\n\t\t( !! options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||\n\t\t( !! options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );\n\n\treturn isMediaEndpoint && isCreateMethod;\n}\n\n/**\n * Middleware handling media upload failures and retries.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst mediaUploadMiddleware = ( options, next ) => {\n\tif ( ! isMediaUploadRequest( options ) ) {\n\t\treturn next( options );\n\t}\n\n\tlet retries = 0;\n\tconst maxRetries = 5;\n\n\t/**\n\t * @param {string} attachmentId\n\t * @return {Promise<any>} Processed post response.\n\t */\n\tconst postProcess = ( attachmentId ) => {\n\t\tretries++;\n\t\treturn next( {\n\t\t\tpath: `/wp/v2/media/${ attachmentId }/post-process`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { action: 'create-image-subsizes' },\n\t\t\tparse: false,\n\t\t} ).catch( () => {\n\t\t\tif ( retries < maxRetries ) {\n\t\t\t\treturn postProcess( attachmentId );\n\t\t\t}\n\t\t\tnext( {\n\t\t\t\tpath: `/wp/v2/media/${ attachmentId }?force=true`,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t} );\n\n\t\t\treturn Promise.reject();\n\t\t} );\n\t};\n\n\treturn next( { ...options, parse: false } )\n\t\t.catch( ( response ) => {\n\t\t\tconst attachmentId = response.headers.get(\n\t\t\t\t'x-wp-upload-attachment-id'\n\t\t\t);\n\t\t\tif (\n\t\t\t\tresponse.status >= 500 &&\n\t\t\t\tresponse.status < 600 &&\n\t\t\t\tattachmentId\n\t\t\t) {\n\t\t\t\treturn postProcess( attachmentId ).catch( () => {\n\t\t\t\t\tif ( options.parse !== false ) {\n\t\t\t\t\t\treturn Promise.reject( {\n\t\t\t\t\t\t\tcode: 'post_process',\n\t\t\t\t\t\t\tmessage: __(\n\t\t\t\t\t\t\t\t'Media upload failed. If this is a photo or a large image, please scale it down and try again.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject( response );\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn parseAndThrowError( response, options.parse );\n\t\t} )\n\t\t.then( ( response ) =>\n\t\t\tparseResponseAndNormalizeError( response, options.parse )\n\t\t);\n};\n\nexport default mediaUploadMiddleware;\n"]}
{
"name": "@wordpress/api-fetch",
"version": "5.2.2",
"version": "5.2.3",
"description": "Utility to make WordPress REST API requests.",

@@ -31,4 +31,4 @@ "author": "The WordPress Contributors",

"@babel/runtime": "^7.13.10",
"@wordpress/i18n": "^4.2.2",
"@wordpress/url": "^3.2.2"
"@wordpress/i18n": "^4.2.3",
"@wordpress/url": "^3.2.3"
},

@@ -38,3 +38,3 @@ "publishConfig": {

},
"gitHead": "98c42a7187f788fe3e023f04df7f5dcbdae4e4e7"
"gitHead": "8f7f052bc04e3f4eb50f479ced14be1489b9fa79"
}
+10
-10

@@ -13,3 +13,3 @@ # API Fetch

_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for ES2015+ such as IE browsers then using [core-js](https://github.com/zloirock/core-js) will add polyfills for these methods._
_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._

@@ -60,8 +60,8 @@ ## Usage

Aborting a request can be achieved through the use of [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) in the same way as you would when using the native `fetch` API.
Aborting a request can be achieved through the use of [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) in the same way as you would when using the native `fetch` API.
For legacy browsers that don't support `AbortController`, you can either:
* Provide your own polyfill of `AbortController` if you still want it to be abortable.
* Ignore it as shown in the example below.
- Provide your own polyfill of `AbortController` if you still want it to be abortable.
- Ignore it as shown in the example below.

@@ -71,8 +71,7 @@ **Example**

```js
const controller = typeof AbortController === 'undefined'
? undefined
: new AbortController();
const controller =
typeof AbortController === 'undefined' ? undefined : new AbortController();
apiFetch( { path: '/wp/v2/posts', signal: controller?.signal } )
.catch( ( error ) => {
apiFetch( { path: '/wp/v2/posts', signal: controller?.signal } ).catch(
( error ) => {
// If the browser doesn't support AbortController then the code below will never log.

@@ -83,3 +82,4 @@ // However, in most cases this should be fine as it can be considered to be a progressive enhancement.

}
} );
}
);

@@ -86,0 +86,0 @@ controller?.abort();

@@ -15,2 +15,15 @@ /**

/**
* @param {import('../types').APIFetchOptions} options
* @return {boolean} True if the request is for media upload.
*/
function isMediaUploadRequest( options ) {
const isCreateMethod = !! options.method && options.method === 'POST';
const isMediaEndpoint =
( !! options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||
( !! options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );
return isMediaEndpoint && isCreateMethod;
}
/**
* Middleware handling media upload failures and retries.

@@ -21,9 +34,6 @@ *

const mediaUploadMiddleware = ( options, next ) => {
const isMediaUploadRequest =
( options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||
( options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );
if ( ! isMediaUploadRequest ) {
if ( ! isMediaUploadRequest( options ) ) {
return next( options );
}
let retries = 0;

@@ -30,0 +40,0 @@ const maxRetries = 5;

Sorry, the diff of this file is not supported yet