@fonoster/apiserver 0.5.5 → 0.6.1-alpha.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 (224) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +3 -0
  3. package/dist/applications/buildService.d.ts +29 -0
  4. package/dist/applications/buildService.js +44 -0
  5. package/dist/applications/createApplication.d.ts +6 -0
  6. package/dist/applications/createApplication.js +57 -0
  7. package/dist/applications/createGetFnUtil.d.ts +33 -0
  8. package/dist/applications/createGetFnUtil.js +32 -0
  9. package/dist/applications/deleteApplication.d.ts +6 -0
  10. package/dist/applications/deleteApplication.js +26 -0
  11. package/dist/applications/getApplication.d.ts +6 -0
  12. package/dist/applications/getApplication.js +47 -0
  13. package/dist/applications/hostOrHostPortSchema.d.ts +3 -0
  14. package/dist/applications/hostOrHostPortSchema.js +34 -0
  15. package/dist/applications/index.d.ts +1 -0
  16. package/dist/applications/index.js +23 -0
  17. package/dist/applications/listApplications.d.ts +6 -0
  18. package/dist/applications/listApplications.js +69 -0
  19. package/dist/applications/types.d.ts +27 -0
  20. package/dist/applications/types.js +2 -0
  21. package/dist/applications/updateApplication.d.ts +8 -0
  22. package/dist/applications/updateApplication.js +57 -0
  23. package/dist/applications/utils/applicationWithEncodedStruct.d.ts +3 -0
  24. package/dist/applications/utils/applicationWithEncodedStruct.js +23 -0
  25. package/dist/applications/utils/convertToApplicationData.d.ts +4 -0
  26. package/dist/applications/utils/convertToApplicationData.js +38 -0
  27. package/dist/applications/utils/getApplicationValidationSchema.d.ts +64 -0
  28. package/dist/applications/utils/getApplicationValidationSchema.js +64 -0
  29. package/dist/applications/utils/prepareForValidation.d.ts +3 -0
  30. package/dist/applications/utils/prepareForValidation.js +36 -0
  31. package/dist/applications/utils/validOrThrow.d.ts +3 -0
  32. package/dist/applications/utils/validOrThrow.js +15 -0
  33. package/dist/calls/ListCallsRequestSchema.d.ts +28 -0
  34. package/dist/calls/ListCallsRequestSchema.js +58 -0
  35. package/dist/calls/buildService.d.ts +26 -0
  36. package/dist/calls/buildService.js +58 -0
  37. package/dist/calls/createCall.d.ts +6 -0
  38. package/dist/calls/createCall.js +64 -0
  39. package/dist/calls/createCallPublisher.d.ts +7 -0
  40. package/dist/calls/createCallPublisher.js +47 -0
  41. package/dist/calls/createFetchCalls.d.ts +3 -0
  42. package/dist/calls/createFetchCalls.js +87 -0
  43. package/dist/calls/createFetchSingleCall.d.ts +3 -0
  44. package/dist/calls/createFetchSingleCall.js +48 -0
  45. package/dist/calls/createTrackCallSubscriber.d.ts +6 -0
  46. package/dist/calls/createTrackCallSubscriber.js +53 -0
  47. package/dist/calls/getCall.d.ts +6 -0
  48. package/dist/calls/getCall.js +60 -0
  49. package/dist/calls/index.d.ts +1 -0
  50. package/dist/calls/index.js +23 -0
  51. package/dist/calls/influxdb.d.ts +2 -0
  52. package/dist/calls/influxdb.js +29 -0
  53. package/dist/calls/listCalls.d.ts +6 -0
  54. package/dist/calls/listCalls.js +52 -0
  55. package/dist/calls/runCallManager.d.ts +8 -0
  56. package/dist/calls/runCallManager.js +82 -0
  57. package/dist/calls/trackCall.d.ts +14 -0
  58. package/dist/calls/trackCall.js +64 -0
  59. package/dist/calls/types.d.ts +96 -0
  60. package/dist/calls/types.js +42 -0
  61. package/dist/core/allowList.d.ts +2 -0
  62. package/dist/core/allowList.js +31 -0
  63. package/dist/core/db.d.ts +13 -0
  64. package/dist/core/db.js +29 -0
  65. package/dist/core/filesServer.d.ts +5 -0
  66. package/dist/{ari_proxy.js → core/filesServer.js} +24 -20
  67. package/dist/core/identityConfig.d.ts +21 -0
  68. package/dist/core/identityConfig.js +43 -0
  69. package/dist/core/loadServices.d.ts +8 -0
  70. package/dist/core/loadServices.js +43 -0
  71. package/dist/core/notFoundError.d.ts +6 -0
  72. package/dist/core/notFoundError.js +27 -0
  73. package/dist/core/removeSwaggerNotice.d.ts +2 -0
  74. package/dist/core/removeSwaggerNotice.js +34 -0
  75. package/dist/core/routrConfig.d.ts +5 -0
  76. package/dist/core/routrConfig.js +27 -0
  77. package/dist/core/runServices.d.ts +2 -0
  78. package/dist/core/runServices.js +97 -0
  79. package/dist/core/seed.js +76 -0
  80. package/dist/core/services.d.ts +438 -0
  81. package/dist/core/services.js +53 -0
  82. package/dist/core/upsertDefaultPeer.d.ts +3 -0
  83. package/dist/core/upsertDefaultPeer.js +92 -0
  84. package/dist/envs.d.ts +46 -6
  85. package/dist/envs.js +95 -8
  86. package/dist/events/createInfluxDbPub.d.ts +13 -0
  87. package/dist/events/createInfluxDbPub.js +54 -0
  88. package/dist/events/nats.d.ts +10 -0
  89. package/dist/events/nats.js +85 -0
  90. package/dist/events/types.d.ts +8 -0
  91. package/dist/events/types.js +20 -0
  92. package/dist/index.js +53 -122
  93. package/dist/secrets/buildService.d.ts +37 -0
  94. package/dist/secrets/buildService.js +44 -0
  95. package/dist/secrets/createGetFnUtil.d.ts +16 -0
  96. package/dist/secrets/createGetFnUtil.js +46 -0
  97. package/dist/secrets/createSecret.d.ts +7 -0
  98. package/dist/secrets/createSecret.js +57 -0
  99. package/dist/secrets/deleteSecret.d.ts +8 -0
  100. package/dist/secrets/deleteSecret.js +44 -0
  101. package/dist/secrets/getSecret.d.ts +6 -0
  102. package/dist/secrets/getSecret.js +43 -0
  103. package/dist/secrets/index.d.ts +1 -0
  104. package/dist/secrets/index.js +23 -0
  105. package/dist/secrets/listSecrets.d.ts +7 -0
  106. package/dist/secrets/listSecrets.js +62 -0
  107. package/dist/secrets/types.d.ts +32 -0
  108. package/dist/secrets/types.js +2 -0
  109. package/dist/secrets/updateSecret.d.ts +8 -0
  110. package/dist/secrets/updateSecret.js +53 -0
  111. package/dist/utils/index.d.ts +1 -0
  112. package/dist/utils/index.js +35 -0
  113. package/dist/utils/makeCheckNumberPreconditions.d.ts +6 -0
  114. package/dist/utils/makeCheckNumberPreconditions.js +49 -0
  115. package/dist/voice/ChannelVarNotFoundError.d.ts +5 -0
  116. package/dist/voice/ChannelVarNotFoundError.js +10 -0
  117. package/dist/voice/MethodNotImplementedError.d.ts +4 -0
  118. package/dist/voice/MethodNotImplementedError.js +27 -0
  119. package/dist/voice/VoiceClientImpl.d.ts +42 -0
  120. package/dist/voice/VoiceClientImpl.js +192 -0
  121. package/dist/voice/VoiceDispatcher.d.ts +17 -0
  122. package/dist/voice/VoiceDispatcher.js +99 -0
  123. package/dist/voice/VoiceServiceClientConst.d.ts +3 -0
  124. package/dist/voice/VoiceServiceClientConst.js +53 -0
  125. package/dist/voice/connectToAri.d.ts +2 -0
  126. package/dist/voice/connectToAri.js +80 -0
  127. package/dist/voice/createExternalMediaConfig.d.ts +9 -0
  128. package/dist/voice/createExternalMediaConfig.js +35 -0
  129. package/dist/voice/handlers/Answer.d.ts +5 -0
  130. package/dist/voice/handlers/Answer.js +25 -0
  131. package/dist/voice/handlers/Hangup.d.ts +5 -0
  132. package/dist/voice/handlers/Hangup.js +26 -0
  133. package/dist/voice/handlers/Mute.d.ts +4 -0
  134. package/dist/voice/handlers/Mute.js +28 -0
  135. package/dist/voice/handlers/Play.d.ts +4 -0
  136. package/dist/voice/handlers/Play.js +34 -0
  137. package/dist/voice/handlers/PlayDtmf.d.ts +4 -0
  138. package/dist/voice/handlers/PlayDtmf.js +28 -0
  139. package/dist/voice/handlers/PlaybackControl.d.ts +4 -0
  140. package/dist/voice/handlers/PlaybackControl.js +28 -0
  141. package/dist/voice/handlers/Record.d.ts +4 -0
  142. package/dist/voice/handlers/Record.js +59 -0
  143. package/dist/voice/handlers/Say.d.ts +4 -0
  144. package/dist/voice/handlers/Say.js +46 -0
  145. package/dist/voice/handlers/StasisEnd.d.ts +4 -0
  146. package/dist/voice/handlers/StasisEnd.js +28 -0
  147. package/dist/voice/handlers/Unmute.d.ts +4 -0
  148. package/dist/voice/handlers/Unmute.js +28 -0
  149. package/dist/voice/handlers/awaitForPlaybackFinished.d.ts +3 -0
  150. package/dist/voice/handlers/awaitForPlaybackFinished.js +25 -0
  151. package/dist/voice/handlers/awaitForRecordingFinished.d.ts +5 -0
  152. package/dist/voice/handlers/awaitForRecordingFinished.js +54 -0
  153. package/dist/voice/handlers/dial/Dial.d.ts +5 -0
  154. package/dist/voice/handlers/dial/Dial.js +72 -0
  155. package/dist/voice/handlers/dial/handleChannelLeftBridge.d.ts +6 -0
  156. package/dist/voice/handlers/dial/handleChannelLeftBridge.js +30 -0
  157. package/dist/voice/handlers/dial/handleDialEvents.d.ts +5 -0
  158. package/dist/voice/handlers/dial/handleDialEvents.js +55 -0
  159. package/dist/voice/handlers/dial/handleStasisEnd.d.ts +3 -0
  160. package/dist/voice/handlers/dial/handleStasisEnd.js +20 -0
  161. package/dist/voice/handlers/dial/handleStasisStart.d.ts +9 -0
  162. package/dist/voice/handlers/dial/handleStasisStart.js +54 -0
  163. package/dist/voice/handlers/dial/recordChannel.d.ts +4 -0
  164. package/dist/voice/handlers/dial/recordChannel.js +46 -0
  165. package/dist/voice/handlers/gather/Gather.d.ts +3 -0
  166. package/dist/voice/handlers/gather/Gather.js +73 -0
  167. package/dist/voice/handlers/gather/getTimeoutPromise.d.ts +8 -0
  168. package/dist/voice/handlers/gather/getTimeoutPromise.js +19 -0
  169. package/dist/voice/handlers/withErrorHandling.d.ts +4 -0
  170. package/dist/voice/handlers/withErrorHandling.js +36 -0
  171. package/dist/voice/integrations/ApplicationNotFoundError.d.ts +4 -0
  172. package/dist/voice/integrations/ApplicationNotFoundError.js +28 -0
  173. package/dist/voice/integrations/findIntegrationsCredentials.d.ts +3 -0
  174. package/dist/voice/integrations/findIntegrationsCredentials.js +7 -0
  175. package/dist/voice/integrations/getSttConfig.d.ts +7 -0
  176. package/dist/voice/integrations/getSttConfig.js +10 -0
  177. package/dist/voice/integrations/getTtsConfig.d.ts +7 -0
  178. package/dist/voice/integrations/getTtsConfig.js +11 -0
  179. package/dist/voice/integrations/index.d.ts +1 -0
  180. package/dist/voice/integrations/index.js +35 -0
  181. package/dist/voice/integrations/makeCreateContainer.d.ts +4 -0
  182. package/dist/voice/integrations/makeCreateContainer.js +89 -0
  183. package/dist/voice/integrations/types.d.ts +15 -0
  184. package/dist/voice/integrations/types.js +2 -0
  185. package/dist/voice/makeCreateVoiceClient.d.ts +9 -0
  186. package/dist/voice/makeCreateVoiceClient.js +78 -0
  187. package/dist/voice/makeGetChannelVar.d.ts +4 -0
  188. package/dist/voice/makeGetChannelVar.js +26 -0
  189. package/dist/voice/stt/AbstractSpeechToText.d.ts +15 -0
  190. package/dist/voice/stt/AbstractSpeechToText.js +19 -0
  191. package/dist/voice/stt/Google.d.ts +20 -0
  192. package/dist/voice/stt/Google.js +99 -0
  193. package/dist/voice/stt/SpeechToTextFactory.d.ts +9 -0
  194. package/dist/voice/stt/SpeechToTextFactory.js +41 -0
  195. package/dist/voice/stt/types.d.ts +25 -0
  196. package/dist/voice/stt/types.js +2 -0
  197. package/dist/voice/transcribeOnConnection.d.ts +5 -0
  198. package/dist/voice/transcribeOnConnection.js +27 -0
  199. package/dist/voice/tts/AbstractTextToSpeech.d.ts +18 -0
  200. package/dist/voice/tts/AbstractTextToSpeech.js +82 -0
  201. package/dist/voice/tts/Azure.d.ts +30 -0
  202. package/dist/voice/tts/Azure.js +128 -0
  203. package/dist/voice/tts/Google.d.ts +25 -0
  204. package/dist/voice/tts/Google.js +116 -0
  205. package/dist/voice/tts/TextToSpeechFactory.d.ts +9 -0
  206. package/dist/voice/tts/TextToSpeechFactory.js +43 -0
  207. package/dist/voice/tts/computeFilename.d.ts +7 -0
  208. package/dist/voice/tts/computeFilename.js +39 -0
  209. package/dist/voice/tts/flattenObject.d.ts +2 -0
  210. package/dist/voice/tts/flattenObject.js +39 -0
  211. package/dist/voice/tts/isSsml.d.ts +2 -0
  212. package/dist/voice/tts/isSsml.js +26 -0
  213. package/dist/voice/tts/types.d.ts +7 -0
  214. package/dist/voice/tts/types.js +2 -0
  215. package/dist/voice/types/ari.d.ts +21 -0
  216. package/dist/voice/types/ari.js +43 -0
  217. package/dist/voice/types/index.d.ts +2 -0
  218. package/dist/voice/types/index.js +36 -0
  219. package/dist/voice/types/voice.d.ts +34 -0
  220. package/dist/voice/types/voice.js +2 -0
  221. package/package.json +45 -36
  222. package/dist/upsert_peer.d.ts +0 -1
  223. package/dist/upsert_peer.js +0 -63
  224. /package/dist/{ari_proxy.d.ts → core/seed.d.ts} +0 -0
