sockethub 4.1.0 → 5.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/bin/sockethub +23 -20
  2. package/coverage/tmp/coverage-15699-1646422276150-0.json +1 -0
  3. package/dist/bootstrap/init.js +1 -1
  4. package/dist/bootstrap/init.js.map +1 -1
  5. package/dist/bootstrap/platforms.js +14 -18
  6. package/dist/janitor.js +11 -5
  7. package/dist/janitor.js.map +1 -1
  8. package/dist/middleware/create-activity-object.js.map +1 -1
  9. package/dist/middleware/expand-activity-stream.js +33 -0
  10. package/dist/middleware/expand-activity-stream.js.map +1 -0
  11. package/dist/middleware/expand-activity-stream.test.data.js +360 -0
  12. package/dist/middleware/expand-activity-stream.test.data.js.map +1 -0
  13. package/dist/middleware/store-credentials.js +1 -1
  14. package/dist/middleware/store-credentials.js.map +1 -1
  15. package/dist/middleware/validate.js +30 -104
  16. package/dist/middleware/validate.js.map +1 -1
  17. package/dist/middleware/validate.test.data.js +151 -111
  18. package/dist/middleware/validate.test.data.js.map +1 -1
  19. package/dist/middleware.js +47 -77
  20. package/dist/middleware.js.map +1 -1
  21. package/dist/platform-instance.js +47 -54
  22. package/dist/platform-instance.js.map +1 -1
  23. package/dist/platform.js +29 -10
  24. package/dist/platform.js.map +1 -1
  25. package/dist/process-manager.js +5 -2
  26. package/dist/process-manager.js.map +1 -1
  27. package/dist/routes.js +3 -5
  28. package/dist/routes.js.map +1 -1
  29. package/dist/sockethub-client.js +2604 -0
  30. package/dist/sockethub-client.js.map +1 -0
  31. package/dist/sockethub-client.min.js +2 -0
  32. package/dist/sockethub-client.min.js.LICENSE.txt +24 -0
  33. package/dist/sockethub.js +67 -36
  34. package/dist/sockethub.js.map +1 -1
  35. package/package.json +40 -36
  36. package/src/bootstrap/init.ts +6 -2
  37. package/src/bootstrap/platforms.js +14 -18
  38. package/src/crypto.ts +3 -3
  39. package/src/janitor.ts +18 -10
  40. package/src/middleware/create-activity-object.ts +1 -2
  41. package/src/middleware/expand-activity-stream.test.data.ts +365 -0
  42. package/src/middleware/expand-activity-stream.test.ts +78 -0
  43. package/src/middleware/expand-activity-stream.ts +27 -0
  44. package/src/middleware/store-credentials.test.ts +12 -12
  45. package/src/middleware/store-credentials.ts +4 -4
  46. package/src/middleware/validate.test.data.ts +154 -120
  47. package/src/middleware/validate.test.ts +7 -10
  48. package/src/middleware/validate.ts +30 -123
  49. package/src/middleware.test.ts +59 -26
  50. package/src/middleware.ts +44 -76
  51. package/src/platform-instance.test.ts +8 -10
  52. package/src/platform-instance.ts +58 -57
  53. package/src/platform.ts +30 -14
  54. package/src/process-manager.ts +7 -4
  55. package/src/routes.ts +3 -6
  56. package/src/serve.ts +1 -1
  57. package/src/sockethub-client.test.ts +235 -0
  58. package/src/sockethub-client.ts +164 -0
  59. package/src/sockethub.ts +75 -68
  60. package/views/examples/dummy.ejs +6 -6
  61. package/views/examples/feeds.ejs +8 -8
  62. package/views/examples/irc.ejs +64 -58
  63. package/views/examples/shared.js +31 -29
  64. package/views/examples/xmpp.ejs +48 -57
  65. package/webpack.minified.config.js +14 -0
  66. package/webpack.normal.config.js +14 -0
  67. package/coverage/tmp/coverage-24546-1630615250805-0.json +0 -1
  68. package/dist/client/sockethub-client.js +0 -171
  69. package/dist/client/sockethub-client.js.map +0 -1
  70. package/src/client/sockethub-client.js +0 -178
  71. package/test/middleware-suite.js +0 -101
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sockethub-client.js","sourceRoot":"/","sources":["sockethub-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
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}));
@@ -0,0 +1,24 @@
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 CHANGED
@@ -1,4 +1,13 @@
1
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
+ };
2
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
13
  };
