@science-corporation/synapse 0.13.0 → 2.0.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 (88) hide show
  1. package/README.md +4 -2
  2. package/dist/api/api.d.ts +711 -71
  3. package/dist/api/api.js +5532 -4083
  4. package/dist/api/api.js.map +1 -1
  5. package/dist/api/proto.json +122 -32
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +4 -2
  8. package/dist/config.js.map +1 -1
  9. package/dist/demo.js +125 -32
  10. package/dist/demo.js.map +1 -1
  11. package/dist/device.d.ts +6 -0
  12. package/dist/device.d.ts.map +1 -1
  13. package/dist/device.js +25 -0
  14. package/dist/device.js.map +1 -1
  15. package/dist/nodes/index.d.ts +2 -1
  16. package/dist/nodes/index.d.ts.map +1 -1
  17. package/dist/nodes/index.js +5 -3
  18. package/dist/nodes/index.js.map +1 -1
  19. package/dist/nodes/spike_binner.d.ts +11 -0
  20. package/dist/nodes/{spike_detect.d.ts.map → spike_binner.d.ts.map} +1 -1
  21. package/dist/nodes/spike_binner.js +28 -0
  22. package/dist/nodes/{spike_detect.js.map → spike_binner.js.map} +1 -1
  23. package/dist/nodes/spike_detector.d.ts +11 -0
  24. package/dist/nodes/spike_detector.d.ts.map +1 -0
  25. package/dist/nodes/{spike_detect.js → spike_detector.js} +9 -9
  26. package/dist/nodes/spike_detector.js.map +1 -0
  27. package/dist/nodes/stream_out.d.ts +12 -5
  28. package/dist/nodes/stream_out.d.ts.map +1 -1
  29. package/dist/nodes/stream_out.js +58 -40
  30. package/dist/nodes/stream_out.js.map +1 -1
  31. package/dist/utils/ip.d.ts +2 -0
  32. package/dist/utils/ip.d.ts.map +1 -0
  33. package/dist/utils/ip.js +52 -0
  34. package/dist/utils/ip.js.map +1 -0
  35. package/package.json +6 -5
  36. package/scripts/postinstall.sh +50 -10
  37. package/src/api/api.d.ts +711 -71
  38. package/src/api/api.js +5671 -4121
  39. package/src/api/proto.json +122 -32
  40. package/src/config.ts +4 -2
  41. package/src/demo.ts +20 -8
  42. package/src/device.ts +34 -1
  43. package/src/nodes/index.ts +2 -1
  44. package/src/nodes/spike_binner.ts +30 -0
  45. package/src/nodes/spike_detector.ts +30 -0
  46. package/src/nodes/stream_out.ts +67 -50
  47. package/src/utils/ip.ts +35 -0
  48. package/synapse-api/.github/pull_request_template.md +10 -0
  49. package/synapse-api/README.md +1 -1
  50. package/synapse-api/api/datatype.proto +1 -0
  51. package/synapse-api/api/node.proto +6 -3
  52. package/synapse-api/api/nodes/spike_binner.proto +7 -0
  53. package/synapse-api/api/nodes/spike_detector.proto +19 -0
  54. package/synapse-api/api/nodes/stream_out.proto +31 -1
  55. package/synapse-api/api/query.proto +19 -1
  56. package/synapse-api/api/synapse.proto +1 -0
  57. package/dist/api-science-device/api.d.ts +0 -3
  58. package/dist/api-science-device/api.d.ts.map +0 -1
  59. package/dist/api-science-device/api.js +0 -3822
  60. package/dist/api-science-device/api.js.map +0 -1
  61. package/dist/api-science-device/proto.json +0 -258
  62. package/dist/nodejs.d.ts +0 -8
  63. package/dist/nodejs.d.ts.map +0 -1
  64. package/dist/nodejs.js +0 -32
  65. package/dist/nodejs.js.map +0 -1
  66. package/dist/nodes/spike_detect.d.ts +0 -11
  67. package/dist/science-device-api/api.d.ts +0 -3
  68. package/dist/science-device-api/api.d.ts.map +0 -1
  69. package/dist/science-device-api/api.js +0 -3822
  70. package/dist/science-device-api/api.js.map +0 -1
  71. package/dist/types/index.d.ts +0 -3
  72. package/dist/types/index.d.ts.map +0 -1
  73. package/dist/types/index.js +0 -19
  74. package/dist/types/index.js.map +0 -1
  75. package/dist/types.d.ts +0 -5
  76. package/dist/types.d.ts.map +0 -1
  77. package/dist/types.js +0 -19
  78. package/dist/types.js.map +0 -1
  79. package/dist/utils/device-management.d.ts +0 -37
  80. package/dist/utils/device-management.d.ts.map +0 -1
  81. package/dist/utils/device-management.js +0 -126
  82. package/dist/utils/device-management.js.map +0 -1
  83. package/dist/utils/ndtp.d.ts +0 -40
  84. package/dist/utils/ndtp.d.ts.map +0 -1
  85. package/dist/utils/ndtp.js +0 -140
  86. package/dist/utils/ndtp.js.map +0 -1
  87. package/src/nodes/spike_detect.ts +0 -30
  88. package/synapse-api/api/nodes/spike_detect.proto +0 -16
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.StreamOut = exports.StreamIn = exports.SpikeSource = exports.SpikeDetect = exports.SpectralFilter = exports.OpticalStimulation = exports.ElectricalStimulation = exports.DiskWriter = exports.BroadbandSource = void 0;
6
+ exports.StreamOut = exports.StreamIn = exports.SpikeSource = exports.SpikeDetector = exports.SpikeBinner = exports.SpectralFilter = exports.OpticalStimulation = exports.ElectricalStimulation = exports.DiskWriter = exports.BroadbandSource = void 0;
7
7
  var broadband_source_1 = require("./broadband_source");
