@sockethub/server 5.0.0-alpha.3 → 5.0.0-alpha.6

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 (127) hide show
  1. package/README.md +54 -60
  2. package/bin/sockethub +4 -3
  3. package/package.json +42 -60
  4. package/res/socket.io.js +4908 -0
  5. package/res/sockethub-client.js +602 -0
  6. package/res/sockethub-client.min.js +19 -0
  7. package/sockethub.config.example.json +2 -3
  8. package/src/bootstrap/init.d.ts +20 -7
  9. package/src/bootstrap/init.test.ts +211 -0
  10. package/src/bootstrap/init.ts +152 -75
  11. package/src/bootstrap/load-platforms.ts +151 -0
  12. package/src/config.test.ts +27 -22
  13. package/src/config.ts +82 -78
  14. package/src/defaults.json +24 -16
  15. package/src/index.ts +67 -27
  16. package/src/janitor.test.ts +211 -0
  17. package/src/janitor.ts +145 -77
  18. package/src/listener.ts +151 -57
  19. package/src/middleware/create-activity-object.test.ts +28 -8
  20. package/src/middleware/create-activity-object.ts +17 -8
  21. package/src/middleware/expand-activity-stream.test.data.ts +332 -346
  22. package/src/middleware/expand-activity-stream.test.ts +65 -66
  23. package/src/middleware/expand-activity-stream.ts +29 -19
  24. package/src/middleware/store-credentials.test.ts +74 -62
  25. package/src/middleware/store-credentials.ts +15 -15
  26. package/src/middleware/validate.test.data.ts +240 -242
  27. package/src/middleware/validate.test.ts +39 -78
  28. package/src/middleware/validate.ts +63 -39
  29. package/src/middleware.test.ts +168 -138
  30. package/src/middleware.ts +62 -43
  31. package/src/platform-instance.test.ts +507 -213
  32. package/src/platform-instance.ts +337 -219
  33. package/src/platform.test.ts +375 -0
  34. package/src/platform.ts +306 -139
  35. package/src/process-manager.ts +75 -51
  36. package/src/routes.test.ts +43 -89
  37. package/src/routes.ts +40 -77
  38. package/src/sentry.test.ts +106 -0
  39. package/src/sentry.ts +19 -0
  40. package/src/sockethub.ts +186 -153
  41. package/src/util.ts +5 -0
  42. package/coverage/tmp/coverage-93126-1649152190997-0.json +0 -1
  43. package/dist/bootstrap/init.d.ts +0 -18
  44. package/dist/bootstrap/init.js +0 -63
  45. package/dist/bootstrap/init.js.map +0 -1
  46. package/dist/bootstrap/platforms.js +0 -75
  47. package/dist/common.d.ts +0 -3
  48. package/dist/common.js +0 -20
  49. package/dist/common.js.map +0 -1
  50. package/dist/config.d.ts +0 -6
  51. package/dist/config.js +0 -102
  52. package/dist/config.js.map +0 -1
  53. package/dist/crypto.d.ts +0 -10
  54. package/dist/crypto.js +0 -38
  55. package/dist/crypto.js.map +0 -1
  56. package/dist/defaults.json +0 -28
  57. package/dist/index.d.ts +0 -2
  58. package/dist/index.js +0 -25
  59. package/dist/index.js.map +0 -1
  60. package/dist/janitor.d.ts +0 -15
  61. package/dist/janitor.js +0 -89
  62. package/dist/janitor.js.map +0 -1
  63. package/dist/listener.d.ts +0 -28
  64. package/dist/listener.js +0 -91
  65. package/dist/listener.js.map +0 -1
  66. package/dist/middleware/create-activity-object.d.ts +0 -6
  67. package/dist/middleware/create-activity-object.js +0 -19
  68. package/dist/middleware/create-activity-object.js.map +0 -1
  69. package/dist/middleware/expand-activity-stream.d.ts +0 -2
  70. package/dist/middleware/expand-activity-stream.js +0 -33
  71. package/dist/middleware/expand-activity-stream.js.map +0 -1
  72. package/dist/middleware/expand-activity-stream.test.data.d.ts +0 -480
  73. package/dist/middleware/expand-activity-stream.test.data.js +0 -360
  74. package/dist/middleware/expand-activity-stream.test.data.js.map +0 -1
  75. package/dist/middleware/store-credentials.d.ts +0 -3
  76. package/dist/middleware/store-credentials.js +0 -19
  77. package/dist/middleware/store-credentials.js.map +0 -1
  78. package/dist/middleware/validate.d.ts +0 -2
  79. package/dist/middleware/validate.js +0 -58
  80. package/dist/middleware/validate.js.map +0 -1
  81. package/dist/middleware/validate.test.data.d.ts +0 -532
  82. package/dist/middleware/validate.test.data.js +0 -263
  83. package/dist/middleware/validate.test.data.js.map +0 -1
  84. package/dist/middleware.d.ts +0 -10
  85. package/dist/middleware.js +0 -54
  86. package/dist/middleware.js.map +0 -1
  87. package/dist/platform-instance.d.ts +0 -77
  88. package/dist/platform-instance.js +0 -211
  89. package/dist/platform-instance.js.map +0 -1
  90. package/dist/platform.d.ts +0 -6
  91. package/dist/platform.js +0 -187
  92. package/dist/platform.js.map +0 -1
  93. package/dist/process-manager.d.ts +0 -11
  94. package/dist/process-manager.js +0 -78
  95. package/dist/process-manager.js.map +0 -1
  96. package/dist/routes.d.ts +0 -13
  97. package/dist/routes.js +0 -83
  98. package/dist/routes.js.map +0 -1
  99. package/dist/sockethub.d.ts +0 -39
  100. package/dist/sockethub.js +0 -119
  101. package/dist/sockethub.js.map +0 -1
  102. package/dist/store.d.ts +0 -5
  103. package/dist/store.js +0 -17
  104. package/dist/store.js.map +0 -1
  105. package/src/bootstrap/platforms.js +0 -75
  106. package/src/common.test.ts +0 -54
  107. package/src/common.ts +0 -14
  108. package/src/config.d.ts +0 -2
  109. package/src/crypto.d.ts +0 -5
  110. package/src/crypto.test.ts +0 -41
  111. package/src/crypto.ts +0 -41
  112. package/src/janitor.d.ts +0 -8
  113. package/src/middleware/validate.d.ts +0 -1
  114. package/src/middleware.d.ts +0 -21
  115. package/src/sockethub.d.ts +0 -1
  116. package/src/store.test.ts +0 -28
  117. package/src/store.ts +0 -17
  118. package/test/init-suite.js +0 -41
  119. package/test/queue.functional.test.js +0 -0
  120. package/test/sockethub-suite.js +0 -25
  121. package/tsconfig.json +0 -18
  122. package/views/examples/dummy.ejs +0 -93
  123. package/views/examples/feeds.ejs +0 -90
  124. package/views/examples/irc.ejs +0 -239
  125. package/views/examples/shared.js +0 -72
  126. package/views/examples/xmpp.ejs +0 -191
  127. package/views/index.ejs +0 -17
