From df2bc63539a0d7ec7579c3515a53cbee0af3f0c8 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Wed, 10 Feb 2016 17:02:21 -0500 Subject: [PATCH] Revert "Framework: Add sync-handler wrapper" --- client/lib/menu-data/menu-data.js | 8 +- client/lib/posts/post-list-store.js | 1 - client/lib/wp/browser.js | 12 +- client/lib/wp/sync-handler/README.md | 21 -- client/lib/wp/sync-handler/defaults.js | 11 - client/lib/wp/sync-handler/index.js | 197 ------------------ .../lib/wp/sync-handler/whitelist-handler.js | 30 --- config/client.json | 3 +- config/development.json | 12 +- npm-shrinkwrap.json | 3 - package.json | 1 - 11 files changed, 8 insertions(+), 291 deletions(-) delete mode 100644 client/lib/wp/sync-handler/README.md delete mode 100644 client/lib/wp/sync-handler/defaults.js delete mode 100644 client/lib/wp/sync-handler/index.js delete mode 100644 client/lib/wp/sync-handler/whitelist-handler.js diff --git a/client/lib/menu-data/menu-data.js b/client/lib/menu-data/menu-data.js index b0733374a96871..210d11dd30b5d4 100644 --- a/client/lib/menu-data/menu-data.js +++ b/client/lib/menu-data/menu-data.js @@ -894,8 +894,7 @@ MenuData.prototype.fetchDefaultMenu = function() { */ MenuData.prototype.setDefaultMenu = function( pages ) { var items = [], - site = sites.getSelectedSite(), - isDefaultMenuSet = !! this.data.defaultMenu; + site = sites.getSelectedSite(); pages.forEach( function( page ) { var item = { @@ -921,9 +920,8 @@ MenuData.prototype.setDefaultMenu = function( pages ) { items: items, locations: [ this.getPrimaryLocation() ] } ); - if ( ! isDefaultMenuSet ) { - this.data.menus.unshift( this.data.defaultMenu ); - } + + this.data.menus.unshift( this.data.defaultMenu ); this.emit( 'change' ); }; diff --git a/client/lib/posts/post-list-store.js b/client/lib/posts/post-list-store.js index 877fb08cdad222..342259d40aae60 100644 --- a/client/lib/posts/post-list-store.js +++ b/client/lib/posts/post-list-store.js @@ -202,7 +202,6 @@ export default function( id ) { postIds = difference( postIds, _activeList.postIds ); if ( postIds.length ) { _activeList.postIds = _activeList.postIds.concat( postIds ); - sort(); _activeList.page++; } } diff --git a/client/lib/wp/browser.js b/client/lib/wp/browser.js index 886bf5c4d0c34b..64b3f941bfde89 100644 --- a/client/lib/wp/browser.js +++ b/client/lib/wp/browser.js @@ -1,7 +1,6 @@ /** * External dependencies */ -import { SyncHandler } from './sync-handler'; import debugFactory from 'debug'; const debug = debugFactory( 'calypso:wp' ); @@ -12,20 +11,15 @@ import wpcomUndocumented from 'lib/wpcom-undocumented'; import config from 'config'; import wpcomSupport from 'lib/wp/support'; -const addSyncHandlerWrapper = config.isEnabled( 'sync-handler' ); let wpcom; if ( config.isEnabled( 'oauth' ) ) { - const oauthToken = require( 'lib/oauth-token' ); - const requestHandler = addSyncHandlerWrapper - ? new SyncHandler( require( 'lib/wpcom-xhr-wrapper' ) ) - : require( 'lib/wpcom-xhr-wrapper' ); + const oauthToken = require( 'lib/oauth-token' ), + requestHandler = require( 'lib/wpcom-xhr-wrapper' ); wpcom = wpcomUndocumented( oauthToken.getToken(), requestHandler ); } else { - const requestHandler = addSyncHandlerWrapper - ? new SyncHandler( require( 'wpcom-proxy-request' ) ) - : require( 'wpcom-proxy-request' ); + const requestHandler = require( 'wpcom-proxy-request' ); wpcom = wpcomUndocumented( requestHandler ); diff --git a/client/lib/wp/sync-handler/README.md b/client/lib/wp/sync-handler/README.md deleted file mode 100644 index 4cfbf380248ef7..00000000000000 --- a/client/lib/wp/sync-handler/README.md +++ /dev/null @@ -1,21 +0,0 @@ -sync-handler -=========== - -`sync-handler` is an abstraction layer used to sync the data that flowing between -the client (calypso) and the server (WordPress.com REST-API). It works wrapping -the request handler of the wpcom.js library which allows it intercept, handler -and store any requests that the client does. - -### How to use - -```es6 -import { SyncHandler } from 'lib/wp/sync-handler'; -import wpcomUndocumented from 'lib/wpcom-undocumented'; -import wpcomXHRHandler from 'lib/wpcom-xhr-wrapper'; - -// wrap the request handler with sync-handler -const handler = new SyncHandler( wpcomXHRHandler ); - -// create wpcom instance passing the wrapped handler -const wpcom = wpcomUndocumented( handler ); -``` diff --git a/client/lib/wp/sync-handler/defaults.js b/client/lib/wp/sync-handler/defaults.js deleted file mode 100644 index 8fdf99ad213e1d..00000000000000 --- a/client/lib/wp/sync-handler/defaults.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Module dependencies - */ -import config from 'config'; -import localforage from 'localforage'; - -// defaults -export const defaults = config( 'sync-handler-defaults' ); - -// set local forage driver through of its own constants -defaults.driver = localforage[ defaults.driver ]; diff --git a/client/lib/wp/sync-handler/index.js b/client/lib/wp/sync-handler/index.js deleted file mode 100644 index 06d91b0e89a4bd..00000000000000 --- a/client/lib/wp/sync-handler/index.js +++ /dev/null @@ -1,197 +0,0 @@ -/** - * Module dependencies - */ -import localforage from 'localforage'; -import Hashes from 'jshashes'; -import warn from 'lib/warn'; -import { isWhitelisted } from './whitelist-handler'; -import { defaults } from './defaults'; - -import debugFactory from 'debug'; -const debug = debugFactory( 'calypso:sync-handler' ); - -/** - * SyncHandler class - */ -export class SyncHandler { - /** - * Create a SyncHandler instance - * - * @param {Object} [setup] - localforage sync setup - * @param {Function} handler - wpcom handler - * - * @return {Function} sync-handler wrapper - */ - constructor( setup, handler ) { - if ( typeof setup === 'function' ) { - handler = setup; - setup = {}; - } - - this.setup = Object.assign( {}, defaults, setup ); - this.reqHandler = handler; - return this.syncHandlerWrapper( handler ); - } - - syncHandlerWrapper( handler ) { - return ( params, callback ) => { - // detect and no-sync proxy connection request - if ( params.metaAPI && params.metaAPI.accessAllUsersBlogs ) { - debug( 'skip - non-sync -proxy-handler request detected' ); - return this.reqHandler( params, callback ); - } - - // create a copy of the request params - const reqParams = Object.assign( {}, params ); - const { path } = reqParams; - - // whitelist barrier - if ( ! isWhitelisted( params ) ) { - debug( 'not whitelisted: skip %o request', path ); - return handler( params, callback ); - }; - - // generate an unique resource key - const key = this.generateKey( reqParams ); - - debug( 'starting to get resource ...' ); - - /** - * Send response immediately to the client - * getting the data locally (localforage) - * - * @param {Object} localRecord - response stored locally - */ - const localResponseHandler = localRecord => { - // let's be optimistic - if ( localRecord ) { - debug( '%o stored(%o). Let\'s be optimistic ...\n', path, localRecord ); - callback( null, localRecord.body ); - } else { - debug( 'No data for [%s] %o - %o', reqParams.method, path, reqParams ); - } - }; - - /** - * Handling Error getting data locally (localforage) - * - * @param {Error} err - err trying to get the local record - */ - const recordErrorHandler = err => { - // @TODO improve error handling here - warn( err ); - }; - - /** - * Fetch data from WP.com. - * Run the double callback. - * - * @return {Promise} promise - */ - const networkFetch = () => { - return new Promise( ( resolve, reject ) => { - handler( reqParams, ( err, res ) => { - if ( err ) { - return reject( err ); - } - - resolve( res ); - - debug( 'second callback run: %o, %o', reqParams, res ); - callback( null, res ); - } ); - } ); - } - - /** - * Add/Override the data gotten from the - * WP.com server-side response. - * - * @param {Object} serverResponse - server response object - */ - const cacheResponse = serverResponse => { - // remove _headers from server response - delete serverResponse._headers; - - let storingData = { - __sync: { - key, - synced: new Date().toString(), - syncing: false - }, - body: serverResponse, - params: reqParams - }; - - // add/override gotten data from server-side - this.storeRecord( key, storingData, err => { - if ( err ) { - // @TODO error handling - warn( err ); - } - } ); - }; - - /** - * Handle response gotten form the - * server-side response - * - * @param {Error} err - error object - */ - const networkErrorHandler = err => { - if ( err ) { - // @TODO improve error handling here - warn( err ); - warn( 'request params: %o', reqParams ); - callback( err ); - } - } - - // request/response workflow - this.retrieveRecord( key ) - .then( localResponseHandler, recordErrorHandler ) - .then( networkFetch ) - .then( cacheResponse, networkErrorHandler ); - }; - } - - /** - * Generate a key from the given param object - * - * @param {Object} params - request parameters - * @param {Boolean} applyHash - codificate key when it's true - * @return {String} request key - */ - generateKey( params, applyHash = true ) { - var key = `${params.apiVersion || ''}-${params.method}-${params.path}`; - - if ( params.query ) { - key += '-' + params.query; - } - - if ( applyHash ) { - key = new Hashes.SHA1().hex( key ); - } - - debug( 'key: %o', key ); - return key; - } - - retrieveRecord( key, fn = () => {} ) { - localforage.config( this.setup ); - debug( 'getting data from %o key\n', key ); - return localforage.getItem( key, fn ); - } - - storeRecord( key, data, fn = () => {} ) { - localforage.config( this.setup ); - debug( 'storing data in %o key\n', key ); - return localforage.setItem( key, data, fn ); - } - - removeRecord( key, fn = () => {} ) { - localforage.config( this.setup ); - debug( 'removing %o key\n', key ); - return localforage.removeItem( key, fn ); - } -} diff --git a/client/lib/wp/sync-handler/whitelist-handler.js b/client/lib/wp/sync-handler/whitelist-handler.js deleted file mode 100644 index 997d100db93898..00000000000000 --- a/client/lib/wp/sync-handler/whitelist-handler.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Module dependencies - */ - -import debugFactory from 'debug'; -const debug = debugFactory( 'calypso:sync-handler:whitelist' ); - -const whitelist = [ - /^\/me\/posts$/, - /^\/me\/settings/, - /^\/sites\/[\w.]+\/posts/ -]; - -export const isWhitelisted = params => { - const { path } = params; - - if ( params.method && 'get' !== params.method.toLowerCase() ) { - debug( 'No allow %o request', params.method ); - return false; - }; - - for ( let i = 0; i < whitelist.length; i++ ) { - if ( whitelist[ i ].test( path ) ) { - debug( '%o whitelisted', path ); - return true; - } - } - - return false; -} diff --git a/config/client.json b/config/client.json index 7fb843ed58414a..45002221563ca3 100644 --- a/config/client.json +++ b/config/client.json @@ -26,6 +26,5 @@ "siftscience_key", "facebook_api_key", "discover_blog_id", - "support-user", - "sync-handler-defaults" + "support-user" ] diff --git a/config/development.json b/config/development.json index c1b66fa1dea633..c69153bbce9901 100644 --- a/config/development.json +++ b/config/development.json @@ -149,18 +149,8 @@ "perfmon": false, "mailing-lists/unsubscribe": true, - "jetpack/calypso-first-signup-flow": true, - "sync-handler": true + "jetpack/calypso-first-signup-flow": true }, - - "sync-handler-defaults": { - "name": "Calypso sync-handler", - "version": 1.0, - "driver": "INDEXEDDB", - "storeName": "calypso_sync_handler", - "description": "Request-handler wrapper used to catch REST-API responses" - }, - "muse_supported_themes": [ "pub/twentytwelve", "pub/twentythirteen", diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index bd142ffc620a34..63c8ed964727f9 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -13332,9 +13332,6 @@ }, "tv4": { "version": "1.2.7" - }, - "jshashes": { - "version": "1.0.5" } } } diff --git a/package.json b/package.json index e7a8d5fb7eac45..23c4e02bc833aa 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "inherits": "2.0.1", "jade": "pugjs/jade#29784fd", "jed": "1.0.2", - "jshashes": "1.0.5", "json-loader": "0.5.4", "jstimezonedetect": "1.0.5", "key-mirror": "1.0.1",