@aj-archipelago/cortex 1.0.20 → 1.0.22

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.
@@ -86,5 +86,6 @@
86
86
  }
87
87
  },
88
88
  "enableCache": false,
89
- "enableRestEndpoints": false
89
+ "enableRestEndpoints": false,
90
+ "subscriptionKeepAlive": 10000
90
91
  }
@@ -0,0 +1,10 @@
1
+ *.js.map
2
+ *.ts
3
+ .git*
4
+ .vscode
5
+ __azurite_db*__.json
6
+ __blobstorage__
7
+ __queuestorage__
8
+ local.settings.json
9
+ test
10
+ tsconfig.json
@@ -0,0 +1,15 @@
1
+ {
2
+ "version": "2.0",
3
+ "logging": {
4
+ "applicationInsights": {
5
+ "samplingSettings": {
6
+ "isEnabled": true,
7
+ "excludedTypes": "Request"
8
+ }
9
+ }
10
+ },
11
+ "extensionBundle": {
12
+ "id": "Microsoft.Azure.Functions.ExtensionBundle",
13
+ "version": "[3.*, 4.0.0)"
14
+ }
15
+ }
@@ -0,0 +1,142 @@
1
+ {
2
+ "name": "healthcheck",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "healthcheck",
9
+ "version": "1.0.0",
10
+ "dependencies": {
11
+ "@azure/functions": "^4.0.0",
12
+ "axios": "^1.6.0"
13
+ }
14
+ },
15
+ "node_modules/@azure/functions": {
16
+ "version": "4.0.1",
17
+ "resolved": "https://registry.npmjs.org/@azure/functions/-/functions-4.0.1.tgz",
18
+ "integrity": "sha512-Ol38b4XOlu6IDkLnO91HaYeo2utMixG0LIA1NR9Qehu17U/cGjNx+bAcOEdNlSJWNYh5ChhzjxA/uFB5dQJtmg==",
19
+ "dependencies": {
20
+ "long": "^4.0.0",
21
+ "undici": "^5.13.0"
22
+ },
23
+ "engines": {
24
+ "node": ">=18.0"
25
+ }
26
+ },
27
+ "node_modules/@fastify/busboy": {
28
+ "version": "2.0.0",
29
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz",
30
+ "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==",
31
+ "engines": {
32
+ "node": ">=14"
33
+ }
34
+ },
35
+ "node_modules/asynckit": {
36
+ "version": "0.4.0",
37
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
38
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
39
+ },
40
+ "node_modules/axios": {
41
+ "version": "1.6.0",
42
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
43
+ "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
44
+ "dependencies": {
45
+ "follow-redirects": "^1.15.0",
46
+ "form-data": "^4.0.0",
47
+ "proxy-from-env": "^1.1.0"
48
+ }
49
+ },
50
+ "node_modules/combined-stream": {
51
+ "version": "1.0.8",
52
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
53
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
54
+ "dependencies": {
55
+ "delayed-stream": "~1.0.0"
56
+ },
57
+ "engines": {
58
+ "node": ">= 0.8"
59
+ }
60
+ },
61
+ "node_modules/delayed-stream": {
62
+ "version": "1.0.0",
63
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
64
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
65
+ "engines": {
66
+ "node": ">=0.4.0"
67
+ }
68
+ },
69
+ "node_modules/follow-redirects": {
70
+ "version": "1.15.3",
71
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
72
+ "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
73
+ "funding": [
74
+ {
75
+ "type": "individual",
76
+ "url": "https://github.com/sponsors/RubenVerborgh"
77
+ }
78
+ ],
79
+ "engines": {
80
+ "node": ">=4.0"
81
+ },
82
+ "peerDependenciesMeta": {
83
+ "debug": {
84
+ "optional": true
85
+ }
86
+ }
87
+ },
88
+ "node_modules/form-data": {
89
+ "version": "4.0.0",
90
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
91
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
92
+ "dependencies": {
93
+ "asynckit": "^0.4.0",
94
+ "combined-stream": "^1.0.8",
95
+ "mime-types": "^2.1.12"
96
+ },
97
+ "engines": {
98
+ "node": ">= 6"
99
+ }
100
+ },
101
+ "node_modules/long": {
102
+ "version": "4.0.0",
103
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
104
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
105
+ },
106
+ "node_modules/mime-db": {
107
+ "version": "1.52.0",
108
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
109
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
110
+ "engines": {
111
+ "node": ">= 0.6"
112
+ }
113
+ },
114
+ "node_modules/mime-types": {
115
+ "version": "2.1.35",
116
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
117
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
118
+ "dependencies": {
119
+ "mime-db": "1.52.0"
120
+ },
121
+ "engines": {
122
+ "node": ">= 0.6"
123
+ }
124
+ },
125
+ "node_modules/proxy-from-env": {
126
+ "version": "1.1.0",
127
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
128
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
129
+ },
130
+ "node_modules/undici": {
131
+ "version": "5.27.0",
132
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.0.tgz",
133
+ "integrity": "sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg==",
134
+ "dependencies": {
135
+ "@fastify/busboy": "^2.0.0"
136
+ },
137
+ "engines": {
138
+ "node": ">=14.0"
139
+ }
140
+ }
141
+ }
142
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "healthcheck",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "scripts": {
6
+ "start": "func start",
7
+ "test": "echo \"No tests yet...\""
8
+ },
9
+ "dependencies": {
10
+ "@azure/functions": "^4.0.0",
11
+ "axios": "^1.6.0"
12
+ },
13
+ "main": "src/functions/*.js"
14
+ }
@@ -0,0 +1,13 @@
1
+ const { app } = require('@azure/functions');
2
+ const { transcribeHealthCheck } = require('../transcribeHealthCheck');
3
+
4
+ app.timer('timerTrigger', {
5
+ schedule: '0 0 * * * *',
6
+ // schedule: '0 * * * * *',
7
+ runOnStartup: true,
8
+ handler: async (myTimer, context) => {
9
+ context.log('Timer function starting request.');
10
+ await transcribeHealthCheck(context, 0);
11
+ context.log('Timer function processed request.');
12
+ }
13
+ });
@@ -0,0 +1,93 @@
1
+ const axios = require('axios');
2
+
3
+ const API_URL = process.env.API_URL;
4
+ const API_SUBSCRIPTION_KEY = process.env.API_SUBSCRIPTION_KEY;
5
+
6
+ async function transcribeHealthCheck(context, runCount) {
7
+ try {
8
+ const query = `
9
+ query Transcribe($file: String!, $text: String, $wordTimestamped: Boolean, $responseFormat: String, $async: Boolean) {
10
+ transcribe(
11
+ file: $file
12
+ text: $text
13
+ wordTimestamped: $wordTimestamped
14
+ responseFormat: $responseFormat
15
+ async: $async
16
+ ) {
17
+ result
18
+ __typename
19
+ }
20
+ }
21
+ `;
22
+
23
+ const variables = {
24
+ "file": "https://www.youtube.com/watch?v=SCvWXEFb8jE",
25
+ "wordTimestamped": true,
26
+ "responseFormat": "srt",
27
+ "async": false
28
+ };
29
+
30
+ const response = await axios({
31
+ url: API_URL,
32
+ method: 'post',
33
+ data: {
34
+ query: query,
35
+ variables: variables
36
+ },
37
+ headers: {
38
+ 'Ocp-Apim-Subscription-Key': API_SUBSCRIPTION_KEY
39
+ },
40
+ });
41
+
42
+ context.log(response.data);
43
+
44
+ const transcribeText = response.data.data.transcribe.result;
45
+
46
+ if (!validateTranscribeText(transcribeText)) {
47
+ throw new Error("Invalid transcribe text");
48
+ } else {
49
+ context.log("Transcribe text is valid");
50
+ }
51
+
52
+ } catch (error) {
53
+ context.error(error);
54
+ if(runCount < 1){
55
+ transcribeHealthCheck(context, runCount + 1);
56
+ }else{
57
+ throw new Error("Error in transcribeHealthCheck");
58
+ }
59
+ }
60
+ }
61
+
62
+
63
+ //validate transcribeText similar to below str:
64
+ /*
65
+ '1
66
+ 00:00:00,140 --> 00:00:00,640
67
+ You
68
+
69
+ 2
70
+ 00:00:00,640 --> 00:00:00,820
71
+ may
72
+ ...cor
73
+ */
74
+ // Validate transcribeText
75
+ const validateTranscribeText = (text) => {
76
+ let numberLineRegex = /^\d+$/m;
77
+ let timeFormatRegex = /^\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}$/m;
78
+ let wordLineRegex = /^\w+$/m;
79
+
80
+ let hasNumberLine = numberLineRegex.test(text);
81
+ let hasTimeFormatLine = timeFormatRegex.test(text);
82
+ let hasWordLine = wordLineRegex.test(text);
83
+
84
+ if(hasNumberLine && hasTimeFormatLine && hasWordLine){
85
+ return true;
86
+ }
87
+ return false;
88
+ }
89
+
90
+
91
+
92
+
93
+ module.exports = { transcribeHealthCheck };
@@ -1,6 +1,4 @@
1
1
  import fs from 'fs';