package/dist/envs.js CHANGED
@@ -1,8 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ var _a;
2
6
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.APISERVER_ASTERISK_ARI_SECRET = exports.APISERVER_ASTERISK_ARI_USERNAME = exports.APISERVER_ASTERISK_ARI_INTERNAL_URL = exports.APISERVER_ROUTR_DEFAULT_PEER_SECRET = exports.APISERVER_ROUTR_DEFAULT_PEER_USERNAME = exports.APISERVER_JWT_PRIVATE_KEY = void 0;
7
+ exports.INTEGRATIONS_FILE = exports.FILES_SERVER_PORT = exports.TTS_PATH_TO_FILES = exports.ASTERISK_SYSTEM_DOMAIN = exports.ASTERISK_ARI_SECRET = exports.ASTERISK_ARI_USERNAME = exports.ASTERISK_ARI_PROXY_URL = exports.ASTERISK_TRUNK = exports.ASTERISK_EXTENSION = exports.ASTERISK_CONTEXT = exports.CALLS_TRACK_CALL_SUBJECT = exports.CALLS_CREATE_SUBJECT = exports.DEFAULT_NATS_QUEUE_GROUP = exports.NATS_URL = exports.APISERVER_HOST = exports.APISERVER_BIND_ADDR = exports.ROUTR_DEFAULT_PEER_PASSWORD = exports.ROUTR_DEFAULT_PEER_AOR = exports.ROUTR_DEFAULT_PEER_USERNAME = exports.ROUTR_DEFAULT_PEER_NAME = exports.ROUTR_API_ENDPOINT = exports.CLOAK_ENCRYPTION_KEY = exports.INFLUXDB_TOKEN = exports.INFLUXDB_BUCKET = exports.INFLUXDB_ORG = exports.INFLUXDB_PASSWORD = exports.INFLUXDB_USERNAME = exports.INFLUXDB_URL = exports.OWNER_PASSWORD = exports.OWNER_EMAIL = exports.OWNER_NAME = exports.EMAIL_TEMPLATES_DIR = exports.SMTP_SENDER = exports.SMTP_AUTH_PASS = exports.SMTP_AUTH_USER = exports.SMTP_SECURE = exports.SMTP_PORT = exports.SMTP_HOST = exports.IDENTITY_REFRESH_TOKEN_EXPIRES_IN = exports.IDENTITY_ACCESS_TOKEN_EXPIRES_IN = exports.IDENTITY_ID_TOKEN_EXPIRES_IN = exports.IDENTITY_PUBLIC_KEY = exports.IDENTITY_PRIVATE_KEY = exports.IDENTITY_AUDIENCE = exports.IDENTITY_ISSUER = exports.APP_URL = void 0;
4
8
  /*
5
- * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
9
+ * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
6
10
  * http://github.com/fonoster/fonoster
7
11
  *
8
12
  * This file is part of Fonoster
@@ -19,9 +23,92 @@ exports.APISERVER_ASTERISK_ARI_SECRET = exports.APISERVER_ASTERISK_ARI_USERNAME
19
23
  * See the License for the specific language governing permissions and
20
24
  * limitations under the License.
21
25
  */