8
8
  Object.defineProperty(exports, "BroadbandSource", { enumerable: true, get: function () { return __importDefault(broadband_source_1).default; } });
9
9
  var disk_writer_1 = require("./disk_writer");
@@ -14,8 +14,10 @@ var optical_stimulation_1 = require("./optical_stimulation");
14
14
  Object.defineProperty(exports, "OpticalStimulation", { enumerable: true, get: function () { return __importDefault(optical_stimulation_1).default; } });
15
15
  var spectral_filter_1 = require("./spectral_filter");
16
16
  Object.defineProperty(exports, "SpectralFilter", { enumerable: true, get: function () { return __importDefault(spectral_filter_1).default; } });
17
- var spike_detect_1 = require("./spike_detect");
18
- Object.defineProperty(exports, "SpikeDetect", { enumerable: true, get: function () { return __importDefault(spike_detect_1).default; } });
17
+ var spike_binner_1 = require("./spike_binner");
18
+ Object.defineProperty(exports, "SpikeBinner", { enumerable: true, get: function () { return __importDefault(spike_binner_1).default; } });
19
+ var spike_detector_1 = require("./spike_detector");
20
+ Object.defineProperty(exports, "SpikeDetector", { enumerable: true, get: function () { return __importDefault(spike_detector_1).default; } });
19
21
  var spike_source_1 = require("./spike_source");
20
22
  Object.defineProperty(exports, "SpikeSource", { enumerable: true, get: function () { return __importDefault(spike_source_1).default; } });