@@ -8,6 +17,7 @@ const crypto_1 = __importDefault(require("./crypto"));
8
17
  const init_1 = __importDefault(require("./bootstrap/init"));
9
18
  const middleware_1 = __importDefault(require("./middleware"));
10
19
  const create_activity_object_1 = __importDefault(require("./middleware/create-activity-object"));
20
+ const expand_activity_stream_1 = __importDefault(require("./middleware/expand-activity-stream"));
11
21
  const store_credentials_1 = __importDefault(require("./middleware/store-credentials"));
12
22
  const validate_1 = __importDefault(require("./middleware/validate"));
13
23
  const janitor_1 = __importDefault(require("./janitor"));
@@ -16,15 +26,13 @@ const process_manager_1 = __importDefault(require("./process-manager"));
16
26
  const platform_instance_1 = require("./platform-instance");
17
27
  const store_1 = require("./store");
18
28
  const log = (0, debug_1.default)('sockethub:core');
19
- function errorHandler(type, socket, log) {
20
- return function reportError(err, msg) {
21
- log('failure handling ' + type + '. ' + err);
22
- if (typeof msg !== 'object') {
23
- msg = { context: 'error' };
24
- }
25
- msg.error = err;
26
- socket.emit('failure', msg);
27
- };
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;
28
36
  }
29
37
  class Sockethub {
30
38
  constructor() {
@@ -51,48 +59,71 @@ class Sockethub {
51
59
  janitor_1.default.clean(); // start cleanup cycle
52
60
  serve_1.default.start(); // start external services
53
61
  log('registering handlers');
54
- serve_1.default.io.on('connection', this.incomingConnection.bind(this));
62
+ serve_1.default.io.on('connection', this.handleIncomingConnection.bind(this));
55
63
  }
56
64
  removeAllPlatformInstances() {
57
- for (let platform of platform_instance_1.platformInstances.values()) {
58
- platform.destroy();
59
- }
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
+ });
60
70
  }
61
- handleIncomingMessage(socket, sessionLog) {
62
- return (msg, done) => {
63
- const platformInstance = this.processManager.get(msg.context, msg.actor['@id'], socket.id);
64
- const title = `${msg.context}-${(msg['@id']) ? msg['@id'] : this.counter++}`;
65
- sessionLog(`queued to channel ${platformInstance.id}`);
66
- const job = {
67
- title: title,
68
- sessionId: socket.id,
69
- msg: crypto_1.default.encrypt(msg, this.parentSecret1 + this.parentSecret2)
70
- };
71
- platformInstance.queue.add(job);
72
- done(job);
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)
73
77
  };
78
+ return job;
74
79
  }
75
80
  ;
76
- incomingConnection(socket) {
81
+ handleIncomingConnection(socket) {
77
82
  const sessionLog = (0, debug_1.default)('sockethub:core:' + socket.id), // session-specific debug messages
78
83
  sessionSecret = crypto_1.default.randToken(16),
79
84
  // store instance is session-specific
80
85
  store = (0, store_1.getSessionStore)(this.parentId, this.parentSecret1, socket.id, sessionSecret);
81
86
  sessionLog(`socket.io connection`);
82
87
  socket.on('disconnect', () => {
83
- sessionLog('disconnect received from client.');
88
+ sessionLog('disconnect received from client');
84
89
  });
85
- socket.on('credentials', (0, middleware_1.default)(errorHandler('credentials', socket, sessionLog))((0, validate_1.default)('credentials', socket.id), (0, store_credentials_1.default)(store, sessionLog)));
86
- socket.on('message', (0, middleware_1.default)(errorHandler('message', socket, sessionLog))((0, validate_1.default)('message', socket.id), (msg, done) => {
87
- // middleware which attaches the sessionSecret to the message. The platform thread
88
- // must find the credentials on their own using the given sessionSecret, which indicates
89
- // that this specific session (socket connection) has provided credentials.
90
- msg.sessionSecret = sessionSecret;
91
- done(msg);
92
- }, this.handleIncomingMessage(socket, sessionLog)));
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());
93
99
  // when new activity objects are created on the client side, an event is
94
100
  // fired and we receive a copy on the server side.
95
- socket.on('activity-object', (0, middleware_1.default)(errorHandler('message', socket, sessionLog))((0, validate_1.default)('activity-object', socket.id), create_activity_object_1.default));
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());
96
127
  }