2
- import { path as ffmpegPath } from '@ffmpeg-installer/ffmpeg';
3
- import { path as ffprobePath } from '@ffprobe-installer/ffprobe';
4
2
  import path from 'path';
5
3
  import ffmpeg from 'fluent-ffmpeg';
6
4
  import { v4 as uuidv4 } from 'uuid';
@@ -10,10 +8,6 @@ import { promisify } from 'util';
10
8
  import axios from 'axios';
11
9
  import { ensureEncoded } from './helper.js';
12
10
 
13
- ffmpeg.setFfmpegPath(ffmpegPath);
14
- ffmpeg.setFfprobePath(ffprobePath);
15
- console.log(`ffmpegPath: ${ffmpegPath}`);
16
- console.log(`ffprobePath: ${ffprobePath}`);
17
11
 
18
12
  const ffmpegProbe = promisify(ffmpeg.ffprobe);
19
13
 
@@ -9,8 +9,7 @@
9
9
  "version": "1.0.0",
10
10
  "dependencies": {
11
11
  "@azure/storage-blob": "^12.13.0",
12
- "@ffmpeg-installer/ffmpeg": "^1.1.0",
13
- "@ffprobe-installer/ffprobe": "^2.0.0",
12
+ "@distube/ytdl-core": "^4.13.2",
14
13
  "axios": "^1.3.6",
15
14
  "busboy": "^1.6.0",
16
15
  "cors": "^2.8.5",
@@ -22,8 +21,8 @@
22
21
  "pdfjs-dist": "^3.9.179",
23
22
  "public-ip": "^6.0.1",
24
23
  "uuid": "^9.0.0",
25
- "ytdl-core": "git+ssh://git@github.com:khlevon/node-ytdl-core.git#v4.11.4-patch.2",
26
- "xlsx": "^0.18.5"
24
+ "xlsx": "^0.18.5",
25
+ "ytdl-core": "git+ssh://git@github.com:khlevon/node-ytdl-core.git#v4.11.4-patch.2"
27
26
  }
28
27
  },
29
28
  "node_modules/@azure/abort-controller": {
@@ -158,242 +157,28 @@
158
157
  "node": ">=14.0.0"
159
158
  }
160
159
  },