21
23
  var stream_in_1 = require("./stream_in");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nodes/index.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAgE;AAAvD,oIAAA,OAAO,OAAmB;AACnC,6CAAsD;AAA7C,0HAAA,OAAO,OAAc;AAC9B,mEAA4E;AAAnE,gJAAA,OAAO,OAAyB;AACzC,6DAAsE;AAA7D,0IAAA,OAAO,OAAsB;AACtC,qDAA8D;AAArD,kIAAA,OAAO,OAAkB;AAClC,+CAAwD;AAA/C,4HAAA,OAAO,OAAe;AAC/B,+CAAwD;AAA/C,4HAAA,OAAO,OAAe;AAC/B,yCAAkD;AAAzC,sHAAA,OAAO,OAAY;AAC5B,2CAAoD;AAA3C,wHAAA,OAAO,OAAa"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nodes/index.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAgE;AAAvD,oIAAA,OAAO,OAAmB;AACnC,6CAAsD;AAA7C,0HAAA,OAAO,OAAc;AAC9B,mEAA4E;AAAnE,gJAAA,OAAO,OAAyB;AACzC,6DAAsE;AAA7D,0IAAA,OAAO,OAAsB;AACtC,qDAA8D;AAArD,kIAAA,OAAO,OAAkB;AAClC,+CAAwD;AAA/C,4HAAA,OAAO,OAAe;AAC/B,mDAA4D;AAAnD,gIAAA,OAAO,OAAiB;AACjC,+CAAwD;AAA/C,4HAAA,OAAO,OAAe;AAC/B,yCAAkD;AAAzC,sHAAA,OAAO,OAAY;AAC5B,2CAAoD;AAA3C,wHAAA,OAAO,OAAa"}
@@ -0,0 +1,11 @@
1
+ import { synapse } from "../api/api";
2
+ import Node from "../node";
3
+ declare class SpikeBinner extends Node {
4
+ type: synapse.NodeType;
5
+ config: synapse.ISpikeBinnerConfig;
6
+ constructor(config?: synapse.ISpikeBinnerConfig);
7
+ toProto(): synapse.NodeConfig;
8
+ static fromProto(proto: synapse.INodeConfig): SpikeBinner;
9
+ }
10
+ export default SpikeBinner;
11
+ //# sourceMappingURL=spike_binner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spike_detect.d.ts","sourceRoot":"","sources":["../../src/nodes/spike_detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,cAAM,WAAY,SAAQ,IAAI;IAC5B,IAAI,mBAAiC;IACrC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC;gBAEvB,MAAM,GAAE,OAAO,CAAC,kBAAuB;IAMnD,OAAO,IAAI,OAAO,CAAC,UAAU;IAM7B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,WAAW;CAQ1D;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"spike_binner.d.ts","sourceRoot":"","sources":["../../src/nodes/spike_binner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,cAAM,WAAY,SAAQ,IAAI;IAC5B,IAAI,mBAAiC;IACrC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC;gBAEvB,MAAM,GAAE,OAAO,CAAC,kBAAuB;IAMnD,OAAO,IAAI,OAAO,CAAC,UAAU;IAM7B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,WAAW;CAQ1D;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,28 @@
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
+ const api_1 = require("../api/api");
7
+ const node_1 = __importDefault(require("../node"));
8
+ class SpikeBinner extends node_1.default {
9
+ constructor(config = {}) {
10
+ super();
11
+ this.type = api_1.synapse.NodeType.kSpikeBinner;
12
+ this.config = config;
13
+ }
14
+ toProto() {
15
+ return super.toProto({
16
+ spikeBinner: this.config,
17
+ });
18
+ }
19
+ static fromProto(proto) {
20
+ const { spikeBinner } = proto;
21
+ if (!spikeBinner) {
22
+ throw new Error("Invalid config, missing spikeBinner");
23
+ }
24
+ return new SpikeBinner(proto.spikeBinner);
25
+ }
26
+ }
27
+ exports.default = SpikeBinner;
28
+ //# sourceMappingURL=spike_binner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spike_detect.js","sourceRoot":"","sources":["../../src/nodes/spike_detect.ts"],"names":[],"mappings":";;;;;AAAA,oCAAqC;AACrC,mDAA2B;AAE3B,MAAM,WAAY,SAAQ,cAAI;IAI5B,YAAY,SAAqC,EAAE;QACjD,KAAK,EAAE,CAAC;QAJV,SAAI,GAAG,aAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAMnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,WAAW,EAAE,IAAI,CAAC,MAAM;SACzB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAA0B;QACzC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,kBAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"spike_binner.js","sourceRoot":"","sources":["../../src/nodes/spike_binner.ts"],"names":[],"mappings":";;;;;AAAA,oCAAqC;AACrC,mDAA2B;AAE3B,MAAM,WAAY,SAAQ,cAAI;IAI5B,YAAY,SAAqC,EAAE;QACjD,KAAK,EAAE,CAAC;QAJV,SAAI,GAAG,aAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAMnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,WAAW,EAAE,IAAI,CAAC,MAAM;SACzB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAA0B;QACzC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { synapse } from "../api/api";
2
+ import Node from "../node";
3
+ declare class SpikeDetector extends Node {
4
+ type: synapse.NodeType;
5
+ config: synapse.ISpikeDetectorConfig;
6
+ constructor(config?: synapse.ISpikeDetectorConfig);
7
+ toProto(): synapse.NodeConfig;
8
+ static fromProto(proto: synapse.INodeConfig): SpikeDetector;
9
+ }
10
+ export default SpikeDetector;
11
+ //# sourceMappingURL=spike_detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spike_detector.d.ts","sourceRoot":"","sources":["../../src/nodes/spike_detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,cAAM,aAAc,SAAQ,IAAI;IAC9B,IAAI,mBAAmC;IACvC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC;gBAEzB,MAAM,GAAE,OAAO,CAAC,oBAAyB;IAMrD,OAAO,IAAI,OAAO,CAAC,UAAU;IAM7B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,aAAa;CAQ5D;AAED,eAAe,aAAa,CAAC"}
@@ -5,24 +5,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const api_1 = require("../api/api");
7
7
  const node_1 = __importDefault(require("../node"));