22
- exports.APISERVER_JWT_PRIVATE_KEY = process.env.APISERVER_JWT_PRIVATE_KEY;
23
- exports.APISERVER_ROUTR_DEFAULT_PEER_USERNAME = process.env.APISERVER_ROUTR_DEFAULT_PEER_USERNAME;
24
- exports.APISERVER_ROUTR_DEFAULT_PEER_SECRET = process.env.APISERVER_ROUTR_DEFAULT_PEER_SECRET;
25
- exports.APISERVER_ASTERISK_ARI_INTERNAL_URL = process.env.APISERVER_ASTERISK_ARI_INTERNAL_URL;
26
- exports.APISERVER_ASTERISK_ARI_USERNAME = process.env.APISERVER_ASTERISK_ARI_USERNAME;
27
- exports.APISERVER_ASTERISK_ARI_SECRET = process.env.APISERVER_ASTERISK_ARI_SECRET;
26
+ const fs_1 = __importDefault(require("fs"));
27
+ const os_1 = __importDefault(require("os"));
28
+ const path_1 = require("path");
29
+ const common_1 = require("@fonoster/common");
30
+ const dotenv_1 = __importDefault(require("dotenv"));
31
+ if (process.env.NODE_ENV === "dev") {
32
+ dotenv_1.default.config({ path: (0, path_1.join)(__dirname, "..", "..", "..", ".env") });
33
+ }
34
+ const e = process.env;
35
+ (0, common_1.assertEnvsAreSet)([
36
+ "INTEGRATIONS_FILE",
37
+ "TTS_PATH_TO_FILES",
38
+ "APP_URL",
39
+ "CLOAK_ENCRYPTION_KEY",
40
+ "SMTP_HOST",
41
+ "SMTP_SENDER",
42
+ "SMTP_AUTH_USER",
43
+ "SMTP_AUTH_PASS",
44
+ "IDENTITY_ISSUER",
45
+ "IDENTITY_PRIVATE_KEY_PATH",
46
+ "IDENTITY_PUBLIC_KEY_PATH",
47
+ "INFLUXDB_URL",
48
+ "INFLUXDB_INIT_USERNAME",
49
+ "INFLUXDB_INIT_PASSWORD",
50
+ "INFLUXDB_INIT_ORG",
51
+ "INFLUXDB_INIT_BUCKET",
52
+ "INFLUXDB_INIT_TOKEN",
53
+ "ASTERISK_ARI_PROXY_URL",
54
+ "ASTERISK_ARI_USERNAME",
55
+ "ASTERISK_ARI_SECRET",
56
+ "NATS_URL"
57
+ ]);
58
+ (0, common_1.assertFileExists)(e.IDENTITY_PRIVATE_KEY_PATH);
59
+ (0, common_1.assertFileExists)(e.IDENTITY_PUBLIC_KEY_PATH);
60
+ // Frontend configurations
61
+ exports.APP_URL = e.APP_URL;
62
+ // Identity configurations
63
+ exports.IDENTITY_ISSUER = e.IDENTITY_ISSUER;
64
+ exports.IDENTITY_AUDIENCE = e.IDENTITY_AUDIENCE || "api";
65
+ exports.IDENTITY_PRIVATE_KEY = fs_1.default.readFileSync(e.IDENTITY_PRIVATE_KEY_PATH, "utf8");
66
+ exports.IDENTITY_PUBLIC_KEY = fs_1.default.readFileSync(e.IDENTITY_PUBLIC_KEY_PATH, "utf8");
67
+ exports.IDENTITY_ID_TOKEN_EXPIRES_IN = e.IDENTITY_ID_TOKEN_EXPIRES_IN || "15m";
68
+ exports.IDENTITY_ACCESS_TOKEN_EXPIRES_IN = e.IDENTITY_ACCESS_TOKEN_EXPIRES_IN || "15m";
69
+ exports.IDENTITY_REFRESH_TOKEN_EXPIRES_IN = e.IDENTITY_REFRESH_TOKEN_EXPIRES_IN || "24h";
70
+ // SMTP configurations
71
+ exports.SMTP_HOST = e.SMTP_HOST;
72
+ exports.SMTP_PORT = e.SMTP_PORT ? parseInt(e.SMTP_PORT) : 587;
73
+ exports.SMTP_SECURE = ((_a = e.SMTP_SECURE) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === "true";
74
+ exports.SMTP_AUTH_USER = e.SMTP_AUTH_USER;
75
+ exports.SMTP_AUTH_PASS = e.SMTP_AUTH_PASS;
76
+ exports.SMTP_SENDER = e.SMTP_SENDER;
77
+ // Custom email templates
78
+ exports.EMAIL_TEMPLATES_DIR = e.EMAIL_TEMPLATES_DIR;
79
+ // Default owner configurations (If OWNER_EMAIL is set, the system will create a default user and a workspace)
80
+ exports.OWNER_NAME = e.OWNER_NAME || "Admin";
81
+ exports.OWNER_EMAIL = e.OWNER_EMAIL;
82
+ exports.OWNER_PASSWORD = e.OWNER_PASSWORD || "changeme";
83
+ // InfluxDB configurations
84
+ exports.INFLUXDB_URL = e.INFLUXDB_URL;
85
+ exports.INFLUXDB_USERNAME = e.INFLUXDB_INIT_USERNAME;
86
+ exports.INFLUXDB_PASSWORD = e.INFLUXDB_INIT_PASSWORD;
87
+ exports.INFLUXDB_ORG = e.INFLUXDB_INIT_ORG;
88
+ exports.INFLUXDB_BUCKET = e.INFLUXDB_INIT_BUCKET;
89
+ exports.INFLUXDB_TOKEN = e.INFLUXDB_INIT_TOKEN;
90
+ // Other configurations
91
+ exports.CLOAK_ENCRYPTION_KEY = e.CLOAK_ENCRYPTION_KEY;
92
+ exports.ROUTR_API_ENDPOINT = e.ROUTR_API_ENDPOINT || "localhost:51908";
93
+ exports.ROUTR_DEFAULT_PEER_NAME = e.ROUTR_DEFAULT_PEER_NAME || "Voice Server";
94
+ exports.ROUTR_DEFAULT_PEER_USERNAME = e.ROUTR_DEFAULT_PEER_USERNAME || "voice";
95
+ exports.ROUTR_DEFAULT_PEER_AOR = e.ROUTR_DEFAULT_PEER_AOR || "sip:voice@default";
96
+ exports.ROUTR_DEFAULT_PEER_PASSWORD = e.ROUTR_DEFAULT_PEER_PASSWORD || "changeme";
97
+ exports.APISERVER_BIND_ADDR = e.APISERVER_BIND_ADDR || "0.0.0.0:50051";
98
+ exports.APISERVER_HOST = e.APISERVER_HOST || "apiserver";
99
+ exports.NATS_URL = e.NATS_URL;
100
+ exports.DEFAULT_NATS_QUEUE_GROUP = "apiserver";
101
+ exports.CALLS_CREATE_SUBJECT = "calls.create";
102
+ exports.CALLS_TRACK_CALL_SUBJECT = "calls.track";
103
+ exports.ASTERISK_CONTEXT = "local-ctx";
104
+ exports.ASTERISK_EXTENSION = "voice";
105
+ exports.ASTERISK_TRUNK = "routr";
106
+ exports.ASTERISK_ARI_PROXY_URL = e.ASTERISK_ARI_PROXY_URL;
107
+ exports.ASTERISK_ARI_USERNAME = e.ASTERISK_ARI_USERNAME;
108
+ exports.ASTERISK_ARI_SECRET = e.ASTERISK_ARI_SECRET;
109
+ exports.ASTERISK_SYSTEM_DOMAIN = e.ASTERISK_SYSTEM_DOMAIN || "sip.invalid";
110
+ exports.TTS_PATH_TO_FILES = e.TTS_PATH_TO_FILES || os_1.default.tmpdir();
111
+ exports.FILES_SERVER_PORT = e.FILES_SERVER_PORT
112
+ ? parseInt(e.FILES_SERVER_PORT)
113
+ : 9876;
114
+ exports.INTEGRATIONS_FILE = e.INTEGRATIONS_FILE;
@@ -0,0 +1,13 @@
1
+ type InfluxDbPub = {
2
+ url: string;
3
+ token: string;
4
+ org: string;
5
+ bucket: string;
6
+ };
7
+ type FonosterEvent = {
8
+ name: "cdr" | "error";
9
+ tag: string;
10
+ data: Record<string, string>;
11
+ };
12
+ declare function createInfluxDbPub(config: any): (event: any) => void;
13
+ export { createInfluxDbPub, FonosterEvent, InfluxDbPub };
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createInfluxDbPub = void 0;
4
+ /*
5
+ * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
6
+ * http://github.com/fonoster/fonoster
7
+ *
8
+ * This file is part of Fonoster
9
+ *
10
+ * Licensed under the MIT License (the "License");
11
+ * you may not use this file except in compliance with
12
+ * the License. You may obtain a copy of the License at
13
+ *
14
+ * https://opensource.org/licenses/MIT
15
+ *
16
+ * Unless required by applicable law or agreed to in writing, software
17
+ * distributed under the License is distributed on an "AS IS" BASIS,
18
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ * See the License for the specific language governing permissions and
20
+ * limitations under the License.
21
+ */
22
+ const logger_1 = require("@fonoster/logger");
23
+ const influxdb_client_1 = require("@influxdata/influxdb-client");
24
+ const logger = (0, logger_1.getLogger)({ service: "apiserver", filePath: __filename });
25
+ function createInfluxDbPub(config) {
26
+ const { url, token, org, bucket } = config;
27
+ const client = new influxdb_client_1.InfluxDB({ url, token });
28
+ const writeClient = client.getWriteApi(org, bucket, "ns");
29
+ return (event) => {
30
+ const point = new influxdb_client_1.Point(event.name).tag("ref", event.tag);
31
+ Object.entries(event.data).forEach(([key, value]) => {
32
+ if (typeof value === "number") {
33
+ point.intField(key, value); // Or floatField for floating-point numbers
34
+ }
35
+ else if (typeof value === "boolean") {
36
+ point.booleanField(key, value);
37
+ }
38
+ else if (key === "startedAt" || key === "endedAt") {
39
+ point.stringField(key, new Date(value.toString()).getTime());
40
+ }
41
+ else {
42
+ point.stringField(key, value);
43
+ }
44
+ });
45
+ try {
46
+ writeClient.writePoint(point);
47
+ writeClient.flush();
48
+ }
49
+ catch (error) {
50
+ logger.error("error writing to InfluxDB:", error);
51
+ }
52
+ };
53
+ }
54
+ exports.createInfluxDbPub = createInfluxDbPub;
@@ -0,0 +1,10 @@
1
+ import { NatsEventCallback } from "./types";
2
+ /**
3
+ * This method listens for registration events from Routr.
4
+ *
5
+ * @param {string} natsUrl - The NATS server URL
6
+ * @param {RegisterEventCallback} callback - The callback function
7
+ * @return {void}
8
+ */
9
+ declare function watchNats(natsUrl: string, callback: NatsEventCallback): void;
10
+ export { watchNats };
@@ -0,0 +1,85 @@
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 __asyncValues = (this && this.__asyncValues) || function (o) {
12
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
13
+ var m = o[Symbol.asyncIterator], i;
14
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
15
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
16
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.watchNats = void 0;
20
+ /*
21
+ * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
22
+ * http://github.com/fonoster/fonoster
23
+ *
24
+ * This file is part of Fonoster
25
+ *
26
+ * Licensed under the MIT License (the "License");
27
+ * you may not use this file except in compliance with
28
+ * the License. You may obtain a copy of the License at
29
+ *
30
+ * https://opensource.org/licenses/MIT
31
+ *
32
+ * Unless required by applicable law or agreed to in writing, software
33
+ * distributed under the License is distributed on an "AS IS" BASIS,
34
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
35
+ * See the License for the specific language governing permissions and
36
+ * limitations under the License.
37
+ */
38
+ const logger_1 = require("@fonoster/logger");
39
+ const nats_1 = require("nats");
40
+ const logger = (0, logger_1.getLogger)({ service: "apiserver", filePath: __filename });
41
+ const ROUTR_SUBJECT = "routr.endpoint.registered";
42
+ const FONOSTER_SUBJECT = "fonoster.events";
43
+ function streamEvents(subscription, callback) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ var _a, subscription_1, subscription_1_1;
46
+ var _b, e_1, _c, _d;
47
+ try {
48
+ // eslint-disable-next-line no-loops/no-loops
49
+ for (_a = true, subscription_1 = __asyncValues(subscription); subscription_1_1 = yield subscription_1.next(), _b = subscription_1_1.done, !_b; _a = true) {
50
+ _d = subscription_1_1.value;
51
+ _a = false;
52
+ const m = _d;
53
+ const messageStr = m.data.toString();
54
+ callback(Object.assign({}, JSON.parse(messageStr)));
55
+ }
56
+ }
57
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
58
+ finally {
59
+ try {
60
+ if (!_a && !_b && (_c = subscription_1.return)) yield _c.call(subscription_1);
61
+ }
62
+ finally { if (e_1) throw e_1.error; }
63
+ }
64
+ });
65
+ }
66
+ /**
67
+ * This method listens for registration events from Routr.
68
+ *
69
+ * @param {string} natsUrl - The NATS server URL
70
+ * @param {RegisterEventCallback} callback - The callback function
71
+ * @return {void}
72
+ */
73
+ function watchNats(natsUrl, callback) {
74
+ (() => __awaiter(this, void 0, void 0, function* () {
75
+ const nc = yield (0, nats_1.connect)({ servers: natsUrl });
76
+ const r = nc.subscribe(ROUTR_SUBJECT);
77
+ const f = nc.subscribe("foo");
78
+ logger.verbose("connected to nats", { natsUrl });
79
+ logger.verbose("subscribed to subjects", {
80
+ subjects: [ROUTR_SUBJECT, FONOSTER_SUBJECT]
81
+ });
82
+ yield Promise.all([streamEvents(r, callback), streamEvents(f, callback)]);
83
+ }))();
84
+ }
85
+ exports.watchNats = watchNats;
@@ -0,0 +1,8 @@
1
+ type RegisterEvent = {
2
+ aor: string;
3
+ registeredAt: Date;
4
+ expires: number;
5
+ extraHeaders: Record<string, string>;
6
+ };
7
+ type NatsEventCallback = (registerEvent: Record<string, unknown>) => void;
8
+ export { RegisterEvent, NatsEventCallback };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
4
+ * http://github.com/fonoster/fonoster
5
+ *
6
+ * This file is part of Fonoster
7
+ *
8
+ * Licensed under the MIT License (the "License");
9
+ * you may not use this file except in compliance with
10
+ * the License. You may obtain a copy of the License at
11
+ *
12
+ * https://opensource.org/licenses/MIT
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/index.js CHANGED
@@ -23,12 +23,21 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  __setModuleDefault(result, mod);
24
24
  return result;