161
- "node_modules/@ffmpeg-installer/darwin-arm64": {
162
- "version": "4.1.5",
163
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-arm64/-/darwin-arm64-4.1.5.tgz",
164
- "integrity": "sha512-hYqTiP63mXz7wSQfuqfFwfLOfwwFChUedeCVKkBtl/cliaTM7/ePI9bVzfZ2c+dWu3TqCwLDRWNSJ5pqZl8otA==",
165
- "cpu": [
166
- "arm64"
167
- ],
168
- "hasInstallScript": true,
169
- "optional": true,
170
- "os": [
171
- "darwin"
172
- ]
173
- },
174
- "node_modules/@ffmpeg-installer/darwin-x64": {
175
- "version": "4.1.0",
176
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-x64/-/darwin-x64-4.1.0.tgz",
177
- "integrity": "sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==",
178
- "cpu": [
179
- "x64"
180
- ],
181
- "hasInstallScript": true,
182
- "optional": true,
183
- "os": [
184
- "darwin"
185
- ]
186
- },
187
- "node_modules/@ffmpeg-installer/ffmpeg": {
188
- "version": "1.1.0",
189
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/ffmpeg/-/ffmpeg-1.1.0.tgz",
190
- "integrity": "sha512-Uq4rmwkdGxIa9A6Bd/VqqYbT7zqh1GrT5/rFwCwKM70b42W5gIjWeVETq6SdcL0zXqDtY081Ws/iJWhr1+xvQg==",
191
- "optionalDependencies": {
192
- "@ffmpeg-installer/darwin-arm64": "4.1.5",
193
- "@ffmpeg-installer/darwin-x64": "4.1.0",
194
- "@ffmpeg-installer/linux-arm": "4.1.3",
195
- "@ffmpeg-installer/linux-arm64": "4.1.4",
196
- "@ffmpeg-installer/linux-ia32": "4.1.0",
197
- "@ffmpeg-installer/linux-x64": "4.1.0",
198
- "@ffmpeg-installer/win32-ia32": "4.1.0",
199
- "@ffmpeg-installer/win32-x64": "4.1.0"
160
+ "node_modules/@distube/ytdl-core": {
161
+ "version": "4.13.2",
162
+ "resolved": "https://registry.npmjs.org/@distube/ytdl-core/-/ytdl-core-4.13.2.tgz",
163
+ "integrity": "sha512-FBjy4LXsBv34qFrmEF1dSbKWQtqB+yd0dt4MYYUq8oYys2Bvqps3QSFGTUZO5QA6nKD/XRsMJfcG5lgEJaUqiQ==",
164
+ "dependencies": {
165
+ "http-cookie-agent": "^5.0.4",
166
+ "m3u8stream": "^0.8.6",
167
+ "sax": "^1.2.4",
168
+ "tough-cookie": "^4.1.3",
169
+ "undici": "^5.25.2"
170
+ },
171
+ "engines": {
172
+ "node": ">=12"
200
173
  }
201
174
  },
202
- "node_modules/@ffmpeg-installer/linux-arm": {
203
- "version": "4.1.3",
204
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm/-/linux-arm-4.1.3.tgz",
205
- "integrity": "sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==",
206
- "cpu": [
207
- "arm"
208
- ],
209
- "hasInstallScript": true,
210
- "optional": true,
211
- "os": [
212
- "linux"
213
- ]
214
- },
215
- "node_modules/@ffmpeg-installer/linux-arm64": {
216
- "version": "4.1.4",
217
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm64/-/linux-arm64-4.1.4.tgz",
218
- "integrity": "sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==",
219
- "cpu": [
220
- "arm64"
221
- ],
222
- "hasInstallScript": true,
223
- "optional": true,
224
- "os": [
225
- "linux"
226
- ]
227
- },
228
- "node_modules/@ffmpeg-installer/linux-ia32": {
229
- "version": "4.1.0",
230
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-ia32/-/linux-ia32-4.1.0.tgz",
231
- "integrity": "sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==",
232
- "cpu": [
233
- "ia32"
234
- ],
235
- "hasInstallScript": true,
236
- "optional": true,
237
- "os": [
238
- "linux"
239
- ]
240
- },
241
- "node_modules/@ffmpeg-installer/linux-x64": {
242
- "version": "4.1.0",
243
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-x64/-/linux-x64-4.1.0.tgz",
244
- "integrity": "sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==",
245
- "cpu": [
246
- "x64"
247
- ],
248
- "hasInstallScript": true,
249
- "optional": true,
250
- "os": [
251
- "linux"
252
- ]
253
- },
254
- "node_modules/@ffmpeg-installer/win32-ia32": {
255
- "version": "4.1.0",
256
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-ia32/-/win32-ia32-4.1.0.tgz",
257
- "integrity": "sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==",
258
- "cpu": [
259
- "ia32"
260
- ],
261
- "optional": true,
262
- "os": [
263
- "win32"
264
- ]
265
- },
266
- "node_modules/@ffmpeg-installer/win32-x64": {
267
- "version": "4.1.0",
268
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-x64/-/win32-x64-4.1.0.tgz",
269
- "integrity": "sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==",
270
- "cpu": [
271
- "x64"
272
- ],
273
- "optional": true,
274
- "os": [
275
- "win32"
276
- ]
277
- },
278
- "node_modules/@ffprobe-installer/darwin-arm64": {
279
- "version": "5.0.1",
280
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/darwin-arm64/-/darwin-arm64-5.0.1.tgz",
281
- "integrity": "sha512-vwNCNjokH8hfkbl6m95zICHwkSzhEvDC3GVBcUp5HX8+4wsX10SP3B+bGur7XUzTIZ4cQpgJmEIAx6TUwRepMg==",
282
- "cpu": [
283
- "arm64"
284
- ],
285
- "hasInstallScript": true,
286
- "optional": true,
287
- "os": [
288
- "darwin"
289
- ]
290
- },
291
- "node_modules/@ffprobe-installer/darwin-x64": {
292
- "version": "5.1.0",
293
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/darwin-x64/-/darwin-x64-5.1.0.tgz",
294
- "integrity": "sha512-J+YGscZMpQclFg31O4cfVRGmDpkVsQ2fZujoUdMAAYcP0NtqpC49Hs3SWJpBdsGB4VeqOt5TTm1vSZQzs1NkhA==",
295
- "cpu": [
296
- "x64"
297
- ],
298
- "hasInstallScript": true,
299
- "optional": true,
300
- "os": [
301
- "darwin"
302
- ]
303
- },
304
- "node_modules/@ffprobe-installer/ffprobe": {
305
- "version": "2.0.0",
306
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/ffprobe/-/ffprobe-2.0.0.tgz",
307
- "integrity": "sha512-BT5BHZZSOyFFbHd+3zFdEQCNfBORYwNtqre7l1dMmqvDha60G/7rEDCSeCX4sNLuCcNR4IxvGHicfRQie7SNUA==",
175
+ "node_modules/@fastify/busboy": {
176
+ "version": "2.1.0",
177
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz",
178
+ "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==",
308
179
  "engines": {
309
- "node": ">=14.21.2"
310
- },
311
- "optionalDependencies": {
312
- "@ffprobe-installer/darwin-arm64": "5.0.1",
313
- "@ffprobe-installer/darwin-x64": "5.1.0",
314
- "@ffprobe-installer/linux-arm": "5.1.0",
315
- "@ffprobe-installer/linux-arm64": "5.1.0",
316
- "@ffprobe-installer/linux-ia32": "5.1.0",
317
- "@ffprobe-installer/linux-x64": "5.1.0",
318
- "@ffprobe-installer/win32-ia32": "5.1.0",
319
- "@ffprobe-installer/win32-x64": "5.1.0"
320
- }
321
- },
322
- "node_modules/@ffprobe-installer/linux-arm": {
323
- "version": "5.1.0",
324
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/linux-arm/-/linux-arm-5.1.0.tgz",
325
- "integrity": "sha512-y34AEive/M5/++RcuRJZciICYYRkmTh5gK6th7raydgfQhIYy/8AXAIGKqD5Hn855i6o/RpEIPjk7DWpEuwrdA==",
326
- "cpu": [
327
- "arm"
328
- ],
329
- "hasInstallScript": true,
330
- "optional": true,
331
- "os": [
332
- "linux"
333
- ]
334
- },
335
- "node_modules/@ffprobe-installer/linux-arm64": {
336
- "version": "5.1.0",
337
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/linux-arm64/-/linux-arm64-5.1.0.tgz",
338
- "integrity": "sha512-u5b3r3/39eZmEV0X4OKUfp6gO3lOyVIpRO4WU+5Eb6omWYy+k0OkVbRffK4qJF1Uz8irwzyiDsmUZ6vE13/abQ==",
339
- "cpu": [
340
- "arm64"
341
- ],
342
- "hasInstallScript": true,
343
- "optional": true,
344
- "os": [
345
- "linux"
346
- ]
347
- },
348
- "node_modules/@ffprobe-installer/linux-ia32": {
349
- "version": "5.1.0",
350
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/linux-ia32/-/linux-ia32-5.1.0.tgz",
351
- "integrity": "sha512-Uqk4sYYQxz0KQmEQ2xxbVu/KiDX7Pw6wRDpCYv0sW49GI3wpX2Umqi/Kmtr0tpCvxctVoCdf/U71EAxH2Lztdg==",
352
- "cpu": [
353
- "ia32"
354
- ],
355
- "hasInstallScript": true,
356
- "optional": true,
357
- "os": [
358
- "linux"
359
- ]
360
- },
361
- "node_modules/@ffprobe-installer/linux-x64": {
362
- "version": "5.1.0",
363
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/linux-x64/-/linux-x64-5.1.0.tgz",
364
- "integrity": "sha512-r7cGOjNb8AMnKAEvz5f8N/WsWsre02LhAfDKZX0m5J0bsrYgs2HUlnnQiwjRCH9CYXYerjYqq592o/GXvxDS+Q==",
365
- "cpu": [
366
- "x64"
367
- ],
368
- "hasInstallScript": true,
369
- "optional": true,
370
- "os": [
371
- "linux"
372
- ]
373
- },
374
- "node_modules/@ffprobe-installer/win32-ia32": {
375
- "version": "5.1.0",
376
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/win32-ia32/-/win32-ia32-5.1.0.tgz",
377
- "integrity": "sha512-5O3vOoNRxmut0/Nu9vSazTdSHasrr+zPT2B3Hm7kjmO3QVFcIfVImS6ReQnZeSy8JPJOqXts5kX5x/3KOX54XQ==",
378
- "cpu": [
379
- "ia32"
380
- ],
381
- "optional": true,
382
- "os": [
383
- "win32"
384
- ]
385
- },
386
- "node_modules/@ffprobe-installer/win32-x64": {
387
- "version": "5.1.0",
388
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/win32-x64/-/win32-x64-5.1.0.tgz",
389
- "integrity": "sha512-jMGYeAgkrdn4e2vvYt/qakgHRE3CPju4bn5TmdPfoAm1BlX1mY9cyMd8gf5vSzI8gH8Zq5WQAyAkmekX/8TSTg==",
390
- "cpu": [
391
- "x64"
392
- ],
393
- "optional": true,
394
- "os": [
395
- "win32"
396
- ]
180
+ "node": ">=14"
181
+ }
397
182
  },
398
183
  "node_modules/@ioredis/commands": {
399
184
  "version": "1.2.0",
@@ -1406,6 +1191,44 @@
1406
1191
  "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
1407
1192
  "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
1408
1193
  },
1194
+ "node_modules/http-cookie-agent": {
1195
+ "version": "5.0.4",
1196
+ "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz",
1197
+ "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==",
1198
+ "dependencies": {
1199
+ "agent-base": "^7.1.0"
1200
+ },
1201
+ "engines": {
1202
+ "node": ">=14.18.0 <15.0.0 || >=16.0.0"
1203
+ },
1204
+ "funding": {
1205
+ "url": "https://github.com/sponsors/3846masa"
1206
+ },
1207
+ "peerDependencies": {
1208
+ "deasync": "^0.1.26",
1209
+ "tough-cookie": "^4.0.0",
1210
+ "undici": "^5.11.0"
1211
+ },
1212
+ "peerDependenciesMeta": {
1213
+ "deasync": {
1214
+ "optional": true
1215
+ },
1216
+ "undici": {
1217
+ "optional": true
1218
+ }
1219
+ }
1220
+ },
1221
+ "node_modules/http-cookie-agent/node_modules/agent-base": {
1222
+ "version": "7.1.0",
1223
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
1224
+ "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
1225
+ "dependencies": {
1226
+ "debug": "^4.3.4"
1227
+ },
1228
+ "engines": {
1229
+ "node": ">= 14"
1230
+ }
1231
+ },
1409
1232
  "node_modules/http-errors": {
1410
1233
  "version": "2.0.0",
1411
1234
  "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@@ -2067,6 +1890,11 @@
2067
1890
  "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
2068
1891
  "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
2069
1892
  },
1893
+ "node_modules/psl": {
1894
+ "version": "1.9.0",
1895
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
1896
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
1897
+ },
2070
1898
  "node_modules/public-ip": {
2071
1899
  "version": "6.0.1",
2072
1900
  "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-6.0.1.tgz",
@@ -2084,6 +1912,14 @@
2084
1912
  "url": "https://github.com/sponsors/sindresorhus"
2085
1913
  }
2086
1914
  },
1915
+ "node_modules/punycode": {
1916
+ "version": "2.3.1",
1917
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
1918
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
1919
+ "engines": {
1920
+ "node": ">=6"
1921
+ }
1922
+ },
2087
1923
  "node_modules/qs": {
2088
1924
  "version": "6.11.0",
2089
1925
  "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -2098,6 +1934,11 @@
2098
1934
  "url": "https://github.com/sponsors/ljharb"
2099
1935
  }
2100
1936
  },