8
- class SpikeDetect extends node_1.default {
8
+ class SpikeDetector extends node_1.default {
9
9
  constructor(config = {}) {
10
10
  super();
11
- this.type = api_1.synapse.NodeType.kSpikeDetect;
11
+ this.type = api_1.synapse.NodeType.kSpikeDetector;
12
12
  this.config = config;
13
13
  }
14
14
  toProto() {
15
15
  return super.toProto({
16
- spikeDetect: this.config,
16
+ spikeDetector: this.config,
17
17
  });
18
18
  }
19
19
  static fromProto(proto) {
20
- const { spikeDetect } = proto;
21
- if (!spikeDetect) {
22
- throw new Error("Invalid config, missing spikeDetect");
20
+ const { spikeDetector } = proto;
21
+ if (!spikeDetector) {
22
+ throw new Error("Invalid config, missing spikeDetector");
23
23
  }
24
- return new SpikeDetect(proto.spikeDetect);
24
+ return new SpikeDetector(proto.spikeDetector);
25
25
  }
26
26
  }
27
- exports.default = SpikeDetect;
28
- //# sourceMappingURL=spike_detect.js.map
27
+ exports.default = SpikeDetector;
28
+ //# sourceMappingURL=spike_detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spike_detector.js","sourceRoot":"","sources":["../../src/nodes/spike_detector.ts"],"names":[],"mappings":";;;;;AAAA,oCAAqC;AACrC,mDAA2B;AAE3B,MAAM,aAAc,SAAQ,cAAI;IAI9B,YAAY,SAAuC,EAAE;QACnD,KAAK,EAAE,CAAC;QAJV,SAAI,GAAG,aAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAMrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,aAAa,EAAE,IAAI,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAA0B;QACzC,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;CACF;AAED,kBAAe,aAAa,CAAC"}
@@ -1,14 +1,21 @@
1
1
  import dgram from "dgram";
2
2
  import { synapse } from "../api/api";
3
3
  import Node from "../node";
4
+ import { Status } from "../utils/status";
4
5
  declare class StreamOut extends Node {
5
6
  type: synapse.NodeType;
6
- config: synapse.IStreamOutConfig;
7
- _socket: dgram.Socket;
7
+ _destinationAddress: string;
8
+ _destinationPort: number;
9
+ _label: string;
10
+ _socket: dgram.Socket | null;
8
11
  _onMessage: ((msg: Buffer) => void) | null;
9
- constructor(config: synapse.IStreamOutConfig, onMessage?: (msg: Buffer) => void);
10
- start(): Promise<boolean>;
11
- stop(): Promise<boolean>;
12
+ _onError: ((error: Error) => void) | null;
13
+ constructor(config: synapse.IStreamOutConfig, callbacks?: {
14
+ onMessage?: (msg: Buffer) => void;
15
+ onError?: (error: Error) => void;
16
+ });
17
+ start(): Promise<Status>;
18
+ stop(): Promise<Status>;
12
19
  toProto(): synapse.NodeConfig;
13
20
  static fromProto(proto: synapse.INodeConfig): StreamOut;
14
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stream_out.d.ts","sourceRoot":"","sources":["../../src/nodes/stream_out.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,IAAI,MAAM,SAAS,CAAC;AAI3B,cAAM,SAAU,SAAQ,IAAI;IAC1B,IAAI,mBAA+B;IACnC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC;IACjC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;IACtB,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;gBAE/B,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAOzE,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA+CzB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ9B,OAAO,IAAI,OAAO,CAAC,UAAU;IAM7B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,SAAS;CAQxD;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"stream_out.d.ts","sourceRoot":"","sources":["../../src/nodes/stream_out.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAc,MAAM,iBAAiB,CAAC;AAMrD,cAAM,SAAU,SAAQ,IAAI;IAC1B,IAAI,mBAA+B;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;gBAGxC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAChC,SAAS,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;KAAE;IAY/E,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA2CxB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ7B,OAAO,IAAI,OAAO,CAAC,UAAU;IAc7B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,SAAS;CAQxD;AAED,eAAe,SAAS,CAAC"}
@@ -15,51 +15,62 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const dgram_1 = __importDefault(require("dgram"));
16
16
  const api_1 = require("../api/api");
17
17
  const node_1 = __importDefault(require("../node"));
18
- const kMulticastTTL = 3;
18
+ const status_1 = require("../utils/status");
19
+ const ip_1 = require("../utils/ip");
20
+ const kDefaultStreamOutPort = 50038;
21
+ const kSocketBufferSize = 5 * 1024 * 1024; // 5MB
19
22
  class StreamOut extends node_1.default {
20
- constructor(config, onMessage) {
23
+ constructor(config, callbacks) {
21
24
  super();
22
25
  this.type = api_1.synapse.NodeType.kStreamOut;
23
- this.config = config;
24
- this._onMessage = onMessage;
26
+ const { udpUnicast } = config || {};
27
+ this._destinationAddress = udpUnicast === null || udpUnicast === void 0 ? void 0 : udpUnicast.destinationAddress;
28
+ this._destinationPort = (udpUnicast === null || udpUnicast === void 0 ? void 0 : udpUnicast.destinationPort) || kDefaultStreamOutPort;
29
+ this._label = config.label;
30
+ this._onMessage = callbacks === null || callbacks === void 0 ? void 0 : callbacks.onMessage;
31
+ this._onError = callbacks === null || callbacks === void 0 ? void 0 : callbacks.onError;
25
32
  }
26
33
  start() {
27
34
  return __awaiter(this, void 0, void 0, function* () {
28
- if (this.device === null) {
29
- return false;
30
- }
31
- const socket = this.device.sockets.find((s) => s.nodeId === this.id);
32
- if (!socket) {
33
- return false;
34
- }
35
- const split = socket.bind.split(":");
36
- if (split.length !== 2) {
37
- return false;
38
- }
39
- const port = parseInt(split[1]);
40
- if (isNaN(port)) {
41
- return false;
42
- }
43
- const host = this.config.multicastGroup;
44
- if (!host) {
45
- return false;
46
- }
47
- this._socket = dgram_1.default.createSocket("udp4");
48
- this._socket.on("error", () => { });
49
- this._socket.on("message", (msg) => {
50
- var _a;
51
- (_a = this._onMessage) === null || _a === void 0 ? void 0 : _a.call(this, msg);
52
- });
53
- this._socket.bind(port, host, () => {
54
- if (!this._socket) {
55
- return;
35
+ try {
36
+ this._socket = dgram_1.default.createSocket("udp4");
37
+ if (!this._destinationAddress) {
38
+ try {
39
+ const ip = yield (0, ip_1.getClientIp)();
40
+ if (!ip) {
41
+ return new status_1.Status(status_1.StatusCode.INTERNAL, "failed to get client ip");
42
+ }
43
+ this._destinationAddress = ip;
44
+ }
45
+ catch (e) {
46
+ console.error(e);
47
+ return new status_1.Status(status_1.StatusCode.INTERNAL, `failed to get client ip: ${e}`);
48
+ }
56
49
  }
57
- if (this.config.multicastGroup) {
58
- this._socket.setMulticastTTL(kMulticastTTL);
59
- this._socket.addMembership(this.config.multicastGroup);
50
+ if (!this._destinationPort) {
51
+ this._destinationPort = kDefaultStreamOutPort;
60
52
  }
61
- });
62
- return true;
53
+ this._socket.on("message", (msg) => {
54
+ var _a;
55
+ (_a = this._onMessage) === null || _a === void 0 ? void 0 : _a.call(this, msg);
56
+ });
57
+ this._socket.on("error", (error) => {
58
+ var _a;
59
+ (_a = this._onError) === null || _a === void 0 ? void 0 : _a.call(this, error);
60
+ });
61
+ yield new Promise((resolve, reject) => {
62
+ if (!this._socket)
63
+ return reject(new Error("Socket is null"));
64
+ this._socket.bind(this._destinationPort, this._destinationAddress, () => {
65
+ this._socket.setRecvBufferSize(kSocketBufferSize);
66
+ resolve();
67
+ });
68
+ });
69
+ return new status_1.Status();
70
+ }
71
+ catch (e) {
72
+ return new status_1.Status(status_1.StatusCode.INTERNAL, `failed to start stream out node: ${e}`);
73
+ }
63
74
  });
64
75
  }
65
76
  stop() {
@@ -67,12 +78,19 @@ class StreamOut extends node_1.default {
67
78
  if (this._socket) {
68
79
  this._socket.close();
69
80
  }
70
- return true;
81
+ return new status_1.Status();
71
82
  });
72
83
  }
73
84
  toProto() {
85
+ const config = {
86
+ label: this._label,
87
+ udpUnicast: {
88
+ destinationAddress: this._destinationAddress,
89
+ destinationPort: this._destinationPort,
90
+ },
91
+ };
74
92
  return super.toProto({
75
- streamOut: this.config,
93
+ streamOut: config,
76
94
  });
77
95
  }
78
96
  static fromProto(proto) {
@@ -80,7 +98,7 @@ class StreamOut extends node_1.default {
80
98
  if (!streamOut) {
81
99
  throw new Error("Invalid config, missing streamOut");
82
100
  }
83
- return new StreamOut(streamOut);
101
+ return new StreamOut(streamOut, undefined);
84
102
  }
85
103
  }
86
104
  exports.default = StreamOut;
@@ -1 +1 @@
1
- {"version":3,"file":"stream_out.js","sourceRoot":"","sources":["../../src/nodes/stream_out.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,kDAA0B;AAE1B,oCAAqC;AACrC,mDAA2B;AAE3B,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,SAAU,SAAQ,cAAI;IAM1B,YAAY,MAAgC,EAAE,SAAiC;QAC7E,KAAK,EAAE,CAAC;QANV,SAAI,GAAG,aAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAQjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEK,KAAK;;YACT,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YACxC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,OAAO,GAAG,eAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE1C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE;;gBACzC,MAAA,IAAI,CAAC,UAAU,qDAAG,GAAG,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO;gBACT,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;oBAC5C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEK,IAAI;;YACR,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,SAAS,EAAE,IAAI,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAA0B;QACzC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;CACF;AAED,kBAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"stream_out.js","sourceRoot":"","sources":["../../src/nodes/stream_out.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const getClientIp: () => Promise<string | null>;
2
+ //# sourceMappingURL=ip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip.d.ts","sourceRoot":"","sources":["../../src/utils/ip.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,MAAM,GAAG,IAAI,CAgCzD,CAAC"}
@@ -0,0 +1,52 @@
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
+ exports.getClientIp = void 0;
16
+ const dgram_1 = __importDefault(require("dgram"));
17
+ const getClientIp = () => __awaiter(void 0, void 0, void 0, function* () {
18
+ return new Promise((resolve, reject) => {
19
+ try {
20
+ const socket = dgram_1.default.createSocket("udp4");
21
+ socket.on("error", (err) => {
22
+ console.error(err);
23
+ socket.close();
24
+ reject(err);
25
+ });
26
+ socket.bind(0, () => {
27
+ try {
28
+ socket.connect(53, "8.8.8.8", () => {
29
+ try {
30
+ const address = socket.address();
31
+ socket.close();
32
+ resolve(address.address);
33
+ }
34
+ catch (e) {
35
+ socket.close();
36
+ reject(e);
37
+ }
38
+ });
39
+ }
40
+ catch (e) {
41
+ socket.close();
42
+ reject(e);
43
+ }
44
+ });
45
+ }
46
+ catch (e) {
47
+ reject(e);
48
+ }
49
+ });
50
+ });
51
+ exports.getClientIp = getClientIp;
52
+ //# sourceMappingURL=ip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip.js","sourceRoot":"","sources":["../../src/utils/ip.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAEnB,MAAM,WAAW,GAAG,GAAiC,EAAE;IAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,eAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE1C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE;gBAClB,IAAI,CAAC;oBACH,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE;wBACjC,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;4BACjC,MAAM,CAAC,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBAC3B,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,MAAM,CAAC,KAAK,EAAE,CAAC;4BACf,MAAM,CAAC,CAAC,CAAC,CAAC;wBACZ,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAA,CAAC;AAhCW,QAAA,WAAW,eAgCtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@science-corporation/synapse",
3
- "version": "0.13.0",
3
+ "version": "2.0.0",
4
4
  "description": "Client library and CLI for the Synapse API",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/index.js",
@@ -22,12 +22,12 @@
22
22
  "synapse-api"
23
23
  ],
24
24
  "scripts": {
25
- "build": "./scripts/build.sh",
26
- "clean": "rm -rf dist src/api",
25
+ "build": "bash ./scripts/build.sh",
26
+ "clean": "rimraf dist src/api",
27
27
  "dist": "npm run generate && npm run build",
28
- "generate": "./scripts/generate.sh",
28
+ "generate": "bash ./scripts/generate.sh",
29
29
  "lint": "tsc --noEmit && eslint .",
30
- "postinstall": "./scripts/postinstall.sh && npm run dist",
30
+ "postinstall": "bash ./scripts/postinstall.sh && npm run dist",
31
31
  "test": "tsc --noEmit && jest"
32
32
  },
33
33
  "repository": {
@@ -54,6 +54,7 @@
54
54
  "eslint-import-resolver-typescript": "^3.7.0",
55
55
  "eslint-plugin-import": "^2.31.0",
56
56
  "jest": "^29.7.0",
57
+ "rimraf": "^5.0.5",
57
58
  "ts-jest": "^29.2.5",
58
59
  "typescript": "^5.5.2"
59
60
  },
@@ -1,5 +1,19 @@
1
1
  #!/bin/bash
2
2
 
3
+ # Platform detection
4
+ IS_WINDOWS=false
5
+ if [ "$OS" = "Windows_NT" ] || [ "$OSTYPE" = "msys" ] || [ "$OSTYPE" = "cygwin" ]; then
6
+ IS_WINDOWS=true
7
+ fi
8
+
9
+ # If running on Windows, ensure we're using bash
10
+ if [ "$IS_WINDOWS" = true ]; then
11
+ if ! command -v bash >/dev/null 2>&1; then
12
+ echo "Error: bash is required to run this script on Windows"
13
+ exit 1
14
+ fi
15
+ fi
16
+
3
17
  echo "Postinstall - downloading synapse-api"
4
18
 
5
19
  # If synapse-api directory already exists, skip download
@@ -22,7 +36,6 @@ if command -v git >/dev/null 2>&1 && git rev-parse --git-dir >/dev/null 2>&1; th
22
36
  fi
23
37
  fi
24
38
 
25
-
26
39
  # Else, fallback to downloading from github
27
40
  echo "Downloading synapse-api..."
28
41
 
@@ -71,22 +84,49 @@ fi
71
84
 
72
85
  echo "- Found synapse-api ref \"$REF_API\""
73
86
 
74
- TMP_DIR=$(mktemp -d)
87
+ # Create temp directory in a cross-platform way
88
+ if [ "$IS_WINDOWS" = true ]; then
89
+ # Use a more reliable temp directory path on Windows
90
+ TMP_DIR="C:\\Users\\$USERNAME\\AppData\\Local\\Temp\\synapse-api-temp"
91
+ mkdir -p "$TMP_DIR"
92
+ else
93
+ TMP_DIR=$(mktemp -d)
94
+ fi
95
+
96
+ # Download using curl or fallback to PowerShell on Windows if curl fails
75
97
  if ! curl -s -L "https://github.com/sciencecorp/synapse-api/archive/${REF_API}.zip" -o "$TMP_DIR/synapse-api.zip"; then
76
- echo " - Failed to download synapse-api"
77
- exit 1
98
+ if [ "$IS_WINDOWS" = true ]; then
99
+ echo " - Curl failed, attempting download with PowerShell..."
100
+ powershell -Command "Invoke-WebRequest -Uri 'https://github.com/sciencecorp/synapse-api/archive/${REF_API}.zip' -OutFile '$TMP_DIR\\synapse-api.zip'"
101
+ else
102
+ echo " - Failed to download synapse-api"
103
+ exit 1
104
+ fi
78
105
  fi
79
106
 
80
- if ! unzip -q "$TMP_DIR/synapse-api.zip" -d "$TMP_DIR"; then
81
- echo " - Failed to unzip synapse-api"
82
- exit 1
107
+ # Unzip in a cross-platform way
108
+ if [ "$IS_WINDOWS" = true ]; then
109
+ if ! unzip -q "$TMP_DIR/synapse-api.zip" -d "$TMP_DIR" 2>/dev/null; then
110
+ echo " - Unzip failed, attempting with PowerShell..."
111
+ powershell -Command "Expand-Archive -Path '$TMP_DIR\\synapse-api.zip' -DestinationPath '$TMP_DIR' -Force"
112
+ fi
113
+ else
114
+ if ! unzip -q "$TMP_DIR/synapse-api.zip" -d "$TMP_DIR"; then
115
+ echo " - Failed to unzip synapse-api"
116
+ exit 1
117
+ fi
83
118
  fi
84
119
 
120
+ # Create directory and copy files in a cross-platform way
85
121
  mkdir -p synapse-api
86
- cp -r "$TMP_DIR/synapse-api-${REF_API}/"* synapse-api/
87
-
88
- rm "$TMP_DIR/synapse-api.zip"
122
+ if [ "$IS_WINDOWS" = true ]; then
123
+ powershell -Command "Copy-Item -Path \"$TMP_DIR\\synapse-api-${REF_API}\\*\" -Destination \"synapse-api\\\" -Recurse -Force"
124
+ else
125
+ cp -r "$TMP_DIR/synapse-api-${REF_API}/"* synapse-api/
126
+ fi
89
127
 
128
+ # Clean up temp files
129
+ rm -rf "$TMP_DIR"
90
130
 
91
131
  if [ ! -f "synapse-api/README.md" ] || [ ! -f "synapse-api/COPYRIGHT" ] || [ ! -d "synapse-api/api" ]; then
92
132
  echo " - Failed to download synapse-api - missing required files"