@aloma.io/integration-sdk 3.0.1-5 → 3.0.1-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.
- package/build/builder/index.d.mts +1 -1
- package/build/builder/index.mjs +15 -11
- package/build/builder/runtime-context.d.mts +1 -1
- package/build/builder/runtime-context.mjs +10 -7
- package/build/builder/transform/index.mjs +18 -18
- package/build/cli.mjs +25 -18
- package/build/controller/index.mjs +5 -5
- package/build/index.d.mts +2 -2
- package/build/index.mjs +2 -2
- package/build/internal/dispatcher/index.cjs +41 -30
- package/build/internal/index.cjs +86 -71
- package/build/internal/util/jwe/cli.cjs +3 -3
- package/build/internal/util/jwe/index.cjs +10 -10
- package/build/internal/websocket/config.cjs +7 -7
- package/build/internal/websocket/connection/constants.cjs +3 -3
- package/build/internal/websocket/connection/index.cjs +9 -9
- package/build/internal/websocket/connection/registration.cjs +7 -7
- package/build/internal/websocket/index.cjs +3 -3
- package/build/internal/websocket/transport/durable.cjs +6 -6
- package/build/internal/websocket/transport/index.cjs +18 -18
- package/build/internal/websocket/transport/packet.cjs +2 -2
- package/build/internal/websocket/transport/processor.cjs +5 -5
- package/package.json +1 -1
- package/src/builder/index.mts +26 -19
- package/src/builder/runtime-context.mts +31 -21
- package/src/builder/transform/index.mts +24 -19
- package/src/cli.mts +44 -42
- package/src/controller/index.mts +13 -7
- package/src/index.mts +2 -2
- package/src/internal/dispatcher/index.cjs +61 -44
- package/src/internal/index.cjs +125 -84
- package/src/internal/util/jwe/cli.cjs +3 -3
- package/src/internal/util/jwe/index.cjs +21 -17
- package/src/internal/websocket/config.cjs +12 -8
- package/src/internal/websocket/connection/constants.cjs +3 -3
- package/src/internal/websocket/connection/index.cjs +11 -11
- package/src/internal/websocket/connection/registration.cjs +9 -9
- package/src/internal/websocket/index.cjs +6 -6
- package/src/internal/websocket/transport/durable.cjs +9 -9
- package/src/internal/websocket/transport/index.cjs +30 -26
- package/src/internal/websocket/transport/packet.cjs +4 -4
- package/src/internal/websocket/transport/processor.cjs +12 -9
- package/template/connector/Containerfile +18 -0
- package/template/connector/entrypoint.sh +5 -0
- package/template/connector/package.json +7 -30
- package/template/connector/src/controller/index.mts +12 -0
- package/template/connector/src/index.mts +6 -0
- package/template/connector/tsconfig.json +27 -0
- package/template/connector/src/index.mjs +0 -1
@@ -1,9 +1,9 @@
|
|
1
|
-
const fetch = require(
|
2
|
-
const {Registration} = require(
|
3
|
-
const C = require(
|
1
|
+
const fetch = require("node-fetch");
|
2
|
+
const { Registration } = require("./registration.cjs");
|
3
|
+
const C = require("./constants.cjs");
|
4
4
|
|
5
5
|
class Connection {
|
6
|
-
constructor({config, onStart}) {
|
6
|
+
constructor({ config, onStart }) {
|
7
7
|
this.config = config;
|
8
8
|
this.onStart = onStart;
|
9
9
|
}
|
@@ -14,12 +14,12 @@ class Connection {
|
|
14
14
|
|
15
15
|
try {
|
16
16
|
const response = await fetch(
|
17
|
-
config.url() +
|
17
|
+
config.url() + "connect",
|
18
18
|
C.augmentRequest(
|
19
19
|
{
|
20
|
-
method:
|
20
|
+
method: "POST",
|
21
21
|
body: JSON.stringify({}),
|
22
|
-
headers: {
|
22
|
+
headers: { "Content-Type": "application/json" },
|
23
23
|
},
|
24
24
|
config
|
25
25
|
)
|
@@ -51,12 +51,12 @@ class Connection {
|
|
51
51
|
async close() {
|
52
52
|
try {
|
53
53
|
await fetch(
|
54
|
-
this.config.url() +
|
54
|
+
this.config.url() + "disconnect",
|
55
55
|
C.augmentRequest(
|
56
56
|
{
|
57
|
-
method:
|
57
|
+
method: "POST",
|
58
58
|
body: JSON.stringify({}),
|
59
|
-
headers: {
|
59
|
+
headers: { "Content-Type": "application/json" },
|
60
60
|
},
|
61
61
|
this.config
|
62
62
|
)
|
@@ -67,4 +67,4 @@ class Connection {
|
|
67
67
|
}
|
68
68
|
}
|
69
69
|
|
70
|
-
module.exports = {Connection};
|
70
|
+
module.exports = { Connection };
|
@@ -1,5 +1,5 @@
|
|
1
|
-
const fetch = require(
|
2
|
-
const C = require(
|
1
|
+
const fetch = require("node-fetch");
|
2
|
+
const C = require("./constants.cjs");
|
3
3
|
|
4
4
|
class Registration {
|
5
5
|
constructor(config) {
|
@@ -13,19 +13,19 @@ class Registration {
|
|
13
13
|
const intro = await config.introspect();
|
14
14
|
|
15
15
|
const response = await fetch(
|
16
|
-
config.url() +
|
16
|
+
config.url() + "register",
|
17
17
|
C.augmentRegistration(
|
18
18
|
{
|
19
|
-
method:
|
19
|
+
method: "POST",
|
20
20
|
body: JSON.stringify({
|
21
|
-
deployment: process.env.DEPLOYMENT ||
|
21
|
+
deployment: process.env.DEPLOYMENT || "",
|
22
22
|
name: config.name(),
|
23
23
|
version: config.version(),
|
24
24
|
id: config.id(),
|
25
25
|
publicKey: config.publicKey(),
|
26
|
-
schema: {configSchema, introspect: intro},
|
26
|
+
schema: { configSchema, introspect: intro },
|
27
27
|
}),
|
28
|
-
headers: {
|
28
|
+
headers: { "Content-Type": "application/json" },
|
29
29
|
},
|
30
30
|
config
|
31
31
|
)
|
@@ -33,8 +33,8 @@ class Registration {
|
|
33
33
|
|
34
34
|
if (response.status === 200) return (await response.json()).key;
|
35
35
|
|
36
|
-
throw new Error(
|
36
|
+
throw new Error("authentication failed");
|
37
37
|
}
|
38
38
|
}
|
39
39
|
|
40
|
-
module.exports = {Registration};
|
40
|
+
module.exports = { Registration };
|
@@ -1,12 +1,12 @@
|
|
1
|
-
const WebSocket = require(
|
2
|
-
const {Connection} = require(
|
3
|
-
const {Transport} = require(
|
1
|
+
const WebSocket = require("ws");
|
2
|
+
const { Connection } = require("./connection/index.cjs");
|
3
|
+
const { Transport } = require("./transport/index.cjs");
|
4
4
|
|
5
5
|
class WebsocketConnector {
|
6
|
-
constructor({config, onMessage, onConnect}) {
|
6
|
+
constructor({ config, onMessage, onConnect }) {
|
7
7
|
var local = this;
|
8
8
|
this.config = config;
|
9
|
-
this.transport = new Transport({config, onMessage, onConnect});
|
9
|
+
this.transport = new Transport({ config, onMessage, onConnect });
|
10
10
|
}
|
11
11
|
|
12
12
|
async start() {
|
@@ -43,4 +43,4 @@ class WebsocketConnector {
|
|
43
43
|
}
|
44
44
|
}
|
45
45
|
|
46
|
-
module.exports = {WebsocketConnector};
|
46
|
+
module.exports = { WebsocketConnector };
|
@@ -1,7 +1,7 @@
|
|
1
|
-
const WebSocket = require(
|
1
|
+
const WebSocket = require("ws");
|
2
2
|
|
3
3
|
class DurableWebsocket {
|
4
|
-
constructor({endpoint, secret, onConnect, onMessage}) {
|
4
|
+
constructor({ endpoint, secret, onConnect, onMessage }) {
|
5
5
|
this.endpoint = endpoint;
|
6
6
|
this.secret = secret;
|
7
7
|
this.onConnect = onConnect;
|
@@ -27,10 +27,10 @@ class DurableWebsocket {
|
|
27
27
|
|
28
28
|
const ws = (local.ws = new WebSocket(local.endpoint, [], {
|
29
29
|
rejectUnauthorized: false,
|
30
|
-
headers: {Authorization: `Bearer ${local.secret}`},
|
30
|
+
headers: { Authorization: `Bearer ${local.secret}` },
|
31
31
|
}));
|
32
32
|
|
33
|
-
ws.on(
|
33
|
+
ws.on("open", () => {
|
34
34
|
local.connecting = false;
|
35
35
|
local.fails = 0;
|
36
36
|
|
@@ -43,17 +43,17 @@ class DurableWebsocket {
|
|
43
43
|
local.onConnect(local);
|
44
44
|
});
|
45
45
|
|
46
|
-
ws.on(
|
46
|
+
ws.on("message", (message) => {
|
47
47
|
setImmediate(() => local.onMessage(JSON.parse(message)));
|
48
48
|
});
|
49
49
|
|
50
|
-
ws.on(
|
51
|
-
if (local.fails > 50) console.log(
|
50
|
+
ws.on("error", (message) => {
|
51
|
+
if (local.fails > 50) console.log("error:", message.message);
|
52
52
|
|
53
53
|
++local.fails;
|
54
54
|
});
|
55
55
|
|
56
|
-
ws.on(
|
56
|
+
ws.on("close", (message) => {
|
57
57
|
local.connecting = false;
|
58
58
|
|
59
59
|
if (!local.closed) setTimeout(() => local.start(), 5000);
|
@@ -68,4 +68,4 @@ class DurableWebsocket {
|
|
68
68
|
}
|
69
69
|
}
|
70
70
|
|
71
|
-
module.exports = {DurableWebsocket};
|
71
|
+
module.exports = { DurableWebsocket };
|
@@ -1,15 +1,15 @@
|
|
1
|
-
const fetch = require(
|
2
|
-
const C = require(
|
3
|
-
const cuid = require(
|
4
|
-
const {DurableWebsocket} = require(
|
5
|
-
const WebSocket = require(
|
6
|
-
const {Packet, Callback} = require(
|
1
|
+
const fetch = require("node-fetch");
|
2
|
+
const C = require("../connection/constants.cjs");
|
3
|
+
const cuid = require("@paralleldrive/cuid2").init({ length: 32 });
|
4
|
+
const { DurableWebsocket } = require("./durable.cjs");
|
5
|
+
const WebSocket = require("ws");
|
6
|
+
const { Packet, Callback } = require("./packet.cjs");
|
7
7
|
|
8
8
|
const cleanInterval = 45 * 1000;
|
9
9
|
const pingInterval = 30 * 1000;
|
10
10
|
|
11
11
|
class Transport {
|
12
|
-
constructor({config, onMessage, onConnect}) {
|
12
|
+
constructor({ config, onMessage, onConnect }) {
|
13
13
|
var local = this;
|
14
14
|
|
15
15
|
this.config = config;
|
@@ -44,9 +44,9 @@ class Transport {
|
|
44
44
|
if (!packets.length) return;
|
45
45
|
|
46
46
|
try {
|
47
|
-
local.ws.send(JSON.stringify({p: packets}));
|
47
|
+
local.ws.send(JSON.stringify({ p: packets }));
|
48
48
|
} catch (e) {
|
49
|
-
console.log(
|
49
|
+
console.log("could not send packets ", e);
|
50
50
|
packets.forEach((packet) => local.packets.unshift(packet));
|
51
51
|
}
|
52
52
|
}
|
@@ -61,25 +61,29 @@ class Transport {
|
|
61
61
|
|
62
62
|
this.running = true;
|
63
63
|
|
64
|
-
const ws = (local.ws = new WebSocket(
|
64
|
+
const ws = (local.ws = new WebSocket(
|
65
|
+
config.wsUrl(),
|
66
|
+
["connector"],
|
67
|
+
C.augmentRequest({ headers: {} }, config)
|
68
|
+
));
|
65
69
|
|
66
|
-
ws.on(
|
67
|
-
console.log(
|
70
|
+
ws.on("open", () => {
|
71
|
+
console.log("websocket connected");
|
68
72
|
local.connected = true;
|
69
73
|
local.pinger = setInterval(() => ws.ping(() => null), pingInterval);
|
70
74
|
|
71
75
|
local.onConnect(local);
|
72
76
|
});
|
73
77
|
|
74
|
-
ws.on(
|
78
|
+
ws.on("message", (message) => {
|
75
79
|
setTimeout(() => local.onMessages(JSON.parse(message)), 0);
|
76
80
|
});
|
77
81
|
|
78
|
-
ws.on(
|
79
|
-
console.log(
|
82
|
+
ws.on("error", (message) => {
|
83
|
+
console.log("error:", message);
|
80
84
|
});
|
81
85
|
|
82
|
-
ws.on(
|
86
|
+
ws.on("close", (message) => {
|
83
87
|
local.connected = false;
|
84
88
|
clearInterval(local.pinger);
|
85
89
|
|
@@ -87,8 +91,8 @@ class Transport {
|
|
87
91
|
});
|
88
92
|
}
|
89
93
|
|
90
|
-
newDurableWebsocket({endpoint, secret, onConnect, onMessage}) {
|
91
|
-
return new DurableWebsocket({endpoint, secret, onConnect, onMessage});
|
94
|
+
newDurableWebsocket({ endpoint, secret, onConnect, onMessage }) {
|
95
|
+
return new DurableWebsocket({ endpoint, secret, onConnect, onMessage });
|
92
96
|
}
|
93
97
|
|
94
98
|
send(packet) {
|
@@ -115,7 +119,7 @@ class Transport {
|
|
115
119
|
try {
|
116
120
|
this.callbacks[packet.cb()].cb(packet.args());
|
117
121
|
} catch (e) {
|
118
|
-
console.log(
|
122
|
+
console.log("error processing packet", e, packet);
|
119
123
|
} finally {
|
120
124
|
delete this.callbacks[packet.cb()];
|
121
125
|
}
|
@@ -127,10 +131,10 @@ class Transport {
|
|
127
131
|
}
|
128
132
|
|
129
133
|
newPacket(data, cb, cbKey) {
|
130
|
-
const packet = new Packet({...data});
|
134
|
+
const packet = new Packet({ ...data });
|
131
135
|
|
132
136
|
if (cb) {
|
133
|
-
this.callbacks[cbKey || packet.id()] = new Callback({cb});
|
137
|
+
this.callbacks[cbKey || packet.id()] = new Callback({ cb });
|
134
138
|
packet.cb(cbKey || packet.id());
|
135
139
|
}
|
136
140
|
|
@@ -139,7 +143,7 @@ class Transport {
|
|
139
143
|
|
140
144
|
clean() {
|
141
145
|
var local = this;
|
142
|
-
const cbs = {...this.callbacks},
|
146
|
+
const cbs = { ...this.callbacks },
|
143
147
|
then = Date.now() - 5 * 60 * 1000;
|
144
148
|
|
145
149
|
Object.keys(cbs).forEach((key) => {
|
@@ -147,12 +151,12 @@ class Transport {
|
|
147
151
|
if (!cb) return;
|
148
152
|
|
149
153
|
if (cb.created < then) {
|
150
|
-
console.log(
|
154
|
+
console.log("callback timeout", key);
|
151
155
|
|
152
156
|
try {
|
153
|
-
cb.cb({error:
|
157
|
+
cb.cb({ error: "timeout" });
|
154
158
|
} catch (e) {
|
155
|
-
console.log(
|
159
|
+
console.log("error while callback", key, cb, e);
|
156
160
|
}
|
157
161
|
|
158
162
|
delete local.callbacks[key];
|
@@ -180,4 +184,4 @@ class Transport {
|
|
180
184
|
}
|
181
185
|
}
|
182
186
|
|
183
|
-
module.exports = {Transport};
|
187
|
+
module.exports = { Transport };
|
@@ -1,5 +1,5 @@
|
|
1
|
-
const fetch = require(
|
2
|
-
const cuid = require(
|
1
|
+
const fetch = require("node-fetch");
|
2
|
+
const cuid = require("@paralleldrive/cuid2").init({ length: 32 });
|
3
3
|
|
4
4
|
class Packet {
|
5
5
|
constructor(data = {}) {
|
@@ -45,10 +45,10 @@ class Packet {
|
|
45
45
|
}
|
46
46
|
|
47
47
|
class Callback {
|
48
|
-
constructor({cb}) {
|
48
|
+
constructor({ cb }) {
|
49
49
|
this.cb = cb;
|
50
50
|
this.created = Date.now();
|
51
51
|
}
|
52
52
|
}
|
53
53
|
|
54
|
-
module.exports = {Callback, Packet};
|
54
|
+
module.exports = { Callback, Packet };
|
@@ -1,7 +1,7 @@
|
|
1
|
-
const {Packet, Callback} = require(
|
1
|
+
const { Packet, Callback } = require("./packet.cjs");
|
2
2
|
|
3
3
|
class Processor {
|
4
|
-
constructor({transport, processPacket}) {
|
4
|
+
constructor({ transport, processPacket }) {
|
5
5
|
var local = this;
|
6
6
|
|
7
7
|
this.transport = transport;
|
@@ -26,7 +26,10 @@ class Processor {
|
|
26
26
|
var local = this;
|
27
27
|
|
28
28
|
if (packet.args().packet) {
|
29
|
-
await local.processPacket0(
|
29
|
+
await local.processPacket0(
|
30
|
+
local.transport.newPacket(packet.args().packet),
|
31
|
+
packet
|
32
|
+
);
|
30
33
|
} else {
|
31
34
|
await local.processPacket0(packet, packet);
|
32
35
|
}
|
@@ -40,27 +43,27 @@ class Processor {
|
|
40
43
|
try {
|
41
44
|
callbacks[packet.cb()](packet.args());
|
42
45
|
} catch (e) {
|
43
|
-
console.log(
|
46
|
+
console.log("error in callback", callbacks[packet.cb()], packet);
|
44
47
|
}
|
45
48
|
|
46
49
|
delete local.transport.callbacks[packet.cb()];
|
47
50
|
} else if (packet.event()) {
|
48
|
-
console.log(
|
51
|
+
console.log("handle event packet", packet);
|
49
52
|
} else {
|
50
53
|
try {
|
51
54
|
const result = await local._processPacket(packet);
|
52
55
|
const reply = local.transport.newPacket({});
|
53
56
|
|
54
|
-
reply.method(
|
57
|
+
reply.method("connector.reply");
|
55
58
|
reply.cb(original.cb());
|
56
|
-
reply.args({...result});
|
59
|
+
reply.args({ ...result });
|
57
60
|
|
58
61
|
local.transport.send(reply);
|
59
62
|
} catch (e) {
|
60
|
-
console.log(
|
63
|
+
console.log("error processing packet", e, packet);
|
61
64
|
}
|
62
65
|
}
|
63
66
|
}
|
64
67
|
}
|
65
68
|
|
66
|
-
module.exports = {Processor};
|
69
|
+
module.exports = { Processor };
|
@@ -0,0 +1,18 @@
|
|
1
|
+
FROM node:16-alpine3.18
|
2
|
+
|
3
|
+
ENV NODE_ENV production
|
4
|
+
|
5
|
+
WORKDIR /connector/
|
6
|
+
|
7
|
+
COPY ./package.json ./
|
8
|
+
COPY ./yarn.lock ./
|
9
|
+
COPY ./entrypoint.sh ./
|
10
|
+
COPY ./src ./src
|
11
|
+
|
12
|
+
RUN set -e; adduser -S -u 1111 connector
|
13
|
+
|
14
|
+
RUN set -e; apk add --no-cache git; yarn config set --home enableTelemetry 0; chmod 755 /connector/entrypoint.sh; cd /connector/; yarn install;
|
15
|
+
|
16
|
+
USER connector
|
17
|
+
|
18
|
+
ENTRYPOINT ["/connector/entrypoint.sh"]
|
@@ -1,43 +1,20 @@
|
|
1
1
|
{
|
2
|
-
"name": "
|
3
|
-
"version": "
|
2
|
+
"name": "TODO",
|
3
|
+
"version": "0.0.1",
|
4
4
|
"description": "",
|
5
|
-
"author": "
|
5
|
+
"author": "",
|
6
|
+
"connectorId": "TODO",
|
6
7
|
"license": "Apache-2.0",
|
7
8
|
"type": "module",
|
8
|
-
"bin": {
|
9
|
-
"main": "./build/cli.mjs"
|
10
|
-
},
|
11
9
|
"scripts": {
|
10
|
+
"start": "node build/index.mjs",
|
12
11
|
"dev": "./node_modules/typescript/bin/tsc --watch",
|
13
|
-
"build": "./node_modules/typescript/bin/tsc",
|
12
|
+
"build": "rm -rf build; mkdir -p build/controller; cp ./src/controller/index.mts ./build/controller/.controller-for-types.mts; ./node_modules/typescript/bin/tsc",
|
14
13
|
"test": "./node_modules/mocha/bin/_mocha --recursive",
|
15
14
|
"format": "yarn prettier --write src/"
|
16
15
|
},
|
17
|
-
"main": "./build/index.js",
|
18
|
-
"exports": {
|
19
|
-
".": {
|
20
|
-
"import": "./build/index.mjs",
|
21
|
-
"require": "./build/index.js"
|
22
|
-
},
|
23
|
-
"./build/*": "./build/*",
|
24
|
-
"./package": "./package.json",
|
25
|
-
"./package.json": "./package.json"
|
26
|
-
},
|
27
16
|
"dependencies": {
|
28
|
-
"@
|
29
|
-
"@ts-ast-parser/core": "^0",
|
30
|
-
"commander": "^11",
|
31
|
-
"dotenv": "*",
|
32
|
-
"express": "^4",
|
33
|
-
"jose": "^4",
|
34
|
-
"node-fetch": "^2",
|
35
|
-
"prom-client": "^14",
|
36
|
-
"ws": "^8"
|
37
|
-
},
|
38
|
-
"optionalDependencies": {
|
39
|
-
"bufferutil": "^4",
|
40
|
-
"utf-8-validate": "^6"
|
17
|
+
"@aloma.io/integration-sdk": "^3"
|
41
18
|
},
|
42
19
|
"devDependencies": {
|
43
20
|
"@types/node": "^18",
|
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"target": "es2022",
|
4
|
+
"skipLibCheck": true,
|
5
|
+
"module": "node16",
|
6
|
+
"moduleResolution": "node16",
|
7
|
+
"lib": ["es2015", "es6", "esnext"],
|
8
|
+
"declaration": true,
|
9
|
+
"allowJs": true,
|
10
|
+
"outDir": "build",
|
11
|
+
"rootDir": "src/",
|
12
|
+
"strict": true,
|
13
|
+
"noImplicitAny": false,
|
14
|
+
"esModuleInterop": true,
|
15
|
+
"resolveJsonModule": true,
|
16
|
+
"experimentalDecorators": true,
|
17
|
+
"emitDecoratorMetadata": true,
|
18
|
+
"allowSyntheticDefaultImports": true
|
19
|
+
},
|
20
|
+
"include": [
|
21
|
+
"src/**/*"
|
22
|
+
],
|
23
|
+
"exclude": [
|
24
|
+
"node_modules/**/*",
|
25
|
+
"dist/**/*"
|
26
|
+
]
|
27
|
+
}
|
@@ -1 +0,0 @@
|
|
1
|
-
hallo
|