1937
+ "node_modules/querystringify": {
1938
+ "version": "2.2.0",
1939
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
1940
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
1941
+ },
2101
1942
  "node_modules/quick-lru": {
2102
1943
  "version": "5.1.1",
2103
1944
  "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
@@ -2164,6 +2005,11 @@
2164
2005
  "node": ">=4"
2165
2006
  }
2166
2007
  },
2008
+ "node_modules/requires-port": {
2009
+ "version": "1.0.0",
2010
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
2011
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
2012
+ },
2167
2013
  "node_modules/resolve-alpn": {
2168
2014
  "version": "1.2.1",
2169
2015
  "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
@@ -2484,6 +2330,20 @@
2484
2330
  "node": ">=0.6"
2485
2331
  }
2486
2332
  },
2333
+ "node_modules/tough-cookie": {
2334
+ "version": "4.1.3",
2335
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
2336
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
2337
+ "dependencies": {
2338
+ "psl": "^1.1.33",
2339
+ "punycode": "^2.1.1",
2340
+ "universalify": "^0.2.0",
2341
+ "url-parse": "^1.5.3"
2342
+ },
2343
+ "engines": {
2344
+ "node": ">=6"
2345
+ }
2346
+ },
2487
2347
  "node_modules/tr46": {
2488
2348
  "version": "0.0.3",
2489
2349
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -2519,6 +2379,25 @@
2519
2379
  "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
2520
2380
  "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
2521
2381
  },