97
128
  }
98
129
  exports.default = Sockethub;
@@ -1 +1 @@
1
- {"version":3,"file":"sockethub.js","sourceRoot":"/","sources":["sockethub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sockethub.js","sourceRoot":"/","sources":["sockethub.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sockethub",
3
3
  "description": "A polyglot messaging service",
4
- "version": "4.1.0",
4
+ "version": "5.0.0-alpha.0",
5
5
  "private": false,
6
6
  "author": "Nick Jennings <nick@silverbucket.net>",
7
7
  "license": "LGPL-3.0+",
@@ -34,66 +34,70 @@
34
34
  },
35
35
  "homepage": "https://sockethub.org",
36
36
  "dependencies": {
37
- "activity-streams": "^4.3.8",
37
+ "activity-streams": "^4.4.0-alpha.0",
38
38
  "body-parser": "^1.19.0",
39
- "bull": "^3.20.1",
39
+ "bull": "^4.0.0",
40
40
  "debug": "^4.3.1",
41
41
  "ejs": "^3.0.1",
42
42
  "express": "^4.17.1",
43
- "findup-sync": "^4.0.0",
43
+ "findup-sync": "^5.0.0",
44
44
  "jquery": "^3.4.1",
45
45
  "nconf": "^0.11.2",
46
- "object-hash": "^2.0.1",
46
+ "object-hash": "^3.0.0",
47
47
  "secure-store-redis": "^1.4.7",
48
48
  "socket.io": "^4.0.1",
49
- "sockethub-platform-dummy": "^2.1.1",
50
- "sockethub-platform-feeds": "^2.2.1",
51
- "sockethub-platform-irc": "^3.6.2",
52
- "sockethub-platform-xmpp": "^4.1.0",
53
- "sockethub-schemas": "^2.1.1",
54
- "tv4": "^1.3.0",
49
+ "sockethub-platform-dummy": "^3.0.0-alpha.0",
50
+ "sockethub-platform-feeds": "^3.0.0-alpha.0",
51
+ "sockethub-platform-irc": "^4.0.0-alpha.0",
52
+ "sockethub-platform-xmpp": "^5.0.0-alpha.0",
53
+ "sockethub-schemas": "^3.0.0-alpha.0",
55
54
  "urijs": "^1.19.2"
56
55
  },
57
56
  "scripts": {
58
57
  "compliance": "yarn run lint && yarn run test && yarn run coverage",
59
58
  "test": "c8 -x src/bootstrap -x \"src/**/*.test.*\" mocha -r ts-node/register src/*.test.ts src/**/*.test.ts",
60
- "coverage": "c8 check-coverage --statements 95 --branches 85 --functions 95 --lines 95",
59
+ "coverage": "c8 check-coverage --statements 90 --branches 80 --functions 90 --lines 90",
61
60
  "start": "DEBUG=sockethub* ./bin/sockethub",
62
61
  "dev": "yarn run build && DEBUG=sockethub* ./bin/sockethub --examples",
63
62
  "lint": "eslint \"**/*.ts\" ./bin/sockethub",
64
63
  "lint:fix": "eslint --fix \"**/*.ts\" ./bin/sockethub",
65
64
  "clean": "find . -maxdepth 1 -name dist -exec rm -rv {} +",
66
- "build": "yarn run clean && tsc && cp ./src/defaults.json ./dist/defaults.json && cp src/bootstrap/platforms.js dist/bootstrap/ && tsc --sourceMap --outDir dist/client --allowJs src/client/sockethub-client.js"
65
+ "build": "yarn run clean && yarn run build:server && yarn run build:client",
66
+ "build:server": "tsc && cp ./src/defaults.json ./dist/defaults.json && cp src/bootstrap/platforms.js dist/bootstrap/",
67
+ "build:client": "webpack --config webpack.minified.config.js && webpack --config webpack.normal.config.js"
67
68
  },
68
69
  "engines": {
69
70
  "node": ">= 12.0.0"
70
71
  },
71
72
  "devDependencies": {
72
- "@types/body-parser": "^1.19.0",
73
- "@types/chai": "4.2.21",
74
- "@types/debug": "^4.1.5",
75
- "@types/ejs": "^3.0.0",
76
- "@types/eslint": "^7.2.5",
77
- "@types/express": "^4.17.9",
78
- "@types/jquery": "^3.5.4",
79
- "@types/kue": "^0.11.13",
80
- "@types/mocha": "9.0.0",
81
- "@types/nconf": "^0.10.0",
82
- "@types/node": "^14.14.8",
83
- "@types/object-hash": "^2.1.0",
84
- "@types/tv4": "^1.2.29",
85
- "@types/urijs": "^1.19.13",
86
- "@typescript-eslint/parser": "4.29.3",
87
- "c8": "7.8.0",
88
- "chai": "4.3.4",
89
- "eslint": "7.32.0",
73
+ "@types/body-parser": "1.19.2",
74
+ "@types/chai": "4.3.0",
75
+ "@types/debug": "4.1.7",
76
+ "@types/ejs": "3.1.0",
77
+ "@types/eslint": "8.4.1",
78
+ "@types/express": "4.17.13",
79
+ "@types/jquery": "3.5.13",
80
+ "@types/mocha": "9.1.0",
81
+ "@types/nconf": "0.10.1",
82
+ "@types/node": "17.0.13",
83
+ "@types/object-hash": "2.2.1",
84
+ "@types/proxyquire": "1.3.28",
85
+ "@types/tv4": "1.2.31",
86
+ "@types/urijs": "1.19.18",
87
+ "@typescript-eslint/parser": "5.12.1",
88
+ "c8": "7.11.0",
89
+ "chai": "4.3.6",
90
+ "eslint": "8.9.0",
90
91
  "eslint-cli": "1.1.1",
92
+ "eventemitter2": "6.4.5",
91
93
  "jaribu": "2.2.3",
92
- "mocha": "9.1.0",
94
+ "mocha": "9.2.1",
93
95
  "proxyquire": "2.1.3",
94
- "sinon": "11.1.2",
95
- "ts-node": "10.2.1",
96
- "typescript": "4.4.2"
96
+ "sinon": "13.0.1",
97
+ "ts-node": "10.5.0",
98
+ "typescript": "4.5.5",
99
+ "webpack": "5.69.1",
100
+ "webpack-cli": "4.9.2"
97
101
  },
98
- "gitHead": "04d19f0e24b56af23419f8ba9d264483333a7402"
102
+ "gitHead": "75337bd147d2d61a203a8f222551d3054fcedade"
99
103
  }
@@ -55,7 +55,7 @@ if (config.get('help')) {
55
55
  // eslint-disable-next-line security-node/detect-crlf
56
56
  console.log(' ' + platform.id + ' v' + platform.version);
57
57
  // eslint-disable-next-line security-node/detect-crlf
58
- console.log(' AS @types: ' + platform['@types']);
58
+ console.log(' AS types: ' + platform.types.join(', '));
59
59
  }
60
60
  console.log();
61
61
  process.exit();
@@ -75,8 +75,12 @@ export interface IInitObject {
75
75
  config: {
76
76
  persist?: boolean
77
77
  },
78
+ schemas: {
79
+ credentials?: object,
80
+ messages?: object
81
+ },
78
82
  version: string,
79
- '@types': string
83
+ types: Array<string>
80
84
  }>,
81
85
  }