25
25
  };
26
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
27
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
28
+ return new (P || (P = Promise))(function (resolve, reject) {
29
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
30
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
31
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
32
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
33
+ });
34
+ };
26
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
27
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
28
37
  };
29
38
  Object.defineProperty(exports, "__esModule", { value: true });
30
39
  /*
31
- * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
40
+ * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
32
41
  * http://github.com/fonoster/fonoster
33
42
  *
34
43
  * This file is part of Fonoster
@@ -45,125 +54,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
45
54
  * See the License for the specific language governing permissions and
46
55
  * limitations under the License.
47
56
  */
48
- const path_1 = require("path");
49
- const dotenv_1 = __importDefault(require("dotenv"));
50
- if (process.env.NODE_ENV === "dev") {
51
- dotenv_1.default.config({ path: (0, path_1.join)(__dirname, "../../../", ".env") });
52
- }
53
- const apps_1 = require("@fonoster/apps");
54
- const domains_1 = require("@fonoster/domains");
55
- const numbers_1 = require("@fonoster/numbers");
56
- const providers_1 = require("@fonoster/providers");
57
- const callmanager_1 = require("@fonoster/callmanager");
58
- const storage_1 = require("@fonoster/storage");
59
- const secrets_1 = require("@fonoster/secrets");
60
- const limiter_1 = require("@fonoster/limiter");
61
- const monitor_1 = require("@fonoster/monitor");
62
- const users_1 = require("@fonoster/users");
63
- const projects_1 = require("@fonoster/projects");
64
- const auth_1 = require("@fonoster/auth");
65
- const agents_1 = require("@fonoster/agents");
66
- const common_1 = require("@fonoster/common");
57
+ const identity_1 = require("@fonoster/identity");
58
+ const logger_1 = require("@fonoster/logger");
59
+ const types_1 = require("./calls/types");
60
+ const runServices_1 = __importDefault(require("./core/runServices"));
61
+ const upsertDefaultPeer_1 = require("./core/upsertDefaultPeer");
67
62
  const envs_1 = require("./envs");