@@ -1,78 +1,77 @@
1
- import { expect } from 'chai';
1
+ import { describe, expect, it } from "bun:test";
2
2
 
3
- import expandActivityStream from "./expand-activity-stream";
3
+ import expandActivityStream from "./expand-activity-stream.js";
4
4
 
5
- import asObjects from "./expand-activity-stream.test.data";
6
- import ActivityStreams from '@sockethub/activity-streams';
5
+ import { ASFactory } from "@sockethub/activity-streams";
6
+ import asObjects from "./expand-activity-stream.test.data.js";
7
+ import { ActivityStream } from "@sockethub/schemas";
8
+
9
+ const activity = ASFactory();
7
10
 
8
- const activity = ActivityStreams();
9
11
  // register known activity objects
10
12
  [
11
- {
12
- "id":"blah",
13
- "type":"person",
14
- "name":"dood"
15
- },
16
- {
17
- "id":"blah2",
18
- "type":"person",
19
- "name":"bob",
20
- "hello":"there",
21
- "i":[
22
- "am",
23
- "extras"
24
- ]
25
- },
26
- {
27
- "id":"sh-9K3Vk@irc.freenode.net",
28
- "type":"person",
29
- "name":"sh-9K3Vk",
30
- "image":{
31
- "height":250,
32
- "mediaType":"image/jpeg",
33
- "url":"http://example.org/image.jpg",
34
- "width":250
13
+ {
14
+ id: "blah",
15
+ type: "person",
16
+ name: "dood",
17
+ },
18
+ {
19
+ id: "blah2",
20
+ type: "person",
21
+ name: "bob",
22
+ hello: "there",
23
+ i: ["am", "extras"],
24
+ },
25
+ {
26
+ id: "sh-9K3Vk@irc.freenode.net",
27
+ type: "person",
28
+ name: "sh-9K3Vk",
29
+ image: {
30
+ height: 250,
31
+ mediaType: "image/jpeg",
32
+ url: "https://example.org/image.jpg",
33
+ width: 250,
34
+ },
35
+ url: "https://sockethub.org",
36
+ },
37
+ {
38
+ id: "blah3",
39
+ type: "person",
40
+ name: "bob",
41
+ hello: "there",
42
+ i: ["am", "extras"],
35
43
  },
36
- "url":"http://sockethub.org"
37
- },
38
- {
39
- "id":"blah3",
40
- "type":"person",
41
- "name":"bob",
42
- "hello":"there",
43
- "i":[
44
- "am",
45
- "extras"
46
- ]
47
- }
48
44
  ].forEach((obj) => {
49
- activity.Object.create(obj);
45
+ activity.Object.create(obj);
50
46
  });
51
47
 
52
- describe('Middleware: Expand Activity Stream', () => {
53
- describe('AS object expansion', () => {
54
- asObjects.forEach((obj) => {
55
- it(`${obj.type}: ${obj.name}, should ${obj.valid ? 'pass' : 'fail'}`, (done) => {
56
- // @ts-ignore
57
- expandActivityStream(obj.input, (msg) => {
58
- if (obj.output) {
59
- if (obj.output === 'same') {
60
- expect(obj.input).to.eql(msg);
61
- } else {
62
- expect(obj.output).to.eql(msg);
63
- }
64
- }
65
- if (obj.valid) {
66
- expect(msg instanceof Error).to.be.false;
67
- } else {
68
- expect(msg instanceof Error).to.be.true;
69
- if (obj.error) {
70
- expect(obj.error).to.equal(msg.toString());
71
- }
72
- }
73
- done();
48
+ describe("Middleware: Expand Activity Stream", () => {
49
+ describe("AS object expansion", () => {
50
+ asObjects.forEach((obj) => {
51
+ it(`${obj.type}: ${obj.name}, should ${
52
+ obj.valid ? "pass" : "fail"
53
+ }`, (done) => {
54
+ expandActivityStream(obj.input as ActivityStream, (msg) => {
55
+ if (obj.output) {
56
+ if (obj.output === "same") {
57
+ // @ts-ignore
58
+ expect(obj.input).toEqual(msg);
59
+ } else {
60
+ // @ts-ignore
61
+ expect(obj.output).toEqual(msg);
62
+ }
63
+ }
64
+ if (obj.valid) {
65
+ expect(msg instanceof Error).toBeFalse();
66
+ } else {
67
+ expect(msg instanceof Error).toBeTrue();
68
+ if (obj.error) {
69
+ expect(obj.error).toEqual(msg.toString());
70
+ }
71
+ }
72
+ done();
73
+ });
74
+ });
74
75
  });
75
- });
76
76
  });
77
- });
78
77
  });
@@ -1,27 +1,37 @@
1
- import ActivityStreams from '@sockethub/activity-streams';
2
- import { IActivityStream } from "@sockethub/schemas";
1
+ import { ASFactory, type ASFactoryOptions } from "@sockethub/activity-streams";
2
+ import type { ActivityStream } from "@sockethub/schemas";
3
3
 
4
- import config from "../config";
4
+ import config from "../config.js";
5
+ import type { MiddlewareChainInterface } from "../middleware.js";
5
6
 
6
- const activity = ActivityStreams(config.get('activity-streams:opts'));
7
+ const asConfig = config.get(
8
+ "packageConfig:@sockethub/activity-streams",
9
+ ) as ASFactoryOptions;
10
+ asConfig.warnOnUnknownObjectProperties = false;
11
+ asConfig.failOnUnknownObjectProperties = false;
7
12
 
8
- function ensureObject(msg: any) {
9
- return !((typeof msg !== 'object') || (Array.isArray(msg)));
13
+ const activity = ASFactory(asConfig);
14
+
15
+ function ensureObject(msg: unknown) {
16
+ return !(typeof msg !== "object" || Array.isArray(msg));
10
17
  }
11
18
 
12
- export default function expandActivityStream(msg: IActivityStream, done: Function) {
13
- if (! ensureObject(msg)) {
14
- done(new Error(`message received is not an object.`));
15
- } else if (typeof msg.context !== 'string') {
16
- done(new Error('activity stream must contain a context property'));
17
- } else if (typeof msg.type !== 'string') {
18
- done(new Error('activity stream must contain a type property.'));
19
- } else {
20
- msg = activity.Stream(msg);
21
- if (! msg.actor) {
22
- done(new Error('activity stream must contain an actor property.'));
19
+ export default function expandActivityStream(
20
+ msg: ActivityStream,
21
+ done: MiddlewareChainInterface,
22
+ ) {
23
+ if (!ensureObject(msg)) {
24
+ done(new Error("message received is not an object."));
25
+ } else if (typeof msg.context !== "string") {
26
+ done(new Error("activity stream must contain a context property"));
27
+ } else if (typeof msg.type !== "string") {
28
+ done(new Error("activity stream must contain a type property."));
23
29
  } else {
24
- done(msg);
30
+ const msgStream = activity.Stream(msg) as ActivityStream;
31
+ if (!msgStream.actor) {
32
+ done(new Error("activity stream must contain an actor property."));
33
+ } else {
34
+ done(msgStream);
35
+ }
25
36
  }
26
- }
27
37
  }
@@ -1,73 +1,85 @@
1
- import { expect } from 'chai';
2
- import * as sinon from 'sinon';
1
+ import { afterEach, beforeEach, describe, expect, it } from "bun:test";
2
+ import * as sinon from "sinon";
3
3
 
4
- import storeCredentials from "./store-credentials";
4
+ import type { CredentialsObject } from "@sockethub/schemas";
5
+ import storeCredentials from "./store-credentials.js";
5
6
 
6
- const creds = {
7
- "id":"blah",
8
- "type":"credentials",
9
- "context":"dummy",
10
- "actor":{
11
- "id":"dood@irc.freenode.net",
12
- "type":"person",
13
- "name":"dood"
14
- },
15
- "target":{
16
- "id":"irc.freenode.net/service",
17
- "type":"person",
18
- "name":"service"
19
- },
20
- "object":{
21
- "type":"credentials"
22
- }
7
+ const creds: CredentialsObject = {
8
+ type: "credentials",
9
+ context: "dummy",
10
+ actor: {
11
+ id: "dood@irc.freenode.net",
12
+ type: "person",
13
+ name: "dood",
14
+ },
15
+ target: {
16
+ id: "irc.freenode.net/service",
17
+ type: "person",
18
+ name: "service",
19
+ },
20
+ object: {
21
+ type: "credentials",
22
+ },
23
23
  };
24
24
 
25
- describe('Middleware: storeCredentials', () => {
26
- let storeSuccess: any, storeError: any, saveErrorFake: any,
27
- saveSuccessFake: any, sessionLogStub: any;
25
+ describe("Middleware: storeCredentials", () => {
26
+ let storeSuccess: any,
27
+ storeError: any,
28
+ saveErrorFake: any,
29
+ saveSuccessFake: any;
28
30
 
29
- beforeEach(() => {
30
- storeSuccess = {
31
- save: (id: any, creds: any, cb: Function) => {
32
- cb();
33
- }
34
- };
35
- storeError = {
36
- save: (id: any, creds: any, cb: Function) => {
37
- cb('some error');
38
- }
39
- };
40
- saveSuccessFake = sinon.replace(storeSuccess, 'save', sinon.fake(storeSuccess.save));
41
- saveErrorFake = sinon.replace(storeError, 'save', sinon.fake(storeError.save));
42
- sessionLogStub = sinon.stub();
43
- });
31
+ beforeEach(() => {
32
+ storeSuccess = {
33
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
34
+ save: async (id: any, creds: any) => {
35
+ return Promise.resolve();
36
+ },
37
+ };
38
+ storeError = {
39
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
40
+ save: (id: any, creds: any): Promise<void> => {
41
+ throw new Error("some error");
42
+ },
43
+ };
44
+ saveSuccessFake = sinon.replace(
45
+ storeSuccess,
46
+ "save",
47
+ sinon.fake(storeSuccess.save),
48
+ );
49
+ saveErrorFake = sinon.replace(
50
+ storeError,
51
+ "save",
52
+ sinon.fake(storeError.save),
53
+ );
54
+ });
44
55
 
45
- afterEach(() => {
46
- sinon.reset();
47
- });
56
+ afterEach(() => {
57
+ sinon.reset();
58
+ });
48
59
 
49
- it('returns a middleware handler', () => {
50
- const sc = storeCredentials(storeSuccess, sessionLogStub);
51
- expect(typeof sc).to.equal('function');
52
- expect(saveSuccessFake.callCount).to.equal(0);
53
- expect(sessionLogStub.callCount).to.equal(0);
54
- });
60
+ it("returns a middleware handler", () => {
61
+ const sc = storeCredentials(storeSuccess);
62
+ expect(typeof sc).toEqual("function");
63
+ expect(saveSuccessFake.callCount).toEqual(0);
64
+ });
55
65
 
56
- it('successfully store credentials', () => {
57
- const sc = storeCredentials(storeSuccess, sessionLogStub);
58
- sc(creds, (err: any) => {
59
- expect(saveSuccessFake.callCount).to.equal(1);
60
- expect(saveSuccessFake.firstArg).to.equal(creds.actor.id);
61
- expect(err).to.be.undefined;
66
+ it("successfully stores credentials", (done) => {
67
+ const sc = storeCredentials(storeSuccess);
68
+ sc(creds as CredentialsObject, (err: any) => {
69
+ expect(saveSuccessFake.callCount).toEqual(1);
70
+ expect(saveSuccessFake.firstArg).toEqual(creds.actor.id);
71
+ expect(err).toEqual(creds);
72
+ done();
73
+ });
62
74
  });
63
- });
64
75
 
65
- it('handle error while storing credentials', () => {
66
- const sc = storeCredentials(storeError, sessionLogStub);
67
- sc(creds, (err: any) => {
68
- expect(saveErrorFake.callCount).to.equal(1);
69
- expect(saveErrorFake.firstArg).to.equal(creds.actor.id);
70
- expect(err).to.eql('some error');
76
+ it("handle error while storing credentials", (done) => {
77
+ const sc = storeCredentials(storeError);
78
+ sc(creds as CredentialsObject, (err: any) => {
79
+ expect(saveErrorFake.callCount).toEqual(1);
80
+ expect(saveErrorFake.firstArg).toEqual(creds.actor.id);
81
+ expect(err.toString()).toEqual("Error: some error");
82
+ done();
83
+ });
71
84
  });
72
- });
73
- });
85
+ });
@@ -1,16 +1,16 @@
1
- import { IActivityStream } from "@sockethub/schemas";
2
- import { ISecureStoreInstance } from "../store";
1
+ import type { CredentialsStoreInterface } from "@sockethub/data-layer";
2
+ import type { CredentialsObject } from "@sockethub/schemas";
3
3
 
4
- export default function storeCredentials(store: ISecureStoreInstance, sessionLog: Function) {
5
- return (creds: IActivityStream, done: Function) => {
6
- store.save(creds.actor.id, creds, (err) => {
7
- if (err) {
8
- sessionLog('error saving credentials to store ' + err);
9
- done(err);
10
- } else {
11
- sessionLog('credentials encrypted and saved');
12
- done();
13
- }
14
- });
15
- };
16
- };
4
+ import type { MiddlewareChainInterface } from "../middleware.js";
5
+
6
+ export default function storeCredentials(store: CredentialsStoreInterface) {
7
+ return (creds: CredentialsObject, done: MiddlewareChainInterface) => {
8
+ try {
9
+ store.save(creds.actor.id, creds).then(() => {
10
+ done(creds);
11
+ });
12
+ } catch (err) {
13
+ done(err);
14
+ }
15
+ };
16
+ }