@fonoster/apiserver 0.8.18 → 0.8.20
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/dist/calls/buildService.js +1 -1
- package/dist/calls/createCallPublisher.js +1 -1
- package/dist/calls/createFetchCalls.js +1 -1
- package/dist/calls/createFetchSingleCall.js +1 -2
- package/dist/calls/runCallManager.js +1 -1
- package/dist/envs.js +3 -3
- package/dist/events/createInfluxDbPub.js +1 -0
- package/dist/events/nats.js +1 -1
- package/dist/events/transformEvent.js +6 -1
- package/dist/voice/connectToAri.js +1 -1
- package/package.json +9 -9
|
@@ -39,7 +39,7 @@ const envs_1 = require("../envs");
|
|
|
39
39
|
function buildService(influxdb) {
|
|
40
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
41
41
|
const callPublisher = yield (0, createCallPublisher_1.createCallPublisher)(envs_1.NATS_URL);
|
|
42
|
-
const nc = yield (0, nats_1.connect)({ servers: envs_1.NATS_URL });
|
|
42
|
+
const nc = yield (0, nats_1.connect)({ servers: envs_1.NATS_URL, maxReconnectAttempts: -1 });
|
|
43
43
|
return {
|
|
44
44
|
definition: {
|
|
45
45
|
serviceName: "Calls",
|
|
@@ -35,7 +35,7 @@ const logger = (0, logger_1.getLogger)({ service: "apiserver", filePath: __filen
|
|
|
35
35
|
function createCallPublisher(natsUrl) {
|
|
36
36
|
return __awaiter(this, void 0, void 0, function* () {
|
|
37
37
|
logger.verbose("connecting to nats", { natsUrl });
|
|
38
|
-
const nc = yield (0, nats_1.connect)({ servers: natsUrl });
|
|
38
|
+
const nc = yield (0, nats_1.connect)({ servers: natsUrl, maxReconnectAttempts: -1 });
|
|
39
39
|
return {
|
|
40
40
|
publishCall: (request) => __awaiter(this, void 0, void 0, function* () {
|
|
41
41
|
logger.verbose("publishing call", { ref: request.ref });
|
|
@@ -56,7 +56,7 @@ function createFetchCalls(influxdb) {
|
|
|
56
56
|
|> pivot(rowKey: ["callId"], columnKey: ["_field"], valueColumn: "_value")
|
|
57
57
|
|> map(fn: (r) => ({
|
|
58
58
|
r with
|
|
59
|
-
duration:
|
|
59
|
+
duration: int(v: r.endedAt) - int(v: r.startedAt),
|
|
60
60
|
startedAtParsed: int(v: r.startedAt) / 1000,
|
|
61
61
|
}))
|
|
62
62
|
|> filter(fn: (r) =>
|
|
@@ -40,8 +40,7 @@ function createFetchSingleCall(influxdb) {
|
|
|
40
40
|
|> pivot(rowKey: ["callId"], columnKey: ["_field"], valueColumn: "_value")
|
|
41
41
|
|> map(fn: (r) => ({
|
|
42
42
|
r with
|
|
43
|
-
duration:
|
|
44
|
-
startedAtParsed: int(v: r.startedAt) / 1000,
|
|
43
|
+
duration: int(v: r.endedAt) - int(v: r.startedAt)
|
|
45
44
|
}))
|
|
46
45
|
|> filter(fn: (r) => r._measurement == "${types_1.CALL_DETAIL_RECORD_MEASUREMENT}")
|
|
47
46
|
|> filter(fn: (r) => r.ref == ${ref} and r.accessKeyId == "${accessKeyId}")
|
|
@@ -42,7 +42,7 @@ function createCreateCallSubscriber(config) {
|
|
|
42
42
|
const { natsUrl, ariProxyUrl, ariUsername, ariPassword } = config;
|
|
43
43
|
try {
|
|
44
44
|
logger.verbose("connecting to nats", { natsUrl });
|
|
45
|
-
const nc = yield (0, nats_1.connect)({ servers: natsUrl });
|
|
45
|
+
const nc = yield (0, nats_1.connect)({ servers: natsUrl, maxReconnectAttempts: -1 });
|
|
46
46
|
logger.verbose("subscribing to call create subject", {
|
|
47
47
|
subject: envs_1.CALLS_CREATE_SUBJECT
|
|
48
48
|
});
|
package/dist/envs.js
CHANGED
|
@@ -34,6 +34,9 @@ if (process.env.NODE_ENV === "dev") {
|
|
|
34
34
|
const e = process.env;
|
|
35
35
|
(0, common_1.assertEnvsAreSet)([
|
|
36
36
|
"APP_URL",
|
|
37
|
+
"ASTERISK_ARI_PROXY_URL",
|
|
38
|
+
"ASTERISK_ARI_USERNAME",
|
|
39
|
+
"ASTERISK_ARI_SECRET",
|
|
37
40
|
"CLOAK_ENCRYPTION_KEY",
|
|
38
41
|
"SMTP_HOST",
|
|
39
42
|
"SMTP_SENDER",
|
|
@@ -48,9 +51,6 @@ const e = process.env;
|
|
|
48
51
|
"INFLUXDB_INIT_ORG",
|
|
49
52
|
"INFLUXDB_INIT_BUCKET",
|
|
50
53
|
"INFLUXDB_INIT_TOKEN",
|
|
51
|
-
"ASTERISK_ARI_PROXY_URL",
|
|
52
|
-
"ASTERISK_ARI_USERNAME",
|
|
53
|
-
"ASTERISK_ARI_SECRET",
|
|
54
54
|
"NATS_URL"
|
|
55
55
|
]);
|
|
56
56
|
const IDENTITY_PRIVATE_KEY_PATH = e.IDENTITY_PRIVATE_KEY_PATH || "/opt/fonoster/keys/private.pem";
|
|
@@ -28,6 +28,7 @@ function createInfluxDbPub(config) {
|
|
|
28
28
|
const client = new influxdb_client_1.InfluxDB({ url, token });
|
|
29
29
|
const writeClient = client.getWriteApi(org, bucket, "ns");
|
|
30
30
|
return (event) => {
|
|
31
|
+
logger.verbose("writing event to InfluxDB", event);
|
|
31
32
|
const point = new influxdb_client_1.Point(event.name).tag("callId", event.tag);
|
|
32
33
|
Object.entries(event.data).forEach(([key, value]) => {
|
|
33
34
|
if (typeof value === "number") {
|
package/dist/events/nats.js
CHANGED
|
@@ -71,7 +71,7 @@ function streamEvents(subscription, callback) {
|
|
|
71
71
|
*/
|
|
72
72
|
function watchNats(natsUrl, callback) {
|
|
73
73
|
(() => __awaiter(this, void 0, void 0, function* () {
|
|
74
|
-
const nc = yield (0, nats_1.connect)({ servers: natsUrl });
|
|
74
|
+
const nc = yield (0, nats_1.connect)({ servers: natsUrl, maxReconnectAttempts: -1 });
|
|
75
75
|
const a = nc.subscribe(ROUTR_CALL_SUBJECT);
|
|
76
76
|
logger.verbose("connected to nats", { natsUrl });
|
|
77
77
|
logger.verbose("subscribed to subjects", {
|
|
@@ -21,6 +21,7 @@ exports.transformEvent = transformEvent;
|
|
|
21
21
|
*/
|
|
22
22
|
const types_1 = require("@fonoster/types");
|
|
23
23
|
const mapCallDirectionToEnum_1 = require("./mapCallDirectionToEnum");
|
|
24
|
+
const uuid_1 = require("uuid");
|
|
24
25
|
const ACCESS_KEY_ID_HEADER = "X-Access-Key-Id";
|
|
25
26
|
const CALL_REF_HEADER = "X-Call-Ref";
|
|
26
27
|
const CALL_DIRECTION_HEADER = "X-Call-Direction";
|
|
@@ -48,13 +49,17 @@ function transformEvent(event) {
|
|
|
48
49
|
transformedEvent.to = to.split("@")[0].replace("sip:", "");
|
|
49
50
|
}
|
|
50
51
|
const extraHeaders = event.extraHeaders;
|
|
51
|
-
if (extraHeaders) {
|
|
52
|
+
if (extraHeaders && Object.keys(extraHeaders).length > 0) {
|
|
52
53
|
if (extraHeaders[ACCESS_KEY_ID_HEADER]) {
|
|
53
54
|
transformedEvent.accessKeyId = extraHeaders[ACCESS_KEY_ID_HEADER];
|
|
54
55
|
}
|
|
55
56
|
if (extraHeaders[CALL_REF_HEADER]) {
|
|
56
57
|
transformedEvent.ref = extraHeaders[CALL_REF_HEADER];
|
|
57
58
|
}
|
|
59
|
+
else {
|
|
60
|
+
// SIP originated calls don't have a ref so we need to create one
|
|
61
|
+
transformedEvent.ref = (0, uuid_1.v4)();
|
|
62
|
+
}
|
|
58
63
|
if (extraHeaders[DOD_NUMBER_HEADER]) {
|
|
59
64
|
transformedEvent.from = extraHeaders[DOD_NUMBER_HEADER];
|
|
60
65
|
}
|
|
@@ -63,7 +63,7 @@ function connectToAri(filesServer) {
|
|
|
63
63
|
});
|
|
64
64
|
logger.info("asterisk is ready");
|
|
65
65
|
const createContainer = (0, integrations_1.makeCreateContainer)(db_1.prisma, envs_1.INTEGRATIONS_FILE);
|
|
66
|
-
const nats = yield (0, nats_1.connect)({ servers: envs_1.NATS_URL });
|
|
66
|
+
const nats = yield (0, nats_1.connect)({ servers: envs_1.NATS_URL, maxReconnectAttempts: -1 });
|
|
67
67
|
const dispatcher = new VoiceDispatcher_1.VoiceDispatcher(ari, nats, (0, makeCreateVoiceClient_1.makeCreateVoiceClient)(createContainer, filesServer));
|
|
68
68
|
dispatcher.start();
|
|
69
69
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fonoster/apiserver",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.20",
|
|
4
4
|
"description": "APIServer for Fonoster",
|
|
5
5
|
"author": "Pedro Sanders <psanders@fonoster.com>",
|
|
6
6
|
"homepage": "https://github.com/fonoster/fonoster#readme",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@deepgram/sdk": "^3.5.1",
|
|
24
|
-
"@fonoster/authz": "^0.8.
|
|
25
|
-
"@fonoster/common": "^0.8.
|
|
26
|
-
"@fonoster/identity": "^0.8.
|
|
27
|
-
"@fonoster/logger": "^0.8.
|
|
28
|
-
"@fonoster/sipnet": "^0.8.
|
|
29
|
-
"@fonoster/streams": "^0.8.
|
|
30
|
-
"@fonoster/types": "^0.8.
|
|
24
|
+
"@fonoster/authz": "^0.8.20",
|
|
25
|
+
"@fonoster/common": "^0.8.20",
|
|
26
|
+
"@fonoster/identity": "^0.8.20",
|
|
27
|
+
"@fonoster/logger": "^0.8.20",
|
|
28
|
+
"@fonoster/sipnet": "^0.8.20",
|
|
29
|
+
"@fonoster/streams": "^0.8.20",
|
|
30
|
+
"@fonoster/types": "^0.8.20",
|
|
31
31
|
"@google-cloud/speech": "^6.6.0",
|
|
32
32
|
"@google-cloud/text-to-speech": "^5.3.0",
|
|
33
33
|
"@grpc/grpc-js": "~1.10.6",
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
"@types/uuid": "^10.0.0",
|
|
74
74
|
"@types/validator": "^13.12.0"
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "4e605a379fec5ac31bf0a3d2f57cbd54da6c732b"
|
|
77
77
|
}
|