68
- Promise.resolve().then(() => __importStar(require("@fonoster/autopilot")));
69
- Promise.resolve().then(() => __importStar(require("./upsert_peer")));
70
- Promise.resolve().then(() => __importStar(require("./ari_proxy")));
71
- const services = [
72
- {
73
- name: "apps",
74
- version: "v1beta1",
75
- service: apps_1.AppsService,
76
- server: new apps_1.AppsServer()
77
- },
78
- {
79
- name: "monitor",
80
- version: "v1beta1",
81
- service: monitor_1.MonitorService,
82
- server: new monitor_1.MonitorServer()
83
- },
84
- {
85
- name: "users",
86
- version: "v1beta1",
87
- service: users_1.UsersService,
88
- server: new users_1.UsersServer()
89
- },
90
- {
91
- name: "projects",
92
- version: "v1beta1",
93
- service: projects_1.ProjectsService,
94
- server: new projects_1.ProjectsServer()
95
- },
96
- {
97
- name: "auth",
98
- version: "v1beta1",
99
- service: auth_1.AuthService,
100
- server: new auth_1.AuthServer()
101
- },
102
- {
103
- name: "agents",
104
- version: "v1beta1",
105
- service: agents_1.AgentsService,
106
- server: new agents_1.AgentsServer()
107
- },
108
- {
109
- name: "domains",
110
- version: "v1beta1",
111
- service: domains_1.DomainsService,
112
- server: new domains_1.DomainsServer()
113
- },
114
- {
115
- name: "numbers",
116
- version: "v1beta1",
117
- service: numbers_1.NumbersService,
118
- server: new numbers_1.NumbersServer()
119
- },
120
- {
121
- name: "providers",
122
- version: "v1beta1",
123
- service: providers_1.ProvidersService,
124
- server: new providers_1.ProvidersServer()
125
- },
126
- {
127
- name: "callmanager",
128
- version: "v1beta1",
129
- service: callmanager_1.CallManagerService,
130
- server: new callmanager_1.CallManagerServer()
131
- },
132
- {
133
- name: "storage",
134
- version: "v1beta1",
135
- service: storage_1.StorageService,
136
- server: new storage_1.StorageServer()
137
- },
138
- {
139
- name: "secrets",
140
- version: "v1beta1",
141
- service: secrets_1.SecretsService,
142
- server: new secrets_1.SecretsServer()
143
- },
144
- {
145
- name: "limiter",
146
- version: "v1beta1",
147
- service: limiter_1.LimiterService,
148
- server: new limiter_1.LimiterServer()
149
- }
150
- ];
151
- const middlewares = [
152
- {
153
- name: "authenticator",
154
- middlewareObj: new auth_1.AuthMiddleware(envs_1.APISERVER_JWT_PRIVATE_KEY, [
155
- "/fonoster.auth.v1beta1.Auth/GetRole",
156
- "/fonoster.users.v1beta1.Users/CreateUser",
157
- "/fonoster.auth.v1beta1.Users/CreateUserCredentials",
158
- "/fonoster.auth.v1beta1.Limiter/CheckAuthorized"
159
- ]).middleware
160
- },
161
- {
162
- name: "limiter",
163
- middlewareObj: (0, auth_1.createLimiterMiddleware)([
164
- "/fonoster.auth.v1beta1.Auth/GetRole",
165
- "/fonoster.auth.v1beta1.Limiter/CheckAuthorized"
166
- ])
167
- }
168
- ];
169
- (0, common_1.runServices)(services, middlewares);
63
+ const createInfluxDbPub_1 = require("./events/createInfluxDbPub");
64
+ const nats_1 = require("./events/nats");
65
+ Promise.resolve().then(() => __importStar(require("./core/removeSwaggerNotice")));
66
+ function main() {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ if (envs_1.OWNER_EMAIL) {
69
+ const user = {
70
+ name: envs_1.OWNER_NAME,
71
+ email: envs_1.OWNER_EMAIL,
72
+ password: envs_1.OWNER_PASSWORD
73
+ };
74
+ yield (0, identity_1.upsertDefaultUser)(user);
75
+ }
76
+ // Upsert a Peer for the default region, if it doesn't already exist
77
+ yield (0, upsertDefaultPeer_1.upsertDefaultPeer)();
78
+ // Start the gRPC server
79
+ (0, runServices_1.default)().catch(logger.error);
80
+ const pubToInfluxDb = (0, createInfluxDbPub_1.createInfluxDbPub)({
81
+ url: envs_1.INFLUXDB_URL,
82
+ token: envs_1.INFLUXDB_TOKEN,
83
+ org: envs_1.INFLUXDB_ORG,
84
+ bucket: envs_1.INFLUXDB_BUCKET
85
+ });
86
+ // Subscribe to NATs events
87
+ (0, nats_1.watchNats)(envs_1.NATS_URL, (event) => {
88
+ logger.info("Received event", { event });
89
+ // FIXME: Remember to re-map callRef from callId
90
+ const callRecord = event;
91
+ pubToInfluxDb({
92
+ name: types_1.CALL_DETAIL_RECORD_MEASUREMENT,
93
+ tag: callRecord.callRef,
94
+ data: event
95
+ });
96
+ });
97
+ });
98
+ }
99
+ const logger = (0, logger_1.getLogger)({ service: "apiserver", filePath: __filename });
100
+ main().catch(logger.error);
@@ -0,0 +1,37 @@
1
+ import { Prisma } from "../core/db";
2
+ declare function buildService(prisma: Prisma): {
3
+ definition: {
4
+ serviceName: string;
5
+ pckg: string;
6
+ version: string;
7
+ proto: string;
8
+ };
9
+ handlers: {
10
+ createSecret: (call: {
11
+ request: import("./types").CreateSecretRequest;
12
+ }, callback: (error: import("@fonoster/common").GrpcErrorMessage, response?: {
13
+ ref: string;
14
+ }) => void) => Promise<void>;
15
+ getSecret: (call: {
16
+ request: {
17
+ ref: string;
18
+ };
19
+ }, callback: (error?: import("@fonoster/common").GrpcErrorMessage, response?: import("./types").Secret) => void) => Promise<void>;
20
+ listSecrets: (call: {
21
+ request: import("./types").ListSecretsRequest;
22
+ }, callback: (error: import("@fonoster/common").GrpcErrorMessage, response?: import("./types").ListSecretsResponse) => void) => Promise<void>;
23
+ deleteSecret: (call: {
24
+ request: {
25
+ ref: string;
26
+ };
27
+ }, callback: (error?: import("@fonoster/common").GrpcErrorMessage, response?: {
28
+ ref: string;
29
+ }) => void) => Promise<void>;
30
+ updateSecret: (call: {
31
+ request: import("./types").UpdateSecretRequest;
32
+ }, callback: (error?: import("@fonoster/common").GrpcErrorMessage, response?: {
33
+ ref: string;
34
+ }) => void) => Promise<void>;
35
+ };
36
+ };
37
+ export { buildService };
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildService = void 0;
4
+ /*
5
+ * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
6
+ * http://github.com/fonoster/fonoster
7
+ *
8
+ * This file is part of Fonoster
9
+ *
10
+ * Licensed under the MIT License (the "License");
11
+ * you may not use this file except in compliance with
12
+ * the License. You may obtain a copy of the License at
13
+ *
14
+ * https://opensource.org/licenses/MIT
15
+ *
16
+ * Unless required by applicable law or agreed to in writing, software
17
+ * distributed under the License is distributed on an "AS IS" BASIS,
18
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ * See the License for the specific language governing permissions and
20
+ * limitations under the License.
21
+ */
22
+ const createSecret_1 = require("./createSecret");
23
+ const deleteSecret_1 = require("./deleteSecret");
24
+ const getSecret_1 = require("./getSecret");
25
+ const listSecrets_1 = require("./listSecrets");
26
+ const updateSecret_1 = require("./updateSecret");
27
+ function buildService(prisma) {
28
+ return {
29
+ definition: {
30
+ serviceName: "Secrets",
31
+ pckg: "secrets",
32
+ version: "v1beta2",
33
+ proto: "secrets.proto"
34
+ },
35
+ handlers: {
36
+ createSecret: (0, createSecret_1.createSecret)(prisma),
37
+ getSecret: (0, getSecret_1.getSecret)(prisma),
38
+ listSecrets: (0, listSecrets_1.listSecrets)(prisma),
39
+ deleteSecret: (0, deleteSecret_1.deleteSecret)(prisma),
40
+ updateSecret: (0, updateSecret_1.updateSecret)(prisma)
41
+ }
42
+ };
43
+ }
44
+ exports.buildService = buildService;
@@ -0,0 +1,16 @@
1
+ import { Prisma } from "../core/db";
2
+ declare function createGetFnUtil(prisma: Prisma): (ref: string) => Promise<{
3
+ extended: {
4
+ accessKeyId: string;
5
+ };
6
+ name: string;
7
+ secret: string;
8
+ ref: string;
9
+ accessKeyId: string;
10
+ createdAt: Date;
11
+ updatedAt: Date;
12
+ } & {
13
+ createdAt: number;
14
+ updatedAt: number;
15
+ }>;
16
+ export { createGetFnUtil };
@@ -0,0 +1,46 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createGetFnUtil = void 0;
13
+ /*
14
+ * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
15
+ * http://github.com/fonoster/fonoster
16
+ *
17
+ * This file is part of Fonoster
18
+ *
19
+ * Licensed under the MIT License (the "License");
20
+ * you may not use this file except in compliance with
21
+ * the License. You may obtain a copy of the License at
22
+ *
23
+ * https://opensource.org/licenses/MIT
24
+ *
25
+ * Unless required by applicable law or agreed to in writing, software
26
+ * distributed under the License is distributed on an "AS IS" BASIS,
27
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28
+ * See the License for the specific language governing permissions and
29
+ * limitations under the License.
30
+ */
31
+ const common_1 = require("@fonoster/common");
32
+ const notFoundError_1 = require("../core/notFoundError");
33
+ function createGetFnUtil(prisma) {
34
+ return (ref) => __awaiter(this, void 0, void 0, function* () {
35
+ const response = yield prisma.secret.findUnique({
36
+ where: { ref }
37
+ });
38
+ if (!response) {
39
+ throw (0, notFoundError_1.notFoundError)(`Secret not found: ${ref}`);
40
+ }
41
+ return (0, common_1.datesMapper)(Object.assign(Object.assign({}, response), { extended: {
42
+ accessKeyId: response.accessKeyId
43
+ } }));
44
+ });
45
+ }
46
+ exports.createGetFnUtil = createGetFnUtil;
@@ -0,0 +1,7 @@
1
+ import { GrpcErrorMessage } from "@fonoster/common";
2
+ import { CreateSecretRequest, CreateSecretResponse } from "./types";
3
+ import { Prisma } from "../core/db";
4
+ declare function createSecret(prisma: Prisma): (call: {
5
+ request: CreateSecretRequest;
6
+ }, callback: (error: GrpcErrorMessage, response?: CreateSecretResponse) => void) => Promise<void>;
7
+ export { createSecret };