sockethub 5.0.0-alpha.2 → 5.0.0-alpha.4
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.
- package/bin/sockethub +2 -29
- package/build.js +21 -0
- package/package.json +15 -65
- package/{dist/defaults.json → sockethub.config.json} +8 -7
- package/tsconfig.json +6 -68
- package/README.md +0 -98
- package/config.json.example +0 -32
- package/dist/bootstrap/init.js +0 -74
- package/dist/bootstrap/init.js.map +0 -1
- package/dist/bootstrap/platforms.js +0 -103
- package/dist/common.js +0 -20
- package/dist/common.js.map +0 -1
- package/dist/config.js +0 -60
- package/dist/config.js.map +0 -1
- package/dist/crypto.js +0 -38
- package/dist/crypto.js.map +0 -1
- package/dist/janitor.js +0 -98
- package/dist/janitor.js.map +0 -1
- package/dist/middleware/create-activity-object.js +0 -19
- package/dist/middleware/create-activity-object.js.map +0 -1
- package/dist/middleware/expand-activity-stream.js +0 -33
- package/dist/middleware/expand-activity-stream.js.map +0 -1
- package/dist/middleware/expand-activity-stream.test.data.js +0 -360
- package/dist/middleware/expand-activity-stream.test.data.js.map +0 -1
- package/dist/middleware/store-credentials.js +0 -19
- package/dist/middleware/store-credentials.js.map +0 -1
- package/dist/middleware/validate.js +0 -77
- package/dist/middleware/validate.js.map +0 -1
- package/dist/middleware/validate.test.data.js +0 -321
- package/dist/middleware/validate.test.data.js.map +0 -1
- package/dist/middleware.js +0 -54
- package/dist/middleware.js.map +0 -1
- package/dist/platform-instance.js +0 -226
- package/dist/platform-instance.js.map +0 -1
- package/dist/platform.js +0 -186
- package/dist/platform.js.map +0 -1
- package/dist/process-manager.js +0 -78
- package/dist/process-manager.js.map +0 -1
- package/dist/routes.js +0 -84
- package/dist/routes.js.map +0 -1
- package/dist/serve.js +0 -102
- package/dist/serve.js.map +0 -1
- package/dist/sockethub-client.js +0 -2604
- package/dist/sockethub-client.js.map +0 -1
- package/dist/sockethub-client.min.js +0 -2
- package/dist/sockethub-client.min.js.LICENSE.txt +0 -24
- package/dist/sockethub.js +0 -130
- package/dist/sockethub.js.map +0 -1
- package/dist/store.js +0 -17
- package/dist/store.js.map +0 -1
- package/src/bootstrap/init.d.ts +0 -8
- package/src/bootstrap/init.ts +0 -91
- package/src/bootstrap/platforms.js +0 -103
- package/src/common.test.ts +0 -54
- package/src/common.ts +0 -14
- package/src/config.d.ts +0 -2
- package/src/config.test.ts +0 -28
- package/src/config.ts +0 -72
- package/src/crypto.d.ts +0 -5
- package/src/crypto.test.ts +0 -41
- package/src/crypto.ts +0 -41
- package/src/defaults.json +0 -32
- package/src/janitor.d.ts +0 -8
- package/src/janitor.ts +0 -89
- package/src/middleware/create-activity-object.test.ts +0 -10
- package/src/middleware/create-activity-object.ts +0 -13
- package/src/middleware/expand-activity-stream.test.data.ts +0 -365
- package/src/middleware/expand-activity-stream.test.ts +0 -78
- package/src/middleware/expand-activity-stream.ts +0 -27
- package/src/middleware/store-credentials.test.ts +0 -72
- package/src/middleware/store-credentials.ts +0 -16
- package/src/middleware/validate.d.ts +0 -1
- package/src/middleware/validate.test.data.ts +0 -320
- package/src/middleware/validate.test.ts +0 -47
- package/src/middleware/validate.ts +0 -49
- package/src/middleware.d.ts +0 -21
- package/src/middleware.test.ts +0 -148
- package/src/middleware.ts +0 -52
- package/src/platform-instance.test.ts +0 -237
- package/src/platform-instance.ts +0 -236
- package/src/platform.ts +0 -189
- package/src/process-manager.ts +0 -64
- package/src/routes.test.ts +0 -100
- package/src/routes.ts +0 -93
- package/src/serve.ts +0 -79
- package/src/sockethub-client.test.ts +0 -235
- package/src/sockethub-client.ts +0 -164
- package/src/sockethub.d.ts +0 -1
- package/src/sockethub.ts +0 -184
- package/src/store.test.ts +0 -26
- package/src/store.ts +0 -17
- package/test/init-suite.js +0 -41
- package/test/sockethub-suite.js +0 -25
- package/views/examples/dummy.ejs +0 -93
- package/views/examples/feeds.ejs +0 -90
- package/views/examples/irc.ejs +0 -239
- package/views/examples/shared.js +0 -72
- package/views/examples/xmpp.ejs +0 -191
- package/views/index.ejs +0 -17
- package/webpack.minified.config.js +0 -14
- package/webpack.normal.config.js +0 -14
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sockethub-client.js","sourceRoot":"/","sources":["sockethub-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! For license information please see sockethub-client.min.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(self,(function(){return e={423:(e,t,r)=>{"use strict";var n=r(132),i=r(421),s=r(240),o=r(343),c=r(50),l=e.exports=function(e,t){var r,i,l,a,f;return arguments.length<2||"string"!=typeof e?(a=t,t=e,e=null):a=arguments[2],n(e)?(r=c.call(e,"c"),i=c.call(e,"e"),l=c.call(e,"w")):(r=l=!0,i=!1),f={value:t,configurable:r,enumerable:i,writable:l},a?s(o(a),f):f};l.gs=function(e,t,r){var l,a,f,u;return"string"!=typeof e?(f=r,r=t,t=e,e=null):f=arguments[3],n(t)?i(t)?n(r)?i(r)||(f=r,r=void 0):r=void 0:(f=t,t=r=void 0):t=void 0,n(e)?(l=c.call(e,"c"),a=c.call(e,"e")):(l=!0,a=!1),u={get:t,set:r,configurable:l,enumerable:a},f?s(o(f),u):u}},91:e=>{"use strict";e.exports=function(){}},240:(e,t,r)=>{"use strict";e.exports=r(229)()?Object.assign:r(640)},229:e=>{"use strict";e.exports=function(){var e,t=Object.assign;return"function"==typeof t&&(t(e={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),e.foo+e.bar+e.trzy==="razdwatrzy")}},640:(e,t,r)=>{"use strict";var n=r(255),i=r(110),s=Math.max;e.exports=function(e,t){var r,o,c,l=s(arguments.length,2);for(e=Object(i(e)),c=function(n){try{e[n]=t[n]}catch(e){r||(r=e)}},o=1;o<l;++o)n(t=arguments[o]).forEach(c);if(void 0!==r)throw r;return e}},515:(e,t,r)=>{"use strict";var n=r(91)();e.exports=function(e){return e!==n&&null!==e}},255:(e,t,r)=>{"use strict";e.exports=r(291)()?Object.keys:r(184)},291:e=>{"use strict";e.exports=function(){try{return Object.keys("primitive"),!0}catch(e){return!1}}},184:(e,t,r)=>{"use strict";var n=r(515),i=Object.keys;e.exports=function(e){return i(n(e)?Object(e):e)}},343:(e,t,r)=>{"use strict";var n=r(515),i=Array.prototype.forEach,s=Object.create,o=function(e,t){var r;for(r in e)t[r]=e[r]};e.exports=function(e){var t=s(null);return i.call(arguments,(function(e){n(e)&&o(Object(e),t)})),t}},979:e=>{"use strict";e.exports=function(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}},110:(e,t,r)=>{"use strict";var n=r(515);e.exports=function(e){if(!n(e))throw new TypeError("Cannot use null or undefined");return e}},50:(e,t,r)=>{"use strict";e.exports=r(459)()?String.prototype.contains:r(131)},459:e=>{"use strict";var t="razdwatrzy";e.exports=function(){return"function"==typeof t.contains&&!0===t.contains("dwa")&&!1===t.contains("foo")}},131:e=>{"use strict";var t=String.prototype.indexOf;e.exports=function(e){return t.call(this,e,arguments[1])>-1}},360:(e,t,r)=>{"use strict";var n,i,s,o,c,l,a,f=r(423),u=r(979),h=Function.prototype.apply,p=Function.prototype.call,y=Object.create,v=Object.defineProperty,_=Object.defineProperties,m=Object.prototype.hasOwnProperty,d={configurable:!0,enumerable:!1,writable:!0};i=function(e,t){var r,i;return u(t),i=this,n.call(this,e,r=function(){s.call(i,e,r),h.call(t,this,arguments)}),r.__eeOnceListener__=t,this},o=function(e){var t,r,n,i,s;if(m.call(this,"__ee__")&&(i=this.__ee__[e]))if("object"==typeof i){for(r=arguments.length,s=new Array(r-1),t=1;t<r;++t)s[t-1]=arguments[t];for(i=i.slice(),t=0;n=i[t];++t)h.call(n,this,s)}else switch(arguments.length){case 1:p.call(i,this);break;case 2:p.call(i,this,arguments[1]);break;case 3:p.call(i,this,arguments[1],arguments[2]);break;default:for(r=arguments.length,s=new Array(r-1),t=1;t<r;++t)s[t-1]=arguments[t];h.call(i,this,s)}},c={on:n=function(e,t){var r;return u(t),m.call(this,"__ee__")?r=this.__ee__:(r=d.value=y(null),v(this,"__ee__",d),d.value=null),r[e]?"object"==typeof r[e]?r[e].push(t):r[e]=[r[e],t]:r[e]=t,this},once:i,off:s=function(e,t){var r,n,i,s;if(u(t),!m.call(this,"__ee__"))return this;if(!(r=this.__ee__)[e])return this;if("object"==typeof(n=r[e]))for(s=0;i=n[s];++s)i!==t&&i.__eeOnceListener__!==t||(2===n.length?r[e]=n[s?0:1]:n.splice(s,1));else n!==t&&n.__eeOnceListener__!==t||delete r[e];return this},emit:o},l={on:f(n),once:f(i),off:f(s),emit:f(o)},a=_({},l),e.exports=t=function(e){return null==e?y(a):_(Object(e),l)},t.methods=c},414:(e,t,r)=>{"use strict";var n=r(670);e.exports=function(e){if("function"!=typeof e)return!1;if(!hasOwnProperty.call(e,"length"))return!1;try{if("number"!=typeof e.length)return!1;if("function"!=typeof e.call)return!1;if("function"!=typeof e.apply)return!1}catch(e){return!1}return!n(e)}},783:(e,t,r)=>{"use strict";var n=r(132),i={object:!0,function:!0,undefined:!0};e.exports=function(e){return!!n(e)&&hasOwnProperty.call(i,typeof e)}},421:(e,t,r)=>{"use strict";var n=r(414),i=/^\s*class[\s{/}]/,s=Function.prototype.toString;e.exports=function(e){return!!n(e)&&!i.test(s.call(e))}},670:(e,t,r)=>{"use strict";var n=r(783);e.exports=function(e){if(!n(e))return!1;try{return!!e.constructor&&e.constructor.prototype===e}catch(e){return!1}}},132:e=>{"use strict";e.exports=function(e){return null!=e}},744:(e,t,r)=>{const n=r(360)(),i={stream:["id","type","actor","target","object","context","context","published","error"],object:["id","type","context","alias","attachedTo","attachment","attributedTo","attributedWith","content","contentMap","context","contextOf","name","endTime","generator","generatorOf","group","icon","image","inReplyTo","members","memberOf","message","location","locationOf","objectOf","originOf","presence","preview","previewOf","provider","providerOf","published","rating","relationship","resultOf","replies","role","scope","scopeOf","startTime","status","summary","topic","tag","tagOf","targetOf","title","titleMap","updated","url"]},s={"@id":"id","@type":"type",verb:"type",displayName:"name",objectType:"type",platform:"context"},o={actor:{primary:"id",props:i},target:{primary:"id",props:i},object:{primary:"content",props:i}};let c=new Map,l=!1,a=[],f={};function u(e,t){return!("object"!=typeof f[e]||!f[e].includes(t))}function h(e,t){return e[s[t]]=e[t],delete e[t],e}function p(e,t={}){const r=Object.keys(t).filter((t=>{if(!i[e].includes(t))return t}));for(let e of r)if(s[e])t=h(t,e);else if(!u(t.type,e)&&!a.includes(t.type)){const t=`invalid property: "${e}"`;if(l)throw new Error(t);console.warn(t)}}function y(e){p("stream",e),"object"==typeof e.object&&p("object",e.object);const t=function(e){let t={};for(let r of Object.keys(e))if("string"==typeof e[r])t[r]=c.get(e[r])||e[r];else if(Array.isArray(e[r])){t[r]=[];for(let n of e[r])"string"==typeof n&&t[r].push(c.get(n)||n)}else t[r]=e[r];for(let e of Object.keys(o))if("string"==typeof t[e]){let r={};r[o[e].primary]=t[e],t[e]=r}return t}(e);return n.emit("activity-stream",t),t}const v={create:function(e){return p("object",e),e=e,c.set(e.id,e),n.emit("activity-object-create",e),e},delete:function(e){const t=c.delete(e);return t&&n.emit("activity-object-delete",e),t},get:function(e,t){let r=c.get(e);if(!r){if(!t)return e;r={id:e}}return r},list:function(){return c.keys()},getByType:function(e){}};function _(e={}){a=e.specialObjs||[],l="boolean"==typeof e.failOnUnknownObjectProperties&&e.failOnUnknownObjectProperties;for(let t of Object.keys(e.customProps||{}))"object"==typeof e.customProps[t]&&(f[t]=e.customProps[t]);return{Stream:y,Object:v,on:function(e,t){return n.on(e,t)},once:function(e,t){return n.once(e,t)},off:function(e,t){return n.off(e,t)}}}e.exports&&(e.exports=_),"object"==typeof window&&(window.ASFactory=_)},650:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const i=r(387),s=n(r(744));class o{constructor(e){if(this.events={credentials:new Map,"activity-object":new Map,connect:new Map,join:new Map},this.online=!1,this.debug=!0,!e)throw new Error("SockethubClient requires a socket.io instance");this._socket=e,this.ActivityStreams=(0,s.default)({specialObjs:["credentials"]}),this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this.ActivityStreams.on("activity-object-create",(t=>{e.emit("activity-object",t,(e=>{e?console.error("failed to create activity-object ",e):this.eventActivityObject(t)}))})),e.on("activity-object",(e=>{this.ActivityStreams.Object.create(e)}))}createPublicEmitter(){let e=new i.EventEmitter2({wildcard:!0,verboseMemoryLeak:!1});return e._emit=e.emit,e.emit=(e,t,r)=>{"credentials"===e?this.eventCredentials(t):"activity-object"===e?this.eventActivityObject(t):"message"===e&&this.eventMessage(t),this._socket.emit(e,t,r)},e}eventActivityObject(e){e.id&&this.events["activity-object"].set(e.id,e)}eventCredentials(e){e.object&&"credentials"===e.object.type&&this.events.credentials.set(e.actor.id||e.actor,e)}eventMessage(e){if(!this.online)return;const t=o.getKey(e);"join"===e.type||"connect"===e.type?this.events[e.type].set(t,e):"leave"===e.type?this.events.join.delete(t):"disconnect"===e.type&&this.events.connect.delete(t)}static getKey(e){var t;let r=(null===(t=e.actor)||void 0===t?void 0:t.id)||e.actor;if(!r)throw new Error("actor property not present for message type: "+(null==e?void 0:e.type));return r+"-"+(e.target?e.target.id||e.target:"")}log(e,t){this.debug&&console.log(e,t)}registerSocketIOHandlers(){const e=e=>(t,r)=>{"connect"===e?(this.online=!0,this.replay("activity-object",this.events["activity-object"]),this.replay("credentials",this.events.credentials),this.replay("message",this.events.connect),this.replay("message",this.events.join)):"disconnect"===e&&(this.online=!1),this.socket._emit(e,t,r)};this._socket.on("connect",e("connect")),this._socket.on("connect_error",e("connect_error")),this._socket.on("disconnect",e("disconnect")),this._socket.on("message",((e,t)=>{this.socket._emit("message",this.ActivityStreams.Stream(e),t)}))}replay(e,t){t.forEach((t=>{this.log(`replaying ${e}`,t),this._socket.emit(e,t)}))}}e.exports&&(e.exports=o),t=o,"object"==typeof window&&(window.SockethubClient=o)},387:(e,t,r)=>{var n;!function(i){var s=Object.hasOwnProperty,o=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},c="object"==typeof process&&"function"==typeof process.nextTick,l="function"==typeof Symbol,a="object"==typeof Reflect,f="function"==typeof setImmediate?setImmediate:setTimeout,u=l?a&&"function"==typeof Reflect.ownKeys?Reflect.ownKeys:function(e){var t=Object.getOwnPropertyNames(e);return t.push.apply(t,Object.getOwnPropertySymbols(e)),t}:Object.keys;function h(){this._events={},this._conf&&p.call(this,this._conf)}function p(e){e&&(this._conf=e,e.delimiter&&(this.delimiter=e.delimiter),e.maxListeners!==i&&(this._maxListeners=e.maxListeners),e.wildcard&&(this.wildcard=e.wildcard),e.newListener&&(this._newListener=e.newListener),e.removeListener&&(this._removeListener=e.removeListener),e.verboseMemoryLeak&&(this.verboseMemoryLeak=e.verboseMemoryLeak),e.ignoreErrors&&(this.ignoreErrors=e.ignoreErrors),this.wildcard&&(this.listenerTree={}))}function y(e,t){var r="(node) warning: possible EventEmitter memory leak detected. "+e+" listeners added. Use emitter.setMaxListeners() to increase limit.";if(this.verboseMemoryLeak&&(r+=" Event name: "+t+"."),"undefined"!=typeof process&&process.emitWarning){var n=new Error(r);n.name="MaxListenersExceededWarning",n.emitter=this,n.count=e,process.emitWarning(n)}else console.error(r),console.trace&&console.trace()}var v=function(e,t,r){var n=arguments.length;switch(n){case 0:return[];case 1:return[e];case 2:return[e,t];case 3:return[e,t,r];default:for(var i=new Array(n);n--;)i[n]=arguments[n];return i}};function _(e,t){for(var r={},n=e.length,s=t?value.length:0,o=0;o<n;o++)r[e[o]]=o<s?t[o]:i;return r}function m(e,t,r){var n,i;if(this._emitter=e,this._target=t,this._listeners={},this._listenersCount=0,(r.on||r.off)&&(n=r.on,i=r.off),t.addEventListener?(n=t.addEventListener,i=t.removeEventListener):t.addListener?(n=t.addListener,i=t.removeListener):t.on&&(n=t.on,i=t.off),!n&&!i)throw Error("target does not implement any known event API");if("function"!=typeof n)throw TypeError("on method must be a function");if("function"!=typeof i)throw TypeError("off method must be a function");this._on=n,this._off=i;var s=e._observers;s?s.push(this):e._observers=[this]}function d(e,t,r,n){var o=Object.assign({},t);if(!e)return o;if("object"!=typeof e)throw TypeError("options must be an object");var c,l,a,f=Object.keys(e),u=f.length;function h(e){throw Error('Invalid "'+c+'" option value'+(e?". Reason: "+e:""))}for(var p=0;p<u;p++){if(c=f[p],!n&&!s.call(t,c))throw Error('Unknown "'+c+'" option');(l=e[c])!==i&&(a=r[c],o[c]=a?a(l,h):l)}return o}function b(e,t){return"function"==typeof e&&e.hasOwnProperty("prototype")||t("value must be a constructor"),e}function g(e){var t="value must be type of "+e.join("|"),r=e.length,n=e[0],i=e[1];return 1===r?function(e,r){if(typeof e===n)return e;r(t)}:2===r?function(e,r){var s=typeof e;if(s===n||s===i)return e;r(t)}:function(n,i){for(var s=typeof n,o=r;o-- >0;)if(s===e[o])return n;i(t)}}Object.assign(m.prototype,{subscribe:function(e,t,r){var n=this,i=this._target,s=this._emitter,o=this._listeners,c=function(){var n=v.apply(null,arguments),o={data:n,name:t,original:e};if(r){var c=r.call(i,o);!1!==c&&s.emit.apply(s,[o.name].concat(n))}else s.emit.apply(s,[t].concat(n))};if(o[e])throw Error("Event '"+e+"' is already listening");this._listenersCount++,s._newListener&&s._removeListener&&!n._onNewListener?(this._onNewListener=function(r){r===t&&null===o[e]&&(o[e]=c,n._on.call(i,e,c))},s.on("newListener",this._onNewListener),this._onRemoveListener=function(r){r===t&&!s.hasListeners(r)&&o[e]&&(o[e]=null,n._off.call(i,e,c))},o[e]=null,s.on("removeListener",this._onRemoveListener)):(o[e]=c,n._on.call(i,e,c))},unsubscribe:function(e){var t,r,n,i=this,s=this._listeners,o=this._emitter,c=this._off,l=this._target;if(e&&"string"!=typeof e)throw TypeError("event must be a string");function a(){i._onNewListener&&(o.off("newListener",i._onNewListener),o.off("removeListener",i._onRemoveListener),i._onNewListener=null,i._onRemoveListener=null);var e=O.call(o,i);o._observers.splice(e,1)}if(e){if(!(t=s[e]))return;c.call(l,e,t),delete s[e],--this._listenersCount||a()}else{for(n=(r=u(s)).length;n-- >0;)e=r[n],c.call(l,e,s[e]);this._listeners={},this._listenersCount=0,a()}}});var w=g(["function"]),j=g(["object","function"]);function L(e,t,r){var n,i,s,o=0,c=new e((function(l,a,f){function u(){i&&(i=null),o&&(clearTimeout(o),o=0)}r=d(r,{timeout:0,overload:!1},{timeout:function(e,t){return("number"!=typeof(e*=1)||e<0||!Number.isFinite(e))&&t("timeout must be a positive number"),e}}),n=!r.overload&&"function"==typeof e.prototype.cancel&&"function"==typeof f;var h=function(e){u(),l(e)},p=function(e){u(),a(e)};n?t(h,p,f):(i=[function(e){p(e||Error("canceled"))}],t(h,p,(function(e){if(s)throw Error("Unable to subscribe on cancel event asynchronously");if("function"!=typeof e)throw TypeError("onCancel callback must be a function");i.push(e)})),s=!0),r.timeout>0&&(o=setTimeout((function(){var e=Error("timeout");e.code="ETIMEDOUT",o=0,c.cancel(e),a(e)}),r.timeout))}));return n||(c.cancel=function(e){if(i){for(var t=i.length,r=1;r<t;r++)i[r](e);i[0](e),i=null}}),c}function O(e){var t=this._observers;if(!t)return-1;for(var r=t.length,n=0;n<r;n++)if(t[n]._target===e)return n;return-1}function x(e,t,r,n,i){if(!r)return null;if(0===n){var s=typeof t;if("string"===s){var o,c,l=0,a=0,f=this.delimiter,h=f.length;if(-1!==(c=t.indexOf(f))){o=new Array(5);do{o[l++]=t.slice(a,c),a=c+h}while(-1!==(c=t.indexOf(f,a)));o[l++]=t.slice(a),t=o,i=l}else t=[t],i=1}else"object"===s?i=t.length:(t=[t],i=1)}var p,y,v,_,m,d,b,g=null,w=t[n],j=t[n+1];if(n===i)r._listeners&&("function"==typeof r._listeners?(e&&e.push(r._listeners),g=[r]):(e&&e.push.apply(e,r._listeners),g=[r]));else{if("*"===w){for(c=(d=u(r)).length;c-- >0;)"_listeners"!==(p=d[c])&&(b=x(e,t,r[p],n+1,i))&&(g?g.push.apply(g,b):g=b);return g}if("**"===w){for((m=n+1===i||n+2===i&&"*"===j)&&r._listeners&&(g=x(e,t,r,i,i)),c=(d=u(r)).length;c-- >0;)"_listeners"!==(p=d[c])&&("*"===p||"**"===p?(r[p]._listeners&&!m&&(b=x(e,t,r[p],i,i))&&(g?g.push.apply(g,b):g=b),b=x(e,t,r[p],n,i)):b=x(e,t,r[p],p===j?n+2:n,i),b&&(g?g.push.apply(g,b):g=b));return g}r[w]&&(g=x(e,t,r[w],n+1,i))}if((y=r["*"])&&x(e,t,y,n+1,i),v=r["**"])if(n<i)for(v._listeners&&x(e,t,v,i,i),c=(d=u(v)).length;c-- >0;)"_listeners"!==(p=d[c])&&(p===j?x(e,t,v[p],n+2,i):p===w?x(e,t,v[p],n+1,i):((_={})[p]=v[p],x(e,t,{"**":_},n+1,i)));else v._listeners?x(e,t,v,i,i):v["*"]&&v["*"]._listeners&&x(e,t,v["*"],i,i);return g}function k(e,t,r){var n,i,s=0,o=0,c=this.delimiter,l=c.length;if("string"==typeof e)if(-1!==(n=e.indexOf(c))){i=new Array(5);do{i[s++]=e.slice(o,n),o=n+l}while(-1!==(n=e.indexOf(c,o)));i[s++]=e.slice(o)}else i=[e],s=1;else i=e,s=e.length;if(s>1)for(n=0;n+1<s;n++)if("**"===i[n]&&"**"===i[n+1])return;var a,f=this.listenerTree;for(n=0;n<s;n++)if(f=f[a=i[n]]||(f[a]={}),n===s-1)return f._listeners?("function"==typeof f._listeners&&(f._listeners=[f._listeners]),r?f._listeners.unshift(t):f._listeners.push(t),!f._listeners.warned&&this._maxListeners>0&&f._listeners.length>this._maxListeners&&(f._listeners.warned=!0,y.call(this,f._listeners.length,a))):f._listeners=t,!0;return!0}function E(e,t,r,n){for(var i,s,o,c,l=u(e),a=l.length,f=e._listeners;a-- >0;)i=e[s=l[a]],o="_listeners"===s?r:r?r.concat(s):[s],c=n||"symbol"==typeof s,f&&t.push(c?o:o.join(this.delimiter)),"object"==typeof i&&E.call(this,i,t,o,c);return t}function T(e){for(var t,r,n,i=u(e),s=i.length;s-- >0;)(t=e[r=i[s]])&&(n=!0,"_listeners"===r||T(t)||delete e[r]);return n}function A(e,t,r){this.emitter=e,this.event=t,this.listener=r}function P(e,t,r){if(!0===r)s=!0;else if(!1===r)n=!0;else{if(!r||"object"!=typeof r)throw TypeError("options should be an object or true");var n=r.async,s=r.promisify,o=r.nextTick,l=r.objectify}if(n||o||s){var a=t,u=t._origin||t;if(o&&!c)throw Error("process.nextTick is not supported");s===i&&(s="AsyncFunction"===t.constructor.name),t=function(){var e=arguments,t=this,r=this.event;return s?o?Promise.resolve():new Promise((function(e){f(e)})).then((function(){return t.event=r,a.apply(t,e)})):(o?process.nextTick:f)((function(){t.event=r,a.apply(t,e)}))},t._async=!0,t._origin=u}return[t,l?new A(this,e,t):this]}function M(e){this._events={},this._newListener=!1,this._removeListener=!1,this.verboseMemoryLeak=!1,p.call(this,e)}A.prototype.off=function(){return this.emitter.off(this.event,this.listener),this},M.EventEmitter2=M,M.prototype.listenTo=function(e,t,r){if("object"!=typeof e)throw TypeError("target musts be an object");var n=this;function s(t){if("object"!=typeof t)throw TypeError("events must be an object");var i,s=r.reducers,o=O.call(n,e);i=-1===o?new m(n,e,r):n._observers[o];for(var c,l=u(t),a=l.length,f="function"==typeof s,h=0;h<a;h++)c=l[h],i.subscribe(c,t[c]||c,f?s:s&&s[c])}return r=d(r,{on:i,off:i,reducers:i},{on:w,off:w,reducers:j}),o(t)?s(_(t)):s("string"==typeof t?_(t.split(/\s+/)):t),this},M.prototype.stopListeningTo=function(e,t){var r=this._observers;if(!r)return!1;var n,i=r.length,s=!1;if(e&&"object"!=typeof e)throw TypeError("target should be an object");for(;i-- >0;)n=r[i],e&&n._target!==e||(n.unsubscribe(t),s=!0);return s},M.prototype.delimiter=".",M.prototype.setMaxListeners=function(e){e!==i&&(this._maxListeners=e,this._conf||(this._conf={}),this._conf.maxListeners=e)},M.prototype.getMaxListeners=function(){return this._maxListeners},M.prototype.event="",M.prototype.once=function(e,t,r){return this._once(e,t,!1,r)},M.prototype.prependOnceListener=function(e,t,r){return this._once(e,t,!0,r)},M.prototype._once=function(e,t,r,n){return this._many(e,1,t,r,n)},M.prototype.many=function(e,t,r,n){return this._many(e,t,r,!1,n)},M.prototype.prependMany=function(e,t,r,n){return this._many(e,t,r,!0,n)},M.prototype._many=function(e,t,r,n,i){var s=this;if("function"!=typeof r)throw new Error("many only accepts instances of Function");function o(){return 0==--t&&s.off(e,o),r.apply(this,arguments)}return o._origin=r,this._on(e,o,n,i)},M.prototype.emit=function(){if(!this._events&&!this._all)return!1;this._events||h.call(this);var e,t,r,n,i,s,o=arguments[0],c=this.wildcard;if("newListener"===o&&!this._newListener&&!this._events.newListener)return!1;if(c&&(e=o,"newListener"!==o&&"removeListener"!==o&&"object"==typeof o)){if(r=o.length,l)for(n=0;n<r;n++)if("symbol"==typeof o[n]){s=!0;break}s||(o=o.join(this.delimiter))}var a,f=arguments.length;if(this._all&&this._all.length)for(n=0,r=(a=this._all.slice()).length;n<r;n++)switch(this.event=o,f){case 1:a[n].call(this,o);break;case 2:a[n].call(this,o,arguments[1]);break;case 3:a[n].call(this,o,arguments[1],arguments[2]);break;default:a[n].apply(this,arguments)}if(c)a=[],x.call(this,a,e,this.listenerTree,0,r);else{if("function"==typeof(a=this._events[o])){switch(this.event=o,f){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:for(t=new Array(f-1),i=1;i<f;i++)t[i-1]=arguments[i];a.apply(this,t)}return!0}a&&(a=a.slice())}if(a&&a.length){if(f>3)for(t=new Array(f-1),i=1;i<f;i++)t[i-1]=arguments[i];for(n=0,r=a.length;n<r;n++)switch(this.event=o,f){case 1:a[n].call(this);break;case 2:a[n].call(this,arguments[1]);break;case 3:a[n].call(this,arguments[1],arguments[2]);break;default:a[n].apply(this,t)}return!0}if(!this.ignoreErrors&&!this._all&&"error"===o)throw arguments[1]instanceof Error?arguments[1]:new Error("Uncaught, unspecified 'error' event.");return!!this._all},M.prototype.emitAsync=function(){if(!this._events&&!this._all)return!1;this._events||h.call(this);var e,t,r,n,i,s,o=arguments[0],c=this.wildcard;if("newListener"===o&&!this._newListener&&!this._events.newListener)return Promise.resolve([!1]);if(c&&(e=o,"newListener"!==o&&"removeListener"!==o&&"object"==typeof o)){if(n=o.length,l)for(i=0;i<n;i++)if("symbol"==typeof o[i]){t=!0;break}t||(o=o.join(this.delimiter))}var a,f=[],u=arguments.length;if(this._all)for(i=0,n=this._all.length;i<n;i++)switch(this.event=o,u){case 1:f.push(this._all[i].call(this,o));break;case 2:f.push(this._all[i].call(this,o,arguments[1]));break;case 3:f.push(this._all[i].call(this,o,arguments[1],arguments[2]));break;default:f.push(this._all[i].apply(this,arguments))}if(c?(a=[],x.call(this,a,e,this.listenerTree,0)):a=this._events[o],"function"==typeof a)switch(this.event=o,u){case 1:f.push(a.call(this));break;case 2:f.push(a.call(this,arguments[1]));break;case 3:f.push(a.call(this,arguments[1],arguments[2]));break;default:for(r=new Array(u-1),s=1;s<u;s++)r[s-1]=arguments[s];f.push(a.apply(this,r))}else if(a&&a.length){if(a=a.slice(),u>3)for(r=new Array(u-1),s=1;s<u;s++)r[s-1]=arguments[s];for(i=0,n=a.length;i<n;i++)switch(this.event=o,u){case 1:f.push(a[i].call(this));break;case 2:f.push(a[i].call(this,arguments[1]));break;case 3:f.push(a[i].call(this,arguments[1],arguments[2]));break;default:f.push(a[i].apply(this,r))}}else if(!this.ignoreErrors&&!this._all&&"error"===o)return arguments[1]instanceof Error?Promise.reject(arguments[1]):Promise.reject("Uncaught, unspecified 'error' event.");return Promise.all(f)},M.prototype.on=function(e,t,r){return this._on(e,t,!1,r)},M.prototype.prependListener=function(e,t,r){return this._on(e,t,!0,r)},M.prototype.onAny=function(e){return this._onAny(e,!1)},M.prototype.prependAny=function(e){return this._onAny(e,!0)},M.prototype.addListener=M.prototype.on,M.prototype._onAny=function(e,t){if("function"!=typeof e)throw new Error("onAny only accepts instances of Function");return this._all||(this._all=[]),t?this._all.unshift(e):this._all.push(e),this},M.prototype._on=function(e,t,r,n){if("function"==typeof e)return this._onAny(e,t),this;if("function"!=typeof t)throw new Error("on only accepts instances of Function");this._events||h.call(this);var s,o=this;return n!==i&&(t=(s=P.call(this,e,t,n))[0],o=s[1]),this._newListener&&this.emit("newListener",e,t),this.wildcard?(k.call(this,e,t,r),o):(this._events[e]?("function"==typeof this._events[e]&&(this._events[e]=[this._events[e]]),r?this._events[e].unshift(t):this._events[e].push(t),!this._events[e].warned&&this._maxListeners>0&&this._events[e].length>this._maxListeners&&(this._events[e].warned=!0,y.call(this,this._events[e].length,e))):this._events[e]=t,o)},M.prototype.off=function(e,t){if("function"!=typeof t)throw new Error("removeListener only takes instances of Function");var r,n=[];if(this.wildcard){var i="string"==typeof e?e.split(this.delimiter):e.slice();if(!(n=x.call(this,null,i,this.listenerTree,0)))return this}else{if(!this._events[e])return this;r=this._events[e],n.push({_listeners:r})}for(var s=0;s<n.length;s++){var c=n[s];if(r=c._listeners,o(r)){for(var l=-1,a=0,f=r.length;a<f;a++)if(r[a]===t||r[a].listener&&r[a].listener===t||r[a]._origin&&r[a]._origin===t){l=a;break}if(l<0)continue;return this.wildcard?c._listeners.splice(l,1):this._events[e].splice(l,1),0===r.length&&(this.wildcard?delete c._listeners:delete this._events[e]),this._removeListener&&this.emit("removeListener",e,t),this}(r===t||r.listener&&r.listener===t||r._origin&&r._origin===t)&&(this.wildcard?delete c._listeners:delete this._events[e],this._removeListener&&this.emit("removeListener",e,t))}return this.listenerTree&&T(this.listenerTree),this},M.prototype.offAny=function(e){var t,r=0,n=0;if(e&&this._all&&this._all.length>0){for(r=0,n=(t=this._all).length;r<n;r++)if(e===t[r])return t.splice(r,1),this._removeListener&&this.emit("removeListenerAny",e),this}else{if(t=this._all,this._removeListener)for(r=0,n=t.length;r<n;r++)this.emit("removeListenerAny",t[r]);this._all=[]}return this},M.prototype.removeListener=M.prototype.off,M.prototype.removeAllListeners=function(e){if(e===i)return!this._events||h.call(this),this;if(this.wildcard){var t,r=x.call(this,null,e,this.listenerTree,0);if(!r)return this;for(t=0;t<r.length;t++)r[t]._listeners=null;this.listenerTree&&T(this.listenerTree)}else this._events&&(this._events[e]=null);return this},M.prototype.listeners=function(e){var t,r,n,s,o,c=this._events;if(e===i){if(this.wildcard)throw Error("event name required for wildcard emitter");if(!c)return[];for(s=(t=u(c)).length,n=[];s-- >0;)"function"==typeof(r=c[t[s]])?n.push(r):n.push.apply(n,r);return n}if(this.wildcard){if(!(o=this.listenerTree))return[];var l=[],a="string"==typeof e?e.split(this.delimiter):e.slice();return x.call(this,l,a,o,0),l}return c&&(r=c[e])?"function"==typeof r?[r]:r:[]},M.prototype.eventNames=function(e){var t=this._events;return this.wildcard?E.call(this,this.listenerTree,[],null,e):t?u(t):[]},M.prototype.listenerCount=function(e){return this.listeners(e).length},M.prototype.hasListeners=function(e){if(this.wildcard){var t=[],r="string"==typeof e?e.split(this.delimiter):e.slice();return x.call(this,t,r,this.listenerTree,0),t.length>0}var n=this._events,s=this._all;return!!(s&&s.length||n&&(e===i?u(n).length:n[e]))},M.prototype.listenersAny=function(){return this._all?this._all:[]},M.prototype.waitFor=function(e,t){var r=this,n=typeof t;return"number"===n?t={timeout:t}:"function"===n&&(t={filter:t}),L((t=d(t,{timeout:0,filter:i,handleError:!1,Promise,overload:!1},{filter:w,Promise:b})).Promise,(function(n,i,s){function o(){var s=t.filter;if(!s||s.apply(r,arguments))if(r.off(e,o),t.handleError){var c=arguments[0];c?i(c):n(v.apply(null,arguments).slice(1))}else n(v.apply(null,arguments))}s((function(){r.off(e,o)})),r._on(e,o,!1)}),{timeout:t.timeout,overload:t.overload})};var S=M.prototype;Object.defineProperties(M,{defaultMaxListeners:{get:function(){return S._maxListeners},set:function(e){if("number"!=typeof e||e<0||Number.isNaN(e))throw TypeError("n must be a non-negative number");S._maxListeners=e},enumerable:!0},once:{value:function(e,t,r){return L((r=d(r,{Promise,timeout:0,overload:!1},{Promise:b})).Promise,(function(r,n,i){var s;if("function"==typeof e.addEventListener)return s=function(){r(v.apply(null,arguments))},i((function(){e.removeEventListener(t,s)})),void e.addEventListener(t,s,{once:!0});var o,c=function(){o&&e.removeListener("error",o),r(v.apply(null,arguments))};"error"!==t&&(o=function(r){e.removeListener(t,c),n(r)},e.once("error",o)),i((function(){o&&e.removeListener("error",o),e.removeListener(t,c)})),e.once(t,c)}),{timeout:r.timeout,overload:r.overload})},writable:!0,configurable:!0}}),Object.defineProperties(S,{_maxListeners:{value:10,writable:!0,configurable:!0},_observers:{value:null,writable:!0,configurable:!0}}),(n=function(){return M}.call(t,r,t,e))===i||(e.exports=n)}()}},t={},function r(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,r),s.exports}(650);var e,t}));
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* EventEmitter2
|
|
3
|
-
* https://github.com/hij1nx/EventEmitter2
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) 2013 hij1nx
|
|
6
|
-
* Licensed under the MIT license.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/*!
|
|
10
|
-
* activity-streams
|
|
11
|
-
* https://github.com/silverbucket/activity-streams
|
|
12
|
-
*
|
|
13
|
-
* Developed and Maintained by:
|
|
14
|
-
* Nick Jennings <nick@silverbucket.net>
|
|
15
|
-
*
|
|
16
|
-
* activity-streams is released under the MIT (see LICENSE).
|
|
17
|
-
*
|
|
18
|
-
* You don't have to do anything special to choose one license or the other
|
|
19
|
-
* and you don't have to notify anyone which license you are using.
|
|
20
|
-
* Please see the corresponding license file for details of these licenses.
|
|
21
|
-
* You are free to use, modify and distribute this software, but all copyright
|
|
22
|
-
* information must remain.
|
|
23
|
-
*
|
|
24
|
-
*/
|
package/dist/sockethub.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const debug_1 = __importDefault(require("debug"));
|
|
16
|
-
const crypto_1 = __importDefault(require("./crypto"));
|
|
17
|
-
const init_1 = __importDefault(require("./bootstrap/init"));
|
|
18
|
-
const middleware_1 = __importDefault(require("./middleware"));
|
|
19
|
-
const create_activity_object_1 = __importDefault(require("./middleware/create-activity-object"));
|
|
20
|
-
const expand_activity_stream_1 = __importDefault(require("./middleware/expand-activity-stream"));
|
|
21
|
-
const store_credentials_1 = __importDefault(require("./middleware/store-credentials"));
|
|
22
|
-
const validate_1 = __importDefault(require("./middleware/validate"));
|
|
23
|
-
const janitor_1 = __importDefault(require("./janitor"));
|
|
24
|
-
const serve_1 = __importDefault(require("./serve"));
|
|
25
|
-
const process_manager_1 = __importDefault(require("./process-manager"));
|
|
26
|
-
const platform_instance_1 = require("./platform-instance");
|
|
27
|
-
const store_1 = require("./store");
|
|
28
|
-
const log = (0, debug_1.default)('sockethub:core');
|
|
29
|
-
function attachError(err, msg) {
|
|
30
|
-
if (typeof msg !== 'object') {
|
|
31
|
-
msg = { context: 'error' };
|
|
32
|
-
}
|
|
33
|
-
msg.error = err.toString();
|
|
34
|
-
delete msg.sessionSecret;
|
|
35
|
-
return msg;
|
|
36
|
-
}
|
|
37
|
-
class Sockethub {
|
|
38
|
-
constructor() {
|
|
39
|
-
this.counter = 0;
|
|
40
|
-
this.platforms = init_1.default.platforms;
|
|
41
|
-
this.status = false;
|
|
42
|
-
this.parentId = crypto_1.default.randToken(16);
|
|
43
|
-
this.parentSecret1 = crypto_1.default.randToken(16);
|
|
44
|
-
this.parentSecret2 = crypto_1.default.randToken(16);
|
|
45
|
-
this.processManager = new process_manager_1.default(this.parentId, this.parentSecret1, this.parentSecret2);
|
|
46
|
-
log('sockethub session id: ' + this.parentId);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* initialization of sockethub starts here
|
|
50
|
-
*/
|
|
51
|
-
boot() {
|
|
52
|
-
if (this.status) {
|
|
53
|
-
return log('Sockethub.boot() called more than once');
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
this.status = true;
|
|
57
|
-
}
|
|
58
|
-
log('active platforms: ', [...init_1.default.platforms.keys()]);
|
|
59
|
-
janitor_1.default.clean(); // start cleanup cycle
|
|
60
|
-
serve_1.default.start(); // start external services
|
|
61
|
-
log('registering handlers');
|
|
62
|
-
serve_1.default.io.on('connection', this.handleIncomingConnection.bind(this));
|
|
63
|
-
}
|
|
64
|
-
removeAllPlatformInstances() {
|
|
65
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
-
for (let platform of platform_instance_1.platformInstances) {
|
|
67
|
-
yield platform[1].destroy();
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
createJob(socketId, platformInstance, msg) {
|
|
72
|
-
const title = `${msg.context}-${(msg.id) ? msg.id : this.counter++}`;
|
|
73
|
-
const job = {
|
|
74
|
-
title: title,
|
|
75
|
-
sessionId: socketId,
|
|
76
|
-
msg: crypto_1.default.encrypt(msg, this.parentSecret1 + this.parentSecret2)
|
|
77
|
-
};
|
|
78
|
-
return job;
|
|
79
|
-
}
|
|
80
|
-
;
|
|
81
|
-
handleIncomingConnection(socket) {
|
|
82
|
-
const sessionLog = (0, debug_1.default)('sockethub:core:' + socket.id), // session-specific debug messages
|
|
83
|
-
sessionSecret = crypto_1.default.randToken(16),
|
|
84
|
-
// store instance is session-specific
|
|
85
|
-
store = (0, store_1.getSessionStore)(this.parentId, this.parentSecret1, socket.id, sessionSecret);
|
|
86
|
-
sessionLog(`socket.io connection`);
|
|
87
|
-
socket.on('disconnect', () => {
|
|
88
|
-
sessionLog('disconnect received from client');
|
|
89
|
-
});
|
|
90
|
-
socket.on('credentials', (0, middleware_1.default)('credentials')
|
|
91
|
-
.use(expand_activity_stream_1.default)
|
|
92
|
-
.use((0, validate_1.default)('credentials', socket.id))
|
|
93
|
-
.use((0, store_credentials_1.default)(store, sessionLog))
|
|
94
|
-
.use((err, data, next) => {
|
|
95
|
-
// error handler
|
|
96
|
-
next(attachError(err, data));
|
|
97
|
-
}).use((data, next) => { next(); })
|
|
98
|
-
.done());
|
|
99
|
-
// when new activity objects are created on the client side, an event is
|
|
100
|
-
// fired and we receive a copy on the server side.
|
|
101
|
-
socket.on('activity-object', (0, middleware_1.default)('activity-object')
|
|
102
|
-
.use((0, validate_1.default)('activity-object', socket.id))
|
|
103
|
-
.use(create_activity_object_1.default)
|
|
104
|
-
.use((err, data, next) => {
|
|
105
|
-
next(attachError(err, data));
|
|
106
|
-
}).use((data, next) => { next(); })
|
|
107
|
-
.done());
|
|
108
|
-
socket.on('message', (0, middleware_1.default)('message')
|
|
109
|
-
.use(expand_activity_stream_1.default)
|
|
110
|
-
.use((0, validate_1.default)('message', socket.id))
|
|
111
|
-
.use((msg, next) => {
|
|
112
|
-
// The platform thread must find the credentials on their own using the given
|
|
113
|
-
// sessionSecret, which indicates that this specific session (socket
|
|
114
|
-
// connection) has provided credentials.
|
|
115
|
-
msg.sessionSecret = sessionSecret;
|
|
116
|
-
next(msg);
|
|
117
|
-
}).use((err, data, next) => {
|
|
118
|
-
next(attachError(err, data));
|
|
119
|
-
}).use((msg, next) => {
|
|
120
|
-
const platformInstance = this.processManager.get(msg.context, msg.actor.id, socket.id);
|
|
121
|
-
sessionLog(`queued to channel ${platformInstance.id}`);
|
|
122
|
-
const job = this.createJob(socket.id, platformInstance, msg);
|
|
123
|
-
// job validated and queued, store socket.io callback for when job is completed
|
|
124
|
-
platformInstance.completedJobHandlers.set(job.title, next);
|
|
125
|
-
platformInstance.queue.add(job);
|
|
126
|
-
}).done());
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
exports.default = Sockethub;
|
|
130
|
-
//# sourceMappingURL=/sockethub.js.map
|
package/dist/sockethub.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sockethub.js","sourceRoot":"/","sources":["sockethub.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getSessionStore = void 0;
|
|
7
|
-
const secure_store_redis_1 = __importDefault(require("secure-store-redis"));
|
|
8
|
-
const config_1 = __importDefault(require("./config"));
|
|
9
|
-
function getSessionStore(parentId, parentSecret, sessionId, sessionSecret) {
|
|
10
|
-
return new secure_store_redis_1.default({
|
|
11
|
-
namespace: 'sockethub:' + parentId + ':session:' + sessionId + ':store',
|
|
12
|
-
secret: parentSecret + sessionSecret,
|
|
13
|
-
redis: config_1.default.get('redis')
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
exports.getSessionStore = getSessionStore;
|
|
17
|
-
//# sourceMappingURL=/store.js.map
|
package/dist/store.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"/","sources":["store.ts"],"names":[],"mappings":";;;;;;AAAA,4EAA6C;AAE7C,sDAA8B;AAO9B,SAAgB,eAAe,CAAC,QAAgB,EAAE,YAAoB,EACtC,SAAiB,EAAE,aAAqB;IACtE,OAAO,IAAI,4BAAW,CAAC;QACrB,SAAS,EAAE,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ;QACvE,MAAM,EAAE,YAAY,GAAG,aAAa;QACpC,KAAK,EAAE,gBAAM,CAAC,GAAG,CAAC,OAAO,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC;AAPD,0CAOC"}
|
package/src/bootstrap/init.d.ts
DELETED
package/src/bootstrap/init.ts
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import debug from 'debug';
|
|
2
|
-
|
|
3
|
-
import config from '../config';
|
|
4
|
-
import platformLoad from './platforms';
|
|
5
|
-
|
|
6
|
-
const log = debug('sockethub:bootstrap:init');
|
|
7
|
-
log('running init routines');
|
|
8
|
-
|
|
9
|
-
const packageJSON = require('./../../package.json');
|
|
10
|
-
const platforms = platformLoad(Object.keys(packageJSON.dependencies));
|
|
11
|
-
log('loaded platforms');
|
|
12
|
-
|
|
13
|
-
if (config.get('help')) {
|
|
14
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
15
|
-
console.log(packageJSON.name + ' ' + packageJSON.version);
|
|
16
|
-
console.log('command line args: ');
|
|
17
|
-
console.log();
|
|
18
|
-
console.log(' --help : this help screen');
|
|
19
|
-
console.log(' --info : displays some basic runtime info');
|
|
20
|
-
console.log();
|
|
21
|
-
console.log(' --examples : enables examples page and serves helper files like jquery');
|
|
22
|
-
console.log();
|
|
23
|
-
console.log(' --host : hostname to bind to');
|
|
24
|
-
console.log(' --port : port to bind to');
|
|
25
|
-
console.log();
|
|
26
|
-
process.exit();
|
|
27
|
-
} else if (config.get('info')) {
|
|
28
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
29
|
-
console.log(packageJSON.name + ' ' + packageJSON.version);
|
|
30
|
-
console.log();
|
|
31
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
32
|
-
console.log('examples enabled: ' + config.get('examples:enabled'));
|
|
33
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
34
|
-
console.log('sockethub: ' + config.get('service:host') + ':' + config.get('service:port')
|
|
35
|
-
+ config.get('service:path'));
|
|
36
|
-
|
|
37
|
-
if (config.get('redis:url')) {
|
|
38
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
39
|
-
console.log('redis URL: ' + config.get('redis:url'));
|
|
40
|
-
} else {
|
|
41
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
42
|
-
console.log('redis: ' + config.get('redis:host') + ':' + config.get('redis:port'));
|
|
43
|
-
}
|
|
44
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
45
|
-
console.log('public url: ' + config.get('public:host') + ':' + config.get('public:port')
|
|
46
|
-
+ config.get('public:path'));
|
|
47
|
-
|
|
48
|
-
console.log();
|
|
49
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
50
|
-
console.log('platforms: ' + Array.from(platforms.keys()).join(', '));
|
|
51
|
-
|
|
52
|
-
if (platforms.size > 0) {
|
|
53
|
-
for (let platform of platforms.values()) {
|
|
54
|
-
console.log();
|
|
55
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
56
|
-
console.log(' ' + platform.id + ' v' + platform.version);
|
|
57
|
-
// eslint-disable-next-line security-node/detect-crlf
|
|
58
|
-
console.log(' AS types: ' + platform.types.join(', '));
|
|
59
|
-
}
|
|
60
|
-
console.log();
|
|
61
|
-
process.exit();
|
|
62
|
-
} else {
|
|
63
|
-
console.log();
|
|
64
|
-
process.exit();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
log('finished init routines');
|
|
69
|
-
|
|
70
|
-
export interface IInitObject {
|
|
71
|
-
version: string,
|
|
72
|
-
platforms: Map<string, {
|
|
73
|
-
id: string,
|
|
74
|
-
moduleName: string,
|
|
75
|
-
config: {
|
|
76
|
-
persist?: boolean
|
|
77
|
-
},
|
|
78
|
-
schemas: {
|
|
79
|
-
credentials?: object,
|
|
80
|
-
messages?: object
|
|
81
|
-
},
|
|
82
|
-
version: string,
|
|
83
|
-
types: Array<string>
|
|
84
|
-
}>,
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const init: IInitObject = {
|
|
88
|
-
version: packageJSON.version,
|
|
89
|
-
platforms: platforms
|
|
90
|
-
};
|
|
91
|
-
export default init;
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* bootstrap/platforms.js
|
|
3
|
-
*
|
|
4
|
-
* A Singleton responsible for finding and loading all valid sockethub
|
|
5
|
-
* platforms, and whitelisting or blacklisting (or neither) based on the
|
|
6
|
-
* config.
|
|
7
|
-
*/
|
|
8
|
-
const debug = require('debug'),
|
|
9
|
-
schemas = require('sockethub-schemas'),
|
|
10
|
-
findup = require('findup-sync');
|
|
11
|
-
|
|
12
|
-
const config = require('../config').default;
|
|
13
|
-
const log = debug('sockethub:bootstrap:platforms');
|
|
14
|
-
|
|
15
|
-
const whitelist = config.get('platforms:whitelist'),
|
|
16
|
-
blacklist = config.get('platforms:blacklist');
|
|
17
|
-
|
|
18
|
-
log('loading platforms');
|
|
19
|
-
|
|
20
|
-
// checks platform against black and whitelist.
|
|
21
|
-
function platformIsAccepted(platformName) {
|
|
22
|
-
let willLoad = false;
|
|
23
|
-
if (whitelist.length > 0) {
|
|
24
|
-
if (whitelist.indexOf(platformName) >= 0) {
|
|
25
|
-
willLoad = true;
|
|
26
|
-
}
|
|
27
|
-
} else if (blacklist.length > 0) {
|
|
28
|
-
if (blacklist.indexOf(platformName) < 0) {
|
|
29
|
-
willLoad = true;
|
|
30
|
-
}
|
|
31
|
-
} else {
|
|
32
|
-
willLoad = true;
|
|
33
|
-
}
|
|
34
|
-
return willLoad;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// if the platform schema lists valid types it implements (essentially methods/verbs for
|
|
38
|
-
// sockethub to call) then add it to the supported types list.
|
|
39
|
-
function platformListsSupportedTypes(p) {
|
|
40
|
-
return ((p.schema.messages.properties) && (p.schema.messages.properties.type) &&
|
|
41
|
-
(p.schema.messages.properties.type.enum) &&
|
|
42
|
-
(p.schema.messages.properties.type.enum.length > 0));
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
module.exports = function platformLoad(moduleList) {
|
|
46
|
-
// load platforms from package.json
|
|
47
|
-
const rx = new RegExp('^sockethub-platform-', 'i');
|
|
48
|
-
const platforms = new Map();
|
|
49
|
-
log('finding and registering platforms from package list');
|
|
50
|
-
|
|
51
|
-
for (let moduleName of moduleList) {
|
|
52
|
-
if (rx.test(moduleName)) {
|
|
53
|
-
// found a sockethub platform
|
|
54
|
-
const platformName = moduleName.replace(rx, '');
|
|
55
|
-
log(`registering ${platformName} platform`);
|
|
56
|
-
|
|
57
|
-
if (platformIsAccepted(platformName)) {
|
|
58
|
-
// try to load platform
|
|
59
|
-
const P = require(moduleName);
|
|
60
|
-
const p = new P();
|
|
61
|
-
let path = findup(moduleName, { cwd: __dirname + '/../../node_modules' });
|
|
62
|
-
if (! path) {
|
|
63
|
-
path = findup(moduleName, { cwd: 'node_modules' });
|
|
64
|
-
}
|
|
65
|
-
const packageJson = require(path + '/package.json');
|
|
66
|
-
let types = [];
|
|
67
|
-
|
|
68
|
-
const err = schemas.validator.validatePlatformSchema(p.schema);
|
|
69
|
-
if (err) {
|
|
70
|
-
throw new Error(`${platformName} ${err}`);
|
|
71
|
-
} else if (typeof p.config !== 'object') {
|
|
72
|
-
throw new Error(
|
|
73
|
-
`${platformName} platform must have a config property that is an object.`);
|
|
74
|
-
} else {
|
|
75
|
-
if (p.schema.credentials) {
|
|
76
|
-
// register the platforms credentials schema
|
|
77
|
-
types.push('credentials');
|
|
78
|
-
} else {
|
|
79
|
-
p.config.noCredentials = true;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (platformListsSupportedTypes(p)) {
|
|
84
|
-
types = [...types, ...p.schema.messages.properties.type.enum];
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
platforms.set(platformName, {
|
|
88
|
-
id: platformName,
|
|
89
|
-
moduleName: moduleName,
|
|
90
|
-
config: p.config,
|
|
91
|
-
schemas: {
|
|
92
|
-
credentials: p.schema.credentials || {},
|
|
93
|
-
messages: p.schema.messages || {}
|
|
94
|
-
},
|
|
95
|
-
version: packageJson.version,
|
|
96
|
-
types: types
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return platforms;
|
|
103
|
-
};
|
package/src/common.test.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import proxyquire from 'proxyquire';
|
|
2
|
-
import { expect } from 'chai';
|
|
3
|
-
import * as sinon from 'sinon';
|
|
4
|
-
|
|
5
|
-
import { decryptJobData, getPlatformId } from './common';
|
|
6
|
-
import crypto from './crypto';
|
|
7
|
-
|
|
8
|
-
proxyquire.noPreserveCache();
|
|
9
|
-
proxyquire.noCallThru();
|
|
10
|
-
|
|
11
|
-
describe("getPlatformId", () => {
|
|
12
|
-
let cryptoHashStub;
|
|
13
|
-
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
cryptoHashStub = sinon.stub(crypto, 'hash');
|
|
16
|
-
cryptoHashStub.returnsArg(0);
|
|
17
|
-
proxyquire('./common', { crypto: { hash: cryptoHashStub }});
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
afterEach(() => {
|
|
21
|
-
cryptoHashStub.restore();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('generates platform hash', () => {
|
|
25
|
-
expect(getPlatformId('foo')).to.be.equal('foo');
|
|
26
|
-
sinon.assert.calledOnce(cryptoHashStub);
|
|
27
|
-
sinon.assert.calledWith(cryptoHashStub, 'foo');
|
|
28
|
-
});
|
|
29
|
-
it('generates platform + actor hash', () => {
|
|
30
|
-
expect(getPlatformId('foo', 'bar')).to.be.equal('foobar');
|
|
31
|
-
sinon.assert.calledOnce(cryptoHashStub);
|
|
32
|
-
sinon.assert.calledWith(cryptoHashStub, 'foobar');
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
describe("decryptJobData", () => {
|
|
37
|
-
let cryptoDecryptStub;
|
|
38
|
-
|
|
39
|
-
beforeEach(() => {
|
|
40
|
-
cryptoDecryptStub = sinon.stub(crypto, 'decrypt');
|
|
41
|
-
cryptoDecryptStub.returnsArg(0);
|
|
42
|
-
proxyquire('./common', { crypto: { hash: cryptoDecryptStub }});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
afterEach(() => {
|
|
46
|
-
cryptoDecryptStub.restore();
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it("decrypts and returns expected object", () => {
|
|
50
|
-
const jobData = {data:{title:"foo", msg:'encryptedjobdata', sessionId:'foobar'}};
|
|
51
|
-
const secret = 'secretstring';
|
|
52
|
-
expect(decryptJobData(jobData, secret)).to.be.eql(jobData.data);
|
|
53
|
-
});
|
|
54
|
-
});
|
package/src/common.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import crypto from "./crypto";
|
|
2
|
-
import { JobDataDecrypted, JobEncrypted } from "./sockethub";
|
|
3
|
-
|
|
4
|
-
export function getPlatformId(platform: string, actor?: string): string {
|
|
5
|
-
return actor ? crypto.hash(platform + actor) : crypto.hash(platform);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function decryptJobData(job: JobEncrypted, secret: string): JobDataDecrypted {
|
|
9
|
-
return {
|
|
10
|
-
title: job.data.title,
|
|
11
|
-
msg: crypto.decrypt(job.data.msg, secret),
|
|
12
|
-
sessionId: job.data.sessionId
|
|
13
|
-
};
|
|
14
|
-
}
|
package/src/config.d.ts
DELETED
package/src/config.test.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
|
|
3
|
-
import { Config } from './config';
|
|
4
|
-
|
|
5
|
-
describe('config', () => {
|
|
6
|
-
|
|
7
|
-
it('loads default values', () => {
|
|
8
|
-
const config = new Config();
|
|
9
|
-
expect(config).to.have.property('get');
|
|
10
|
-
expect(config.get('service:host')).to.eql('localhost');
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('overrides from env', () => {
|
|
14
|
-
const hostname = 'a host string';
|
|
15
|
-
process.env = { HOST: hostname };
|
|
16
|
-
const config = new Config();
|
|
17
|
-
expect(config).to.have.property('get');
|
|
18
|
-
expect(config.get('service:host')).to.eql(hostname);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('defaults to redis config', () => {
|
|
22
|
-
process.env = { REDIS_URL: '' };
|
|
23
|
-
const config = new Config();
|
|
24
|
-
expect(config).to.have.property('get');
|
|
25
|
-
expect(config.get('redis')).to.eql(
|
|
26
|
-
{"host": "127.0.0.1", "port": 6379});
|
|
27
|
-
});
|
|
28
|
-
});
|
package/src/config.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import nconf from 'nconf';
|
|
2
|
-
import { debug } from 'debug';
|
|
3
|
-
|
|
4
|
-
const log = debug('sockethub:bootstrap:config');
|
|
5
|
-
|
|
6
|
-
export class Config {
|
|
7
|
-
constructor() {
|
|
8
|
-
log('initializing config');
|
|
9
|
-
// assign config loading priorities (command-line, environment, cfg, defaults)
|
|
10
|
-
nconf.argv({
|
|
11
|
-
'port': {
|
|
12
|
-
alias: 'service.port'
|
|
13
|
-
},
|
|
14
|
-
'host': {
|
|
15
|
-
alias: 'service.host'
|
|
16
|
-
},
|
|
17
|
-
'redis_host': {
|
|
18
|
-
alias: 'redis.host'
|
|
19
|
-
},
|
|
20
|
-
'redis_port': {
|
|
21
|
-
alias: 'redis.port'
|
|
22
|
-
},
|
|
23
|
-
'redis_url': {
|
|
24
|
-
alias: 'redis.url'
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
nconf.env();
|
|
28
|
-
|
|
29
|
-
// get value of flags defined by any command-line params
|
|
30
|
-
const examples = nconf.get('examples');
|
|
31
|
-
|
|
32
|
-
// Load the main config
|
|
33
|
-
nconf.file(__dirname + '/../config.json');
|
|
34
|
-
|
|
35
|
-
// only override config file if explicitly mentioned in command-line params
|
|
36
|
-
nconf.set('examples:enabled', (examples ? true : nconf.get('examples:enabled')));
|
|
37
|
-
|
|
38
|
-
// load defaults
|
|
39
|
-
const defaults: object = require(__dirname + '/defaults.json');
|
|
40
|
-
nconf.defaults(defaults);
|
|
41
|
-
|
|
42
|
-
nconf.required(['platforms:whitelist', 'platforms:blacklist']);
|
|
43
|
-
|
|
44
|
-
function defaultEnvParams(host: string, port: string | number, prop: string) {
|
|
45
|
-
nconf.set(prop + ':host', host);
|
|
46
|
-
nconf.set(prop + ':port', port);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
defaultEnvParams(
|
|
50
|
-
process.env.HOST || nconf.get('service:host'),
|
|
51
|
-
process.env.PORT || nconf.get('service:port'),
|
|
52
|
-
'service'
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
defaultEnvParams(
|
|
56
|
-
process.env.REDIS_HOST || nconf.get('redis:host'),
|
|
57
|
-
process.env.REDIS_PORT || nconf.get('redis:port'),
|
|
58
|
-
'redis'
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
// allow a redis://user:host:port url, takes precedence
|
|
62
|
-
if (process.env.REDIS_URL) {
|
|
63
|
-
nconf.set('redis:url', process.env.REDIS_URL);
|
|
64
|
-
nconf.clear('redis:host');
|
|
65
|
-
nconf.clear('redis:port');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
get = (key: string): any => nconf.get(key);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const config = new Config();
|
|
72
|
-
export default config;
|