82
86
 
@@ -5,8 +5,7 @@
5
5
  * platforms, and whitelisting or blacklisting (or neither) based on the
6
6
  * config.
7
7
  */
8
- const tv4 = require('tv4'),
9
- debug = require('debug'),
8
+ const debug = require('debug'),
10
9
  schemas = require('sockethub-schemas'),
11
10
  findup = require('findup-sync');
12
11
 
@@ -36,11 +35,11 @@ function platformIsAccepted(platformName) {
36
35
  }
37
36
 
38
37
  // if the platform schema lists valid types it implements (essentially methods/verbs for
39
- // sockethub to call) the add it to the supported types list.
38
+ // sockethub to call) then add it to the supported types list.
40
39
  function platformListsSupportedTypes(p) {
41
- return ((p.schema.messages.properties) && (p.schema.messages.properties['@type']) &&
42
- (p.schema.messages.properties['@type'].enum) &&
43
- (p.schema.messages.properties['@type'].enum.length > 0));
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));
44
43
  }
45
44
 
46
45
  module.exports = function platformLoad(moduleList) {
@@ -66,10 +65,9 @@ module.exports = function platformLoad(moduleList) {
66
65
  const packageJson = require(path + '/package.json');
67
66
  let types = [];
68
67
 
69
- // validate schema property
70
- if (! tv4.validate(p.schema, schemas.platform)) {
71
- throw new Error(
72
- `${platformName} platform schema failed to validate: ${tv4.error.message}`);
68
+ const err = schemas.validator.validatePlatformSchema(p.schema);
69
+ if (err) {
70
+ throw new Error(`${platformName} ${err}`);
73
71
  } else if (typeof p.config !== 'object') {
74
72
  throw new Error(
75
73
  `${platformName} platform must have a config property that is an object.`);
@@ -77,27 +75,25 @@ module.exports = function platformLoad(moduleList) {
77
75
  if (p.schema.credentials) {
78
76
  // register the platforms credentials schema
79
77
  types.push('credentials');
80
- tv4.addSchema(`http://sockethub.org/schemas/v0/context/${platformName}/credentials`,
81
- p.schema.credentials);
82
78
  } else {
83
79
  p.config.noCredentials = true;
84
80
  }
85
-
86
81
  }
87
82
 
88
- tv4.addSchema(`http://sockethub.org/schemas/v0/context/${platformName}/messages`,
89
- p.schema.messages);
90
-
91
83
  if (platformListsSupportedTypes(p)) {
92
- types = [...types, ...p.schema.messages.properties['@type'].enum];
84
+ types = [...types, ...p.schema.messages.properties.type.enum];
93
85
  }
94
86
 
95
87
  platforms.set(platformName, {
96
88
  id: platformName,
97
89
  moduleName: moduleName,
98
90
  config: p.config,
91
+ schemas: {
92
+ credentials: p.schema.credentials || {},
93
+ messages: p.schema.messages || {}
94
+ },
99
95
  version: packageJson.version,
100
- '@types': types.join(', ')
96
+ types: types
101
97
  });
102
98
  }
103
99
  }
package/src/crypto.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import { randomBytes, createCipheriv, createDecipheriv, createHash } from 'crypto';
2
- import {ActivityObject} from "./sockethub";
2
+ import { ActivityStream } from "./sockethub";
3
3
 
4
4
  const ALGORITHM = 'aes-256-cbc',
5
5
  IV_LENGTH = 16; // For AES, this is always 16
6
6
 
7
7
  class Crypto {
8
8
  constructor() {}
9
- encrypt(json: ActivityObject, secret: string): string {
9
+ encrypt(json: ActivityStream, secret: string): string {
10
10
  const iv = randomBytes(IV_LENGTH);
11
11
  const cipher = createCipheriv(ALGORITHM, Buffer.from(secret), iv);
12
12
  let encrypted = cipher.update(JSON.stringify(json));
@@ -14,7 +14,7 @@ class Crypto {
14
14
  encrypted = Buffer.concat([encrypted, cipher.final()]);
15
15
  return iv.toString('hex') + ':' + encrypted.toString('hex');
16
16
  }
17
- decrypt(text: string, secret: string): ActivityObject {
17
+ decrypt(text: string, secret: string): ActivityStream {
18
18
  let parts = text.split(':');
19
19
  const iv = Buffer.from(parts.shift(), 'hex');
20
20
  const encryptedText = Buffer.from(parts.join(':'), 'hex');
package/src/janitor.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import debug from 'debug';
2
2
 
3
- import { platformInstances } from './platform-instance';
4
- import serve from "./serve";
3
+ import PlatformInstance, { platformInstances } from './platform-instance';
4
+ import serve, { SocketInstance } from "./serve";
5
5
 
6
6
  const rmLog = debug('sockethub:janitor');
7
7
 
@@ -23,15 +23,15 @@ function janitorCycle() {
23
23
  rmLog('initializing resource manager');
24
24
  setInterval(async () => {
25
25
  cycleCount++;
26
- const sockets = await serve.io.fetchSockets();
26
+ const sockets: Array<SocketInstance> = await serve.io.fetchSockets();
27
27
 
28
28
  if (! (cycleCount % 4)) {
29
29
  reportCount++;
30
- rmLog(`sessions: ${sockets.length} instances: ${platformInstances.size}`);
30
+ rmLog(`socket sessions: ${sockets.length} platform instances: ${platformInstances.size}`);
31
31
  }
32
32
 
33
33
  for (let platformInstance of platformInstances.values()) {
34
- removeStaleSessions(platformInstance, sockets);
34
+ removeStaleSocketSessions(platformInstance, sockets);
35
35
  // Static platforms are for global use, not tied to a unique to session / eg. credentials)
36
36
  if ((! platformInstance.global) && (platformInstance.sessions.size === 0)) {
37
37
  removeStalePlatformInstance(platformInstance);
@@ -42,7 +42,7 @@ function janitorCycle() {
42
42
  }, TICK);
43
43
  }
44
44
 
45
- function socketExists(sessionId, sockets) {
45
+ function socketExists(sessionId: string, sockets: Array<SocketInstance>) {
46
46
  for (let socket of sockets) {
47
47
  if (socket.id === sessionId) {
48
48
  return true;
@@ -51,17 +51,25 @@ function socketExists(sessionId, sockets) {
51
51
  return false;
52
52
  }
53
53
 
54
- function removeStaleSessions(platformInstance, sockets) {
55
- for (let sessionId of platformInstance.sessions.values()) {
54
+ function removeSessionCallbacks(platformInstance: PlatformInstance, sessionId: string) {
55
+ for (const key in platformInstance.sessionCallbacks) {
56
+ platformInstance.sessionCallbacks[key].delete(sessionId);
57
+ }
58
+ }
59
+
60
+ function removeStaleSocketSessions(platformInstance: PlatformInstance,
61
+ sockets: Array<SocketInstance>) {
62
+ for (const sessionId of platformInstance.sessions.values()) {
56
63
  if (! socketExists(sessionId, sockets)) {
57
- rmLog('removing stale session reference ' + sessionId + ' in platform instance '
64
+ rmLog('removing stale socket session reference ' + sessionId + ' in platform instance '
58
65
  + platformInstance.id);
59
66
  platformInstance.sessions.delete(sessionId);
67
+ removeSessionCallbacks(platformInstance, sessionId);
60
68
  }
61
69
  }
62
70
  }
63
71
 
64
- function removeStalePlatformInstance(platformInstance) {
72
+ function removeStalePlatformInstance(platformInstance: PlatformInstance) {
65
73
  if (platformInstance.flaggedForTermination) {
66
74
  rmLog(`terminating platform instance ${platformInstance.id}`);
67
75
  platformInstance.destroy(); // terminate
@@ -1,5 +1,4 @@
1
1
  import ActivityStreams from 'activity-streams';
2
- import {ActivityObject} from "../sockethub";
3
2
  import config from "../config";
4
3
  const activity = ActivityStreams(config.get('activity-streams:opts'));
5
4
 
@@ -8,7 +7,7 @@ const activity = ActivityStreams(config.get('activity-streams:opts'));
8
7
  * @param obj
9
8
  * @param done
10
9
  */
11
- export default function createActivityObject(obj: ActivityObject, done: Function) {
10
+ export default function createActivityObject(obj: any, done: Function) {
12
11
  activity.Object.create(obj);
13
12
  done(obj);
14
13
  }