2382
+ "node_modules/undici": {
2383
+ "version": "5.27.2",
2384
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz",
2385
+ "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==",
2386
+ "dependencies": {
2387
+ "@fastify/busboy": "^2.0.0"
2388
+ },
2389
+ "engines": {
2390
+ "node": ">=14.0"
2391
+ }
2392
+ },
2393
+ "node_modules/universalify": {
2394
+ "version": "0.2.0",
2395
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
2396
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
2397
+ "engines": {
2398
+ "node": ">= 4.0.0"
2399
+ }
2400
+ },
2522
2401
  "node_modules/unpipe": {
2523
2402
  "version": "1.0.0",
2524
2403
  "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -2527,6 +2406,15 @@
2527
2406
  "node": ">= 0.8"
2528
2407
  }
2529
2408
  },
2409
+ "node_modules/url-parse": {
2410
+ "version": "1.5.10",
2411
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
2412
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
2413
+ "dependencies": {
2414
+ "querystringify": "^2.1.1",
2415
+ "requires-port": "^1.0.0"
2416
+ }
2417
+ },
2530
2418
  "node_modules/util-deprecate": {
2531
2419
  "version": "1.0.2",
2532
2420
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -2777,131 +2665,22 @@
2777
2665
  "tslib": "^2.2.0"
2778
2666
  }
2779
2667
  },
