DeFactOfficial commited on
Commit
eee16bc
1 Parent(s): 6a646db

added my multimodal inference api

Browse files
.gitignore ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ node_modules
2
+ mmapi/image_output
3
+ mmapi/media
4
+ ffmpeg-7.0.2-amd64-static
5
+ old
6
+ .env
app.py CHANGED
@@ -82,7 +82,7 @@ def prompt_to_image(t2v_prompt, save_to_folder=None):
82
 
83
  with open(image_path, "wb") as image_file:
84
  image_file.write(base64.b64decode(converted_prompt.split(",")[1]))
85
- def convert_prompt(prompt: str, retry_times: int = 3, type: str = "t2v", image_path: str = None, generate_first_frame: bool = False):
86
  """
87
  Convert a prompt to a format that can be used by the model for inference
88
  """
 
82
 
83
  with open(image_path, "wb") as image_file:
84
  image_file.write(base64.b64decode(converted_prompt.split(",")[1]))
85
+ def convert_prompt(prompt: str, retry_times: int = 3, type: str = "t2v", image_path: str = None, generate_first_frame: bool = True):
86
  """
87
  Convert a prompt to a format that can be used by the model for inference
88
  """
ffmpeg-release-amd64-static.tar ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:31175d37bf41c60170775ac168f1d3de847f6adc6758b01c41bfb71027c68499
3
+ size 168796160
init.sh ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
2
+ unxz ./ffmpeg-release-amd64-static.tar.xz
3
+ tar -xvf ./ffmpeg-release-amd64-static.tar
4
+ export PATH="/home/user/app/ffmpeg-7.0.2-amd64-static:$PATH"
mmapi/api.js ADDED
@@ -0,0 +1,283 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const express = require('express');
2
+ const fs = require('fs');
3
+ const fsp = fs.promises;
4
+ const path = require('path');
5
+ const crypto = require('crypto');
6
+ const { spawn } = require('child_process');
7
+ const fetch = require('node-fetch');
8
+ const { v4: uuidv4 } = require('uuid');
9
+ const cors = require('cors');
10
+ const {generateImage} = require('./image.js')
11
+ const app = express();
12
+ app.use(express.json()); // To parse JSON payloads
13
+ app.use(cors()); // Enable CORS for all routes
14
+
15
+ require('dotenv').config()
16
+
17
+
18
+ const MEDIA_FOLDER = process.env.MMAPI_MEDIA_FOLDER || 'media';
19
+ const BASE_URL = process.env.MMAPI_BASE_URL || 'http://localhost:8000';
20
+ const OPENAI_API_KEY = process.env.OPENAI_API_KEY
21
+
22
+ // Ensure the MEDIA_FOLDER directory exists
23
+ async function ensureDir(dir) {
24
+ try {
25
+ await fsp.mkdir(dir, { recursive: true });
26
+ } catch (err) {
27
+ if (err.code !== 'EEXIST') throw err;
28
+ }
29
+ }
30
+
31
+ (async () => {
32
+ await ensureDir(MEDIA_FOLDER);
33
+ })();
34
+
35
+ const audioCache = {}; // { [scriptHash]: audioFilePath }
36
+
37
+ function parseScript(script) {
38
+ const segments = script.trim().split('\n\n');
39
+ const parsedSegments = [];
40
+
41
+ for (const segment of segments) {
42
+ const [speaker_name, ...contentParts] = segment.split(': ');
43
+ const content = contentParts.join(': ');
44
+ parsedSegments.push({ speaker_name, content });
45
+ }
46
+
47
+ return parsedSegments;
48
+ }
49
+
50
+ async function runOpenAITTS(text, audioFilename, voiceId, ttsModel='tts-1') {
51
+
52
+ if (!OPENAI_API_KEY) {
53
+ throw new Error('OPENAI_API_KEY is not set.');
54
+ }
55
+
56
+ // Replace the URL below with the actual OpenAI TTS endpoint if available
57
+ const response = await fetch('https://api.openai.com/v1/audio/speech', {
58
+ method: 'POST',
59
+ headers: {
60
+ Authorization: `Bearer ${OPENAI_API_KEY}`,
61
+ 'Content-Type': 'application/json',
62
+ },
63
+ body: JSON.stringify({
64
+ model: ttsModel,
65
+ voice: voiceId,
66
+ input: text,
67
+ }),
68
+ });
69
+
70
+ if (!response.ok) {
71
+ const errorText = await response.text();
72
+ throw new Error(`OpenAI TTS request failed: ${errorText}`);
73
+ }
74
+
75
+ const arrayBuffer = await response.arrayBuffer();
76
+ const buffer = Buffer.from(arrayBuffer);
77
+ await fsp.writeFile(audioFilename, buffer);
78
+ }
79
+
80
+ async function generateAudio(speakerName, content) {
81
+ const voiceLookupTable = {
82
+ DEFAULT: 'alloy',
83
+ ALICE: 'shimmer',
84
+ BOB: 'echo',
85
+ JENNIFER: 'nova',
86
+ PROFESSOR: 'fable',
87
+ MALE_GUEST: 'onyx',
88
+ FEMALE_GUEST: 'alloy',
89
+ };
90
+
91
+ const actualVoiceId = voiceLookupTable[speakerName] || voiceLookupTable['DEFAULT'];
92
+ const fileName = path.join(MEDIA_FOLDER, `${uuidv4()}.mp3`);
93
+
94
+ await runOpenAITTS(content, fileName, actualVoiceId, 'tts-1-hd');
95
+ return fileName;
96
+ }
97
+
98
+ function concatenateAudioFiles(audioFiles, outputFilePath) {
99
+ return new Promise((resolve, reject) => {
100
+ if (audioFiles.length === 1) {
101
+ // If only one audio file, copy it directly
102
+ fs.copyFileSync(audioFiles[0], outputFilePath);
103
+ resolve();
104
+ return;
105
+ }
106
+
107
+ const listContent = audioFiles.join('|');
108
+
109
+ // Run FFmpeg with the concat protocol
110
+ // ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3
111
+
112
+ const ffmpeg = spawn('ffmpeg', [
113
+ '-i',
114
+ `concat:${listContent}`,
115
+ '-acodec',
116
+ 'copy',
117
+ outputFilePath,
118
+ ]);
119
+
120
+ ffmpeg.stdout.on('data', (data) => {
121
+ console.log(`stdout: ${data}`);
122
+ });
123
+
124
+ ffmpeg.stderr.on('data', (data) => {
125
+ console.error(`stderr: ${data}`);
126
+ });
127
+
128
+ ffmpeg.on('close', (code) => {
129
+ if (code === 0) {
130
+ resolve();
131
+ } else {
132
+ reject(new Error(`FFmpeg failed with exit code ${code}`));
133
+ }
134
+ });
135
+ });
136
+ }
137
+
138
+ // Existing GET endpoint (unchanged)
139
+ app.get('/list-models', (req, res) => {
140
+ // Placeholder for listing models, replace with actual implementation if needed
141
+ res.json(['Model 1', 'Model 2', 'Model 3']);
142
+ });
143
+
144
+ // Existing GET endpoint (unchanged)
145
+ app.get('/generate/speech', async (req, res) => {
146
+ try {
147
+ const apiKey = req.query.api_key || 'their_api_key';
148
+ if (apiKey !== 'their_api_key') {
149
+ // Replace "their_api_key" with your actual method of managing API keys
150
+ res.status(401).send('Unauthorized');
151
+ return;
152
+ }
153
+
154
+ const script = req.query.payload;
155
+ if (!script) {
156
+ res.status(400).send('Bad Request: Missing payload');
157
+ return;
158
+ }
159
+
160
+ const hash = crypto.createHash('sha1');
161
+ hash.update(script);
162
+ const scriptHash = hash.digest('hex');
163
+
164
+ if (audioCache[scriptHash]) {
165
+ const filePath = audioCache[scriptHash];
166
+ res.sendFile(path.resolve(filePath), { headers: { 'Content-Type': 'audio/mpeg' } });
167
+ return;
168
+ }
169
+
170
+ const parsedSegments = parseScript(script);
171
+ const audioSegments = [];
172
+
173
+ for (const segment of parsedSegments) {
174
+ const audioPath = await generateAudio(segment.speaker_name, segment.content);
175
+ audioSegments.push(audioPath);
176
+ }
177
+
178
+ if (audioSegments.length === 0) {
179
+ res.status(400).send('No audio generated');
180
+ return;
181
+ }
182
+
183
+ // Concatenate audio files into one using FFmpeg
184
+ const combinedAudioPath = path.join(MEDIA_FOLDER, `combined_${uuidv4()}.mp3`);
185
+ await concatenateAudioFiles(audioSegments, combinedAudioPath);
186
+
187
+ audioCache[scriptHash] = combinedAudioPath;
188
+ res.sendFile(path.resolve(combinedAudioPath), { headers: { 'Content-Type': 'audio/mpeg' } });
189
+ } catch (error) {
190
+ console.error('Error generating speech:', error);
191
+ res.status(500).send('Internal Server Error');
192
+ }
193
+ });
194
+
195
+ // New POST endpoint with SSE support
196
+ app.post('/generate/speech/stream', async (req, res) => {
197
+ try {
198
+ const apiKey = req.query.api_key || 'their_api_key';
199
+ if (apiKey !== 'their_api_key') {
200
+ // Replace "their_api_key" with your actual method of managing API keys
201
+ res.status(401).send('Unauthorized');
202
+ return;
203
+ }
204
+
205
+ const script = req.body.payload;
206
+ if (!script) {
207
+ res.status(400).send('Bad Request: Missing payload');
208
+ return;
209
+ }
210
+
211
+ // Set headers for SSE
212
+ res.setHeader('Content-Type', 'text/event-stream');
213
+ res.setHeader('Cache-Control', 'no-cache');
214
+ res.setHeader('Connection', 'keep-alive');
215
+
216
+ const hash = crypto.createHash('sha1');
217
+ hash.update(script);
218
+ const scriptHash = hash.digest('hex');
219
+
220
+ if (audioCache[scriptHash]) {
221
+ // If audio is cached, send the final SSE with the combined audio URL
222
+ const filePath = audioCache[scriptHash];
223
+ console.log(filePath)
224
+
225
+
226
+ res.write(`event: audio_complete\ndata: ${req.protocol}://${req.get('host')}/${filePath}\n\n`);
227
+ res.end();
228
+ return;
229
+ }
230
+
231
+ const parsedSegments = parseScript(script);
232
+ const audioSegments = [];
233
+
234
+ for (const segment of parsedSegments) {
235
+ const audioPath = await generateAudio(segment.speaker_name, segment.content);
236
+ audioSegments.push(audioPath);
237
+
238
+ // Send SSE with the URL of the generated audio segment
239
+ res.write(`event: audio_segment\ndata: ${req.protocol}://${req.get('host')}/${audioPath}\n\n`);
240
+ }
241
+
242
+ if (audioSegments.length === 0) {
243
+ res.write(`event: error\ndata: No audio generated\n\n`);
244
+ res.end();
245
+ return;
246
+ }
247
+
248
+ // Concatenate audio files into one using FFmpeg
249
+ const combinedAudioPath = path.join(MEDIA_FOLDER, `combined_${uuidv4()}.mp3`);
250
+ await concatenateAudioFiles(audioSegments, combinedAudioPath);
251
+
252
+ audioCache[scriptHash] = combinedAudioPath;
253
+ console.log(combinedAudioPath)
254
+ // Send SSE with the URL of the combined audio
255
+ res.write(`event: audio_complete\ndata: ${req.protocol}://${req.get('host')}/${combinedAudioPath}\n\n`);
256
+ res.end();
257
+ } catch (error) {
258
+ console.error('Error generating speech:', error);
259
+ res.write(`event: error\ndata: Internal Server Error\n\n`);
260
+ res.end();
261
+ }
262
+ });
263
+
264
+ //for prompt-in-url: <img src="https://yourserver.com/generate/image?prompt=A%20large%20hamster&width=1024&height=1024"
265
+ app.get('/generate/image', async (req, res) => {
266
+ const responseFormat = req.query.response_format || 'image';
267
+ await generateImage(req.query, res, responseFormat)
268
+ });
269
+
270
+ app.post("/generate/image", async(req, res)=> {
271
+ const responseFormat = req.query.response_format || 'url';
272
+ await generateImage(req.body, res, responseFormat)
273
+ })
274
+
275
+
276
+
277
+ // Serve static files from the MEDIA_FOLDER
278
+ app.use('/media', express.static(MEDIA_FOLDER));
279
+
280
+ const port = 8000;
281
+ app.listen(port, () => {
282
+ console.log(`Listening on port ${port}`);
283
+ });
mmapi/image.js ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const express = require('express');
2
+ const axios = require('axios');
3
+ const crypto = require('crypto');
4
+ const fs = require('fs');
5
+ const path = require('path');
6
+ const { createCanvas, loadImage } = require('canvas');
7
+ const { HfInference } = require("@huggingface/inference");
8
+
9
+ // Initialize the Express app
10
+ const app = express();
11
+ require("dotenv").config()
12
+
13
+ // Cache directory to store generated images
14
+ const CACHE_DIR = process.env.IMAGE_FOLDER || '/home/sam/disseminate/media/image_cache';
15
+ if (!fs.existsSync(CACHE_DIR)) {
16
+ fs.mkdirSync(CACHE_DIR);
17
+ }
18
+ const available_models = ["alimama-creative/FLUX.1-Turbo-Alpha", "black-forest-labs/FLUX.1-dev", "black-forest-labs/FLUX.1-schnell", "CompVis/stable-diffusion-v1-4", "Corcelio/mobius", "digiplay/AnalogMadness-realistic-model-v7", "digiplay/AsianBrmBeautyrealmix_v2.0", "digiplay/DonutHoleMix_Beta", "digiplay/KawaiiRealisticAsian_v0.7", "digiplay/m0nst3rfy3-testfix", "digiplay/m3u", "digiplay/MilkyWonderland_v1", "digiplay/Realisian_v6", "digiplay/realmixUnrealjourney_v1", "digiplay/STRANGER", "digiplay/STRANGER-ANIME", "dreamlike-art/dreamlike-diffusion-1.0", "dreamlike-art/dreamlike-photoreal-2.0", "fluently/Fluently-XL-v2", "GraydientPlatformAPI/yamers-nsfw4-xl", "John6666/3x3x3mixxl-v2-sdxl", "John6666/4th-tail-merges-050tponynai-sdxl", "John6666/4th-tail-merges-050wai70-sdxl", "John6666/big-lust-v1-sdxl", "John6666/carnival-unchained-v10-fp8-flux", "John6666/convtest", "John6666/convtest2", "John6666/dgs-4th-darkness-03ad-sdxl", "John6666/digital-af-xlp-v1-sdxl", "John6666/josei-realistic-v11-sdxl", "John6666/lyh-anime-flux-v2a1-fp8-flux", "John6666/mala-anime-mix-nsfw-pony-xl-v5-sdxl-spo", "John6666/mala-anime-mix-nsfw-pony-xl-v5new-sdxl", "John6666/mala-anime-mix-nsfw-pony-xl-v5new-sdxl-spo", "John6666/mala-smooth-v1-sdxl", "John6666/mikoshi-pony-v1-sdxl", "John6666/mklan-aio-nsfw-aio-nextgen-xlv2-sdxl", "John6666/nova-reality-v50-sdxl", "John6666/optimal-criminal-pony-v10-sdxl", "John6666/photo-realistic-pony-v5-sdxl", "John6666/pornworks-real-porn-v03-sdxl", "John6666/pornworks-real-porn-v04-sdxl", "John6666/real-mix-pony-v01-sdxl", "John6666/real-mix-pony-v2-sdxl", "John6666/reasianpony-merge-v10-sdxl", "John6666/relh-checkpoint-v30-sdxl", "John6666/sakuramoon-v10-sdxl", "John6666/sapianf-nude-men-women-for-flux-v20fp16-fp8-flux", "John6666/sorkh-pony-v1-sdxl", "John6666/speciosa-anime-v14-sdxl", "John6666/st2-bedamnrealpony-v1-sdxl", "John6666/suimix-xl-v10-sdxl", "John6666/sumeshi-flux1s-v002e-fp8-flux", "John6666/titania-juggernaut-mix-v1-sdxl", "John6666/titania-mix-realistic-pony-gbv10-sdxl", "John6666/uber-realistic-porn-merge-xl-urpmxl-v6final-sdxl", "John6666/ultimate-realistic-mix-v1-sdxl", "John6666/unlimited-porn-x-sdxl", "John6666/unlimited-porn-xreal-sdxl", "John6666/wai-ani-hentai-pony-v5-sdxl", "John6666/wai-c-v3-sdxl", "John6666/wai-doll-cn-v2-sdxl", "John6666/wai-simpleuse-for-real-pony-v1-sdxl", "Niggendar/duchaitenPonyXLNo_v35", "sd-community/sdxl-flash", "stabilityai/stable-diffusion-2-1", "stabilityai/stable-diffusion-2-base", "stabilityai/stable-diffusion-3-medium-diffusers", "stabilityai/stable-diffusion-xl-base-1.0", "stable-diffusion-v1-5/stable-diffusion-v1-5", "stablediffusionapi/disney-pixar-cartoon", "stablediffusionapi/dreamshaper-v6", "stablediffusionapi/mklan-xxx-nsfw-pony", "stablediffusionapi/newrealityxl-global-nsfw", "UnfilteredAI/NSFW-gen-v2", "Yntec/3DKX", "Yntec/BetterPonyDiffusion", "Yntec/Chip_n_DallE", "Yntec/DramaLlama", "Yntec/DreamlikeShaper", "Yntec/DreamPhotoGASM", "Yntec/DreamWorld", "Yntec/DucHaitenGODofSIMP", "Yntec/ElldrethSDaydreamMix", "Yntec/epiCPhotoGasm", "Yntec/MeinaAlter", "Yntec/MGM", "Yntec/MostClassical", "Yntec/nuipenimix2", "Yntec/Ponygraphy", "Yntec/RevAnimatedV2Rebirth", "Yntec/SCMIX_NightSkyMeina", "Yntec/TrueSight", "Yntec/WoopWoopAnime", "Yntec/YiffyMix", "Yntec/ZootVisionEpsilon"]
19
+
20
+ // Hugging Face Inference API configuration
21
+ const HF_API_URL = 'https://api-inference.huggingface.co/models/';
22
+ const HF_API_TOKEN = process.env.HF_API_TOKEN || ''; // Replace with your actual API token
23
+ const inferenceClient = new HfInference(HF_API_TOKEN);
24
+
25
+
26
+ const DEFAULT_USER_API_KEY = 'PUBLIC'; // Default API key for demonstration purposes
27
+ //const DEFAULT_GUIDANCE_SCALE = 5.0; // Default guidance scale for the diffusion model
28
+ const DEFAULT_WIDTH = 1024; // Default width of the generated image
29
+ const DEFAULT_HEIGHT = 1024; // Default height of the generated image
30
+ // In-memory store for user credits (for demonstration purposes)
31
+ // In production, consider using a database
32
+ const userCredits = {
33
+ 'PUBLIC': 20000,
34
+ 'user_api_key_1': 100, // Example API key with 10 credits
35
+ 'user_api_key_2': 5 // Example API key with 5 credits
36
+ };
37
+
38
+ const generateImage = async(requestPayload, res, responseFormat) => {
39
+ const prompt = requestPayload.prompt;
40
+ const seed = requestPayload.seed ? parseInt(requestPayload.seed) : parseInt(Math.random() * 100000);
41
+ const modelId = requestPayload.model || 'black-forest-labs/FLUX.1-schnell';
42
+ const apiKey = requestPayload.api_key || DEFAULT_USER_API_KEY;
43
+ const cfg_scale = requestPayload.guidance_scale ? parseFloat(requestPayload.guidance_scale) : 7.0;
44
+ const steps = requestPayload.steps ? parseInt(requestPayload.steps) : 4;
45
+ const width = requestPayload.width ? parseInt(requestPayload.width) : DEFAULT_WIDTH;
46
+ const height = requestPayload.height ? parseInt(requestPayload.height) : DEFAULT_HEIGHT;
47
+
48
+ if (!prompt) {
49
+ return res.status(400).send('Error: No prompt provided');
50
+ }
51
+
52
+ if (!apiKey) {
53
+ return res.status(400).send('Error: No API key provided');
54
+ }
55
+
56
+ // Check if the API key is valid and if the user has enough credits
57
+ if (!userCredits.hasOwnProperty(apiKey)) {
58
+ return res.status(403).send('Error: Invalid API key');
59
+ }
60
+
61
+ if (userCredits[apiKey] <= 0) {
62
+ return res.status(403).send('Error: Insufficient credits');
63
+ }
64
+
65
+ // Set the seed if provided (for caching purposes, does affect HF API)
66
+ const seedStr = `_${seed}`
67
+
68
+ // Create a hash of the prompt, seed, and modelId to use as the cache key
69
+ const cacheKey = crypto.createHash('sha256').update(`${prompt}${seedStr}_${modelId}`).digest('hex');
70
+ const cachePath = path.join(CACHE_DIR, `${cacheKey}.png`);
71
+ console.log(cachePath)
72
+ // Check if the image already exists in the cache
73
+ if (fs.existsSync(cachePath)) {
74
+ return res.sendFile(cachePath);
75
+ }
76
+
77
+ try {
78
+ // Prepare payload for Hugging Face Inference API
79
+ const payload = ({
80
+ "inputs": prompt,
81
+ "parameters": {"width": width, "height": height},
82
+ "seed": seed
83
+ //seed,
84
+ //cfg_scale,
85
+ //steps
86
+ });
87
+ console.log("Payload: ", JSON.stringify(payload, null, 2));
88
+ console.log("Endpoint: ", `${HF_API_URL}${modelId}`);
89
+ // Send request to Hugging Face Inference API to generate the image
90
+ const response = await axios.post(
91
+ `${HF_API_URL}${modelId}`,
92
+ payload,
93
+ {
94
+ headers: {
95
+ 'Content-Type': 'application/json',
96
+ authorization: `Bearer ${HF_API_TOKEN}`
97
+ },
98
+ responseType: 'arraybuffer'
99
+ }
100
+ );
101
+
102
+ if (response.status !== 200) {
103
+ return res.status(500).send(`Error: Failed to generate image, see response fuckup here: ${JSON.stringify(response)}`);
104
+ }
105
+
106
+ // Deduct one credit from the user's balance
107
+ userCredits[apiKey] -= 1;
108
+
109
+ // Save the image to the cache directory
110
+ fs.writeFileSync(cachePath, response.data);
111
+
112
+ // Send either the image directly or a link to the image
113
+ if (responseFormat == "url") {
114
+ res.setHeader("Content-Type", "application/json")
115
+ res.json({"image_url": "http://localhost:8000/image_cache/"+ cachePath.split("/").at(-1)})
116
+ res.end()
117
+ } else {
118
+ res.setHeader('Content-Type', 'image/png');
119
+ res.sendFile(cachePath);
120
+ }
121
+ } catch (error) {
122
+ res.status(500).send(`Error: Failed to generate image - ${error.message}`);
123
+ }
124
+
125
+ }
126
+ /*
127
+ app.get('/models', async(req, res) =>{
128
+ res.send(available_models)
129
+ })
130
+
131
+ //for prompt-in-url: <img src="https://yourserver.com/generate/image?prompt=A%20large%20hamster&width=1024&height=1024"
132
+ app.get('/generate/image', async (req, res) => {
133
+ await generateImage(req.query, res)
134
+ });
135
+
136
+ app.post("/generate", async(req, res)=> {
137
+ await generateImage(req.body, res)
138
+ }) */
139
+ module.exports = {generateImage}
140
+
mmapi/package-lock.json ADDED
@@ -0,0 +1,1680 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "disseminate",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "disseminate",
9
+ "version": "1.0.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "@huggingface/agents": "^0.0.5",
13
+ "@huggingface/hub": "^0.18.2",
14
+ "@huggingface/inference": "^2.8.1",
15
+ "axios": "^1.7.7",
16
+ "canvas": "^2.11.2",
17
+ "cors": "^2.8.5",
18
+ "crypto": "^1.0.1",
19
+ "dotenv": "^16.4.5",
20
+ "express": "^4.21.1",
21
+ "fs": "^0.0.1-security",
22
+ "path": "^0.12.7",
23
+ "uuid": "^10.0.0"
24
+ }
25
+ },
26
+ "node_modules/@huggingface/agents": {
27
+ "version": "0.0.5",
28
+ "resolved": "https://registry.npmjs.org/@huggingface/agents/-/agents-0.0.5.tgz",
29
+ "integrity": "sha512-h3mutXX0sFg4o9ZDHh3gzsF+qydcrTW9MVll2g/IVrNiQ0pSfXZqOQPRnfd85XU49buY3Zd1oHUDI0Bz8PznJw==",
30
+ "license": "MIT",
31
+ "dependencies": {
32
+ "@huggingface/inference": "^2.6.1"
33
+ },
34
+ "engines": {
35
+ "node": ">=18"
36
+ }
37
+ },
38
+ "node_modules/@huggingface/gguf": {
39
+ "version": "0.1.12",
40
+ "resolved": "https://registry.npmjs.org/@huggingface/gguf/-/gguf-0.1.12.tgz",
41
+ "integrity": "sha512-m+u/ms28wE74v2VVCTncfI/KB2v897MRMOoRuYSU62P85fJ6/B2exMlHCNyAXkgDLeXBWDivXl4gPq+XbHmkaA==",
42
+ "license": "MIT",
43
+ "engines": {
44
+ "node": ">=20"
45
+ }
46
+ },
47
+ "node_modules/@huggingface/hub": {
48
+ "version": "0.18.2",
49
+ "resolved": "https://registry.npmjs.org/@huggingface/hub/-/hub-0.18.2.tgz",
50
+ "integrity": "sha512-3lghWOwucAS0Tuqo0SJRsFoB3xmxDy79bnAQt3iHuYHs/xV49M1UeFjjoIjotwMPATPQP6Tp+M5Fxhvrztfn8w==",
51
+ "license": "MIT",
52
+ "dependencies": {
53
+ "@huggingface/tasks": "^0.12.20"
54
+ },
55
+ "engines": {
56
+ "node": ">=18"
57
+ }
58
+ },
59
+ "node_modules/@huggingface/inference": {
60
+ "version": "2.8.1",
61
+ "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.8.1.tgz",
62
+ "integrity": "sha512-EfsNtY9OR6JCNaUa5bZu2mrs48iqeTz0Gutwf+fU0Kypx33xFQB4DKMhp8u4Ee6qVbLbNWvTHuWwlppLQl4p4Q==",
63
+ "license": "MIT",
64
+ "dependencies": {
65
+ "@huggingface/tasks": "^0.12.9"
66
+ },
67
+ "engines": {
68
+ "node": ">=18"
69
+ }
70
+ },
71
+ "node_modules/@huggingface/tasks": {
72
+ "version": "0.12.26",
73
+ "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.12.26.tgz",
74
+ "integrity": "sha512-h7Rs35blf8UcC0UIG7JU4zlZ5xvlT1sDozv9rd3aRkzOWrXajn4wUhEd4AYcgEv/M5gDLVfWI+m9mRpNFAoPPA==",
75
+ "license": "MIT",
76
+ "dependencies": {
77
+ "@huggingface/gguf": "^0.1.12"
78
+ }
79
+ },
80
+ "node_modules/@mapbox/node-pre-gyp": {
81
+ "version": "1.0.11",
82
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
83
+ "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
84
+ "license": "BSD-3-Clause",
85
+ "dependencies": {
86
+ "detect-libc": "^2.0.0",
87
+ "https-proxy-agent": "^5.0.0",
88
+ "make-dir": "^3.1.0",
89
+ "node-fetch": "^2.6.7",
90
+ "nopt": "^5.0.0",
91
+ "npmlog": "^5.0.1",
92
+ "rimraf": "^3.0.2",
93
+ "semver": "^7.3.5",
94
+ "tar": "^6.1.11"
95
+ },
96
+ "bin": {
97
+ "node-pre-gyp": "bin/node-pre-gyp"
98
+ }
99
+ },
100
+ "node_modules/abbrev": {
101
+ "version": "1.1.1",
102
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
103
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
104
+ "license": "ISC"
105
+ },
106
+ "node_modules/accepts": {
107
+ "version": "1.3.8",
108
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
109
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
110
+ "license": "MIT",
111
+ "dependencies": {
112
+ "mime-types": "~2.1.34",
113
+ "negotiator": "0.6.3"
114
+ },
115
+ "engines": {
116
+ "node": ">= 0.6"
117
+ }
118
+ },
119
+ "node_modules/agent-base": {
120
+ "version": "6.0.2",
121
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
122
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
123
+ "license": "MIT",
124
+ "dependencies": {
125
+ "debug": "4"
126
+ },
127
+ "engines": {
128
+ "node": ">= 6.0.0"
129
+ }
130
+ },
131
+ "node_modules/agent-base/node_modules/debug": {
132
+ "version": "4.3.7",
133
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
134
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
135
+ "license": "MIT",
136
+ "dependencies": {
137
+ "ms": "^2.1.3"
138
+ },
139
+ "engines": {
140
+ "node": ">=6.0"
141
+ },
142
+ "peerDependenciesMeta": {
143
+ "supports-color": {
144
+ "optional": true
145
+ }
146
+ }
147
+ },
148
+ "node_modules/agent-base/node_modules/ms": {
149
+ "version": "2.1.3",
150
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
151
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
152
+ "license": "MIT"
153
+ },
154
+ "node_modules/ansi-regex": {
155
+ "version": "5.0.1",
156
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
157
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
158
+ "license": "MIT",
159
+ "engines": {
160
+ "node": ">=8"
161
+ }
162
+ },
163
+ "node_modules/aproba": {
164
+ "version": "2.0.0",
165
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
166
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
167
+ "license": "ISC"
168
+ },
169
+ "node_modules/are-we-there-yet": {
170
+ "version": "2.0.0",
171
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
172
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
173
+ "deprecated": "This package is no longer supported.",
174
+ "license": "ISC",
175
+ "dependencies": {
176
+ "delegates": "^1.0.0",
177
+ "readable-stream": "^3.6.0"
178
+ },
179
+ "engines": {
180
+ "node": ">=10"
181
+ }
182
+ },
183
+ "node_modules/array-flatten": {
184
+ "version": "1.1.1",
185
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
186
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
187
+ "license": "MIT"
188
+ },
189
+ "node_modules/asynckit": {
190
+ "version": "0.4.0",
191
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
192
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
193
+ "license": "MIT"
194
+ },
195
+ "node_modules/axios": {
196
+ "version": "1.7.7",
197
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
198
+ "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
199
+ "license": "MIT",
200
+ "dependencies": {
201
+ "follow-redirects": "^1.15.6",
202
+ "form-data": "^4.0.0",
203
+ "proxy-from-env": "^1.1.0"
204
+ }
205
+ },
206
+ "node_modules/balanced-match": {
207
+ "version": "1.0.2",
208
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
209
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
210
+ "license": "MIT"
211
+ },
212
+ "node_modules/body-parser": {
213
+ "version": "1.20.3",
214
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
215
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
216
+ "license": "MIT",
217
+ "dependencies": {
218
+ "bytes": "3.1.2",
219
+ "content-type": "~1.0.5",
220
+ "debug": "2.6.9",
221
+ "depd": "2.0.0",
222
+ "destroy": "1.2.0",
223
+ "http-errors": "2.0.0",
224
+ "iconv-lite": "0.4.24",
225
+ "on-finished": "2.4.1",
226
+ "qs": "6.13.0",
227
+ "raw-body": "2.5.2",
228
+ "type-is": "~1.6.18",
229
+ "unpipe": "1.0.0"
230
+ },
231
+ "engines": {
232
+ "node": ">= 0.8",
233
+ "npm": "1.2.8000 || >= 1.4.16"
234
+ }
235
+ },
236
+ "node_modules/brace-expansion": {
237
+ "version": "1.1.11",
238
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
239
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
240
+ "license": "MIT",
241
+ "dependencies": {
242
+ "balanced-match": "^1.0.0",
243
+ "concat-map": "0.0.1"
244
+ }
245
+ },
246
+ "node_modules/bytes": {
247
+ "version": "3.1.2",
248
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
249
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
250
+ "license": "MIT",
251
+ "engines": {
252
+ "node": ">= 0.8"
253
+ }
254
+ },
255
+ "node_modules/call-bind": {
256
+ "version": "1.0.7",
257
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
258
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
259
+ "license": "MIT",
260
+ "dependencies": {
261
+ "es-define-property": "^1.0.0",
262
+ "es-errors": "^1.3.0",
263
+ "function-bind": "^1.1.2",
264
+ "get-intrinsic": "^1.2.4",
265
+ "set-function-length": "^1.2.1"
266
+ },
267
+ "engines": {
268
+ "node": ">= 0.4"
269
+ },
270
+ "funding": {
271
+ "url": "https://github.com/sponsors/ljharb"
272
+ }
273
+ },
274
+ "node_modules/canvas": {
275
+ "version": "2.11.2",
276
+ "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz",
277
+ "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==",
278
+ "hasInstallScript": true,
279
+ "license": "MIT",
280
+ "dependencies": {
281
+ "@mapbox/node-pre-gyp": "^1.0.0",
282
+ "nan": "^2.17.0",
283
+ "simple-get": "^3.0.3"
284
+ },
285
+ "engines": {
286
+ "node": ">=6"
287
+ }
288
+ },
289
+ "node_modules/chownr": {
290
+ "version": "2.0.0",
291
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
292
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
293
+ "license": "ISC",
294
+ "engines": {
295
+ "node": ">=10"
296
+ }
297
+ },
298
+ "node_modules/color-support": {
299
+ "version": "1.1.3",
300
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
301
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
302
+ "license": "ISC",
303
+ "bin": {
304
+ "color-support": "bin.js"
305
+ }
306
+ },
307
+ "node_modules/combined-stream": {
308
+ "version": "1.0.8",
309
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
310
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
311
+ "license": "MIT",
312
+ "dependencies": {
313
+ "delayed-stream": "~1.0.0"
314
+ },
315
+ "engines": {
316
+ "node": ">= 0.8"
317
+ }
318
+ },
319
+ "node_modules/concat-map": {
320
+ "version": "0.0.1",
321
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
322
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
323
+ "license": "MIT"
324
+ },
325
+ "node_modules/console-control-strings": {
326
+ "version": "1.1.0",
327
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
328
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
329
+ "license": "ISC"
330
+ },
331
+ "node_modules/content-disposition": {
332
+ "version": "0.5.4",
333
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
334
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
335
+ "license": "MIT",
336
+ "dependencies": {
337
+ "safe-buffer": "5.2.1"
338
+ },
339
+ "engines": {
340
+ "node": ">= 0.6"
341
+ }
342
+ },
343
+ "node_modules/content-type": {
344
+ "version": "1.0.5",
345
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
346
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
347
+ "license": "MIT",
348
+ "engines": {
349
+ "node": ">= 0.6"
350
+ }
351
+ },
352
+ "node_modules/cookie": {
353
+ "version": "0.7.1",
354
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
355
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
356
+ "license": "MIT",
357
+ "engines": {
358
+ "node": ">= 0.6"
359
+ }
360
+ },
361
+ "node_modules/cookie-signature": {
362
+ "version": "1.0.6",
363
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
364
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
365
+ "license": "MIT"
366
+ },
367
+ "node_modules/cors": {
368
+ "version": "2.8.5",
369
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
370
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
371
+ "license": "MIT",
372
+ "dependencies": {
373
+ "object-assign": "^4",
374
+ "vary": "^1"
375
+ },
376
+ "engines": {
377
+ "node": ">= 0.10"
378
+ }
379
+ },
380
+ "node_modules/crypto": {
381
+ "version": "1.0.1",
382
+ "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
383
+ "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==",
384
+ "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in.",
385
+ "license": "ISC"
386
+ },
387
+ "node_modules/debug": {
388
+ "version": "2.6.9",
389
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
390
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
391
+ "license": "MIT",
392
+ "dependencies": {
393
+ "ms": "2.0.0"
394
+ }
395
+ },
396
+ "node_modules/decompress-response": {
397
+ "version": "4.2.1",
398
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
399
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
400
+ "license": "MIT",
401
+ "dependencies": {
402
+ "mimic-response": "^2.0.0"
403
+ },
404
+ "engines": {
405
+ "node": ">=8"
406
+ }
407
+ },
408
+ "node_modules/define-data-property": {
409
+ "version": "1.1.4",
410
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
411
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
412
+ "license": "MIT",
413
+ "dependencies": {
414
+ "es-define-property": "^1.0.0",
415
+ "es-errors": "^1.3.0",
416
+ "gopd": "^1.0.1"
417
+ },
418
+ "engines": {
419
+ "node": ">= 0.4"
420
+ },
421
+ "funding": {
422
+ "url": "https://github.com/sponsors/ljharb"
423
+ }
424
+ },
425
+ "node_modules/delayed-stream": {
426
+ "version": "1.0.0",
427
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
428
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
429
+ "license": "MIT",
430
+ "engines": {
431
+ "node": ">=0.4.0"
432
+ }
433
+ },
434
+ "node_modules/delegates": {
435
+ "version": "1.0.0",
436
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
437
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
438
+ "license": "MIT"
439
+ },
440
+ "node_modules/depd": {
441
+ "version": "2.0.0",
442
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
443
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
444
+ "license": "MIT",
445
+ "engines": {
446
+ "node": ">= 0.8"
447
+ }
448
+ },
449
+ "node_modules/destroy": {
450
+ "version": "1.2.0",
451
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
452
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
453
+ "license": "MIT",
454
+ "engines": {
455
+ "node": ">= 0.8",
456
+ "npm": "1.2.8000 || >= 1.4.16"
457
+ }
458
+ },
459
+ "node_modules/detect-libc": {
460
+ "version": "2.0.3",
461
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
462
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
463
+ "license": "Apache-2.0",
464
+ "engines": {
465
+ "node": ">=8"
466
+ }
467
+ },
468
+ "node_modules/dotenv": {
469
+ "version": "16.4.5",
470
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
471
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
472
+ "license": "BSD-2-Clause",
473
+ "engines": {
474
+ "node": ">=12"
475
+ },
476
+ "funding": {
477
+ "url": "https://dotenvx.com"
478
+ }
479
+ },
480
+ "node_modules/ee-first": {
481
+ "version": "1.1.1",
482
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
483
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
484
+ "license": "MIT"
485
+ },
486
+ "node_modules/emoji-regex": {
487
+ "version": "8.0.0",
488
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
489
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
490
+ "license": "MIT"
491
+ },
492
+ "node_modules/encodeurl": {
493
+ "version": "2.0.0",
494
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
495
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
496
+ "license": "MIT",
497
+ "engines": {
498
+ "node": ">= 0.8"
499
+ }
500
+ },
501
+ "node_modules/es-define-property": {
502
+ "version": "1.0.0",
503
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
504
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
505
+ "license": "MIT",
506
+ "dependencies": {
507
+ "get-intrinsic": "^1.2.4"
508
+ },
509
+ "engines": {
510
+ "node": ">= 0.4"
511
+ }
512
+ },
513
+ "node_modules/es-errors": {
514
+ "version": "1.3.0",
515
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
516
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
517
+ "license": "MIT",
518
+ "engines": {
519
+ "node": ">= 0.4"
520
+ }
521
+ },
522
+ "node_modules/escape-html": {
523
+ "version": "1.0.3",
524
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
525
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
526
+ "license": "MIT"
527
+ },
528
+ "node_modules/etag": {
529
+ "version": "1.8.1",
530
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
531
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
532
+ "license": "MIT",
533
+ "engines": {
534
+ "node": ">= 0.6"
535
+ }
536
+ },
537
+ "node_modules/express": {
538
+ "version": "4.21.1",
539
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
540
+ "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
541
+ "license": "MIT",
542
+ "dependencies": {
543
+ "accepts": "~1.3.8",
544
+ "array-flatten": "1.1.1",
545
+ "body-parser": "1.20.3",
546
+ "content-disposition": "0.5.4",
547
+ "content-type": "~1.0.4",
548
+ "cookie": "0.7.1",
549
+ "cookie-signature": "1.0.6",
550
+ "debug": "2.6.9",
551
+ "depd": "2.0.0",
552
+ "encodeurl": "~2.0.0",
553
+ "escape-html": "~1.0.3",
554
+ "etag": "~1.8.1",
555
+ "finalhandler": "1.3.1",
556
+ "fresh": "0.5.2",
557
+ "http-errors": "2.0.0",
558
+ "merge-descriptors": "1.0.3",
559
+ "methods": "~1.1.2",
560
+ "on-finished": "2.4.1",
561
+ "parseurl": "~1.3.3",
562
+ "path-to-regexp": "0.1.10",
563
+ "proxy-addr": "~2.0.7",
564
+ "qs": "6.13.0",
565
+ "range-parser": "~1.2.1",
566
+ "safe-buffer": "5.2.1",
567
+ "send": "0.19.0",
568
+ "serve-static": "1.16.2",
569
+ "setprototypeof": "1.2.0",
570
+ "statuses": "2.0.1",
571
+ "type-is": "~1.6.18",
572
+ "utils-merge": "1.0.1",
573
+ "vary": "~1.1.2"
574
+ },
575
+ "engines": {
576
+ "node": ">= 0.10.0"
577
+ }
578
+ },
579
+ "node_modules/finalhandler": {
580
+ "version": "1.3.1",
581
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
582
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
583
+ "license": "MIT",
584
+ "dependencies": {
585
+ "debug": "2.6.9",
586
+ "encodeurl": "~2.0.0",
587
+ "escape-html": "~1.0.3",
588
+ "on-finished": "2.4.1",
589
+ "parseurl": "~1.3.3",
590
+ "statuses": "2.0.1",
591
+ "unpipe": "~1.0.0"
592
+ },
593
+ "engines": {
594
+ "node": ">= 0.8"
595
+ }
596
+ },
597
+ "node_modules/follow-redirects": {
598
+ "version": "1.15.9",
599
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
600
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
601
+ "funding": [
602
+ {
603
+ "type": "individual",
604
+ "url": "https://github.com/sponsors/RubenVerborgh"
605
+ }
606
+ ],
607
+ "license": "MIT",
608
+ "engines": {
609
+ "node": ">=4.0"
610
+ },
611
+ "peerDependenciesMeta": {
612
+ "debug": {
613
+ "optional": true
614
+ }
615
+ }
616
+ },
617
+ "node_modules/form-data": {
618
+ "version": "4.0.1",
619
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
620
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
621
+ "license": "MIT",
622
+ "dependencies": {
623
+ "asynckit": "^0.4.0",
624
+ "combined-stream": "^1.0.8",
625
+ "mime-types": "^2.1.12"
626
+ },
627
+ "engines": {
628
+ "node": ">= 6"
629
+ }
630
+ },
631
+ "node_modules/forwarded": {
632
+ "version": "0.2.0",
633
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
634
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
635
+ "license": "MIT",
636
+ "engines": {
637
+ "node": ">= 0.6"
638
+ }
639
+ },
640
+ "node_modules/fresh": {
641
+ "version": "0.5.2",
642
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
643
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
644
+ "license": "MIT",
645
+ "engines": {
646
+ "node": ">= 0.6"
647
+ }
648
+ },
649
+ "node_modules/fs": {
650
+ "version": "0.0.1-security",
651
+ "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
652
+ "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==",
653
+ "license": "ISC"
654
+ },
655
+ "node_modules/fs-minipass": {
656
+ "version": "2.1.0",
657
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
658
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
659
+ "license": "ISC",
660
+ "dependencies": {
661
+ "minipass": "^3.0.0"
662
+ },
663
+ "engines": {
664
+ "node": ">= 8"
665
+ }
666
+ },
667
+ "node_modules/fs-minipass/node_modules/minipass": {
668
+ "version": "3.3.6",
669
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
670
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
671
+ "license": "ISC",
672
+ "dependencies": {
673
+ "yallist": "^4.0.0"
674
+ },
675
+ "engines": {
676
+ "node": ">=8"
677
+ }
678
+ },
679
+ "node_modules/fs.realpath": {
680
+ "version": "1.0.0",
681
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
682
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
683
+ "license": "ISC"
684
+ },
685
+ "node_modules/function-bind": {
686
+ "version": "1.1.2",
687
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
688
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
689
+ "license": "MIT",
690
+ "funding": {
691
+ "url": "https://github.com/sponsors/ljharb"
692
+ }
693
+ },
694
+ "node_modules/gauge": {
695
+ "version": "3.0.2",
696
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
697
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
698
+ "deprecated": "This package is no longer supported.",
699
+ "license": "ISC",
700
+ "dependencies": {
701
+ "aproba": "^1.0.3 || ^2.0.0",
702
+ "color-support": "^1.1.2",
703
+ "console-control-strings": "^1.0.0",
704
+ "has-unicode": "^2.0.1",
705
+ "object-assign": "^4.1.1",
706
+ "signal-exit": "^3.0.0",
707
+ "string-width": "^4.2.3",
708
+ "strip-ansi": "^6.0.1",
709
+ "wide-align": "^1.1.2"
710
+ },
711
+ "engines": {
712
+ "node": ">=10"
713
+ }
714
+ },
715
+ "node_modules/get-intrinsic": {
716
+ "version": "1.2.4",
717
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
718
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
719
+ "license": "MIT",
720
+ "dependencies": {
721
+ "es-errors": "^1.3.0",
722
+ "function-bind": "^1.1.2",
723
+ "has-proto": "^1.0.1",
724
+ "has-symbols": "^1.0.3",
725
+ "hasown": "^2.0.0"
726
+ },
727
+ "engines": {
728
+ "node": ">= 0.4"
729
+ },
730
+ "funding": {
731
+ "url": "https://github.com/sponsors/ljharb"
732
+ }
733
+ },
734
+ "node_modules/glob": {
735
+ "version": "7.2.3",
736
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
737
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
738
+ "deprecated": "Glob versions prior to v9 are no longer supported",
739
+ "license": "ISC",
740
+ "dependencies": {
741
+ "fs.realpath": "^1.0.0",
742
+ "inflight": "^1.0.4",
743
+ "inherits": "2",
744
+ "minimatch": "^3.1.1",
745
+ "once": "^1.3.0",
746
+ "path-is-absolute": "^1.0.0"
747
+ },
748
+ "engines": {
749
+ "node": "*"
750
+ },
751
+ "funding": {
752
+ "url": "https://github.com/sponsors/isaacs"
753
+ }
754
+ },
755
+ "node_modules/gopd": {
756
+ "version": "1.0.1",
757
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
758
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
759
+ "license": "MIT",
760
+ "dependencies": {
761
+ "get-intrinsic": "^1.1.3"
762
+ },
763
+ "funding": {
764
+ "url": "https://github.com/sponsors/ljharb"
765
+ }
766
+ },
767
+ "node_modules/has-property-descriptors": {
768
+ "version": "1.0.2",
769
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
770
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
771
+ "license": "MIT",
772
+ "dependencies": {
773
+ "es-define-property": "^1.0.0"
774
+ },
775
+ "funding": {
776
+ "url": "https://github.com/sponsors/ljharb"
777
+ }
778
+ },
779
+ "node_modules/has-proto": {
780
+ "version": "1.0.3",
781
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
782
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
783
+ "license": "MIT",
784
+ "engines": {
785
+ "node": ">= 0.4"
786
+ },
787
+ "funding": {
788
+ "url": "https://github.com/sponsors/ljharb"
789
+ }
790
+ },
791
+ "node_modules/has-symbols": {
792
+ "version": "1.0.3",
793
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
794
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
795
+ "license": "MIT",
796
+ "engines": {
797
+ "node": ">= 0.4"
798
+ },
799
+ "funding": {
800
+ "url": "https://github.com/sponsors/ljharb"
801
+ }
802
+ },
803
+ "node_modules/has-unicode": {
804
+ "version": "2.0.1",
805
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
806
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
807
+ "license": "ISC"
808
+ },
809
+ "node_modules/hasown": {
810
+ "version": "2.0.2",
811
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
812
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
813
+ "license": "MIT",
814
+ "dependencies": {
815
+ "function-bind": "^1.1.2"
816
+ },
817
+ "engines": {
818
+ "node": ">= 0.4"
819
+ }
820
+ },
821
+ "node_modules/http-errors": {
822
+ "version": "2.0.0",
823
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
824
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
825
+ "license": "MIT",
826
+ "dependencies": {
827
+ "depd": "2.0.0",
828
+ "inherits": "2.0.4",
829
+ "setprototypeof": "1.2.0",
830
+ "statuses": "2.0.1",
831
+ "toidentifier": "1.0.1"
832
+ },
833
+ "engines": {
834
+ "node": ">= 0.8"
835
+ }
836
+ },
837
+ "node_modules/https-proxy-agent": {
838
+ "version": "5.0.1",
839
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
840
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
841
+ "license": "MIT",
842
+ "dependencies": {
843
+ "agent-base": "6",
844
+ "debug": "4"
845
+ },
846
+ "engines": {
847
+ "node": ">= 6"
848
+ }
849
+ },
850
+ "node_modules/https-proxy-agent/node_modules/debug": {
851
+ "version": "4.3.7",
852
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
853
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
854
+ "license": "MIT",
855
+ "dependencies": {
856
+ "ms": "^2.1.3"
857
+ },
858
+ "engines": {
859
+ "node": ">=6.0"
860
+ },
861
+ "peerDependenciesMeta": {
862
+ "supports-color": {
863
+ "optional": true
864
+ }
865
+ }
866
+ },
867
+ "node_modules/https-proxy-agent/node_modules/ms": {
868
+ "version": "2.1.3",
869
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
870
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
871
+ "license": "MIT"
872
+ },
873
+ "node_modules/iconv-lite": {
874
+ "version": "0.4.24",
875
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
876
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
877
+ "license": "MIT",
878
+ "dependencies": {
879
+ "safer-buffer": ">= 2.1.2 < 3"
880
+ },
881
+ "engines": {
882
+ "node": ">=0.10.0"
883
+ }
884
+ },
885
+ "node_modules/inflight": {
886
+ "version": "1.0.6",
887
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
888
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
889
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
890
+ "license": "ISC",
891
+ "dependencies": {
892
+ "once": "^1.3.0",
893
+ "wrappy": "1"
894
+ }
895
+ },
896
+ "node_modules/inherits": {
897
+ "version": "2.0.4",
898
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
899
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
900
+ "license": "ISC"
901
+ },
902
+ "node_modules/ipaddr.js": {
903
+ "version": "1.9.1",
904
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
905
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
906
+ "license": "MIT",
907
+ "engines": {
908
+ "node": ">= 0.10"
909
+ }
910
+ },
911
+ "node_modules/is-fullwidth-code-point": {
912
+ "version": "3.0.0",
913
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
914
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
915
+ "license": "MIT",
916
+ "engines": {
917
+ "node": ">=8"
918
+ }
919
+ },
920
+ "node_modules/make-dir": {
921
+ "version": "3.1.0",
922
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
923
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
924
+ "license": "MIT",
925
+ "dependencies": {
926
+ "semver": "^6.0.0"
927
+ },
928
+ "engines": {
929
+ "node": ">=8"
930
+ },
931
+ "funding": {
932
+ "url": "https://github.com/sponsors/sindresorhus"
933
+ }
934
+ },
935
+ "node_modules/make-dir/node_modules/semver": {
936
+ "version": "6.3.1",
937
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
938
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
939
+ "license": "ISC",
940
+ "bin": {
941
+ "semver": "bin/semver.js"
942
+ }
943
+ },
944
+ "node_modules/media-typer": {
945
+ "version": "0.3.0",
946
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
947
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
948
+ "license": "MIT",
949
+ "engines": {
950
+ "node": ">= 0.6"
951
+ }
952
+ },
953
+ "node_modules/merge-descriptors": {
954
+ "version": "1.0.3",
955
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
956
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
957
+ "license": "MIT",
958
+ "funding": {
959
+ "url": "https://github.com/sponsors/sindresorhus"
960
+ }
961
+ },
962
+ "node_modules/methods": {
963
+ "version": "1.1.2",
964
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
965
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
966
+ "license": "MIT",
967
+ "engines": {
968
+ "node": ">= 0.6"
969
+ }
970
+ },
971
+ "node_modules/mime": {
972
+ "version": "1.6.0",
973
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
974
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
975
+ "license": "MIT",
976
+ "bin": {
977
+ "mime": "cli.js"
978
+ },
979
+ "engines": {
980
+ "node": ">=4"
981
+ }
982
+ },
983
+ "node_modules/mime-db": {
984
+ "version": "1.52.0",
985
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
986
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
987
+ "license": "MIT",
988
+ "engines": {
989
+ "node": ">= 0.6"
990
+ }
991
+ },
992
+ "node_modules/mime-types": {
993
+ "version": "2.1.35",
994
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
995
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
996
+ "license": "MIT",
997
+ "dependencies": {
998
+ "mime-db": "1.52.0"
999
+ },
1000
+ "engines": {
1001
+ "node": ">= 0.6"
1002
+ }
1003
+ },
1004
+ "node_modules/mimic-response": {
1005
+ "version": "2.1.0",
1006
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
1007
+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
1008
+ "license": "MIT",
1009
+ "engines": {
1010
+ "node": ">=8"
1011
+ },
1012
+ "funding": {
1013
+ "url": "https://github.com/sponsors/sindresorhus"
1014
+ }
1015
+ },
1016
+ "node_modules/minimatch": {
1017
+ "version": "3.1.2",
1018
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1019
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1020
+ "license": "ISC",
1021
+ "dependencies": {
1022
+ "brace-expansion": "^1.1.7"
1023
+ },
1024
+ "engines": {
1025
+ "node": "*"
1026
+ }
1027
+ },
1028
+ "node_modules/minipass": {
1029
+ "version": "5.0.0",
1030
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
1031
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
1032
+ "license": "ISC",
1033
+ "engines": {
1034
+ "node": ">=8"
1035
+ }
1036
+ },
1037
+ "node_modules/minizlib": {
1038
+ "version": "2.1.2",
1039
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
1040
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
1041
+ "license": "MIT",
1042
+ "dependencies": {
1043
+ "minipass": "^3.0.0",
1044
+ "yallist": "^4.0.0"
1045
+ },
1046
+ "engines": {
1047
+ "node": ">= 8"
1048
+ }
1049
+ },
1050
+ "node_modules/minizlib/node_modules/minipass": {
1051
+ "version": "3.3.6",
1052
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
1053
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
1054
+ "license": "ISC",
1055
+ "dependencies": {
1056
+ "yallist": "^4.0.0"
1057
+ },
1058
+ "engines": {
1059
+ "node": ">=8"
1060
+ }
1061
+ },
1062
+ "node_modules/mkdirp": {
1063
+ "version": "1.0.4",
1064
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1065
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
1066
+ "license": "MIT",
1067
+ "bin": {
1068
+ "mkdirp": "bin/cmd.js"
1069
+ },
1070
+ "engines": {
1071
+ "node": ">=10"
1072
+ }
1073
+ },
1074
+ "node_modules/ms": {
1075
+ "version": "2.0.0",
1076
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1077
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
1078
+ "license": "MIT"
1079
+ },
1080
+ "node_modules/nan": {
1081
+ "version": "2.22.0",
1082
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz",
1083
+ "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==",
1084
+ "license": "MIT"
1085
+ },
1086
+ "node_modules/negotiator": {
1087
+ "version": "0.6.3",
1088
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1089
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1090
+ "license": "MIT",
1091
+ "engines": {
1092
+ "node": ">= 0.6"
1093
+ }
1094
+ },
1095
+ "node_modules/node-fetch": {
1096
+ "version": "2.7.0",
1097
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
1098
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
1099
+ "license": "MIT",
1100
+ "dependencies": {
1101
+ "whatwg-url": "^5.0.0"
1102
+ },
1103
+ "engines": {
1104
+ "node": "4.x || >=6.0.0"
1105
+ },
1106
+ "peerDependencies": {
1107
+ "encoding": "^0.1.0"
1108
+ },
1109
+ "peerDependenciesMeta": {
1110
+ "encoding": {
1111
+ "optional": true
1112
+ }
1113
+ }
1114
+ },
1115
+ "node_modules/nopt": {
1116
+ "version": "5.0.0",
1117
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
1118
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
1119
+ "license": "ISC",
1120
+ "dependencies": {
1121
+ "abbrev": "1"
1122
+ },
1123
+ "bin": {
1124
+ "nopt": "bin/nopt.js"
1125
+ },
1126
+ "engines": {
1127
+ "node": ">=6"
1128
+ }
1129
+ },
1130
+ "node_modules/npmlog": {
1131
+ "version": "5.0.1",
1132
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
1133
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
1134
+ "deprecated": "This package is no longer supported.",
1135
+ "license": "ISC",
1136
+ "dependencies": {
1137
+ "are-we-there-yet": "^2.0.0",
1138
+ "console-control-strings": "^1.1.0",
1139
+ "gauge": "^3.0.0",
1140
+ "set-blocking": "^2.0.0"
1141
+ }
1142
+ },
1143
+ "node_modules/object-assign": {
1144
+ "version": "4.1.1",
1145
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1146
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1147
+ "license": "MIT",
1148
+ "engines": {
1149
+ "node": ">=0.10.0"
1150
+ }
1151
+ },
1152
+ "node_modules/object-inspect": {
1153
+ "version": "1.13.2",
1154
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
1155
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
1156
+ "license": "MIT",
1157
+ "engines": {
1158
+ "node": ">= 0.4"
1159
+ },
1160
+ "funding": {
1161
+ "url": "https://github.com/sponsors/ljharb"
1162
+ }
1163
+ },
1164
+ "node_modules/on-finished": {
1165
+ "version": "2.4.1",
1166
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1167
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1168
+ "license": "MIT",
1169
+ "dependencies": {
1170
+ "ee-first": "1.1.1"
1171
+ },
1172
+ "engines": {
1173
+ "node": ">= 0.8"
1174
+ }
1175
+ },
1176
+ "node_modules/once": {
1177
+ "version": "1.4.0",
1178
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1179
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1180
+ "license": "ISC",
1181
+ "dependencies": {
1182
+ "wrappy": "1"
1183
+ }
1184
+ },
1185
+ "node_modules/parseurl": {
1186
+ "version": "1.3.3",
1187
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1188
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1189
+ "license": "MIT",
1190
+ "engines": {
1191
+ "node": ">= 0.8"
1192
+ }
1193
+ },
1194
+ "node_modules/path": {
1195
+ "version": "0.12.7",
1196
+ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
1197
+ "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
1198
+ "license": "MIT",
1199
+ "dependencies": {
1200
+ "process": "^0.11.1",
1201
+ "util": "^0.10.3"
1202
+ }
1203
+ },
1204
+ "node_modules/path-is-absolute": {
1205
+ "version": "1.0.1",
1206
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1207
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1208
+ "license": "MIT",
1209
+ "engines": {
1210
+ "node": ">=0.10.0"
1211
+ }
1212
+ },
1213
+ "node_modules/path-to-regexp": {
1214
+ "version": "0.1.10",
1215
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
1216
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
1217
+ "license": "MIT"
1218
+ },
1219
+ "node_modules/process": {
1220
+ "version": "0.11.10",
1221
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
1222
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
1223
+ "license": "MIT",
1224
+ "engines": {
1225
+ "node": ">= 0.6.0"
1226
+ }
1227
+ },
1228
+ "node_modules/proxy-addr": {
1229
+ "version": "2.0.7",
1230
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1231
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1232
+ "license": "MIT",
1233
+ "dependencies": {
1234
+ "forwarded": "0.2.0",
1235
+ "ipaddr.js": "1.9.1"
1236
+ },
1237
+ "engines": {
1238
+ "node": ">= 0.10"
1239
+ }
1240
+ },
1241
+ "node_modules/proxy-from-env": {
1242
+ "version": "1.1.0",
1243
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1244
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
1245
+ "license": "MIT"
1246
+ },
1247
+ "node_modules/qs": {
1248
+ "version": "6.13.0",
1249
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
1250
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
1251
+ "license": "BSD-3-Clause",
1252
+ "dependencies": {
1253
+ "side-channel": "^1.0.6"
1254
+ },
1255
+ "engines": {
1256
+ "node": ">=0.6"
1257
+ },
1258
+ "funding": {
1259
+ "url": "https://github.com/sponsors/ljharb"
1260
+ }
1261
+ },
1262
+ "node_modules/range-parser": {
1263
+ "version": "1.2.1",
1264
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1265
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1266
+ "license": "MIT",
1267
+ "engines": {
1268
+ "node": ">= 0.6"
1269
+ }
1270
+ },
1271
+ "node_modules/raw-body": {
1272
+ "version": "2.5.2",
1273
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
1274
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
1275
+ "license": "MIT",
1276
+ "dependencies": {
1277
+ "bytes": "3.1.2",
1278
+ "http-errors": "2.0.0",
1279
+ "iconv-lite": "0.4.24",
1280
+ "unpipe": "1.0.0"
1281
+ },
1282
+ "engines": {
1283
+ "node": ">= 0.8"
1284
+ }
1285
+ },
1286
+ "node_modules/readable-stream": {
1287
+ "version": "3.6.2",
1288
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
1289
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
1290
+ "license": "MIT",
1291
+ "dependencies": {
1292
+ "inherits": "^2.0.3",
1293
+ "string_decoder": "^1.1.1",
1294
+ "util-deprecate": "^1.0.1"
1295
+ },
1296
+ "engines": {
1297
+ "node": ">= 6"
1298
+ }
1299
+ },
1300
+ "node_modules/rimraf": {
1301
+ "version": "3.0.2",
1302
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1303
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1304
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
1305
+ "license": "ISC",
1306
+ "dependencies": {
1307
+ "glob": "^7.1.3"
1308
+ },
1309
+ "bin": {
1310
+ "rimraf": "bin.js"
1311
+ },
1312
+ "funding": {
1313
+ "url": "https://github.com/sponsors/isaacs"
1314
+ }
1315
+ },
1316
+ "node_modules/safe-buffer": {
1317
+ "version": "5.2.1",
1318
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1319
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1320
+ "funding": [
1321
+ {
1322
+ "type": "github",
1323
+ "url": "https://github.com/sponsors/feross"
1324
+ },
1325
+ {
1326
+ "type": "patreon",
1327
+ "url": "https://www.patreon.com/feross"
1328
+ },
1329
+ {
1330
+ "type": "consulting",
1331
+ "url": "https://feross.org/support"
1332
+ }
1333
+ ],
1334
+ "license": "MIT"
1335
+ },
1336
+ "node_modules/safer-buffer": {
1337
+ "version": "2.1.2",
1338
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1339
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1340
+ "license": "MIT"
1341
+ },
1342
+ "node_modules/semver": {
1343
+ "version": "7.6.3",
1344
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
1345
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
1346
+ "license": "ISC",
1347
+ "bin": {
1348
+ "semver": "bin/semver.js"
1349
+ },
1350
+ "engines": {
1351
+ "node": ">=10"
1352
+ }
1353
+ },
1354
+ "node_modules/send": {
1355
+ "version": "0.19.0",
1356
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
1357
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
1358
+ "license": "MIT",
1359
+ "dependencies": {
1360
+ "debug": "2.6.9",
1361
+ "depd": "2.0.0",
1362
+ "destroy": "1.2.0",
1363
+ "encodeurl": "~1.0.2",
1364
+ "escape-html": "~1.0.3",
1365
+ "etag": "~1.8.1",
1366
+ "fresh": "0.5.2",
1367
+ "http-errors": "2.0.0",
1368
+ "mime": "1.6.0",
1369
+ "ms": "2.1.3",
1370
+ "on-finished": "2.4.1",
1371
+ "range-parser": "~1.2.1",
1372
+ "statuses": "2.0.1"
1373
+ },
1374
+ "engines": {
1375
+ "node": ">= 0.8.0"
1376
+ }
1377
+ },
1378
+ "node_modules/send/node_modules/encodeurl": {
1379
+ "version": "1.0.2",
1380
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
1381
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
1382
+ "license": "MIT",
1383
+ "engines": {
1384
+ "node": ">= 0.8"
1385
+ }
1386
+ },
1387
+ "node_modules/send/node_modules/ms": {
1388
+ "version": "2.1.3",
1389
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1390
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1391
+ "license": "MIT"
1392
+ },
1393
+ "node_modules/serve-static": {
1394
+ "version": "1.16.2",
1395
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
1396
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
1397
+ "license": "MIT",
1398
+ "dependencies": {
1399
+ "encodeurl": "~2.0.0",
1400
+ "escape-html": "~1.0.3",
1401
+ "parseurl": "~1.3.3",
1402
+ "send": "0.19.0"
1403
+ },
1404
+ "engines": {
1405
+ "node": ">= 0.8.0"
1406
+ }
1407
+ },
1408
+ "node_modules/set-blocking": {
1409
+ "version": "2.0.0",
1410
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1411
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
1412
+ "license": "ISC"
1413
+ },
1414
+ "node_modules/set-function-length": {
1415
+ "version": "1.2.2",
1416
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
1417
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
1418
+ "license": "MIT",
1419
+ "dependencies": {
1420
+ "define-data-property": "^1.1.4",
1421
+ "es-errors": "^1.3.0",
1422
+ "function-bind": "^1.1.2",
1423
+ "get-intrinsic": "^1.2.4",
1424
+ "gopd": "^1.0.1",
1425
+ "has-property-descriptors": "^1.0.2"
1426
+ },
1427
+ "engines": {
1428
+ "node": ">= 0.4"
1429
+ }
1430
+ },
1431
+ "node_modules/setprototypeof": {
1432
+ "version": "1.2.0",
1433
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1434
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
1435
+ "license": "ISC"
1436
+ },
1437
+ "node_modules/side-channel": {
1438
+ "version": "1.0.6",
1439
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
1440
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
1441
+ "license": "MIT",
1442
+ "dependencies": {
1443
+ "call-bind": "^1.0.7",
1444
+ "es-errors": "^1.3.0",
1445
+ "get-intrinsic": "^1.2.4",
1446
+ "object-inspect": "^1.13.1"
1447
+ },
1448
+ "engines": {
1449
+ "node": ">= 0.4"
1450
+ },
1451
+ "funding": {
1452
+ "url": "https://github.com/sponsors/ljharb"
1453
+ }
1454
+ },
1455
+ "node_modules/signal-exit": {
1456
+ "version": "3.0.7",
1457
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1458
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
1459
+ "license": "ISC"
1460
+ },
1461
+ "node_modules/simple-concat": {
1462
+ "version": "1.0.1",
1463
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
1464
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
1465
+ "funding": [
1466
+ {
1467
+ "type": "github",
1468
+ "url": "https://github.com/sponsors/feross"
1469
+ },
1470
+ {
1471
+ "type": "patreon",
1472
+ "url": "https://www.patreon.com/feross"
1473
+ },
1474
+ {
1475
+ "type": "consulting",
1476
+ "url": "https://feross.org/support"
1477
+ }
1478
+ ],
1479
+ "license": "MIT"
1480
+ },
1481
+ "node_modules/simple-get": {
1482
+ "version": "3.1.1",
1483
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
1484
+ "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
1485
+ "license": "MIT",
1486
+ "dependencies": {
1487
+ "decompress-response": "^4.2.0",
1488
+ "once": "^1.3.1",
1489
+ "simple-concat": "^1.0.0"
1490
+ }
1491
+ },
1492
+ "node_modules/statuses": {
1493
+ "version": "2.0.1",
1494
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1495
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1496
+ "license": "MIT",
1497
+ "engines": {
1498
+ "node": ">= 0.8"
1499
+ }
1500
+ },
1501
+ "node_modules/string_decoder": {
1502
+ "version": "1.3.0",
1503
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1504
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1505
+ "license": "MIT",
1506
+ "dependencies": {
1507
+ "safe-buffer": "~5.2.0"
1508
+ }
1509
+ },
1510
+ "node_modules/string-width": {
1511
+ "version": "4.2.3",
1512
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1513
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1514
+ "license": "MIT",
1515
+ "dependencies": {
1516
+ "emoji-regex": "^8.0.0",
1517
+ "is-fullwidth-code-point": "^3.0.0",
1518
+ "strip-ansi": "^6.0.1"
1519
+ },
1520
+ "engines": {
1521
+ "node": ">=8"
1522
+ }
1523
+ },
1524
+ "node_modules/strip-ansi": {
1525
+ "version": "6.0.1",
1526
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1527
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1528
+ "license": "MIT",
1529
+ "dependencies": {
1530
+ "ansi-regex": "^5.0.1"
1531
+ },
1532
+ "engines": {
1533
+ "node": ">=8"
1534
+ }
1535
+ },
1536
+ "node_modules/tar": {
1537
+ "version": "6.2.1",
1538
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
1539
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
1540
+ "license": "ISC",
1541
+ "dependencies": {
1542
+ "chownr": "^2.0.0",
1543
+ "fs-minipass": "^2.0.0",
1544
+ "minipass": "^5.0.0",
1545
+ "minizlib": "^2.1.1",
1546
+ "mkdirp": "^1.0.3",
1547
+ "yallist": "^4.0.0"
1548
+ },
1549
+ "engines": {
1550
+ "node": ">=10"
1551
+ }
1552
+ },
1553
+ "node_modules/toidentifier": {
1554
+ "version": "1.0.1",
1555
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1556
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1557
+ "license": "MIT",
1558
+ "engines": {
1559
+ "node": ">=0.6"
1560
+ }
1561
+ },
1562
+ "node_modules/tr46": {
1563
+ "version": "0.0.3",
1564
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1565
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
1566
+ "license": "MIT"
1567
+ },
1568
+ "node_modules/type-is": {
1569
+ "version": "1.6.18",
1570
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1571
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1572
+ "license": "MIT",
1573
+ "dependencies": {
1574
+ "media-typer": "0.3.0",
1575
+ "mime-types": "~2.1.24"
1576
+ },
1577
+ "engines": {
1578
+ "node": ">= 0.6"
1579
+ }
1580
+ },
1581
+ "node_modules/unpipe": {
1582
+ "version": "1.0.0",
1583
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1584
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1585
+ "license": "MIT",
1586
+ "engines": {
1587
+ "node": ">= 0.8"
1588
+ }
1589
+ },
1590
+ "node_modules/util": {
1591
+ "version": "0.10.4",
1592
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
1593
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
1594
+ "license": "MIT",
1595
+ "dependencies": {
1596
+ "inherits": "2.0.3"
1597
+ }
1598
+ },
1599
+ "node_modules/util-deprecate": {
1600
+ "version": "1.0.2",
1601
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1602
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
1603
+ "license": "MIT"
1604
+ },
1605
+ "node_modules/util/node_modules/inherits": {
1606
+ "version": "2.0.3",
1607
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1608
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
1609
+ "license": "ISC"
1610
+ },
1611
+ "node_modules/utils-merge": {
1612
+ "version": "1.0.1",
1613
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1614
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1615
+ "license": "MIT",
1616
+ "engines": {
1617
+ "node": ">= 0.4.0"
1618
+ }
1619
+ },
1620
+ "node_modules/uuid": {
1621
+ "version": "10.0.0",
1622
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
1623
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
1624
+ "funding": [
1625
+ "https://github.com/sponsors/broofa",
1626
+ "https://github.com/sponsors/ctavan"
1627
+ ],
1628
+ "license": "MIT",
1629
+ "bin": {
1630
+ "uuid": "dist/bin/uuid"
1631
+ }
1632
+ },
1633
+ "node_modules/vary": {
1634
+ "version": "1.1.2",
1635
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1636
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1637
+ "license": "MIT",
1638
+ "engines": {
1639
+ "node": ">= 0.8"
1640
+ }
1641
+ },
1642
+ "node_modules/webidl-conversions": {
1643
+ "version": "3.0.1",
1644
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1645
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
1646
+ "license": "BSD-2-Clause"
1647
+ },
1648
+ "node_modules/whatwg-url": {
1649
+ "version": "5.0.0",
1650
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1651
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1652
+ "license": "MIT",
1653
+ "dependencies": {
1654
+ "tr46": "~0.0.3",
1655
+ "webidl-conversions": "^3.0.0"
1656
+ }
1657
+ },
1658
+ "node_modules/wide-align": {
1659
+ "version": "1.1.5",
1660
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
1661
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
1662
+ "license": "ISC",
1663
+ "dependencies": {
1664
+ "string-width": "^1.0.2 || 2 || 3 || 4"
1665
+ }
1666
+ },
1667
+ "node_modules/wrappy": {
1668
+ "version": "1.0.2",
1669
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1670
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
1671
+ "license": "ISC"
1672
+ },
1673
+ "node_modules/yallist": {
1674
+ "version": "4.0.0",
1675
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1676
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1677
+ "license": "ISC"
1678
+ }
1679
+ }
1680
+ }
mmapi/package.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "disseminate",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "keywords": [],
10
+ "author": "",
11
+ "license": "ISC",
12
+ "dependencies": {
13
+ "@huggingface/agents": "^0.0.5",
14
+ "@huggingface/hub": "^0.18.2",
15
+ "@huggingface/inference": "^2.8.1",
16
+ "axios": "^1.7.7",
17
+ "canvas": "^2.11.2",
18
+ "cors": "^2.8.5",
19
+ "crypto": "^1.0.1",
20
+ "dotenv": "^16.4.5",
21
+ "express": "^4.21.1",
22
+ "fs": "^0.0.1-security",
23
+ "path": "^0.12.7",
24
+ "uuid": "^10.0.0"
25
+ }
26
+ }
27
+