@fonoster/apiserver 0.8.19 → 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.
@@ -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: (int(v: r.endedAt) - int(v: r.startedAt)) / 1000,
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: (int(v: r.endedAt) - int(v: r.startedAt)) / 1000,
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") {
@@ -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.19",
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.19",
25
- "@fonoster/common": "^0.8.18",
26
- "@fonoster/identity": "^0.8.18",
27
- "@fonoster/logger": "^0.8.18",
28
- "@fonoster/sipnet": "^0.8.18",
29
- "@fonoster/streams": "^0.8.18",
30
- "@fonoster/types": "^0.8.18",
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": "3e9b9905b215acd90511512bce1dd42f9897f2a6"
76
+ "gitHead": "4e605a379fec5ac31bf0a3d2f57cbd54da6c732b"
77
77
  }