2780
- "@ffmpeg-installer/darwin-arm64": {
2781
- "version": "4.1.5",
2782
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-arm64/-/darwin-arm64-4.1.5.tgz",
2783
- "integrity": "sha512-hYqTiP63mXz7wSQfuqfFwfLOfwwFChUedeCVKkBtl/cliaTM7/ePI9bVzfZ2c+dWu3TqCwLDRWNSJ5pqZl8otA==",
2784
- "optional": true
2785
- },
2786
- "@ffmpeg-installer/darwin-x64": {
2787
- "version": "4.1.0",
2788
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-x64/-/darwin-x64-4.1.0.tgz",
2789
- "integrity": "sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==",
2790
- "optional": true
2791
- },
2792
- "@ffmpeg-installer/ffmpeg": {
2793
- "version": "1.1.0",
2794
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/ffmpeg/-/ffmpeg-1.1.0.tgz",
2795
- "integrity": "sha512-Uq4rmwkdGxIa9A6Bd/VqqYbT7zqh1GrT5/rFwCwKM70b42W5gIjWeVETq6SdcL0zXqDtY081Ws/iJWhr1+xvQg==",
2668
+ "@distube/ytdl-core": {
2669
+ "version": "4.13.2",
2670
+ "resolved": "https://registry.npmjs.org/@distube/ytdl-core/-/ytdl-core-4.13.2.tgz",
2671
+ "integrity": "sha512-FBjy4LXsBv34qFrmEF1dSbKWQtqB+yd0dt4MYYUq8oYys2Bvqps3QSFGTUZO5QA6nKD/XRsMJfcG5lgEJaUqiQ==",
2796
2672
  "requires": {
2797
- "@ffmpeg-installer/darwin-arm64": "4.1.5",
2798
- "@ffmpeg-installer/darwin-x64": "4.1.0",
2799
- "@ffmpeg-installer/linux-arm": "4.1.3",
2800
- "@ffmpeg-installer/linux-arm64": "4.1.4",
2801
- "@ffmpeg-installer/linux-ia32": "4.1.0",
2802
- "@ffmpeg-installer/linux-x64": "4.1.0",
2803
- "@ffmpeg-installer/win32-ia32": "4.1.0",
2804
- "@ffmpeg-installer/win32-x64": "4.1.0"
2673
+ "http-cookie-agent": "^5.0.4",
2674
+ "m3u8stream": "^0.8.6",
2675
+ "sax": "^1.2.4",
2676
+ "tough-cookie": "^4.1.3",
2677
+ "undici": "^5.25.2"
2805
2678
  }
2806
2679
  },
2807
- "@ffmpeg-installer/linux-arm": {
2808
- "version": "4.1.3",
2809
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm/-/linux-arm-4.1.3.tgz",
2810
- "integrity": "sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==",
2811
- "optional": true
2812
- },
2813
- "@ffmpeg-installer/linux-arm64": {
2814
- "version": "4.1.4",
2815
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm64/-/linux-arm64-4.1.4.tgz",
2816
- "integrity": "sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==",
2817
- "optional": true
2818
- },
2819
- "@ffmpeg-installer/linux-ia32": {
2820
- "version": "4.1.0",
2821
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-ia32/-/linux-ia32-4.1.0.tgz",
2822
- "integrity": "sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==",
2823
- "optional": true
2824
- },
2825
- "@ffmpeg-installer/linux-x64": {
2826
- "version": "4.1.0",
2827
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-x64/-/linux-x64-4.1.0.tgz",
2828
- "integrity": "sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==",
2829
- "optional": true
2830
- },
2831
- "@ffmpeg-installer/win32-ia32": {
2832
- "version": "4.1.0",
2833
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-ia32/-/win32-ia32-4.1.0.tgz",
2834
- "integrity": "sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==",
2835
- "optional": true
2836
- },
2837
- "@ffmpeg-installer/win32-x64": {
2838
- "version": "4.1.0",
2839
- "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-x64/-/win32-x64-4.1.0.tgz",
2840
- "integrity": "sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==",
2841
- "optional": true
2842
- },
2843
- "@ffprobe-installer/darwin-arm64": {
2844
- "version": "5.0.1",
2845
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/darwin-arm64/-/darwin-arm64-5.0.1.tgz",
2846
- "integrity": "sha512-vwNCNjokH8hfkbl6m95zICHwkSzhEvDC3GVBcUp5HX8+4wsX10SP3B+bGur7XUzTIZ4cQpgJmEIAx6TUwRepMg==",
2847
- "optional": true
2848
- },
2849
- "@ffprobe-installer/darwin-x64": {
2850
- "version": "5.1.0",
2851
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/darwin-x64/-/darwin-x64-5.1.0.tgz",
2852
- "integrity": "sha512-J+YGscZMpQclFg31O4cfVRGmDpkVsQ2fZujoUdMAAYcP0NtqpC49Hs3SWJpBdsGB4VeqOt5TTm1vSZQzs1NkhA==",
2853
- "optional": true
2854
- },
2855
- "@ffprobe-installer/ffprobe": {
2856
- "version": "2.0.0",
2857
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/ffprobe/-/ffprobe-2.0.0.tgz",
2858
- "integrity": "sha512-BT5BHZZSOyFFbHd+3zFdEQCNfBORYwNtqre7l1dMmqvDha60G/7rEDCSeCX4sNLuCcNR4IxvGHicfRQie7SNUA==",
2859
- "requires": {
2860
- "@ffprobe-installer/darwin-arm64": "5.0.1",
2861
- "@ffprobe-installer/darwin-x64": "5.1.0",
2862
- "@ffprobe-installer/linux-arm": "5.1.0",
2863
- "@ffprobe-installer/linux-arm64": "5.1.0",
2864
- "@ffprobe-installer/linux-ia32": "5.1.0",
2865
- "@ffprobe-installer/linux-x64": "5.1.0",
2866
- "@ffprobe-installer/win32-ia32": "5.1.0",
2867
- "@ffprobe-installer/win32-x64": "5.1.0"
2868
- }
2869
- },
2870
- "@ffprobe-installer/linux-arm": {
2871
- "version": "5.1.0",
2872
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/linux-arm/-/linux-arm-5.1.0.tgz",
2873
- "integrity": "sha512-y34AEive/M5/++RcuRJZciICYYRkmTh5gK6th7raydgfQhIYy/8AXAIGKqD5Hn855i6o/RpEIPjk7DWpEuwrdA==",
2874
- "optional": true
2875
- },
2876
- "@ffprobe-installer/linux-arm64": {
2877
- "version": "5.1.0",
2878
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/linux-arm64/-/linux-arm64-5.1.0.tgz",
2879
- "integrity": "sha512-u5b3r3/39eZmEV0X4OKUfp6gO3lOyVIpRO4WU+5Eb6omWYy+k0OkVbRffK4qJF1Uz8irwzyiDsmUZ6vE13/abQ==",
2880
- "optional": true
2881
- },
2882
- "@ffprobe-installer/linux-ia32": {
2883
- "version": "5.1.0",
2884
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/linux-ia32/-/linux-ia32-5.1.0.tgz",
2885
- "integrity": "sha512-Uqk4sYYQxz0KQmEQ2xxbVu/KiDX7Pw6wRDpCYv0sW49GI3wpX2Umqi/Kmtr0tpCvxctVoCdf/U71EAxH2Lztdg==",
2886
- "optional": true
2887
- },
2888
- "@ffprobe-installer/linux-x64": {
2889
- "version": "5.1.0",
2890
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/linux-x64/-/linux-x64-5.1.0.tgz",
2891
- "integrity": "sha512-r7cGOjNb8AMnKAEvz5f8N/WsWsre02LhAfDKZX0m5J0bsrYgs2HUlnnQiwjRCH9CYXYerjYqq592o/GXvxDS+Q==",
2892
- "optional": true
2893
- },
2894
- "@ffprobe-installer/win32-ia32": {
2895
- "version": "5.1.0",
2896
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/win32-ia32/-/win32-ia32-5.1.0.tgz",
2897
- "integrity": "sha512-5O3vOoNRxmut0/Nu9vSazTdSHasrr+zPT2B3Hm7kjmO3QVFcIfVImS6ReQnZeSy8JPJOqXts5kX5x/3KOX54XQ==",
2898
- "optional": true
2899
- },
2900
- "@ffprobe-installer/win32-x64": {
2901
- "version": "5.1.0",
2902
- "resolved": "https://registry.npmjs.org/@ffprobe-installer/win32-x64/-/win32-x64-5.1.0.tgz",
2903
- "integrity": "sha512-jMGYeAgkrdn4e2vvYt/qakgHRE3CPju4bn5TmdPfoAm1BlX1mY9cyMd8gf5vSzI8gH8Zq5WQAyAkmekX/8TSTg==",
2904
- "optional": true
2680
+ "@fastify/busboy": {
2681
+ "version": "2.1.0",
2682
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz",
2683
+ "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA=="
2905
2684
  },
2906
2685
  "@ioredis/commands": {
2907
2686
  "version": "1.2.0",
@@ -3668,6 +3447,24 @@
3668
3447
  "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
3669
3448
  "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
3670
3449
  },
3450
+ "http-cookie-agent": {
3451
+ "version": "5.0.4",
3452
+ "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz",
3453
+ "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==",
3454
+ "requires": {
3455
+ "agent-base": "^7.1.0"
3456
+ },
3457
+ "dependencies": {
3458
+ "agent-base": {
3459
+ "version": "7.1.0",
3460
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
3461
+ "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
3462
+ "requires": {
3463
+ "debug": "^4.3.4"
3464
+ }
3465
+ }
3466
+ }
3467
+ },
3671
3468
  "http-errors": {
3672
3469
  "version": "2.0.0",
3673
3470
  "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@@ -4163,6 +3960,11 @@
4163
3960
  "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
4164
3961
  "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
4165
3962
  },
3963
+ "psl": {
3964
+ "version": "1.9.0",
3965
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
3966
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
3967
+ },
4166
3968
  "public-ip": {
4167
3969
  "version": "6.0.1",
4168
3970
  "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-6.0.1.tgz",
@@ -4174,6 +3976,11 @@
4174
3976
  "is-ip": "^4.0.0"
4175
3977
  }
4176
3978
  },
3979
+ "punycode": {
3980
+ "version": "2.3.1",
3981
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
3982
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
3983
+ },
4177
3984
  "qs": {
4178
3985
  "version": "6.11.0",
4179
3986
  "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -4182,6 +3989,11 @@
4182
3989
  "side-channel": "^1.0.4"
4183
3990
  }
4184
3991
  },
3992
+ "querystringify": {
3993
+ "version": "2.2.0",
3994
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
3995
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
3996
+ },
4185
3997
  "quick-lru": {
4186
3998
  "version": "5.1.1",
4187
3999
  "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
@@ -4227,6 +4039,11 @@
4227
4039
  "redis-errors": "^1.0.0"
4228
4040
  }
4229
4041
  },
4042
+ "requires-port": {
4043
+ "version": "1.0.0",
4044
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
4045
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
4046
+ },
4230
4047
  "resolve-alpn": {
4231
4048
  "version": "1.2.1",
4232
4049
  "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
@@ -4468,6 +4285,17 @@
4468
4285
  "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
4469
4286
  "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
4470
4287
  },
4288
+ "tough-cookie": {
4289
+ "version": "4.1.3",
4290
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
4291
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
4292
+ "requires": {
4293
+ "psl": "^1.1.33",
4294
+ "punycode": "^2.1.1",
4295
+ "universalify": "^0.2.0",
4296
+ "url-parse": "^1.5.3"
4297
+ }
4298
+ },
4471
4299
  "tr46": {
4472
4300
  "version": "0.0.3",
4473
4301
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -4497,11 +4325,33 @@
4497
4325
  "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
4498
4326
  "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
4499
4327
  },
4328
+ "undici": {
4329
+ "version": "5.27.2",
4330
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz",
4331
+ "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==",
4332
+ "requires": {
4333
+ "@fastify/busboy": "^2.0.0"
4334
+ }
4335
+ },
4336
+ "universalify": {
4337
+ "version": "0.2.0",
4338
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
4339
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg=="
4340
+ },
4500
4341
  "unpipe": {
4501
4342
  "version": "1.0.0",
4502
4343
  "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
4503
4344
  "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
4504
4345
  },
4346
+ "url-parse": {
4347
+ "version": "1.5.10",
4348
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
4349
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
4350
+ "requires": {
4351
+ "querystringify": "^2.1.1",
4352
+ "requires-port": "^1.0.0"
4353
+ }
4354
+ },
4505
4355
  "util-deprecate": {
4506
4356
  "version": "1.0.2",
4507
4357
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -9,8 +9,7 @@
9
9
  },
10
10
  "dependencies": {
11
11
  "@azure/storage-blob": "^12.13.0",
12
- "@ffmpeg-installer/ffmpeg": "^1.1.0",
13
- "@ffprobe-installer/ffprobe": "^2.0.0",
12
+ "@distube/ytdl-core": "^4.13.2",
14
13
  "axios": "^1.3.6",
15
14
  "busboy": "^1.6.0",
16
15
  "cors": "^2.8.5",
@@ -22,7 +21,6 @@
22
21
  "pdfjs-dist": "^3.9.179",
23
22
  "public-ip": "^6.0.1",
24
23
  "uuid": "^9.0.0",
25
- "ytdl-core": "git+ssh://git@github.com:khlevon/node-ytdl-core.git#v4.11.4-patch.2",
26
24
  "xlsx": "^0.18.5"
27
25
  }
28
26
  }
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@aj-archipelago/cortex",
3
- "version": "1.0.20",
3
+ "version": "1.0.22",
4
4
  "description": "Cortex is a GraphQL API for AI. It provides a simple, extensible interface for using AI services from OpenAI, Azure and others.",
5
+ "private": false,
5
6
  "repository": {
6
7
  "type": "git",
7
8
  "url": "git+https://github.com/aj-archipelago/cortex.git"
@@ -2,6 +2,8 @@ export default {
2
2
  prompt: `{{text}}`,
3
3
  model: 'azure-cognitive',
4
4
  inputParameters: {
5
+ calculateInputVector: false,
6
+ indexName: ``,
5
7
  inputVector: ``,
6
8
  file: ``,
7
9
  privateData: true,
package/server/graphql.js CHANGED
@@ -141,7 +141,11 @@ const build = async (config) => {
141
141
 
142
142
  // Hand in the schema we just created and have the
143
143
  // WebSocketServer start listening.
144
- const serverCleanup = useServer({ schema }, wsServer);
144
+ // Respects the keep alive setting in config in case you want to
145
+ // turn it off for deployments that don't route the ping/pong frames
146
+ const keepAlive = config.get('subscriptionKeepAlive');
147
+ console.log(`Starting web socket server with subscription keep alive: ${keepAlive}`);
148
+ const serverCleanup = useServer({ schema }, wsServer, keepAlive);
145
149
 
146
150
  const server = new ApolloServer({
147
151
  schema,
@@ -13,6 +13,7 @@ import CohereSummarizePlugin from './plugins/cohereSummarizePlugin.js';
13
13
  import AzureCognitivePlugin from './plugins/azureCognitivePlugin.js';
14
14
  import OpenAiEmbeddingsPlugin from './plugins/openAiEmbeddingsPlugin.js';
15
15
  import OpenAIImagePlugin from './plugins/openAiImagePlugin.js';
16
+ import OpenAIDallE3Plugin from './plugins/openAiDalle3Plugin.js';
16
17
 
17
18
  class PathwayPrompter {
18
19
  constructor(config, pathway, modelName, model) {
@@ -23,9 +24,12 @@ class PathwayPrompter {
23
24
  case 'OPENAI-CHAT':
24
25
  plugin = new OpenAIChatPlugin(config, pathway, modelName, model);
25
26
  break;
26
- case 'OPENAI-IMAGE':
27
+ case 'OPENAI-DALLE2':
27
28
  plugin = new OpenAIImagePlugin(config, pathway, modelName, model);
28
29
  break;
30
+ case 'OPENAI-DALLE3':
31
+ plugin = new OpenAIDallE3Plugin(config, pathway, modelName, model);
32
+ break;
29
33
  case 'OPENAI-CHAT-EXTENSION':
30
34
  plugin = new OpenAIChatExtensionPlugin(config, pathway, modelName, model);
31
35
  break;
@@ -10,7 +10,7 @@ import { getv, setv } from '../lib/keyValueStorageClient.js';
10
10
  import { requestState } from './requestState.js';
11
11
  import { callPathway } from '../lib/pathwayTools.js';
12
12
 
13
- const modelTypesExcludedFromProgressUpdates = ['OPENAI-IMAGE'];
13
+ const modelTypesExcludedFromProgressUpdates = ['OPENAI-DALLE2', 'OPENAI-DALLE3'];
14
14
 
15
15
  class PathwayResolver {
16
16
  constructor({ config, pathway, args }) {
@@ -17,11 +17,22 @@ class AzureCognitivePlugin extends ModelPlugin {
17
17
  super(config, pathway, modelName, model);
18
18
  }
19
19
 
20
+ async getInputVector (text) {
21
+ try{
22
+ if(!text || !text.trim()){
23
+ return;
24
+ }
25
+ return JSON.parse(await callPathway(this.config, 'embeddings', { text }))[0];
26
+ }catch(err){
27
+ console.log(`Error in calculating input vector for text: ${text}, error: ${err}`);
28
+ }
29
+ }
30
+
20
31
  // Set up parameters specific to the Azure Cognitive API
21
32
  async getRequestParameters(text, parameters, prompt, mode, indexName, savedContextId, {headers, requestId, pathway, url}) {
22
33
  const combinedParameters = { ...this.promptParameters, ...parameters };
23
34
  const { modelPromptText } = this.getCompiledPrompt(text, combinedParameters, prompt);
24
- const { inputVector, filter, docId } = combinedParameters;
35
+ const { inputVector, calculateInputVector, privateData, filter, docId } = combinedParameters;
25
36
  const data = {};
26
37
 
27
38
  if (mode == 'delete') {
@@ -54,30 +65,22 @@ class AzureCognitivePlugin extends ModelPlugin {
54
65
 
55
66
  if (mode == 'index') {
56
67
 
57
- /*
58
- const calculateInputVector = async () => {
59
- try{
60
- if(!text || !text.trim()){
61
- return;
62
- }
63
- return JSON.parse(await callPathway(this.config, 'embeddings', { text }))[0];
64
- }catch(err){
65
- console.log(`Error in calculating input vector for text: ${text}, error: ${err}`);
66
- }
67
- }
68
- */
69
-
70
68
  const doc = {
71
69
  id: uuidv4(),
72
70
  content: text,
73
- //contentVector: inputVector || (await calculateInputVector()),
74
71
  owner: savedContextId,
75
72
  docId: docId || uuidv4(),
76
73
  createdAt: new Date().toISOString()
77
74
  }
78
- // if(!privateData){
79
- // delete doc.owner;
80
- // }
75
+
76
+ if(inputVector || calculateInputVector){ //if input vector is provided or needs to be calculated
77
+ doc.contentVector = inputVector ? inputVector : await this.getInputVector(text);
78
+ }
79
+
80
+ if(!privateData){ //if public, remove owner
81
+ delete doc.owner;
82
+ }
83
+
81
84
  data.value = [doc];
82
85
  return { data };
83
86
  }
@@ -0,0 +1,104 @@
1
+ import RequestDurationEstimator from '../../lib/requestDurationEstimator.js';
2
+ import pubsub from '../pubsub.js';
3
+ import ModelPlugin from './modelPlugin.js';
4
+
5
+ const requestDurationEstimator = new RequestDurationEstimator(10);
6
+
7
+ /**
8
+ * @description This plugin is for the OpenAI DALL-E 3 model.
9
+ */
10
+ class OpenAIDallE3Plugin extends ModelPlugin {
11
+ constructor(config, pathway, modelName, model) {
12
+ super(config, pathway, modelName, model);
13
+ }
14
+
15
+ /**
16
+ * @description At the time of writing, the DALL-E 3 API on Azure is sync-only, so to support async
17
+ * we keep the request open and send progress updates to the client
18
+ * over a websocket.
19
+ */
20
+ async execute(text, parameters, _, pathwayResolver) {
21
+ const url = this.requestUrl(text);
22
+ const data = JSON.stringify({ prompt: text });
23
+
24
+ const { requestId, pathway } = pathwayResolver;
25
+
26
+ const makeRequest = () => this.executeRequest(url, data, {}, this.model.headers, {}, requestId, pathway);
27
+
28
+ if (!parameters.async) {
29
+ // synchronous request
30
+ return await makeRequest();
31
+ }
32
+ else {
33
+ // async request
34
+ requestDurationEstimator.startRequest(requestId);
35
+ const requestPromise = makeRequest();
36
+ this.#sendRequestUpdates(requestId, requestPromise);
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Send progress updates to the client.
42
+ *
43
+ * @param {*} requestId
44
+ * @param {*} requestPromise
45
+ * @returns
46
+ */
47
+ async #sendRequestUpdates(requestId, requestPromise) {
48
+ let state = { status: "pending" };
49
+ let attemptCount = 0;
50
+ let data = null;
51
+
52
+ requestPromise.then((response) => {
53
+ state.status = "succeeded";
54
+ requestDurationEstimator.endRequest();
55
+ pubsub.publish('REQUEST_PROGRESS', {
56
+ requestProgress: {
57
+ requestId,
58
+ status: "succeeded",
59
+ progress: 1,
60
+ data: JSON.stringify(response),
61
+ }
62
+ });
63
+ }).catch((error) => {
64
+ state.status = "failed";
65
+ requestDurationEstimator.endRequest();
66
+ pubsub.publish('REQUEST_PROGRESS', {
67
+ requestProgress: {
68
+ requestId,
69
+ status: "failed",
70
+ progress: 1,
71
+ data: JSON.stringify(error),
72
+ }
73
+ });
74
+ });
75
+
76
+ // publish an update every 2 seconds, using the request duration estimator to calculate
77
+ // the percent complete
78
+ do {
79
+ let progress =
80
+ requestDurationEstimator.calculatePercentComplete();
81
+
82
+ pubsub.publish('REQUEST_PROGRESS', {
83
+ requestProgress: {
84
+ requestId,
85
+ status: "pending",
86
+ progress,
87
+ data,
88
+ }
89
+ });
90
+
91
+ if (state.status !== "pending") {
92
+ break;
93
+ }
94
+
95
+ // sleep for 2 seconds
96
+ await new Promise(resolve => setTimeout(resolve, 2000));
97
+ }
98
+ while (state.status !== "succeeded" && attemptCount++ < 30);
99
+
100
+ return data;
101
+ }
102
+ }
103
+
104
+ export default OpenAIDallE3Plugin;
@@ -6,7 +6,6 @@ import pubsub from '../pubsub.js';
6
6
  import axios from 'axios';
7
7
  import RequestDurationEstimator from '../../lib/requestDurationEstimator.js';
8
8
 
9
- const API_URL = config.get('dalleImageApiUrl'); // URL for the DALL-E API
10
9
  const requestDurationEstimator = new RequestDurationEstimator(10);
11
10
 
12
11
  class OpenAIImagePlugin extends ModelPlugin {