├── .eslintrc.json ├── .gitignore ├── README.md ├── board.excalidraw ├── exemple.js ├── index.d.ts ├── index.js ├── jsconfig.json ├── lib ├── call.js ├── check_request.js ├── errors.js ├── response_functions.js └── yemot_router.js ├── package-lock.json ├── package.json └── test └── test.js /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true 6 | }, 7 | "extends": "eslint:recommended", 8 | "globals": { 9 | "Atomics": "readonly", 10 | "SharedArrayBuffer": "readonly", 11 | /* MOCHA */ 12 | "describe": false, 13 | "it": false, 14 | "before": false, 15 | "beforeEach": false, 16 | "after": false, 17 | "afterEach": false 18 | }, 19 | "parserOptions": { 20 | "ecmaVersion": 2018 21 | }, 22 | "rules": { 23 | "indent": [ 24 | "error", 25 | "tab", 26 | { 27 | "SwitchCase": 1 28 | } 29 | ], 30 | "linebreak-style": [ 31 | "error", 32 | "windows" 33 | ], 34 | "quotes": [ 35 | "error", 36 | "double" 37 | ], 38 | "semi": [ 39 | "error", 40 | "always" 41 | ] 42 | } 43 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .vscode 3 | *.code-workspace -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # yemot-router 2 | 3 | Because I do not know English, the documents are now in Hebrew. 4 | With the help of God in teaching English, I'll translate that. 5 | 6 |
7 | 8 | לתכנת מערכות מתקדמות ב'ימות-המשיח' בקלות באמצעות [מודול API](https://f2.freeivr.co.il/post/76). 9 | 10 | # התקנה (NodeJS) 11 | 12 |
13 | 14 | ```bash 15 | npm i yemot-router 16 | ``` 17 | 18 |
19 | 20 | # שימוש 21 | 22 | התקשורת עם המשתמש, נעשית דרך האובייקט `Call`. 23 | מחלקת הראוטר מקבלת כפרמטר פונקציית קולבק (CallBack), שהפרמטר שלה הוא אובייקט ה`Call`. 24 | עם המתודות של האובייקט הזה, ניתן להפעיל ולהפנות את המשתמש. 25 | 26 | # Change log 27 | 28 |
29 | 4.0.0 30 | בגרסה 4.0.0 שינוי משמעותי: 31 | 32 | במקום לבדוק בכל פעם את המאפיין `hangup`, 33 | 34 | כעת בעת ניתוק, פשוט תיזרק שגיאה. 35 | 36 | ניתן לתפוס אותה להתנהגות מותאמת אישית (ראה דוגמה בקובץ `exemple.js/.`), 37 | 38 | או להתעלם, לעצירה של הסקריפט. 39 | 40 |
41 | 42 | # דוגמא בסיסית 43 | 44 |
45 | 46 | ./exemple.js 47 | 48 |
49 | 50 | # מתודות אובייקט ה`Call` 51 | 52 |
53 | 54 | ### `read(massage : [], mode : string, options : {}) : Promise` 55 | 56 | מתודה לשאילת שאלה את המשתמש, וקבלת התשובה מתי שתגיע, ע"י הבטחה (Promise). 57 | 58 |
59 |
60 | 61 | #### הפרמטר `massage` 62 | 63 | הפרמטר הראשון, הוא השאלה שהמשתמש ישמע. מערך של אובייקטים, שכל אחד מהם הוא קובץ או הקראה, שתושמע למשתמש. 64 | 65 | טקסט שיוקרא למשתמש: 66 | 67 |
68 | 69 | ```js 70 | let massage = [{ type: "text", data: "היי, תקיש 10" }]; 71 | let massage = [{ type: "text", data: "היי, תקיש 10" }]; 72 | ``` 73 | 74 |
75 | השמעת קובץ במערכת: 76 |
77 | 78 | ```js 79 | let massage = [{ type: "file", data: "000" }]; 80 | ``` 81 | 82 |
83 | השמעת מספר: 84 |
85 | 86 | ```js 87 | let massage = [{ type: "number", data: "512" }]; 88 | ``` 89 | 90 |
91 | השמעת ספרות: 92 |
93 | 94 | ```js 95 | let massage = [{ type: "digits", data: "077313770" }]; 96 | ``` 97 | 98 |
99 | הקראת קובץ טקסט הנמצא במערכת: 100 | 101 |
102 | 103 | ```js 104 | let massage = [{ type: "speech", data: "000" }]; 105 | ``` 106 | 107 |
108 | הקראת אותיות באנגלית: 109 | 110 |
111 | 112 | ```js 113 | let massage = [{ type: "alpha", data: "abc@gmail.com" }]; 114 | ``` 115 | 116 |
117 | 118 | #### הפרמטר `mode` 119 | 120 | הפרמטר הזה קובע, האם לקבל תשובה, ע"י הקשה, זיהוי דיבור, או הקלטה. 121 | 122 | האפשרויות: 123 | 124 |
125 | 126 | `tap` = הקשה 127 | 128 | `stt` = זיהוי דיבור 129 | 130 | `record` = הקלטה 131 | 132 |
133 | 134 | #### הפרמטר `options` 135 | 136 | בפרמטר הזה, ניתן להעביר אפשרויות נוספות, כגון סך הקשות מינימלי, מקסימלי, וכו'. 137 | 138 | ##### ערכי ברירת מחדל - הקשה 139 | 140 |
141 | 142 | ```js 143 | let options = { 144 | 145 | /* שם הערך בימות 146 | ברירת מחדל, נקבע אוטומטית, 147 | val_1, val_2 ... */ 148 | val_name: "val_x", 149 | 150 | /* האם לבקש את הערך שוב אם קיים. */ 151 | re_enter_if_exists: false, 152 | 153 | /* כמות ההקשות המקסימלית */ 154 | max: "*", 155 | 156 | /* כמות ההקשות המינימלית */ 157 | min: 1, 158 | 159 | /* שניות להמתנה */ 160 | sec_wait: 7, 161 | 162 | /* צורת ההשמעה למשתמש את הקשותיו */ 163 | /* באם מעוניינים במקלדת שונה ממקלדת ספרות, כגון EmailKeyboard או HebrewKeyboard, יש להכניס כאן את סוג המקלדת 164 | [ראו exemple.js] 165 | האופציות הקיימות: 166 | "Number" | "Digits" | "File" | "TTS" | "Alpha" | "No" | "HebrewKeyboard" | 167 | "EmailKeyboard" | "EnglishKeyboard" | "DigitsKeyboard" | "TeudatZehut" | 168 | "Price" | "Time" | "Phone" | "No" 169 | פירוט על כל אופציה ניתן למצוא בתיעוד מודול API של ימות המשיח, תחת"הערך השישי (הקשה)". 170 | */ 171 | play_ok_mode: "No", 172 | 173 | /* האם לחסום הקשה על כוכבית */ 174 | block_asterisk: false, 175 | 176 | /* האם לחסום הקשה על אפס */ 177 | block_zero: false, 178 | 179 | /* החלפת תווים*/ 180 | replace_char: "", 181 | 182 | /* ספרות מותרות להקשה - מערך 183 | [1, 2, 3 ...] 184 | */ 185 | digits_allowed: [], 186 | 187 | /* אחרי כמה שניות להשמיע שוב את השאלה */ 188 | amount_attempts: "", 189 | 190 | /* אם המשתמש לא ענה, האם לשלוח ערך*/ 191 | read_none: false, 192 | 193 | /* הערך שיישלח באין תשובה */ 194 | read_none_var: "", 195 | 196 | /* האם לחסום שינוי שפת מקלדת */ 197 | block_change_type_lang: false, 198 | } 199 | ``` 200 | 201 |
202 | 203 | ##### ערכי ברירת מחדל - זיהוי דיבור: 204 | 205 |
206 | 207 | ```js 208 | let options = { 209 | lang: "", 210 | 211 | allow_typing: false, 212 | }; 213 | ``` 214 | 215 |
216 | 217 | ##### ערכי ברירת מחדל - הקלטה 218 | 219 |
220 | 221 | ```js 222 | let options = { 223 | path: "", 224 | 225 | file_name: "", 226 | 227 | record_ok: true, 228 | 229 | record_hangup: false, 230 | 231 | record_attach: false, 232 | 233 | lenght_min: "", 234 | 235 | lenght_max: "", 236 | }; 237 | ``` 238 | 239 |
240 | 241 | ### `go_to_folder(folder: string): void` 242 | 243 | מתודה להעברת השיחה לשלוחה מסוימת במערכת הנוכחית. 244 | ניתן לכתוב נתיב יחסי לשלוחה הנוכחית או לשלוחה הראשית. פירוט על האופציות ניתן לקרוא [כאן](https://f2.freeivr.co.il/post/58). 245 | ניתן להעביר בפרמטר folder את הסטרינג `hangup`, וכך לנתק את השיחה. 246 | 247 | ### `restart_ext()` 248 | 249 | מתודה פשוטה ללא ארגומנטים להפעלה מחדש של השלוחה הנוכחית. 250 | זהה לכתיבה הבאה: 251 | 252 | ```js 253 | go_to_folder(`/${call.ApiExtension}`); 254 | ``` 255 | 256 | ### `id_list_message(massages: array, wait_to_more_action: Boolean)` 257 | 258 | במתודה זו ניתן להשמיע למשתמש הודעה אחת, או מספר הודעות ברצף. 259 | 260 | --- 261 | 262 |
263 | באם מעוניינים לשרשר פעולה נוספת, לדוגמה להשמיע הודעה ואז לבצע read (קבלת נתונים נוספים), יש להעביר לארגומנט השני true. 264 | באם אחרי השמעת ההודעה מעוניינים שהמאזין ייצא מהשלוחה, ניתן להשאיר את הפרמטר השני ריק. 265 |
266 | 267 | --- 268 | 269 |
270 | הפונקציה מקבלת כארגומנט ראשון מערך של אובייקטי הודעה. כל אובייקט במערך צריך להיות במבנה הבא: 271 | 272 | ```js 273 | { type: string, data: string } 274 | ``` 275 | 276 | ואם ה`type` הוא `zmanim`: 277 | 278 | ```js 279 | { type: string, data: object } 280 | ``` 281 | 282 | ראה פירוט נוסף להלן. 283 | 284 | #### הפרמטר `type` 285 | 286 | הערך `type` מקבל סטרינג של סוג ההשמעה. 287 | האפשרויות הקיימות עבור type הן: 288 | 289 | - `file` - השמעת קובץ מתוך המערכת או מהמאגר הגלובלי 290 | - `digits` - השמעת ספרות (לדוגמה 111 המערכת תשמיע "אחת אחת אחת") 291 | - `number` - השמעת מספר (לדוגמה 111 המערכת תשמיע "מאה ואחת עשרה") 292 | - `alpha` - השמעת אותיות (לדוגמה abc המערכת תשמיע "איי בי סי") 293 | - `text` - הקראת טקסט 294 | - `speech` - הקראת טקסט מתוך קובץ במערכת 295 | - `zmanim` - השמעה שעה לפי משתנה 296 | - `go_to_folder` - מעבר לשלוחה אחרת (לא ניתן לשרשר הודעות/פקודות נוספות לאחר פקודה זו) 297 | - `system_message` - השמעת הודעת מערכת (מקבל ב`data` את מספר ההודעה, עם או בלי `M` בהתחלה.) 298 | - `music_on_hold` - מוזיקה בהמתנה 299 | - `date` - השמעת תאריך לועזי (יש לכתוב את התאריך בפורמט dd/mm/yyyy) 300 | - `dateH` - השמעת תאריך עברי (יש לכתוב את התאריך הלועזי בפורמט dd/mm/yyyy) 301 | 302 | #### הפרמטר `data` 303 | 304 | הערך `data` מקבל את תוכן ההודעה להשמעה - עבור השמעת ספרות/אותיות/טקסט, או את נתיב הקובץ/התקיה עבור file/go_to_folder (בהתאמה). 305 | 306 | חריג הוא הטייפ **zmanim**: 307 | 308 | עבור השמעת זמנים (כלומר אם הערך של type הוא `zmanim`), הערך השני (`data`) יהיה **אובייקט**, ולא סטרינג, במבנה הבא: 309 | 310 | ```js 311 | { 312 | time: string, // optional, default: "T" (current time) 313 | zone: string, 314 | difference: string // optional, default: "IL/Jerusalem" 315 | } 316 | ``` 317 | 318 | #### הערך `time`: 319 | 320 | סוג הזמן שרוצים להשמיע. 321 | 322 | ברירת מחדל: "`T`" = השעה הנוכחית. 323 | 324 | #### הערך `zone`: 325 | 326 | אזור הזמן שעבורו יש לחשב את הזמנים. 327 | 328 | ברירת מחדל: `IL/Jerusalem`. 329 | 330 | ניתן לראות [כאן](https://f2.freeivr.co.il/post/82868) את רשימת אזורי הזמן הקיימים במערכת. 331 | 332 | ניתן לראות [כאן](https://f2.freeivr.co.il/post/82875) את רשימת הזמנים האפשריים. 333 | 334 | #### הערך `difference`: 335 | 336 | ערך זה משמש להוספה/הסרה מלאכותית של זמן על הזמן שמשמיעים. 337 | באם לא יועבר פרמטר זה, יושמע הזמן ללא שינוי. 338 | 339 | הערך **`difference`** מכיל קודם את סוג הפעולה - פלוס (+) להוספת זמן, או מינוס (-) להפחתת זמן, ואז את הזמן על פי הצורה הבאה: Y - שנה M - חודש D - יום H - שעה m - דקה S - שניה s - אלפית שניה למשל, עבור 20 דקות אחורה יש להגדיר `m20-`, עבור 3 שעות קדימה יש לרשום `H3+`. עבור יומיים אחורה יש לרשום `D1-`. 340 | 341 | לדוגמה, עבור השמעת זמן שקיעת החמה מחר בעיר בני ברק: 342 | 343 | ```js 344 | let massage = [ 345 | { 346 | type: "zmanim", 347 | data: { 348 | time: "sunset", 349 | zone: "IL/Bney_Brak", 350 | difference: "+1D", 351 | }, 352 | }, 353 | ]; 354 | ``` 355 | 356 |
357 | 358 | ### `routing_yemot(phone: string)` 359 | 360 | מתודה להעברת השיחה למערכת אחרת בימות המשיח ללא עלות יחידות, באמצעות "ראוטינג ימות". 361 | 362 | הפונקציה מקבלת ארגומנט יחיד - סטרינג של מספר מערכת בימות להעברת השיחה. 363 | ניתן גם לנתב את השיחה ממערכת בשרת הפריווט לשרת הרגיל ולהיפך. 364 | 365 | ### `send(data: string)` 366 | 367 | ניתן להשתמש במתודה זו כדי לשלוח סטרינג חופשי לחלוטין, לדוגמה עבור פונקציונליות שעדיין לא נתמכת בספרייה. 368 | 369 | באופציה זו יש להעביר את הסטרינג בדיוק כפי שמעוניינים שהשרת של ימות יקבל אותו. 370 | -------------------------------------------------------------------------------- /board.excalidraw: -------------------------------------------------------------------------------- 1 | { 2 | "type": "excalidraw", 3 | "version": 2, 4 | "source": "https://excalidraw.com", 5 | "elements": [ 6 | { 7 | "type": "rectangle", 8 | "version": 885, 9 | "versionNonce": 1175259528, 10 | "isDeleted": false, 11 | "id": "1pSFt0tc_3yfHR5NZB4U2", 12 | "fillStyle": "solid", 13 | "strokeWidth": 1, 14 | "strokeStyle": "solid", 15 | "roughness": 2, 16 | "opacity": 100, 17 | "angle": 0, 18 | "x": 917.7765114573806, 19 | "y": -150.80908566194051, 20 | "strokeColor": "#000000", 21 | "backgroundColor": "#868e96", 22 | "width": 1022.0000076293941, 23 | "height": 619.9999999999997, 24 | "seed": 2059103624, 25 | "groupIds": [], 26 | "roundness": { 27 | "type": 3 28 | }, 29 | "boundElements": [], 30 | "updated": 1676227160260, 31 | "link": null, 32 | "locked": false 33 | }, 34 | { 35 | "type": "rectangle", 36 | "version": 140, 37 | "versionNonce": 950502536, 38 | "isDeleted": false, 39 | "id": "Jo_Jk1D3cNuqk6-h06UIP", 40 | "fillStyle": "hachure", 41 | "strokeWidth": 1, 42 | "strokeStyle": "solid", 43 | "roughness": 2, 44 | "opacity": 100, 45 | "angle": 0, 46 | "x": 1995.349555974488, 47 | "y": 778.3781728401995, 48 | "strokeColor": "#000000", 49 | "backgroundColor": "#ced4da", 50 | "width": 263.9999389648435, 51 | "height": 167.9999542236328, 52 | "seed": 458674568, 53 | "groupIds": [], 54 | "roundness": { 55 | "type": 3 56 | }, 57 | "boundElements": [ 58 | { 59 | "id": "ugKJ2K1bCEZowBzz78IPS", 60 | "type": "arrow" 61 | }, 62 | { 63 | "id": "TsG-vUkgCEAFv1dz6V37U", 64 | "type": "arrow" 65 | } 66 | ], 67 | "updated": 1676226323633, 68 | "link": null, 69 | "locked": false 70 | }, 71 | { 72 | "type": "rectangle", 73 | "version": 406, 74 | "versionNonce": 719775736, 75 | "isDeleted": false, 76 | "id": "tRI2FrkSmdHl9d6vqpMcI", 77 | "fillStyle": "hachure", 78 | "strokeWidth": 1, 79 | "strokeStyle": "solid", 80 | "roughness": 2, 81 | "opacity": 100, 82 | "angle": 0, 83 | "x": 1495.5660760150433, 84 | "y": -422.3059159894616, 85 | "strokeColor": "#000000", 86 | "backgroundColor": "#ced4da", 87 | "width": 335.64029193819766, 88 | "height": 143.85122034446914, 89 | "seed": 1365921416, 90 | "groupIds": [ 91 | "p0Y2UK7gfvBjDneo9jctM" 92 | ], 93 | "roundness": { 94 | "type": 3 95 | }, 96 | "boundElements": [ 97 | { 98 | "id": "7klonIrmi9WBi7n7gR9k9", 99 | "type": "arrow" 100 | } 101 | ], 102 | "updated": 1676226323633, 103 | "link": null, 104 | "locked": false 105 | }, 106 | { 107 | "type": "text", 108 | "version": 362, 109 | "versionNonce": 156611464, 110 | "isDeleted": false, 111 | "id": "ErwSY1ddXAtWqofBDn32-", 112 | "fillStyle": "hachure", 113 | "strokeWidth": 1, 114 | "strokeStyle": "solid", 115 | "roughness": 2, 116 | "opacity": 100, 117 | "angle": 0, 118 | "x": 1580.9467254147573, 119 | "y": -378.820111947627, 120 | "strokeColor": "#000000", 121 | "backgroundColor": "#ced4da", 122 | "width": 162, 123 | "height": 41, 124 | "seed": 1680553608, 125 | "groupIds": [ 126 | "p0Y2UK7gfvBjDneo9jctM" 127 | ], 128 | "roundness": null, 129 | "boundElements": [], 130 | "updated": 1676226323633, 131 | "link": null, 132 | "locked": false, 133 | "fontSize": 36, 134 | "fontFamily": 2, 135 | "text": "קריאה נכנסת", 136 | "baseline": 33, 137 | "textAlign": "center", 138 | "verticalAlign": "top", 139 | "containerId": null, 140 | "originalText": "קריאה נכנסת" 141 | }, 142 | { 143 | "type": "arrow", 144 | "version": 867, 145 | "versionNonce": 649537784, 146 | "isDeleted": false, 147 | "id": "62BlH_ugCoE0diGBlv4Y6", 148 | "fillStyle": "hachure", 149 | "strokeWidth": 1, 150 | "strokeStyle": "solid", 151 | "roughness": 2, 152 | "opacity": 100, 153 | "angle": 0, 154 | "x": 1611.5490470992345, 155 | "y": 493.1786102137102, 156 | "strokeColor": "#000000", 157 | "backgroundColor": "#ced4da", 158 | "width": 4.718075758442865, 159 | "height": 88.85373775626528, 160 | "seed": 729363704, 161 | "groupIds": [], 162 | "roundness": { 163 | "type": 2 164 | }, 165 | "boundElements": [], 166 | "updated": 1676226323633, 167 | "link": null, 168 | "locked": false, 169 | "startBinding": { 170 | "elementId": "1pSFt0tc_3yfHR5NZB4U2", 171 | "gap": 23.987695875651013, 172 | "focus": 0.026238843058075955 173 | }, 174 | "endBinding": { 175 | "elementId": "He6kIm3nH_NR-CWitxDTV", 176 | "gap": 11.642594819549743, 177 | "focus": -0.07928990634669592 178 | }, 179 | "lastCommittedPoint": null, 180 | "startArrowhead": null, 181 | "endArrowhead": "arrow", 182 | "points": [ 183 | [ 184 | 0, 185 | 0 186 | ], 187 | [ 188 | 4.718075758442865, 189 | 88.85373775626528 190 | ] 191 | ] 192 | }, 193 | { 194 | "type": "arrow", 195 | "version": 332, 196 | "versionNonce": 577110664, 197 | "isDeleted": false, 198 | "id": "ugKJ2K1bCEZowBzz78IPS", 199 | "fillStyle": "hachure", 200 | "strokeWidth": 1, 201 | "strokeStyle": "solid", 202 | "roughness": 2, 203 | "opacity": 100, 204 | "angle": 0, 205 | "x": 2038.4838516489754, 206 | "y": 689.87590982697, 207 | "strokeColor": "#000000", 208 | "backgroundColor": "#ced4da", 209 | "width": 113.19680490950122, 210 | "height": 60.7115189058062, 211 | "seed": 1293040632, 212 | "groupIds": [], 213 | "roundness": { 214 | "type": 2 215 | }, 216 | "boundElements": [], 217 | "updated": 1676226323633, 218 | "link": null, 219 | "locked": false, 220 | "startBinding": { 221 | "elementId": "He6kIm3nH_NR-CWitxDTV", 222 | "gap": 13.94328556645985, 223 | "focus": 0.3318080389973693 224 | }, 225 | "endBinding": { 226 | "elementId": "Jo_Jk1D3cNuqk6-h06UIP", 227 | "focus": 0.7759191099881262, 228 | "gap": 27.79074410742328 229 | }, 230 | "lastCommittedPoint": null, 231 | "startArrowhead": null, 232 | "endArrowhead": "arrow", 233 | "points": [ 234 | [ 235 | 0, 236 | 0 237 | ], 238 | [ 239 | -10, 240 | 0.8126309779545409 241 | ], 242 | [ 243 | 103.19680490950122, 244 | 60.7115189058062 245 | ] 246 | ] 247 | }, 248 | { 249 | "type": "arrow", 250 | "version": 1040, 251 | "versionNonce": 550980088, 252 | "isDeleted": false, 253 | "id": "u0jGpcinh5vDTULYIcPIQ", 254 | "fillStyle": "hachure", 255 | "strokeWidth": 1, 256 | "strokeStyle": "solid", 257 | "roughness": 2, 258 | "opacity": 100, 259 | "angle": 0, 260 | "x": 1264.7824171016334, 261 | "y": 709.4282098825298, 262 | "strokeColor": "#000000", 263 | "backgroundColor": "#ced4da", 264 | "width": 56.209366211022555, 265 | "height": 65.45520288384127, 266 | "seed": 1436090104, 267 | "groupIds": [], 268 | "roundness": { 269 | "type": 2 270 | }, 271 | "boundElements": [], 272 | "updated": 1676226323633, 273 | "link": null, 274 | "locked": false, 275 | "startBinding": { 276 | "elementId": "He6kIm3nH_NR-CWitxDTV", 277 | "gap": 13.72093073226472, 278 | "focus": 0.5352251749331828 279 | }, 280 | "endBinding": { 281 | "elementId": "WFEerQsYGecqK1Kh_alKT", 282 | "focus": -0.3623980411792582, 283 | "gap": 28.989489630078765 284 | }, 285 | "lastCommittedPoint": null, 286 | "startArrowhead": null, 287 | "endArrowhead": "arrow", 288 | "points": [ 289 | [ 290 | 0, 291 | 0 292 | ], 293 | [ 294 | -20.890141949454303, 295 | 8.342756463669886 296 | ], 297 | [ 298 | -56.209366211022555, 299 | 65.45520288384127 300 | ] 301 | ] 302 | }, 303 | { 304 | "type": "rectangle", 305 | "version": 631, 306 | "versionNonce": 1922331016, 307 | "isDeleted": false, 308 | "id": "He6kIm3nH_NR-CWitxDTV", 309 | "fillStyle": "hachure", 310 | "strokeWidth": 1, 311 | "strokeStyle": "solid", 312 | "roughness": 2, 313 | "opacity": 100, 314 | "angle": 0, 315 | "x": 1278.503347833898, 316 | "y": 593.6749427895253, 317 | "strokeColor": "#000000", 318 | "backgroundColor": "#ced4da", 319 | "width": 748.0373403189299, 320 | "height": 176.5850718590636, 321 | "seed": 507502728, 322 | "groupIds": [], 323 | "roundness": { 324 | "type": 3 325 | }, 326 | "boundElements": [ 327 | { 328 | "id": "62BlH_ugCoE0diGBlv4Y6", 329 | "type": "arrow" 330 | }, 331 | { 332 | "id": "u0jGpcinh5vDTULYIcPIQ", 333 | "type": "arrow" 334 | }, 335 | { 336 | "id": "ugKJ2K1bCEZowBzz78IPS", 337 | "type": "arrow" 338 | } 339 | ], 340 | "updated": 1676226323633, 341 | "link": null, 342 | "locked": false 343 | }, 344 | { 345 | "type": "text", 346 | "version": 292, 347 | "versionNonce": 2035193848, 348 | "isDeleted": false, 349 | "id": "DS-TIzz6iaWm2pBls9fDm", 350 | "fillStyle": "hachure", 351 | "strokeWidth": 1, 352 | "strokeStyle": "solid", 353 | "roughness": 2, 354 | "opacity": 100, 355 | "angle": 0, 356 | "x": 1312.400459198067, 357 | "y": 626.885635584583, 358 | "strokeColor": "#000000", 359 | "backgroundColor": "#ced4da", 360 | "width": 696, 361 | "height": 40, 362 | "seed": 537978360, 363 | "groupIds": [], 364 | "roundness": null, 365 | "boundElements": [], 366 | "updated": 1676226359328, 367 | "link": null, 368 | "locked": false, 369 | "fontSize": 35.08652769127926, 370 | "fontFamily": 2, 371 | "text": "בדיקה לפי מזהה שיחה האם יש כבר פונקציה שרצה", 372 | "baseline": 32, 373 | "textAlign": "center", 374 | "verticalAlign": "top", 375 | "containerId": null, 376 | "originalText": "בדיקה לפי מזהה שיחה האם יש כבר פונקציה שרצה" 377 | }, 378 | { 379 | "type": "text", 380 | "version": 250, 381 | "versionNonce": 823984264, 382 | "isDeleted": false, 383 | "id": "cvG0ee4P1DI78p-gh6KCE", 384 | "fillStyle": "hachure", 385 | "strokeWidth": 1, 386 | "strokeStyle": "solid", 387 | "roughness": 2, 388 | "opacity": 100, 389 | "angle": 0, 390 | "x": 2039.6549034685559, 391 | "y": 821.5802901729727, 392 | "strokeColor": "#000000", 393 | "backgroundColor": "#ced4da", 394 | "width": 185, 395 | "height": 89, 396 | "seed": 1385390216, 397 | "groupIds": [], 398 | "roundness": null, 399 | "boundElements": [], 400 | "updated": 1676226323633, 401 | "link": null, 402 | "locked": false, 403 | "fontSize": 70.43473484205167, 404 | "fontFamily": 1, 405 | "text": "False", 406 | "baseline": 63, 407 | "textAlign": "center", 408 | "verticalAlign": "top", 409 | "containerId": null, 410 | "originalText": "False" 411 | }, 412 | { 413 | "type": "rectangle", 414 | "version": 291, 415 | "versionNonce": 999762936, 416 | "isDeleted": false, 417 | "id": "WFEerQsYGecqK1Kh_alKT", 418 | "fillStyle": "hachure", 419 | "strokeWidth": 1, 420 | "strokeStyle": "solid", 421 | "roughness": 2, 422 | "opacity": 100, 423 | "angle": 0, 424 | "x": 1073.3606215040056, 425 | "y": 803.8729023964498, 426 | "strokeColor": "#000000", 427 | "backgroundColor": "#ced4da", 428 | "width": 263.9999389648435, 429 | "height": 167.9999542236328, 430 | "seed": 404319992, 431 | "groupIds": [], 432 | "roundness": { 433 | "type": 3 434 | }, 435 | "boundElements": [ 436 | { 437 | "id": "u0jGpcinh5vDTULYIcPIQ", 438 | "type": "arrow" 439 | } 440 | ], 441 | "updated": 1676226323633, 442 | "link": null, 443 | "locked": false 444 | }, 445 | { 446 | "type": "text", 447 | "version": 322, 448 | "versionNonce": 1304145800, 449 | "isDeleted": false, 450 | "id": "TR_LqrPiAOFH9Ku0DIFkU", 451 | "fillStyle": "hachure", 452 | "strokeWidth": 1, 453 | "strokeStyle": "solid", 454 | "roughness": 2, 455 | "opacity": 100, 456 | "angle": 0, 457 | "x": 1120.969167885417, 458 | "y": 837.580351208129, 459 | "strokeColor": "#000000", 460 | "backgroundColor": "#ced4da", 461 | "width": 167, 462 | "height": 89, 463 | "seed": 53362056, 464 | "groupIds": [], 465 | "roundness": null, 466 | "boundElements": [], 467 | "updated": 1676226323633, 468 | "link": null, 469 | "locked": false, 470 | "fontSize": 70.43473484205167, 471 | "fontFamily": 1, 472 | "text": "True", 473 | "baseline": 63, 474 | "textAlign": "center", 475 | "verticalAlign": "top", 476 | "containerId": null, 477 | "originalText": "True" 478 | }, 479 | { 480 | "type": "text", 481 | "version": 111, 482 | "versionNonce": 1086254328, 483 | "isDeleted": false, 484 | "id": "Mlx7RrVL9HfVF_gt063UZ", 485 | "fillStyle": "hachure", 486 | "strokeWidth": 1, 487 | "strokeStyle": "solid", 488 | "roughness": 2, 489 | "opacity": 100, 490 | "angle": 0, 491 | "x": 1982.8494949393316, 492 | "y": 1070.8989786759234, 493 | "strokeColor": "#000000", 494 | "backgroundColor": "#ced4da", 495 | "width": 323, 496 | "height": 41, 497 | "seed": 118795144, 498 | "groupIds": [], 499 | "roundness": null, 500 | "boundElements": [ 501 | { 502 | "id": "hxKjAy8JSYMVwsiaT1f2H", 503 | "type": "arrow" 504 | }, 505 | { 506 | "id": "TsG-vUkgCEAFv1dz6V37U", 507 | "type": "arrow" 508 | } 509 | ], 510 | "updated": 1676226323633, 511 | "link": null, 512 | "locked": false, 513 | "fontSize": 36, 514 | "fontFamily": 2, 515 | "text": "הרצה של מופע Call חדש", 516 | "baseline": 33, 517 | "textAlign": "center", 518 | "verticalAlign": "top", 519 | "containerId": null, 520 | "originalText": "הרצה של מופע Call חדש" 521 | }, 522 | { 523 | "type": "arrow", 524 | "version": 351, 525 | "versionNonce": 1621917320, 526 | "isDeleted": false, 527 | "id": "TsG-vUkgCEAFv1dz6V37U", 528 | "fillStyle": "hachure", 529 | "strokeWidth": 1, 530 | "strokeStyle": "solid", 531 | "roughness": 2, 532 | "opacity": 100, 533 | "angle": 0, 534 | "x": 2174.8940883363844, 535 | "y": 968.1011112674856, 536 | "strokeColor": "#000000", 537 | "backgroundColor": "#ced4da", 538 | "width": 3.964900412557654, 539 | "height": 92.00004577636719, 540 | "seed": 2105932424, 541 | "groupIds": [], 542 | "roundness": { 543 | "type": 2 544 | }, 545 | "boundElements": [], 546 | "updated": 1676226323633, 547 | "link": null, 548 | "locked": false, 549 | "startBinding": { 550 | "elementId": "Jo_Jk1D3cNuqk6-h06UIP", 551 | "focus": -0.31697552174915, 552 | "gap": 21.72298420365337 553 | }, 554 | "endBinding": { 555 | "elementId": "Mlx7RrVL9HfVF_gt063UZ", 556 | "focus": 0.22082496762444406, 557 | "gap": 10.797821632070736 558 | }, 559 | "lastCommittedPoint": null, 560 | "startArrowhead": null, 561 | "endArrowhead": "arrow", 562 | "points": [ 563 | [ 564 | 0, 565 | 0 566 | ], 567 | [ 568 | 3.964900412557654, 569 | 92.00004577636719 570 | ] 571 | ] 572 | }, 573 | { 574 | "type": "arrow", 575 | "version": 430, 576 | "versionNonce": 759598584, 577 | "isDeleted": false, 578 | "id": "hxKjAy8JSYMVwsiaT1f2H", 579 | "fillStyle": "hachure", 580 | "strokeWidth": 1, 581 | "strokeStyle": "solid", 582 | "roughness": 2, 583 | "opacity": 100, 584 | "angle": 0, 585 | "x": 2172.0249908678, 586 | "y": 1127.1010960086965, 587 | "strokeColor": "#000000", 588 | "backgroundColor": "#ced4da", 589 | "width": 6.642653359316682, 590 | "height": 89.00004577636719, 591 | "seed": 254110968, 592 | "groupIds": [], 593 | "roundness": { 594 | "type": 2 595 | }, 596 | "boundElements": [], 597 | "updated": 1676226323633, 598 | "link": null, 599 | "locked": false, 600 | "startBinding": { 601 | "elementId": "Mlx7RrVL9HfVF_gt063UZ", 602 | "focus": -0.15341229722314945, 603 | "gap": 15.202117332773014 604 | }, 605 | "endBinding": null, 606 | "lastCommittedPoint": null, 607 | "startArrowhead": null, 608 | "endArrowhead": "arrow", 609 | "points": [ 610 | [ 611 | 0, 612 | 0 613 | ], 614 | [ 615 | 6.642653359316682, 616 | 89.00004577636719 617 | ] 618 | ] 619 | }, 620 | { 621 | "type": "text", 622 | "version": 482, 623 | "versionNonce": 447442312, 624 | "isDeleted": false, 625 | "id": "i4w7WYudIfDOazdfA1akz", 626 | "fillStyle": "hachure", 627 | "strokeWidth": 1, 628 | "strokeStyle": "solid", 629 | "roughness": 1, 630 | "opacity": 100, 631 | "angle": 0, 632 | "x": 1964.6789995947388, 633 | "y": 1260.124503561533, 634 | "strokeColor": "#000000", 635 | "backgroundColor": "transparent", 636 | "width": 426.2913234192786, 637 | "height": 41.511514640079575, 638 | "seed": 1137913813, 639 | "groupIds": [], 640 | "roundness": null, 641 | "boundElements": [], 642 | "updated": 1676226323633, 643 | "link": null, 644 | "locked": false, 645 | "fontSize": 31.93193433852275, 646 | "fontFamily": 1, 647 | "text": "מפעיל את הפונקציה שסופקה כמטפל", 648 | "baseline": 29.511514640079575, 649 | "textAlign": "left", 650 | "verticalAlign": "top", 651 | "containerId": null, 652 | "originalText": "מפעיל את הפונקציה שסופקה כמטפל" 653 | }, 654 | { 655 | "type": "text", 656 | "version": 284, 657 | "versionNonce": 1244794616, 658 | "isDeleted": false, 659 | "id": "myH-8uuWzlMwsbbm0Nn0p", 660 | "fillStyle": "hachure", 661 | "strokeWidth": 1, 662 | "strokeStyle": "solid", 663 | "roughness": 1, 664 | "opacity": 100, 665 | "angle": 0, 666 | "x": 1925.9699663933538, 667 | "y": 1448.0391998990385, 668 | "strokeColor": "#000000", 669 | "backgroundColor": "transparent", 670 | "width": 539, 671 | "height": 32, 672 | "seed": 2048402427, 673 | "groupIds": [], 674 | "roundness": null, 675 | "boundElements": [], 676 | "updated": 1676226323633, 677 | "link": null, 678 | "locked": false, 679 | "fontSize": 24.382154702043422, 680 | "fontFamily": 1, 681 | "text": "הפונקציה מחזירה תשובה HTTP עם הוראות לביצוע לימות", 682 | "baseline": 22, 683 | "textAlign": "left", 684 | "verticalAlign": "top", 685 | "containerId": null, 686 | "originalText": "הפונקציה מחזירה תשובה HTTP עם הוראות לביצוע לימות" 687 | }, 688 | { 689 | "type": "text", 690 | "version": 1792, 691 | "versionNonce": 888437896, 692 | "isDeleted": false, 693 | "id": "lHCZ8nwlxuNsxxTPeKF-Y", 694 | "fillStyle": "hachure", 695 | "strokeWidth": 1, 696 | "strokeStyle": "solid", 697 | "roughness": 1, 698 | "opacity": 100, 699 | "angle": 6.267253443278458, 700 | "x": 1729.2621965555745, 701 | "y": 1643.2991988444503, 702 | "strokeColor": "#000000", 703 | "backgroundColor": "transparent", 704 | "width": 1178, 705 | "height": 36, 706 | "seed": 1843948853, 707 | "groupIds": [], 708 | "roundness": null, 709 | "boundElements": [], 710 | "updated": 1676226323633, 711 | "link": null, 712 | "locked": false, 713 | "fontSize": 28, 714 | "fontFamily": 1, 715 | "text": "נכנס להקפאה ע\"י קריאה לפונקציה שמחזירה פרומיס, הפרומיס נפתר רק כאשר נורה אוונט עם המזהה של השיחה.", 716 | "baseline": 25, 717 | "textAlign": "center", 718 | "verticalAlign": "top", 719 | "containerId": null, 720 | "originalText": "נכנס להקפאה ע\"י קריאה לפונקציה שמחזירה פרומיס, הפרומיס נפתר רק כאשר נורה אוונט עם המזהה של השיחה." 721 | }, 722 | { 723 | "type": "arrow", 724 | "version": 352, 725 | "versionNonce": 1631824776, 726 | "isDeleted": false, 727 | "id": "VM7ingYxTkc5WXob4mioD", 728 | "fillStyle": "hachure", 729 | "strokeWidth": 1, 730 | "strokeStyle": "solid", 731 | "roughness": 2, 732 | "opacity": 100, 733 | "angle": 0, 734 | "x": 2190.4585666482003, 735 | "y": 1334.134434641212, 736 | "strokeColor": "#000000", 737 | "backgroundColor": "#ced4da", 738 | "width": 6.642653359316682, 739 | "height": 89.00004577636719, 740 | "seed": 920187579, 741 | "groupIds": [], 742 | "roundness": { 743 | "type": 2 744 | }, 745 | "boundElements": [], 746 | "updated": 1676226323633, 747 | "link": null, 748 | "locked": false, 749 | "startBinding": null, 750 | "endBinding": null, 751 | "lastCommittedPoint": null, 752 | "startArrowhead": null, 753 | "endArrowhead": "arrow", 754 | "points": [ 755 | [ 756 | 0, 757 | 0 758 | ], 759 | [ 760 | 6.642653359316682, 761 | 89.00004577636719 762 | ] 763 | ] 764 | }, 765 | { 766 | "type": "arrow", 767 | "version": 423, 768 | "versionNonce": 113553656, 769 | "isDeleted": false, 770 | "id": "QinTpcVXUBcJNWs8VwugH", 771 | "fillStyle": "hachure", 772 | "strokeWidth": 1, 773 | "strokeStyle": "solid", 774 | "roughness": 2, 775 | "opacity": 100, 776 | "angle": 0, 777 | "x": 2201.9548976178116, 778 | "y": 1500.4029606997078, 779 | "strokeColor": "#000000", 780 | "backgroundColor": "#ced4da", 781 | "width": 6.642653359316682, 782 | "height": 89.00004577636719, 783 | "seed": 1770113845, 784 | "groupIds": [], 785 | "roundness": { 786 | "type": 2 787 | }, 788 | "boundElements": [], 789 | "updated": 1676226323633, 790 | "link": null, 791 | "locked": false, 792 | "startBinding": null, 793 | "endBinding": { 794 | "elementId": "lHCZ8nwlxuNsxxTPeKF-Y", 795 | "focus": -0.5050290786828647, 796 | "gap": 24.98392988687101 797 | }, 798 | "lastCommittedPoint": null, 799 | "startArrowhead": null, 800 | "endArrowhead": "arrow", 801 | "points": [ 802 | [ 803 | 0, 804 | 0 805 | ], 806 | [ 807 | 6.642653359316682, 808 | 89.00004577636719 809 | ] 810 | ] 811 | }, 812 | { 813 | "type": "rectangle", 814 | "version": 605, 815 | "versionNonce": 286199800, 816 | "isDeleted": false, 817 | "id": "Vxha-fMBkOAgNrkBXjiDG", 818 | "fillStyle": "solid", 819 | "strokeWidth": 1, 820 | "strokeStyle": "solid", 821 | "roughness": 2, 822 | "opacity": 100, 823 | "angle": 0, 824 | "x": 1444.7657264292557, 825 | "y": 59.19091433805971, 826 | "strokeColor": "#000000", 827 | "backgroundColor": "#ced4da", 828 | "width": 400.0001907348633, 829 | "height": 149.99999999999986, 830 | "seed": 2080937720, 831 | "groupIds": [], 832 | "roundness": { 833 | "type": 3 834 | }, 835 | "boundElements": [], 836 | "updated": 1676227171844, 837 | "link": null, 838 | "locked": false 839 | }, 840 | { 841 | "type": "rectangle", 842 | "version": 732, 843 | "versionNonce": 388238216, 844 | "isDeleted": false, 845 | "id": "P5Hw5YFwnRJff7rFtjT30", 846 | "fillStyle": "solid", 847 | "strokeWidth": 1, 848 | "strokeStyle": "solid", 849 | "roughness": 2, 850 | "opacity": 100, 851 | "angle": 0, 852 | "x": 1048.7658179819903, 853 | "y": -116.80907040315111, 854 | "strokeColor": "#000000", 855 | "backgroundColor": "#ced4da", 856 | "width": 378.0000686645508, 857 | "height": 149.99999999999986, 858 | "seed": 1902706168, 859 | "groupIds": [], 860 | "roundness": { 861 | "type": 3 862 | }, 863 | "boundElements": [], 864 | "updated": 1676227171844, 865 | "link": null, 866 | "locked": false 867 | }, 868 | { 869 | "type": "text", 870 | "version": 78, 871 | "versionNonce": 1704612088, 872 | "isDeleted": false, 873 | "id": "TO_9hgImtdRviiixsEFfX", 874 | "fillStyle": "solid", 875 | "strokeWidth": 1, 876 | "strokeStyle": "solid", 877 | "roughness": 2, 878 | "opacity": 100, 879 | "angle": 0, 880 | "x": 1058.2658942759356, 881 | "y": -62.871584231428926, 882 | "strokeColor": "#000000", 883 | "backgroundColor": "#ced4da", 884 | "width": 318, 885 | "height": 43, 886 | "seed": 634661512, 887 | "groupIds": [], 888 | "roundness": null, 889 | "boundElements": [], 890 | "updated": 1676227171844, 891 | "link": null, 892 | "locked": false, 893 | "fontSize": 36, 894 | "fontFamily": 3, 895 | "text": "check_request()", 896 | "baseline": 34, 897 | "textAlign": "right", 898 | "verticalAlign": "top", 899 | "containerId": null, 900 | "originalText": "check_request()" 901 | }, 902 | { 903 | "type": "rectangle", 904 | "version": 665, 905 | "versionNonce": 346643080, 906 | "isDeleted": false, 907 | "id": "0ZJjozCuL7YE7B_g52XIF", 908 | "fillStyle": "solid", 909 | "strokeWidth": 1, 910 | "strokeStyle": "solid", 911 | "roughness": 2, 912 | "opacity": 100, 913 | "angle": 0, 914 | "x": 1018.7658179819903, 915 | "y": 61.19088382048159, 916 | "strokeColor": "#000000", 917 | "backgroundColor": "#ced4da", 918 | "width": 400.0001907348633, 919 | "height": 149.99999999999986, 920 | "seed": 1185439368, 921 | "groupIds": [], 922 | "roundness": { 923 | "type": 3 924 | }, 925 | "boundElements": [], 926 | "updated": 1676227171844, 927 | "link": null, 928 | "locked": false 929 | }, 930 | { 931 | "type": "rectangle", 932 | "version": 640, 933 | "versionNonce": 1763013112, 934 | "isDeleted": false, 935 | "id": "_m1ineNdDBmf_cxX5f8dP", 936 | "fillStyle": "solid", 937 | "strokeWidth": 1, 938 | "strokeStyle": "solid", 939 | "roughness": 2, 940 | "opacity": 100, 941 | "angle": 0, 942 | "x": 1420.765787464412, 943 | "y": 243.1910821847394, 944 | "strokeColor": "#000000", 945 | "backgroundColor": "#ced4da", 946 | "width": 424.00012969970703, 947 | "height": 149.99999999999986, 948 | "seed": 883873928, 949 | "groupIds": [], 950 | "roundness": { 951 | "type": 3 952 | }, 953 | "boundElements": [], 954 | "updated": 1676227171844, 955 | "link": null, 956 | "locked": false 957 | }, 958 | { 959 | "type": "text", 960 | "version": 178, 961 | "versionNonce": 1923926408, 962 | "isDeleted": false, 963 | "id": "pCXc9Y190CiwcyqeShC_3", 964 | "fillStyle": "solid", 965 | "strokeWidth": 1, 966 | "strokeStyle": "solid", 967 | "roughness": 2, 968 | "opacity": 100, 969 | "angle": 0, 970 | "x": 1039.6611874008222, 971 | "y": 275.62839288038754, 972 | "strokeColor": "#000000", 973 | "backgroundColor": "#ced4da", 974 | "width": 289, 975 | "height": 78, 976 | "seed": 1644912120, 977 | "groupIds": [], 978 | "roundness": null, 979 | "boundElements": [], 980 | "updated": 1676227171844, 981 | "link": null, 982 | "locked": false, 983 | "fontSize": 32.65115001589754, 984 | "fontFamily": 3, 985 | "text": "current_call\n.get_req_vals()", 986 | "baseline": 70, 987 | "textAlign": "left", 988 | "verticalAlign": "top", 989 | "containerId": null, 990 | "originalText": "current_call\n.get_req_vals()" 991 | }, 992 | { 993 | "type": "rectangle", 994 | "version": 748, 995 | "versionNonce": 1921282808, 996 | "isDeleted": false, 997 | "id": "jY1THsQQLmYrnPdpp6fpT", 998 | "fillStyle": "solid", 999 | "strokeWidth": 1, 1000 | "strokeStyle": "solid", 1001 | "roughness": 2, 1002 | "opacity": 100, 1003 | "angle": 0, 1004 | "x": 984.7657264292559, 1005 | "y": 239.1909143380596, 1006 | "strokeColor": "#000000", 1007 | "backgroundColor": "#ced4da", 1008 | "width": 400.0001907348633, 1009 | "height": 149.99999999999986, 1010 | "seed": 1967174024, 1011 | "groupIds": [], 1012 | "roundness": { 1013 | "type": 3 1014 | }, 1015 | "boundElements": [], 1016 | "updated": 1676227171844, 1017 | "link": null, 1018 | "locked": false 1019 | }, 1020 | { 1021 | "type": "arrow", 1022 | "version": 100, 1023 | "versionNonce": 546330248, 1024 | "isDeleted": false, 1025 | "id": "6yTsCAFbqQUndi7MRLErS", 1026 | "fillStyle": "hachure", 1027 | "strokeWidth": 1, 1028 | "strokeStyle": "solid", 1029 | "roughness": 1, 1030 | "opacity": 100, 1031 | "angle": 0, 1032 | "x": 1210.0719599028587, 1033 | "y": 1020.8588568299629, 1034 | "strokeColor": "#000000", 1035 | "backgroundColor": "transparent", 1036 | "width": 2.0445882652047658, 1037 | "height": 108.26057757367448, 1038 | "seed": 596565525, 1039 | "groupIds": [], 1040 | "roundness": { 1041 | "type": 2 1042 | }, 1043 | "boundElements": [], 1044 | "updated": 1676227661401, 1045 | "link": null, 1046 | "locked": false, 1047 | "startBinding": null, 1048 | "endBinding": { 1049 | "elementId": "t9fEHtID0V7jFL-2v5Bux", 1050 | "focus": 0.027482882361899705, 1051 | "gap": 31.8215402543226 1052 | }, 1053 | "lastCommittedPoint": null, 1054 | "startArrowhead": null, 1055 | "endArrowhead": "arrow", 1056 | "points": [ 1057 | [ 1058 | 0, 1059 | 0 1060 | ], 1061 | [ 1062 | -2.0445882652047658, 1063 | 108.26057757367448 1064 | ] 1065 | ] 1066 | }, 1067 | { 1068 | "type": "rectangle", 1069 | "version": 673, 1070 | "versionNonce": 1013602440, 1071 | "isDeleted": false, 1072 | "id": "GnkcHfBXK6bkjLcYuS2t9", 1073 | "fillStyle": "solid", 1074 | "strokeWidth": 1, 1075 | "strokeStyle": "solid", 1076 | "roughness": 2, 1077 | "opacity": 100, 1078 | "angle": 0, 1079 | "x": 1466.7658484995682, 1080 | "y": -122.80913143830736, 1081 | "strokeColor": "#000000", 1082 | "backgroundColor": "#ced4da", 1083 | "width": 378.0000686645508, 1084 | "height": 149.99999999999986, 1085 | "seed": 631529720, 1086 | "groupIds": [], 1087 | "roundness": { 1088 | "type": 3 1089 | }, 1090 | "boundElements": [], 1091 | "updated": 1676227171844, 1092 | "link": null, 1093 | "locked": false 1094 | }, 1095 | { 1096 | "type": "arrow", 1097 | "version": 495, 1098 | "versionNonce": 751588232, 1099 | "isDeleted": false, 1100 | "id": "7klonIrmi9WBi7n7gR9k9", 1101 | "fillStyle": "hachure", 1102 | "strokeWidth": 1, 1103 | "strokeStyle": "solid", 1104 | "roughness": 1, 1105 | "opacity": 100, 1106 | "angle": 0, 1107 | "x": 1647.2137862506434, 1108 | "y": -262.0284218528687, 1109 | "strokeColor": "#000000", 1110 | "backgroundColor": "transparent", 1111 | "width": 34.61104800959811, 1112 | "height": 88.28185771293079, 1113 | "seed": 920705237, 1114 | "groupIds": [], 1115 | "roundness": { 1116 | "type": 2 1117 | }, 1118 | "boundElements": [], 1119 | "updated": 1676226456273, 1120 | "link": null, 1121 | "locked": false, 1122 | "startBinding": { 1123 | "elementId": "tRI2FrkSmdHl9d6vqpMcI", 1124 | "gap": 16.426273792123794, 1125 | "focus": -0.09412973800307045 1126 | }, 1127 | "endBinding": { 1128 | "elementId": "1pSFt0tc_3yfHR5NZB4U2", 1129 | "gap": 22.937478477997274, 1130 | "focus": 0.08426007971057035 1131 | }, 1132 | "lastCommittedPoint": null, 1133 | "startArrowhead": null, 1134 | "endArrowhead": "arrow", 1135 | "points": [ 1136 | [ 1137 | 0, 1138 | 0 1139 | ], 1140 | [ 1141 | -34.61104800959811, 1142 | 88.28185771293079 1143 | ] 1144 | ] 1145 | }, 1146 | { 1147 | "type": "text", 1148 | "version": 625, 1149 | "versionNonce": 1483428856, 1150 | "isDeleted": false, 1151 | "id": "CtEEwvAv_aOECMokikRi_", 1152 | "fillStyle": "solid", 1153 | "strokeWidth": 1, 1154 | "strokeStyle": "solid", 1155 | "roughness": 2, 1156 | "opacity": 100, 1157 | "angle": 0, 1158 | "x": 1462.599219979874, 1159 | "y": 74.69088382048147, 1160 | "strokeColor": "#000000", 1161 | "backgroundColor": "#ced4da", 1162 | "width": 362, 1163 | "height": 102, 1164 | "seed": 362431112, 1165 | "groupIds": [], 1166 | "roundness": null, 1167 | "boundElements": [], 1168 | "updated": 1676227171844, 1169 | "link": null, 1170 | "locked": false, 1171 | "fontSize": 44.57142857142857, 1172 | "fontFamily": 2, 1173 | "text": "חיפוש מזהה השיחה \nבמערך השיחות", 1174 | "baseline": 92, 1175 | "textAlign": "right", 1176 | "verticalAlign": "top", 1177 | "containerId": null, 1178 | "originalText": "חיפוש מזהה השיחה \nבמערך השיחות" 1179 | }, 1180 | { 1181 | "type": "text", 1182 | "version": 706, 1183 | "versionNonce": 899549064, 1184 | "isDeleted": false, 1185 | "id": "SF2Ah56chI-bu28Ah0sHe", 1186 | "fillStyle": "solid", 1187 | "strokeWidth": 1, 1188 | "strokeStyle": "solid", 1189 | "roughness": 2, 1190 | "opacity": 100, 1191 | "angle": 0, 1192 | "x": 1416.599219979874, 1193 | "y": 258.6910516671613, 1194 | "strokeColor": "#000000", 1195 | "backgroundColor": "#ced4da", 1196 | "width": 408, 1197 | "height": 102, 1198 | "seed": 964774280, 1199 | "groupIds": [], 1200 | "roundness": null, 1201 | "boundElements": [], 1202 | "updated": 1676227171844, 1203 | "link": null, 1204 | "locked": false, 1205 | "fontSize": 44.57142857142857, 1206 | "fontFamily": 2, 1207 | "text": "שמירת משתני הקריאה \nהספציפית באובייקט", 1208 | "baseline": 92, 1209 | "textAlign": "right", 1210 | "verticalAlign": "top", 1211 | "containerId": null, 1212 | "originalText": "שמירת משתני הקריאה \nהספציפית באובייקט" 1213 | }, 1214 | { 1215 | "type": "line", 1216 | "version": 267, 1217 | "versionNonce": 749182856, 1218 | "isDeleted": false, 1219 | "id": "cwNCp4fDxIy1rT5P0e4wP", 1220 | "fillStyle": "hachure", 1221 | "strokeWidth": 1, 1222 | "strokeStyle": "solid", 1223 | "roughness": 1, 1224 | "opacity": 100, 1225 | "angle": 0, 1226 | "x": 1662.0181815069377, 1227 | "y": 810.0772156616728, 1228 | "strokeColor": "#000000", 1229 | "backgroundColor": "transparent", 1230 | "width": 7.595734816875392, 1231 | "height": 824.1372276309688, 1232 | "seed": 194858011, 1233 | "groupIds": [], 1234 | "roundness": { 1235 | "type": 2 1236 | }, 1237 | "boundElements": [], 1238 | "updated": 1676226323634, 1239 | "link": null, 1240 | "locked": false, 1241 | "startBinding": null, 1242 | "endBinding": null, 1243 | "lastCommittedPoint": null, 1244 | "startArrowhead": null, 1245 | "endArrowhead": null, 1246 | "points": [ 1247 | [ 1248 | 0, 1249 | 0 1250 | ], 1251 | [ 1252 | 7.595734816875392, 1253 | 434.8558182661103 1254 | ], 1255 | [ 1256 | 7.595734816875392, 1257 | 824.1372276309688 1258 | ] 1259 | ] 1260 | }, 1261 | { 1262 | "type": "text", 1263 | "version": 719, 1264 | "versionNonce": 13505784, 1265 | "isDeleted": false, 1266 | "id": "Qo2kNxI8Nmo-eU-ggTWGq", 1267 | "fillStyle": "solid", 1268 | "strokeWidth": 1, 1269 | "strokeStyle": "solid", 1270 | "roughness": 2, 1271 | "opacity": 100, 1272 | "angle": 0, 1273 | "x": 1485.599219979874, 1274 | "y": -107.3091619558856, 1275 | "strokeColor": "#000000", 1276 | "backgroundColor": "#ced4da", 1277 | "width": 339, 1278 | "height": 102, 1279 | "seed": 240624632, 1280 | "groupIds": [], 1281 | "roundness": null, 1282 | "boundElements": [], 1283 | "updated": 1676227171844, 1284 | "link": null, 1285 | "locked": false, 1286 | "fontSize": 44.57142857142857, 1287 | "fontFamily": 2, 1288 | "text": "בדיקה האם משתני \nהשיחה תקינים", 1289 | "baseline": 92, 1290 | "textAlign": "right", 1291 | "verticalAlign": "top", 1292 | "containerId": null, 1293 | "originalText": "בדיקה האם משתני \nהשיחה תקינים" 1294 | }, 1295 | { 1296 | "type": "text", 1297 | "version": 133, 1298 | "versionNonce": 1250154120, 1299 | "isDeleted": false, 1300 | "id": "LCLF5nyZgw0odNxUEE7U9", 1301 | "fillStyle": "solid", 1302 | "strokeWidth": 1, 1303 | "strokeStyle": "solid", 1304 | "roughness": 2, 1305 | "opacity": 100, 1306 | "angle": 0, 1307 | "x": 1035.766077381404, 1308 | "y": 91.62845391554367, 1309 | "strokeColor": "#000000", 1310 | "backgroundColor": "#ced4da", 1311 | "width": 381, 1312 | "height": 86, 1313 | "seed": 2094446328, 1314 | "groupIds": [], 1315 | "roundness": null, 1316 | "boundElements": [], 1317 | "updated": 1676227171844, 1318 | "link": null, 1319 | "locked": false, 1320 | "fontSize": 36, 1321 | "fontFamily": 3, 1322 | "text": "get_current_call()\ncurrent_call", 1323 | "baseline": 78, 1324 | "textAlign": "center", 1325 | "verticalAlign": "top", 1326 | "containerId": null, 1327 | "originalText": "get_current_call()\ncurrent_call" 1328 | }, 1329 | { 1330 | "type": "text", 1331 | "version": 74, 1332 | "versionNonce": 1296948984, 1333 | "isDeleted": false, 1334 | "id": "nNsTceu9v3l6LJDHZuvmZ", 1335 | "fillStyle": "hachure", 1336 | "strokeWidth": 1, 1337 | "strokeStyle": "solid", 1338 | "roughness": 2, 1339 | "opacity": 100, 1340 | "angle": 0, 1341 | "x": 1504.2658484995682, 1342 | "y": 699.628331845231, 1343 | "strokeColor": "#000000", 1344 | "backgroundColor": "#ced4da", 1345 | "width": 340, 1346 | "height": 43, 1347 | "seed": 1906791048, 1348 | "groupIds": [], 1349 | "roundness": null, 1350 | "boundElements": [], 1351 | "updated": 1676226371874, 1352 | "link": null, 1353 | "locked": false, 1354 | "fontSize": 36, 1355 | "fontFamily": 3, 1356 | "text": "if (is_new_call)", 1357 | "baseline": 34, 1358 | "textAlign": "left", 1359 | "verticalAlign": "top", 1360 | "containerId": null, 1361 | "originalText": "if (is_new_call)" 1362 | }, 1363 | { 1364 | "type": "rectangle", 1365 | "version": 211, 1366 | "versionNonce": 1521127416, 1367 | "isDeleted": false, 1368 | "id": "t9fEHtID0V7jFL-2v5Bux", 1369 | "fillStyle": "solid", 1370 | "strokeWidth": 1, 1371 | "strokeStyle": "solid", 1372 | "roughness": 2, 1373 | "opacity": 100, 1374 | "angle": 0, 1375 | "x": 814.7658790171465, 1376 | "y": 1160.94097465796, 1377 | "strokeColor": "#000000", 1378 | "backgroundColor": "#868e96", 1379 | "width": 749.9999999999998, 1380 | "height": 758.0001068115234, 1381 | "seed": 1310019064, 1382 | "groupIds": [ 1383 | "paJ_pgySwRRj15Oz1GUMR" 1384 | ], 1385 | "roundness": { 1386 | "type": 3 1387 | }, 1388 | "boundElements": [ 1389 | { 1390 | "id": "6yTsCAFbqQUndi7MRLErS", 1391 | "type": "arrow" 1392 | } 1393 | ], 1394 | "updated": 1676227655540, 1395 | "link": null, 1396 | "locked": false 1397 | }, 1398 | { 1399 | "type": "rectangle", 1400 | "version": 210, 1401 | "versionNonce": 1728088968, 1402 | "isDeleted": false, 1403 | "id": "q-NX08oq226w3aCEZaCdy", 1404 | "fillStyle": "solid", 1405 | "strokeWidth": 1, 1406 | "strokeStyle": "solid", 1407 | "roughness": 2, 1408 | "opacity": 100, 1409 | "angle": 0, 1410 | "x": 904.7658790171465, 1411 | "y": 1194.940989916749, 1412 | "strokeColor": "#000000", 1413 | "backgroundColor": "#ced4da", 1414 | "width": 598.0000305175779, 1415 | "height": 162.0000457763672, 1416 | "seed": 568210424, 1417 | "groupIds": [ 1418 | "paJ_pgySwRRj15Oz1GUMR" 1419 | ], 1420 | "roundness": { 1421 | "type": 3 1422 | }, 1423 | "boundElements": [], 1424 | "updated": 1676227655540, 1425 | "link": null, 1426 | "locked": false 1427 | }, 1428 | { 1429 | "type": "rectangle", 1430 | "version": 299, 1431 | "versionNonce": 1875235064, 1432 | "isDeleted": false, 1433 | "id": "GaXFjVIGBjEsi1vgON1T2", 1434 | "fillStyle": "solid", 1435 | "strokeWidth": 1, 1436 | "strokeStyle": "solid", 1437 | "roughness": 2, 1438 | "opacity": 100, 1439 | "angle": 0, 1440 | "x": 908.7658942759356, 1441 | "y": 1380.94097465796, 1442 | "strokeColor": "#000000", 1443 | "backgroundColor": "#ced4da", 1444 | "width": 598.0000305175779, 1445 | "height": 78.00003051757812, 1446 | "seed": 448090872, 1447 | "groupIds": [ 1448 | "paJ_pgySwRRj15Oz1GUMR" 1449 | ], 1450 | "roundness": { 1451 | "type": 3 1452 | }, 1453 | "boundElements": [], 1454 | "updated": 1676227655540, 1455 | "link": null, 1456 | "locked": false 1457 | }, 1458 | { 1459 | "type": "text", 1460 | "version": 473, 1461 | "versionNonce": 888527496, 1462 | "isDeleted": false, 1463 | "id": "-Z-Y4I0Gu0ZwlhnrrRO1Z", 1464 | "fillStyle": "cross-hatch", 1465 | "strokeWidth": 1, 1466 | "strokeStyle": "solid", 1467 | "roughness": 2, 1468 | "opacity": 100, 1469 | "angle": 0, 1470 | "x": 1035.2657874644121, 1471 | "y": 1397.5242354325724, 1472 | "strokeColor": "#000000", 1473 | "backgroundColor": "#ced4da", 1474 | "width": 349, 1475 | "height": 43, 1476 | "seed": 653592824, 1477 | "groupIds": [ 1478 | "paJ_pgySwRRj15Oz1GUMR" 1479 | ], 1480 | "roundness": null, 1481 | "boundElements": [], 1482 | "updated": 1676227655540, 1483 | "link": null, 1484 | "locked": false, 1485 | "fontSize": 36, 1486 | "fontFamily": 3, 1487 | "text": "בדיקה האם השיחה נותקה", 1488 | "baseline": 34, 1489 | "textAlign": "center", 1490 | "verticalAlign": "top", 1491 | "containerId": null, 1492 | "originalText": "בדיקה האם השיחה נותקה" 1493 | }, 1494 | { 1495 | "type": "text", 1496 | "version": 366, 1497 | "versionNonce": 567341560, 1498 | "isDeleted": false, 1499 | "id": "-zSL6LStJwtmnvA0l1Swz", 1500 | "fillStyle": "solid", 1501 | "strokeWidth": 1, 1502 | "strokeStyle": "solid", 1503 | "roughness": 2, 1504 | "opacity": 100, 1505 | "angle": 0, 1506 | "x": 1021.265741688045, 1507 | "y": 1205.5242659501505, 1508 | "strokeColor": "#000000", 1509 | "backgroundColor": "#ced4da", 1510 | "width": 373, 1511 | "height": 130, 1512 | "seed": 684937976, 1513 | "groupIds": [ 1514 | "paJ_pgySwRRj15Oz1GUMR" 1515 | ], 1516 | "roundness": null, 1517 | "boundElements": [], 1518 | "updated": 1676227655540, 1519 | "link": null, 1520 | "locked": false, 1521 | "fontSize": 36, 1522 | "fontFamily": 3, 1523 | "text": "הפעלת אירוע, המוציא את\nהפונקציה מהקפאה, וממשיך\nאת ההרצה", 1524 | "baseline": 121, 1525 | "textAlign": "center", 1526 | "verticalAlign": "top", 1527 | "containerId": null, 1528 | "originalText": "הפעלת אירוע, המוציא את\nהפונקציה מהקפאה, וממשיך\nאת ההרצה" 1529 | }, 1530 | { 1531 | "type": "rectangle", 1532 | "version": 375, 1533 | "versionNonce": 1432963464, 1534 | "isDeleted": false, 1535 | "id": "PNQ2VJBe5WUpYKaQC7-Ts", 1536 | "fillStyle": "solid", 1537 | "strokeWidth": 1, 1538 | "strokeStyle": "solid", 1539 | "roughness": 2, 1540 | "opacity": 100, 1541 | "angle": 0, 1542 | "x": 904.7658027232012, 1543 | "y": 1486.9411119870615, 1544 | "strokeColor": "#000000", 1545 | "backgroundColor": "#ced4da", 1546 | "width": 598.0000305175779, 1547 | "height": 138.0000305175781, 1548 | "seed": 509159928, 1549 | "groupIds": [ 1550 | "paJ_pgySwRRj15Oz1GUMR" 1551 | ], 1552 | "roundness": { 1553 | "type": 3 1554 | }, 1555 | "boundElements": [], 1556 | "updated": 1676227655540, 1557 | "link": null, 1558 | "locked": false 1559 | }, 1560 | { 1561 | "type": "rectangle", 1562 | "version": 221, 1563 | "versionNonce": 850011784, 1564 | "isDeleted": false, 1565 | "id": "W4MVtTwZeFStVfj1doS3p", 1566 | "fillStyle": "solid", 1567 | "strokeWidth": 1, 1568 | "strokeStyle": "solid", 1569 | "roughness": 2, 1570 | "opacity": 100, 1571 | "angle": 0, 1572 | "x": -769.2339836537512, 1573 | "y": 1094.3784275702913, 1574 | "strokeColor": "#000000", 1575 | "backgroundColor": "#868e96", 1576 | "width": 1335.9999847412105, 1577 | "height": 1624.000091552734, 1578 | "seed": 1083879048, 1579 | "groupIds": [ 1580 | "HMGr2bQpjsucaBD5ai8xR" 1581 | ], 1582 | "roundness": { 1583 | "type": 3 1584 | }, 1585 | "boundElements": [], 1586 | "updated": 1676227729313, 1587 | "link": null, 1588 | "locked": false 1589 | }, 1590 | { 1591 | "type": "rectangle", 1592 | "version": 73, 1593 | "versionNonce": 450213256, 1594 | "isDeleted": false, 1595 | "id": "gVT0UXHGX88deJibDAhDg", 1596 | "fillStyle": "solid", 1597 | "strokeWidth": 1, 1598 | "strokeStyle": "solid", 1599 | "roughness": 2, 1600 | "opacity": 100, 1601 | "angle": 0, 1602 | "x": -506.98402037021265, 1603 | "y": 1146.3785114936306, 1604 | "strokeColor": "#000000", 1605 | "backgroundColor": "#ced4da", 1606 | "width": 819.9999999999998, 1607 | "height": 210.00003814697266, 1608 | "seed": 330893304, 1609 | "groupIds": [ 1610 | "HMGr2bQpjsucaBD5ai8xR" 1611 | ], 1612 | "roundness": { 1613 | "type": 3 1614 | }, 1615 | "boundElements": [], 1616 | "updated": 1676227521978, 1617 | "link": null, 1618 | "locked": false 1619 | }, 1620 | { 1621 | "type": "text", 1622 | "version": 156, 1623 | "versionNonce": 1857046264, 1624 | "isDeleted": false, 1625 | "id": "VUPWAazMSmds7jqJ4UMqi", 1626 | "fillStyle": "solid", 1627 | "strokeWidth": 1, 1628 | "strokeStyle": "solid", 1629 | "roughness": 2, 1630 | "opacity": 100, 1631 | "angle": 0, 1632 | "x": -332.4839593350566, 1633 | "y": 1202.7739840902248, 1634 | "strokeColor": "#000000", 1635 | "backgroundColor": "#ced4da", 1636 | "width": 437.13040542602505, 1637 | "height": 113.60451214461678, 1638 | "seed": 349157112, 1639 | "groupIds": [ 1640 | "HMGr2bQpjsucaBD5ai8xR" 1641 | ], 1642 | "roundness": null, 1643 | "boundElements": [], 1644 | "updated": 1676227521978, 1645 | "link": null, 1646 | "locked": false, 1647 | "fontSize": 88.9078790697001, 1648 | "fontFamily": 1, 1649 | "text": "Call class", 1650 | "baseline": 78.60451214461678, 1651 | "textAlign": "center", 1652 | "verticalAlign": "top", 1653 | "containerId": null, 1654 | "originalText": "Call class" 1655 | }, 1656 | { 1657 | "type": "rectangle", 1658 | "version": 252, 1659 | "versionNonce": 828672248, 1660 | "isDeleted": false, 1661 | "id": "-HlwDOilHDHO0PzakVjuL", 1662 | "fillStyle": "solid", 1663 | "strokeWidth": 1, 1664 | "strokeStyle": "solid", 1665 | "roughness": 2, 1666 | "opacity": 100, 1667 | "angle": 0, 1668 | "x": -684.9840127408181, 1669 | "y": 1436.3785496406033, 1670 | "strokeColor": "#000000", 1671 | "backgroundColor": "#ced4da", 1672 | "width": 622.0000076293943, 1673 | "height": 524.0002441406242, 1674 | "seed": 960648072, 1675 | "groupIds": [ 1676 | "HMGr2bQpjsucaBD5ai8xR" 1677 | ], 1678 | "roundness": { 1679 | "type": 3 1680 | }, 1681 | "boundElements": [], 1682 | "updated": 1676227737037, 1683 | "link": null, 1684 | "locked": false 1685 | }, 1686 | { 1687 | "type": "rectangle", 1688 | "version": 340, 1689 | "versionNonce": 65271432, 1690 | "isDeleted": false, 1691 | "id": "SG03zi7EyE2Ux7wK-Sr3F", 1692 | "fillStyle": "solid", 1693 | "strokeWidth": 1, 1694 | "strokeStyle": "solid", 1695 | "roughness": 2, 1696 | "opacity": 100, 1697 | "angle": 0, 1698 | "x": -690.983997482029, 1699 | "y": 1998.3786717109153, 1700 | "strokeColor": "#000000", 1701 | "backgroundColor": "#ced4da", 1702 | "width": 622.0000076293943, 1703 | "height": 524.0002441406242, 1704 | "seed": 24156808, 1705 | "groupIds": [ 1706 | "HMGr2bQpjsucaBD5ai8xR" 1707 | ], 1708 | "roundness": { 1709 | "type": 3 1710 | }, 1711 | "boundElements": [], 1712 | "updated": 1676227740119, 1713 | "link": null, 1714 | "locked": false 1715 | }, 1716 | { 1717 | "type": "text", 1718 | "version": 227, 1719 | "versionNonce": 513895816, 1720 | "isDeleted": false, 1721 | "id": "iXEakxFB5AeZpQmpsChG4", 1722 | "fillStyle": "solid", 1723 | "strokeWidth": 1, 1724 | "strokeStyle": "solid", 1725 | "roughness": 2, 1726 | "opacity": 100, 1727 | "angle": 0, 1728 | "x": -648.9840508877907, 1729 | "y": 1565.8785229377227, 1730 | "strokeColor": "#000000", 1731 | "backgroundColor": "#ced4da", 1732 | "width": 360, 1733 | "height": 346, 1734 | "seed": 1576457608, 1735 | "groupIds": [ 1736 | "HMGr2bQpjsucaBD5ai8xR" 1737 | ], 1738 | "roundness": null, 1739 | "boundElements": [], 1740 | "updated": 1676227555465, 1741 | "link": null, 1742 | "locked": false, 1743 | "fontSize": 36, 1744 | "fontFamily": 3, 1745 | "text": "block_running() {\n if timeout\n\n if hangup\n\n else \n continue()\n}", 1746 | "baseline": 337, 1747 | "textAlign": "left", 1748 | "verticalAlign": "top", 1749 | "containerId": null, 1750 | "originalText": "block_running() {\n if timeout\n\n if hangup\n\n else \n continue()\n}" 1751 | }, 1752 | { 1753 | "type": "text", 1754 | "version": 118, 1755 | "versionNonce": 1116784776, 1756 | "isDeleted": false, 1757 | "id": "f70u8W5j3AgfclP6ClK3Y", 1758 | "fillStyle": "solid", 1759 | "strokeWidth": 1, 1760 | "strokeStyle": "solid", 1761 | "roughness": 2, 1762 | "opacity": 100, 1763 | "angle": 0, 1764 | "x": 997.0158423006851, 1765 | "y": 1557.8992976598215, 1766 | "strokeColor": "#000000", 1767 | "backgroundColor": "#ced4da", 1768 | "width": 318, 1769 | "height": 43, 1770 | "seed": 938164360, 1771 | "groupIds": [ 1772 | "paJ_pgySwRRj15Oz1GUMR" 1773 | ], 1774 | "roundness": null, 1775 | "boundElements": [], 1776 | "updated": 1676227665195, 1777 | "link": null, 1778 | "locked": false, 1779 | "fontSize": 36, 1780 | "fontFamily": 3, 1781 | "text": "block_running()", 1782 | "baseline": 34, 1783 | "textAlign": "left", 1784 | "verticalAlign": "top", 1785 | "containerId": null, 1786 | "originalText": "block_running()" 1787 | }, 1788 | { 1789 | "type": "text", 1790 | "version": 123, 1791 | "versionNonce": 867318920, 1792 | "isDeleted": false, 1793 | "id": "FGuYgTTbOKAfI9Y9VD0mY", 1794 | "fillStyle": "solid", 1795 | "strokeWidth": 1, 1796 | "strokeStyle": "solid", 1797 | "roughness": 2, 1798 | "opacity": 100, 1799 | "angle": 0, 1800 | "x": -397.984081405369, 1801 | "y": 1477.8992976598215, 1802 | "strokeColor": "#000000", 1803 | "backgroundColor": "#ced4da", 1804 | "width": 256, 1805 | "height": 42, 1806 | "seed": 1606003592, 1807 | "groupIds": [], 1808 | "roundness": null, 1809 | "boundElements": [], 1810 | "updated": 1676227579036, 1811 | "link": null, 1812 | "locked": false, 1813 | "fontSize": 36, 1814 | "fontFamily": 2, 1815 | "text": "פונקציית ההקפאה", 1816 | "baseline": 33, 1817 | "textAlign": "left", 1818 | "verticalAlign": "top", 1819 | "containerId": null, 1820 | "originalText": "פונקציית ההקפאה" 1821 | }, 1822 | { 1823 | "type": "text", 1824 | "version": 210, 1825 | "versionNonce": 632897160, 1826 | "isDeleted": false, 1827 | "id": "aJ6j5Dx0Lj_178YejyskH", 1828 | "fillStyle": "solid", 1829 | "strokeWidth": 1, 1830 | "strokeStyle": "solid", 1831 | "roughness": 2, 1832 | "opacity": 100, 1833 | "angle": 0, 1834 | "x": 1146.5159185946304, 1835 | "y": 1510.2326583318186, 1836 | "strokeColor": "#000000", 1837 | "backgroundColor": "#ced4da", 1838 | "width": 256, 1839 | "height": 42, 1840 | "seed": 640588424, 1841 | "groupIds": [ 1842 | "paJ_pgySwRRj15Oz1GUMR" 1843 | ], 1844 | "roundness": null, 1845 | "boundElements": [], 1846 | "updated": 1676227668932, 1847 | "link": null, 1848 | "locked": false, 1849 | "fontSize": 36, 1850 | "fontFamily": 2, 1851 | "text": "פונקציית ההקפאה", 1852 | "baseline": 33, 1853 | "textAlign": "left", 1854 | "verticalAlign": "top", 1855 | "containerId": null, 1856 | "originalText": "פונקציית ההקפאה" 1857 | }, 1858 | { 1859 | "type": "text", 1860 | "version": 69, 1861 | "versionNonce": 1872806280, 1862 | "isDeleted": false, 1863 | "id": "ZMH2RBf9nhhZ25_hC62c4", 1864 | "fillStyle": "solid", 1865 | "strokeWidth": 1, 1866 | "strokeStyle": "solid", 1867 | "roughness": 2, 1868 | "opacity": 100, 1869 | "angle": 0, 1870 | "x": -642.9840814053689, 1871 | "y": 2038.6910361699533, 1872 | "strokeColor": "#000000", 1873 | "backgroundColor": "#ced4da", 1874 | "width": 129, 1875 | "height": 43, 1876 | "seed": 447607944, 1877 | "groupIds": [], 1878 | "roundness": null, 1879 | "boundElements": [], 1880 | "updated": 1676227763957, 1881 | "link": null, 1882 | "locked": false, 1883 | "fontSize": 36, 1884 | "fontFamily": 3, 1885 | "text": "read()", 1886 | "baseline": 34, 1887 | "textAlign": "left", 1888 | "verticalAlign": "top", 1889 | "containerId": null, 1890 | "originalText": "read()" 1891 | }, 1892 | { 1893 | "type": "rectangle", 1894 | "version": 69, 1895 | "versionNonce": 1612099208, 1896 | "isDeleted": false, 1897 | "id": "V_dHwicNADrhJ1MOBhgwQ", 1898 | "fillStyle": "solid", 1899 | "strokeWidth": 1, 1900 | "strokeStyle": "solid", 1901 | "roughness": 2, 1902 | "opacity": 100, 1903 | "angle": 0, 1904 | "x": -526.984096664158, 1905 | "y": 2099.1910514287424, 1906 | "strokeColor": "#000000", 1907 | "backgroundColor": "#ced4ff", 1908 | "width": 405.9999847412107, 1909 | "height": 88.00003051757812, 1910 | "seed": 1746882696, 1911 | "groupIds": [], 1912 | "roundness": { 1913 | "type": 3 1914 | }, 1915 | "boundElements": [], 1916 | "updated": 1676227815108, 1917 | "link": null, 1918 | "locked": false 1919 | }, 1920 | { 1921 | "type": "text", 1922 | "version": 78, 1923 | "versionNonce": 791578360, 1924 | "isDeleted": false, 1925 | "id": "CvrsXRW4wXbK9qBiJ0D42", 1926 | "fillStyle": "solid", 1927 | "strokeWidth": 1, 1928 | "strokeStyle": "solid", 1929 | "roughness": 2, 1930 | "opacity": 100, 1931 | "angle": 0, 1932 | "x": -408.98414244052526, 1933 | "y": 2124.1908683232737, 1934 | "strokeColor": "#000000", 1935 | "backgroundColor": "#ced4ff", 1936 | "width": 206, 1937 | "height": 42, 1938 | "seed": 596814984, 1939 | "groupIds": [], 1940 | "roundness": null, 1941 | "boundElements": [], 1942 | "updated": 1676227861084, 1943 | "link": null, 1944 | "locked": false, 1945 | "fontSize": 36, 1946 | "fontFamily": 2, 1947 | "text": "הכנת התשובה", 1948 | "baseline": 33, 1949 | "textAlign": "left", 1950 | "verticalAlign": "top", 1951 | "containerId": null, 1952 | "originalText": "הכנת התשובה" 1953 | } 1954 | ], 1955 | "appState": { 1956 | "gridSize": null, 1957 | "viewBackgroundColor": "#ffffff" 1958 | }, 1959 | "files": {} 1960 | } -------------------------------------------------------------------------------- /exemple.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | const { Yemot_router } = require("./"); 4 | 5 | const y = Yemot_router(); 6 | 7 | y.add_fn("/", async (call) => { 8 | 9 | let massage = [{ type: "text", data: "היי, תקיש 10" }]; 10 | let r = await call.read(massage) 11 | .catch(error => { 12 | if (error.name === "Hangup_error") 13 | console.log(error.call.phone, "hangup"); 14 | throw error; 15 | }); 16 | 17 | massage = [{ type: "text", data: "שלום, אנא הקש את שמך המלא" }]; 18 | r = await call.read(massage, "tap", { play_ok_mode: "HebrewKeyboard" }) 19 | .catch(error => { 20 | if (error.name === "Hangup_error") 21 | console.log(error.call.phone, "hangup"); 22 | throw error; 23 | }); 24 | 25 | console.log(r); 26 | 27 | massage = [ 28 | { type: "text", data: "שלום " + r }, 29 | { type: "text", data: "אנא הקלט את הרחוב בו אתה גר" } 30 | ]; 31 | r = await call.read(massage, "record"); 32 | 33 | console.log(r); 34 | 35 | massage = [{ type: "text", data: "אנא אמור את שם הרחוב בו אתה גר" }]; 36 | r = await call.read(massage, "stt"); 37 | 38 | console.log(r); 39 | 40 | massage = [{ type: "text", data: "אמרת" }]; 41 | r = await call.id_list_message(massage, true); 42 | 43 | console.log(r); 44 | 45 | call.go_to_folder("/1"); 46 | }); 47 | 48 | app.use("/", y); 49 | 50 | const port = 3000; 51 | app.listen(port, () => { 52 | console.log("listen in port", port); 53 | }); 54 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | export declare function Yemot_router(opt?: { timeout: number }): YemotRouter; 2 | 3 | interface YemotRouter { 4 | add_fn: (path: string, handler: Handler) => void; 5 | } 6 | export type Call = { 7 | did: string; 8 | 9 | phone: string; 10 | 11 | real_did: string; 12 | 13 | call_id: string; 14 | 15 | extension: string; 16 | 17 | query: object; 18 | 19 | read( 20 | massage: msg_data, 21 | mode?: mode, 22 | options?: read_options 23 | ): Promise; 24 | 25 | go_to_folder(folder: string): void; 26 | 27 | id_list_message(data: msg_data, wait_to_more_action: boolean): void; 28 | 29 | routing_yemot(phone: string): void; 30 | 31 | restart_ext(): void; 32 | }; 33 | 34 | type Handler = (p: Call) => void; 35 | 36 | type msg_data = [{ type: msg_data_type; data: string }]; 37 | 38 | type msg_data_type = 39 | | "file" 40 | | "text" 41 | | "speech" 42 | | "digits" 43 | | "number" 44 | | "alpha" 45 | | "zmanim" 46 | | "go_to_folder" 47 | | "system_message" 48 | | "music_on_hold" 49 | | "date" 50 | | "dateH"; 51 | 52 | type mode = "tap" | "stt" | "record"; 53 | 54 | type read_options = { 55 | val_name: string; 56 | re_enter_if_exists: boolean; 57 | max: number; 58 | min: number; 59 | sec_wait: number; 60 | play_ok_mode: play_ok_mode; 61 | block_asterisk: boolean; 62 | block_zero: boolean; 63 | replace_char: string; 64 | digits_allowed: (number | string)[]; 65 | amount_attempts: number; 66 | read_none: boolean; 67 | read_none_var: string; 68 | block_change_type_lang: boolean; 69 | 70 | lang: string; 71 | allow_typing: boolean; 72 | 73 | path: string; 74 | file_name: string; 75 | record_ok: boolean; 76 | record_hangup: boolean; 77 | record_attach: boolean; 78 | }; 79 | 80 | type play_ok_mode = 81 | | "Number" 82 | | "Digits" 83 | | "File" 84 | | "TTS" 85 | | "Alpha" 86 | | "No" 87 | | "HebrewKeyboard" 88 | | "EmailKeyboard" 89 | | "EnglishKeyboard" 90 | | "DigitsKeyboard" 91 | | "TeudatZehut" 92 | | "Price" 93 | | "Time" 94 | | "Phone" 95 | | "No"; 96 | 97 | export const errors = { 98 | Exit_error, 99 | }; 100 | 101 | class Exit_error extends Error { 102 | constructor(call, ...params) { 103 | // Pass remaining arguments (including vendor specific ones) to parent constructor 104 | super(...params); 105 | 106 | this.call = new Call(); 107 | 108 | this.name = "Exit_error"; 109 | this.date = new Date(); 110 | } 111 | } 112 | class Hangup_error extends Exit_error { 113 | constructor(...params) { 114 | this.name = "Hangup_error"; 115 | } 116 | } 117 | 118 | class Timeout_error extends Exit_error { 119 | constructor(...params) { 120 | this.name = "Timeout_error"; 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./lib/yemot_router"); -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "exclude": [ 3 | "node_modules" 4 | ], 5 | "compilerOptions": { 6 | "moduleResolution": "node", 7 | "target": "ES6", 8 | "module": "commonjs", 9 | "baseUrl": ".", 10 | "paths": { 11 | "*": [ 12 | "*", 13 | //"lib/*", 14 | "lib/*" 15 | ] 16 | } 17 | }, 18 | "include": [ 19 | "*", 20 | "lib", 21 | "misc", 22 | "test/*" 23 | ] 24 | } -------------------------------------------------------------------------------- /lib/call.js: -------------------------------------------------------------------------------- 1 | const Response_Functions = new (require("./response_functions")); 2 | const { Hangup_error, Timeout_error, Exit_error } = require("./errors.js"); 3 | 4 | function Call(call_id, events, timeout) { 5 | this.did = ""; 6 | this.phone = ""; 7 | this.call_id = ""; 8 | this.real_did = ""; 9 | this.extension = ""; 10 | 11 | let url_value_num = 0; 12 | 13 | let request; 14 | let global_response_txt = ""; 15 | 16 | const _this = this; 17 | 18 | this.read = async function read(massage, mode = "tap", options = {}) { 19 | if (!Array.isArray(massage)) { 20 | throw new Error("data is not array!!"); 21 | } 22 | 23 | let response_txt, val_return; 24 | 25 | const send = async () => { 26 | 27 | if (!options.val_name) url_value_num++; 28 | 29 | [response_txt, val_return] = Response_Functions.make_read_response(massage, mode, options, url_value_num); 30 | 31 | if (global_response_txt) { 32 | response_txt = global_response_txt + response_txt; 33 | global_response_txt = ""; 34 | } 35 | 36 | await wait_to_request(); 37 | 38 | this.send(response_txt); 39 | 40 | await block_running(val_return); 41 | 42 | if (!request.req.query[val_return]) { 43 | await send(); 44 | } 45 | }; 46 | 47 | await send(); 48 | 49 | if (request.req.query[val_return]) { 50 | return request.req.query[val_return]; 51 | } else { 52 | return false; 53 | } 54 | }; 55 | 56 | this.go_to_folder = function go_to_folder(folder) { 57 | let response_txt = `go_to_folder=${folder}`; 58 | 59 | if (global_response_txt) { 60 | response_txt = global_response_txt + response_txt; 61 | global_response_txt = ""; 62 | } 63 | 64 | this.send(response_txt); 65 | 66 | throw new Exit_error(_this); 67 | }; 68 | 69 | this.restart_ext = function restart_ext() { 70 | const folder = this.extension; 71 | let response_txt = `go_to_folder=/${folder}`; 72 | 73 | if (global_response_txt) { 74 | response_txt = global_response_txt + response_txt; 75 | global_response_txt = ""; 76 | } 77 | 78 | this.send(response_txt); 79 | }; 80 | 81 | /** 82 | * @param {[data]} massage 83 | */ 84 | this.id_list_message = async function id_list_message(massage, wait_to_more_action = false) { 85 | if (!Array.isArray(massage)) { 86 | throw new Error("data is not array!!"); 87 | } 88 | 89 | let response_txt = Response_Functions.make_id_list_message_response(massage); 90 | 91 | if (/(\.|=)g-.+/.test(response_txt)) { 92 | console.log("No further actions can be threaded after go_to_folder!"); 93 | wait_to_more_action = false; 94 | } 95 | 96 | if (!wait_to_more_action) { 97 | // אם הפונקציה נקראה, לפני שהמשתמש ביקש תגובה 98 | // סימן שזוהי הפעולה האחרונה 99 | await wait_to_request(); 100 | 101 | this.send(response_txt); 102 | 103 | throw new Hangup_error(_this); 104 | } else { 105 | global_response_txt = response_txt; 106 | } 107 | }; 108 | 109 | this.credit_card = () => { 110 | // ... 111 | }; 112 | 113 | this.routing_yemot = function routing_yemot(phone) { 114 | let response_txt = "routing_yemot=" + phone; 115 | 116 | if (global_response_txt) { 117 | response_txt = global_response_txt + response_txt; 118 | global_response_txt = ""; 119 | } 120 | 121 | this.send(response_txt); 122 | }; 123 | 124 | this.routing = function () { 125 | //... 126 | }; 127 | 128 | this.get_req_vals = function get_req_vals(req, res, next) { 129 | 130 | request = { 131 | req, 132 | res, 133 | next 134 | }; 135 | 136 | Object.assign(this, request.req.query); 137 | 138 | this.did = this.ApiDID; 139 | this.phone = this.ApiPhone; 140 | this.call_id = this.ApiCallId; 141 | this.real_did = this.ApiRealDID; 142 | this.extension = this.ApiExtension; 143 | 144 | this.query = request.req.query; 145 | this.params = request.req.params; 146 | }; 147 | 148 | this.send = function send(data) { 149 | request.res.send(data); 150 | request.res.is_sending = true; 151 | }; 152 | 153 | const block_running = async function(val_return) { 154 | return new Promise((resolve, reject) => { 155 | events.once(call_id, (is_hangup) => { 156 | console.log(val_return, "free"); 157 | if (timeout) { 158 | setTimeout(() => { 159 | on_timeout(reject); 160 | }, timeout); 161 | } 162 | if (is_hangup) { 163 | on_hangup(reject); 164 | } else { 165 | resolve(is_hangup); 166 | } 167 | }); 168 | console.log(val_return, "create block"); 169 | }); 170 | }; 171 | 172 | async function wait_to_request() { 173 | if (request.res._headerSent) { 174 | await block_running(); 175 | } 176 | } 177 | 178 | function on_hangup(reject) { 179 | request.res.json({ message: "hangup" }); 180 | reject(new Hangup_error(_this)); 181 | } 182 | 183 | function on_timeout(reject) { 184 | request.res.json({ message: "timeout" }); 185 | reject(new Timeout_error(_this)); 186 | } 187 | 188 | return this; 189 | } 190 | 191 | module.exports = Call; 192 | -------------------------------------------------------------------------------- /lib/check_request.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = function check_request(query) { 3 | 4 | if ( 5 | (query.ApiPhone || query.ApiPhone === "") && 6 | (query.ApiDID || query.ApiDID === "") && 7 | (query.ApiExtension || query.ApiExtension === "") && 8 | (query.ApiCallId || query.ApiCallId === "") 9 | ) { 10 | return true; 11 | } return false; 12 | 13 | }; -------------------------------------------------------------------------------- /lib/errors.js: -------------------------------------------------------------------------------- 1 | 2 | class Exit_error extends Error { 3 | constructor(call, ...params) { 4 | // Pass remaining arguments (including vendor specific ones) to parent constructor 5 | super(...params); 6 | 7 | this.call = call; 8 | 9 | this.name = "Exit_error"; 10 | // Custom debugging information 11 | this.date = new Date(); 12 | } 13 | } 14 | 15 | class Hangup_error extends Exit_error { 16 | constructor(...params) { 17 | super(...params); 18 | this.name = "Hangup_error"; 19 | } 20 | } 21 | 22 | class Timeout_error extends Exit_error { 23 | constructor(...params) { 24 | // Pass remaining arguments (including vendor specific ones) to parent constructor 25 | super(...params); 26 | this.name = "Timeout_error"; 27 | } 28 | } 29 | 30 | module.exports = { 31 | Hangup_error, 32 | Timeout_error, 33 | Exit_error 34 | }; -------------------------------------------------------------------------------- /lib/response_functions.js: -------------------------------------------------------------------------------- 1 | const data_type = { 2 | 3 | "file": "f", 4 | "text": "t", 5 | "speech": "s", 6 | "digits": "d", 7 | "number": "n", 8 | "alpha": "a", 9 | "zmanim": "z", 10 | "go_to_folder": "g", 11 | "system_message": "m", 12 | "music_on_hold": "h", 13 | "date": "date", 14 | "dateH": "dateH" 15 | }; 16 | 17 | const Response_Functions = function () { 18 | this.make_read_response = function (massage, mode, options, value_num = 1) { 19 | if (typeof massage != "object") { 20 | throw new Error("Data is undefined"); 21 | } 22 | 23 | if (!options.val_name) { 24 | options.val_name = "val_" + value_num; 25 | } 26 | 27 | let data_str = make_read_data(massage); 28 | let res; 29 | 30 | switch (mode) { 31 | case "tap": 32 | res = make_tap_mode_request(data_str, options); 33 | break; 34 | case "stt": 35 | res = make_stt_mode_request(data_str, options); 36 | break; 37 | case "record": 38 | res = make_record_mode_request(data_str, options); 39 | break; 40 | default: 41 | throw new Error("mode parameter is Invalid"); 42 | } 43 | 44 | return [res, options.val_name]; 45 | }; 46 | 47 | this.make_id_list_message_response = function (data) { 48 | return "id_list_message=" + make_read_data(data) + "&"; 49 | }; 50 | 51 | function check_text(data) { 52 | const rgx = /[.\-"'&|]/g; 53 | for (const msg of data) { 54 | if (rgx.test(msg.data)) { 55 | throw new Error(`'${msg.data}' has invalid characters for yemot`); 56 | } 57 | } 58 | } 59 | 60 | const make_read_data = function (data) { 61 | check_text(data); 62 | let res = ""; 63 | let i = 1; 64 | for (const value of data) { 65 | res += i > 1 ? "." : ""; 66 | if (!value.type) { 67 | throw new Error(`in ${JSON.stringify(value)} type is missing!`); 68 | } else if (!data_type[value.type]) { 69 | throw new Error(`${value.type} is not a valid type!`); 70 | } else { 71 | res += data_type[value.type] + "-"; 72 | } 73 | 74 | if (value.type === "zmanim") { 75 | if (typeof value.data !== "object") throw new Error("in \"zmanim\" type, data should be an object"); 76 | let difference_splitted; 77 | if (value.data.difference) { 78 | if (!/(-|\+)[YMDHmSs]\d+/.test(value.data.difference)) throw new Error("difference is invalid"); 79 | difference_splitted = value.data.difference.match(/(-|\+)(.+)/); 80 | } 81 | res += [ 82 | value.data.time || "T", 83 | value.data.zone || "IL/Jerusalem", 84 | difference_splitted ? difference_splitted[1] : "", 85 | difference_splitted ? difference_splitted[2] : "" 86 | ].join(","); 87 | } else if (value.type === "system_message") { 88 | const msgId = String(value.data).replace("M", ""); 89 | if (!Number.isInteger(parseInt(msgId))) { 90 | throw new Error(`${value.data} is not a valid system message id!`); 91 | } 92 | res += msgId; 93 | } else { 94 | res += value.data; 95 | } 96 | i++; 97 | if (value.type === "go_to_folder") break; 98 | } 99 | return res; 100 | }; 101 | 102 | const make_tap_mode_request = function (data_str, options) { 103 | const values = [ 104 | options.val_name, 105 | (options.re_enter_if_exists || false) ? "yes" : "no", 106 | (options.max || "*"), 107 | (options.min || "1"), 108 | (options.sec_wait || 7), 109 | (options.play_ok_mode || "No"), 110 | (options.block_asterisk || false) ? "yes" : "no", 111 | (options.block_zero || false) ? "yes" : "no", 112 | (options.replace_char || ""), 113 | options.digits_allowed ? options.digits_allowed.join(".") : "", // [1, 14] 114 | (options.amount_attempts || ""), 115 | (options.read_none || false) ? "Ok" : "no", 116 | (options.read_none_var || ""), 117 | (options.block_change_type_lang ? "InsertLettersTypeChangeNo" : "") 118 | ]; 119 | return `read=${data_str}=${values.join(",")}`; 120 | }; 121 | 122 | const make_stt_mode_request = function (data_str, options) { 123 | const values = [ 124 | options.val_name, 125 | (options.re_enter_if_exists || false) ? "yes" : "no", 126 | "voice", 127 | (options.lang || ""), 128 | (options.allow_typing || false) ? "yes" : "no" 129 | ]; 130 | return `read=${data_str}=${values.join(",")}`; 131 | }; 132 | 133 | const make_record_mode_request = function (data_str, options) { 134 | const values = [ 135 | options.val_name, 136 | (options.re_enter_if_exists || false) ? "yes" : "no", 137 | "record", 138 | (options.path || ""), 139 | (options.file_name || ""), 140 | (options.record_ok === false) ? "no" : "yes", 141 | (options.record_hangup || false) ? "yes" : "no", 142 | (options.record_attach || false) ? "yes" : "no", 143 | (options.lenght_min || ""), 144 | (options.lenght_max || "") 145 | ]; 146 | return `read=${data_str}=${values.join(",")}`; 147 | }; 148 | }; 149 | 150 | module.exports = Response_Functions; -------------------------------------------------------------------------------- /lib/yemot_router.js: -------------------------------------------------------------------------------- 1 | const { Hangup_error, Timeout_error, Exit_error } = require("./errors.js"); 2 | const check_request = require("./check_request"); 3 | const Call = require("./call"); 4 | 5 | const Router = require("express").Router; 6 | const EventEmitter = require("events"); 7 | 8 | 9 | function Yemot_router(opt = { timeout: 0 }) { 10 | const router = Router(); 11 | const events = new EventEmitter(); 12 | const active_calls = {}; 13 | 14 | Object.setPrototypeOf(Router, Yemot_router); 15 | 16 | router.add_fn = function (path, fn) { 17 | this.all(path, (req, res, next) => { 18 | if (!check_request(req.query)) { 19 | return res.json({ message: "request not valid" }); 20 | } 21 | 22 | req.query = check_query(req.query); 23 | 24 | const call_id = req.query.ApiCallId; 25 | 26 | const [current_call, is_new_call] = get_current_call(call_id); 27 | 28 | current_call.get_req_vals(req, res, next); 29 | 30 | if (is_new_call) { 31 | new_call(fn, call_id, current_call); 32 | } else { 33 | events.emit(call_id, is_hangup(current_call.query)); 34 | } 35 | }); 36 | }; 37 | 38 | async function new_call(fn, call_id, call) { 39 | try { 40 | const r = await fn(call); 41 | on_call_end(call_id, r); 42 | } catch (error) { 43 | 44 | if (error instanceof Hangup_error) { 45 | on_hangup(call_id); 46 | 47 | } else if (error instanceof Timeout_error) { 48 | on_timeout(call_id); 49 | 50 | } else if (error instanceof Exit_error) { 51 | on_exit(call_id); 52 | 53 | } else { 54 | throw error; 55 | } 56 | } 57 | } 58 | 59 | function on_call_end(call_id, r) { 60 | delete active_calls[call_id]; 61 | console.log(call_id, "deleted", r); 62 | } 63 | 64 | function on_exit(call_id) { 65 | delete active_calls[call_id]; 66 | console.log(call_id, "exit"); 67 | } 68 | 69 | function on_hangup(call_id) { 70 | delete active_calls[call_id]; 71 | console.log(call_id, "hangup"); 72 | } 73 | 74 | function on_timeout(call_id) { 75 | delete active_calls[call_id]; 76 | console.error(call_id, "is timeout!"); 77 | } 78 | 79 | function is_hangup(query) { 80 | if (query.hangup && query.hangup === "yes") { 81 | return true; 82 | } 83 | return false; 84 | } 85 | 86 | function get_current_call(call_id) { 87 | function make_new_call() { 88 | const call = new Call(call_id, events, opt.timeout); 89 | active_calls[call_id] = call; 90 | console.log(call_id + " is new"); 91 | return call; 92 | } 93 | 94 | let is_new_call = false; 95 | let current_call = active_calls[call_id]; 96 | if (!current_call) { 97 | is_new_call = true; 98 | current_call = make_new_call(); 99 | } 100 | return [current_call, is_new_call]; 101 | 102 | } 103 | 104 | /** אם ערך מסויים יש כמה פעמים, שייקבע רק האחרון **/ 105 | function check_query(query) { 106 | if (typeof query === "object") { 107 | let iterator; 108 | for (const key of Object.keys(query)) { 109 | iterator = query[key]; 110 | if (typeof iterator === "object") { 111 | query[key] = iterator[(iterator.length - 1)]; 112 | } 113 | } 114 | } 115 | return query; 116 | } 117 | 118 | return router; 119 | } 120 | 121 | Yemot_router.Yemot_router = Yemot_router; 122 | Yemot_router.errors = { Hangup_error, Timeout_error, Exit_error }; 123 | 124 | module.exports = Yemot_router; 125 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "yemot-router", 3 | "version": "4.4.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.10.4", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 10 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 11 | "requires": { 12 | "@babel/highlight": "^7.10.4" 13 | } 14 | }, 15 | "@babel/helper-validator-identifier": { 16 | "version": "7.10.4", 17 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 18 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" 19 | }, 20 | "@babel/highlight": { 21 | "version": "7.10.4", 22 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 23 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 24 | "requires": { 25 | "@babel/helper-validator-identifier": "^7.10.4", 26 | "chalk": "^2.0.0", 27 | "js-tokens": "^4.0.0" 28 | } 29 | }, 30 | "@types/color-name": { 31 | "version": "1.1.1", 32 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 33 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" 34 | }, 35 | "acorn": { 36 | "version": "7.3.1", 37 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", 38 | "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==" 39 | }, 40 | "acorn-jsx": { 41 | "version": "5.2.0", 42 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 43 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" 44 | }, 45 | "ajv": { 46 | "version": "6.12.3", 47 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", 48 | "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", 49 | "requires": { 50 | "fast-deep-equal": "^3.1.1", 51 | "fast-json-stable-stringify": "^2.0.0", 52 | "json-schema-traverse": "^0.4.1", 53 | "uri-js": "^4.2.2" 54 | } 55 | }, 56 | "ansi-escapes": { 57 | "version": "4.3.1", 58 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 59 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 60 | "requires": { 61 | "type-fest": "^0.11.0" 62 | }, 63 | "dependencies": { 64 | "type-fest": { 65 | "version": "0.11.0", 66 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 67 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" 68 | } 69 | } 70 | }, 71 | "ansi-regex": { 72 | "version": "5.0.1", 73 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 74 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 75 | }, 76 | "ansi-styles": { 77 | "version": "3.2.1", 78 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 79 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 80 | "requires": { 81 | "color-convert": "^1.9.0" 82 | } 83 | }, 84 | "argparse": { 85 | "version": "1.0.10", 86 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 87 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 88 | "requires": { 89 | "sprintf-js": "~1.0.2" 90 | } 91 | }, 92 | "astral-regex": { 93 | "version": "1.0.0", 94 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 95 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" 96 | }, 97 | "balanced-match": { 98 | "version": "1.0.0", 99 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 100 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 101 | }, 102 | "brace-expansion": { 103 | "version": "1.1.11", 104 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 105 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 106 | "requires": { 107 | "balanced-match": "^1.0.0", 108 | "concat-map": "0.0.1" 109 | } 110 | }, 111 | "callsites": { 112 | "version": "3.1.0", 113 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 114 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" 115 | }, 116 | "chalk": { 117 | "version": "2.4.2", 118 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 119 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 120 | "requires": { 121 | "ansi-styles": "^3.2.1", 122 | "escape-string-regexp": "^1.0.5", 123 | "supports-color": "^5.3.0" 124 | } 125 | }, 126 | "chardet": { 127 | "version": "0.7.0", 128 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 129 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 130 | }, 131 | "cli-cursor": { 132 | "version": "3.1.0", 133 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 134 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 135 | "requires": { 136 | "restore-cursor": "^3.1.0" 137 | } 138 | }, 139 | "cli-width": { 140 | "version": "3.0.0", 141 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", 142 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" 143 | }, 144 | "color-convert": { 145 | "version": "1.9.3", 146 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 147 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 148 | "requires": { 149 | "color-name": "1.1.3" 150 | } 151 | }, 152 | "color-name": { 153 | "version": "1.1.3", 154 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 155 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 156 | }, 157 | "concat-map": { 158 | "version": "0.0.1", 159 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 160 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 161 | }, 162 | "cross-spawn": { 163 | "version": "6.0.5", 164 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 165 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 166 | "requires": { 167 | "nice-try": "^1.0.4", 168 | "path-key": "^2.0.1", 169 | "semver": "^5.5.0", 170 | "shebang-command": "^1.2.0", 171 | "which": "^1.2.9" 172 | }, 173 | "dependencies": { 174 | "semver": { 175 | "version": "5.7.1", 176 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 177 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 178 | } 179 | } 180 | }, 181 | "debug": { 182 | "version": "4.1.1", 183 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 184 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 185 | "requires": { 186 | "ms": "^2.1.1" 187 | } 188 | }, 189 | "deep-is": { 190 | "version": "0.1.3", 191 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 192 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" 193 | }, 194 | "doctrine": { 195 | "version": "3.0.0", 196 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 197 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 198 | "requires": { 199 | "esutils": "^2.0.2" 200 | } 201 | }, 202 | "emoji-regex": { 203 | "version": "8.0.0", 204 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 205 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 206 | }, 207 | "escape-string-regexp": { 208 | "version": "1.0.5", 209 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 210 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 211 | }, 212 | "eslint": { 213 | "version": "6.8.0", 214 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", 215 | "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", 216 | "requires": { 217 | "@babel/code-frame": "^7.0.0", 218 | "ajv": "^6.10.0", 219 | "chalk": "^2.1.0", 220 | "cross-spawn": "^6.0.5", 221 | "debug": "^4.0.1", 222 | "doctrine": "^3.0.0", 223 | "eslint-scope": "^5.0.0", 224 | "eslint-utils": "^1.4.3", 225 | "eslint-visitor-keys": "^1.1.0", 226 | "espree": "^6.1.2", 227 | "esquery": "^1.0.1", 228 | "esutils": "^2.0.2", 229 | "file-entry-cache": "^5.0.1", 230 | "functional-red-black-tree": "^1.0.1", 231 | "glob-parent": "^5.0.0", 232 | "globals": "^12.1.0", 233 | "ignore": "^4.0.6", 234 | "import-fresh": "^3.0.0", 235 | "imurmurhash": "^0.1.4", 236 | "inquirer": "^7.0.0", 237 | "is-glob": "^4.0.0", 238 | "js-yaml": "^3.13.1", 239 | "json-stable-stringify-without-jsonify": "^1.0.1", 240 | "levn": "^0.3.0", 241 | "lodash": "^4.17.14", 242 | "minimatch": "^3.0.4", 243 | "mkdirp": "^0.5.1", 244 | "natural-compare": "^1.4.0", 245 | "optionator": "^0.8.3", 246 | "progress": "^2.0.0", 247 | "regexpp": "^2.0.1", 248 | "semver": "^6.1.2", 249 | "strip-ansi": "^5.2.0", 250 | "strip-json-comments": "^3.0.1", 251 | "table": "^5.2.3", 252 | "text-table": "^0.2.0", 253 | "v8-compile-cache": "^2.0.3" 254 | } 255 | }, 256 | "eslint-scope": { 257 | "version": "5.1.0", 258 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", 259 | "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", 260 | "requires": { 261 | "esrecurse": "^4.1.0", 262 | "estraverse": "^4.1.1" 263 | } 264 | }, 265 | "eslint-utils": { 266 | "version": "1.4.3", 267 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", 268 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", 269 | "requires": { 270 | "eslint-visitor-keys": "^1.1.0" 271 | } 272 | }, 273 | "eslint-visitor-keys": { 274 | "version": "1.3.0", 275 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 276 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" 277 | }, 278 | "espree": { 279 | "version": "6.2.1", 280 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", 281 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", 282 | "requires": { 283 | "acorn": "^7.1.1", 284 | "acorn-jsx": "^5.2.0", 285 | "eslint-visitor-keys": "^1.1.0" 286 | } 287 | }, 288 | "esprima": { 289 | "version": "4.0.1", 290 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 291 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 292 | }, 293 | "esquery": { 294 | "version": "1.3.1", 295 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 296 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 297 | "requires": { 298 | "estraverse": "^5.1.0" 299 | }, 300 | "dependencies": { 301 | "estraverse": { 302 | "version": "5.1.0", 303 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", 304 | "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==" 305 | } 306 | } 307 | }, 308 | "esrecurse": { 309 | "version": "4.2.1", 310 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 311 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 312 | "requires": { 313 | "estraverse": "^4.1.0" 314 | } 315 | }, 316 | "estraverse": { 317 | "version": "4.3.0", 318 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 319 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" 320 | }, 321 | "esutils": { 322 | "version": "2.0.3", 323 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 324 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 325 | }, 326 | "express": { 327 | "version": "4.17.1", 328 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 329 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 330 | "requires": { 331 | "accepts": "~1.3.7", 332 | "array-flatten": "1.1.1", 333 | "body-parser": "1.19.0", 334 | "content-disposition": "0.5.3", 335 | "content-type": "~1.0.4", 336 | "cookie": "0.4.0", 337 | "cookie-signature": "1.0.6", 338 | "debug": "2.6.9", 339 | "depd": "~1.1.2", 340 | "encodeurl": "~1.0.2", 341 | "escape-html": "~1.0.3", 342 | "etag": "~1.8.1", 343 | "finalhandler": "~1.1.2", 344 | "fresh": "0.5.2", 345 | "merge-descriptors": "1.0.1", 346 | "methods": "~1.1.2", 347 | "on-finished": "~2.3.0", 348 | "parseurl": "~1.3.3", 349 | "path-to-regexp": "0.1.7", 350 | "proxy-addr": "~2.0.5", 351 | "qs": "6.7.0", 352 | "range-parser": "~1.2.1", 353 | "safe-buffer": "5.1.2", 354 | "send": "0.17.1", 355 | "serve-static": "1.14.1", 356 | "setprototypeof": "1.1.1", 357 | "statuses": "~1.5.0", 358 | "type-is": "~1.6.18", 359 | "utils-merge": "1.0.1", 360 | "vary": "~1.1.2" 361 | }, 362 | "dependencies": { 363 | "accepts": { 364 | "version": "1.3.7", 365 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 366 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 367 | "requires": { 368 | "mime-types": "~2.1.24", 369 | "negotiator": "0.6.2" 370 | } 371 | }, 372 | "array-flatten": { 373 | "version": "1.1.1", 374 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 375 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 376 | }, 377 | "body-parser": { 378 | "version": "1.19.0", 379 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 380 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 381 | "requires": { 382 | "bytes": "3.1.0", 383 | "content-type": "~1.0.4", 384 | "debug": "2.6.9", 385 | "depd": "~1.1.2", 386 | "http-errors": "1.7.2", 387 | "iconv-lite": "0.4.24", 388 | "on-finished": "~2.3.0", 389 | "qs": "6.7.0", 390 | "raw-body": "2.4.0", 391 | "type-is": "~1.6.17" 392 | } 393 | }, 394 | "bytes": { 395 | "version": "3.1.0", 396 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 397 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 398 | }, 399 | "content-disposition": { 400 | "version": "0.5.3", 401 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 402 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 403 | "requires": { 404 | "safe-buffer": "5.1.2" 405 | } 406 | }, 407 | "content-type": { 408 | "version": "1.0.4", 409 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 410 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 411 | }, 412 | "cookie": { 413 | "version": "0.4.0", 414 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 415 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 416 | }, 417 | "cookie-signature": { 418 | "version": "1.0.6", 419 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 420 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 421 | }, 422 | "debug": { 423 | "version": "2.6.9", 424 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 425 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 426 | "requires": { 427 | "ms": "2.0.0" 428 | } 429 | }, 430 | "depd": { 431 | "version": "1.1.2", 432 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 433 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 434 | }, 435 | "destroy": { 436 | "version": "1.0.4", 437 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 438 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 439 | }, 440 | "ee-first": { 441 | "version": "1.1.1", 442 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 443 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 444 | }, 445 | "encodeurl": { 446 | "version": "1.0.2", 447 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 448 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 449 | }, 450 | "escape-html": { 451 | "version": "1.0.3", 452 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 453 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 454 | }, 455 | "etag": { 456 | "version": "1.8.1", 457 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 458 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 459 | }, 460 | "finalhandler": { 461 | "version": "1.1.2", 462 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 463 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 464 | "requires": { 465 | "debug": "2.6.9", 466 | "encodeurl": "~1.0.2", 467 | "escape-html": "~1.0.3", 468 | "on-finished": "~2.3.0", 469 | "parseurl": "~1.3.3", 470 | "statuses": "~1.5.0", 471 | "unpipe": "~1.0.0" 472 | } 473 | }, 474 | "forwarded": { 475 | "version": "0.1.2", 476 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 477 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 478 | }, 479 | "fresh": { 480 | "version": "0.5.2", 481 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 482 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 483 | }, 484 | "http-errors": { 485 | "version": "1.7.2", 486 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 487 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 488 | "requires": { 489 | "depd": "~1.1.2", 490 | "inherits": "2.0.3", 491 | "setprototypeof": "1.1.1", 492 | "statuses": ">= 1.5.0 < 2", 493 | "toidentifier": "1.0.0" 494 | } 495 | }, 496 | "iconv-lite": { 497 | "version": "0.4.24", 498 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 499 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 500 | "requires": { 501 | "safer-buffer": ">= 2.1.2 < 3" 502 | } 503 | }, 504 | "inherits": { 505 | "version": "2.0.3", 506 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 507 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 508 | }, 509 | "ipaddr.js": { 510 | "version": "1.9.0", 511 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", 512 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" 513 | }, 514 | "media-typer": { 515 | "version": "0.3.0", 516 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 517 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 518 | }, 519 | "merge-descriptors": { 520 | "version": "1.0.1", 521 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 522 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 523 | }, 524 | "methods": { 525 | "version": "1.1.2", 526 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 527 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 528 | }, 529 | "mime": { 530 | "version": "1.6.0", 531 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 532 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 533 | }, 534 | "mime-db": { 535 | "version": "1.40.0", 536 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 537 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 538 | }, 539 | "mime-types": { 540 | "version": "2.1.24", 541 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 542 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 543 | "requires": { 544 | "mime-db": "1.40.0" 545 | } 546 | }, 547 | "ms": { 548 | "version": "2.0.0", 549 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 550 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 551 | }, 552 | "negotiator": { 553 | "version": "0.6.2", 554 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 555 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 556 | }, 557 | "on-finished": { 558 | "version": "2.3.0", 559 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 560 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 561 | "requires": { 562 | "ee-first": "1.1.1" 563 | } 564 | }, 565 | "parseurl": { 566 | "version": "1.3.3", 567 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 568 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 569 | }, 570 | "path-to-regexp": { 571 | "version": "0.1.7", 572 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 573 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 574 | }, 575 | "proxy-addr": { 576 | "version": "2.0.5", 577 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", 578 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", 579 | "requires": { 580 | "forwarded": "~0.1.2", 581 | "ipaddr.js": "1.9.0" 582 | } 583 | }, 584 | "qs": { 585 | "version": "6.7.0", 586 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 587 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 588 | }, 589 | "range-parser": { 590 | "version": "1.2.1", 591 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 592 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 593 | }, 594 | "raw-body": { 595 | "version": "2.4.0", 596 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 597 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 598 | "requires": { 599 | "bytes": "3.1.0", 600 | "http-errors": "1.7.2", 601 | "iconv-lite": "0.4.24", 602 | "unpipe": "1.0.0" 603 | } 604 | }, 605 | "safe-buffer": { 606 | "version": "5.1.2", 607 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 608 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 609 | }, 610 | "safer-buffer": { 611 | "version": "2.1.2", 612 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 613 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 614 | }, 615 | "send": { 616 | "version": "0.17.1", 617 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 618 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 619 | "requires": { 620 | "debug": "2.6.9", 621 | "depd": "~1.1.2", 622 | "destroy": "~1.0.4", 623 | "encodeurl": "~1.0.2", 624 | "escape-html": "~1.0.3", 625 | "etag": "~1.8.1", 626 | "fresh": "0.5.2", 627 | "http-errors": "~1.7.2", 628 | "mime": "1.6.0", 629 | "ms": "2.1.1", 630 | "on-finished": "~2.3.0", 631 | "range-parser": "~1.2.1", 632 | "statuses": "~1.5.0" 633 | }, 634 | "dependencies": { 635 | "ms": { 636 | "version": "2.1.1", 637 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 638 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 639 | } 640 | } 641 | }, 642 | "serve-static": { 643 | "version": "1.14.1", 644 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 645 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 646 | "requires": { 647 | "encodeurl": "~1.0.2", 648 | "escape-html": "~1.0.3", 649 | "parseurl": "~1.3.3", 650 | "send": "0.17.1" 651 | } 652 | }, 653 | "setprototypeof": { 654 | "version": "1.1.1", 655 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 656 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 657 | }, 658 | "statuses": { 659 | "version": "1.5.0", 660 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 661 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 662 | }, 663 | "toidentifier": { 664 | "version": "1.0.0", 665 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 666 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 667 | }, 668 | "type-is": { 669 | "version": "1.6.18", 670 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 671 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 672 | "requires": { 673 | "media-typer": "0.3.0", 674 | "mime-types": "~2.1.24" 675 | } 676 | }, 677 | "unpipe": { 678 | "version": "1.0.0", 679 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 680 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 681 | }, 682 | "utils-merge": { 683 | "version": "1.0.1", 684 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 685 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 686 | }, 687 | "vary": { 688 | "version": "1.1.2", 689 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 690 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 691 | } 692 | } 693 | }, 694 | "external-editor": { 695 | "version": "3.1.0", 696 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 697 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 698 | "requires": { 699 | "chardet": "^0.7.0", 700 | "iconv-lite": "^0.4.24", 701 | "tmp": "^0.0.33" 702 | } 703 | }, 704 | "fast-deep-equal": { 705 | "version": "3.1.3", 706 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 707 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 708 | }, 709 | "fast-json-stable-stringify": { 710 | "version": "2.1.0", 711 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 712 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 713 | }, 714 | "fast-levenshtein": { 715 | "version": "2.0.6", 716 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 717 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" 718 | }, 719 | "figures": { 720 | "version": "3.2.0", 721 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 722 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 723 | "requires": { 724 | "escape-string-regexp": "^1.0.5" 725 | } 726 | }, 727 | "file-entry-cache": { 728 | "version": "5.0.1", 729 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 730 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 731 | "requires": { 732 | "flat-cache": "^2.0.1" 733 | } 734 | }, 735 | "flat-cache": { 736 | "version": "2.0.1", 737 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 738 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 739 | "requires": { 740 | "flatted": "^2.0.0", 741 | "rimraf": "2.6.3", 742 | "write": "1.0.3" 743 | } 744 | }, 745 | "flatted": { 746 | "version": "2.0.2", 747 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 748 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" 749 | }, 750 | "fs.realpath": { 751 | "version": "1.0.0", 752 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 753 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 754 | }, 755 | "functional-red-black-tree": { 756 | "version": "1.0.1", 757 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 758 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" 759 | }, 760 | "glob": { 761 | "version": "7.1.6", 762 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 763 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 764 | "requires": { 765 | "fs.realpath": "^1.0.0", 766 | "inflight": "^1.0.4", 767 | "inherits": "2", 768 | "minimatch": "^3.0.4", 769 | "once": "^1.3.0", 770 | "path-is-absolute": "^1.0.0" 771 | } 772 | }, 773 | "glob-parent": { 774 | "version": "5.1.2", 775 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 776 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 777 | "requires": { 778 | "is-glob": "^4.0.1" 779 | } 780 | }, 781 | "globals": { 782 | "version": "12.4.0", 783 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 784 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 785 | "requires": { 786 | "type-fest": "^0.8.1" 787 | } 788 | }, 789 | "has-flag": { 790 | "version": "3.0.0", 791 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 792 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 793 | }, 794 | "iconv-lite": { 795 | "version": "0.4.24", 796 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 797 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 798 | "requires": { 799 | "safer-buffer": ">= 2.1.2 < 3" 800 | } 801 | }, 802 | "ignore": { 803 | "version": "4.0.6", 804 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 805 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" 806 | }, 807 | "import-fresh": { 808 | "version": "3.2.1", 809 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 810 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 811 | "requires": { 812 | "parent-module": "^1.0.0", 813 | "resolve-from": "^4.0.0" 814 | } 815 | }, 816 | "imurmurhash": { 817 | "version": "0.1.4", 818 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 819 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" 820 | }, 821 | "inflight": { 822 | "version": "1.0.6", 823 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 824 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 825 | "requires": { 826 | "once": "^1.3.0", 827 | "wrappy": "1" 828 | } 829 | }, 830 | "inherits": { 831 | "version": "2.0.4", 832 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 833 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 834 | }, 835 | "inquirer": { 836 | "version": "7.3.3", 837 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", 838 | "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", 839 | "requires": { 840 | "ansi-escapes": "^4.2.1", 841 | "chalk": "^4.1.0", 842 | "cli-cursor": "^3.1.0", 843 | "cli-width": "^3.0.0", 844 | "external-editor": "^3.0.3", 845 | "figures": "^3.0.0", 846 | "lodash": "^4.17.19", 847 | "mute-stream": "0.0.8", 848 | "run-async": "^2.4.0", 849 | "rxjs": "^6.6.0", 850 | "string-width": "^4.1.0", 851 | "strip-ansi": "^6.0.0", 852 | "through": "^2.3.6" 853 | }, 854 | "dependencies": { 855 | "ansi-styles": { 856 | "version": "4.2.1", 857 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 858 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 859 | "requires": { 860 | "@types/color-name": "^1.1.1", 861 | "color-convert": "^2.0.1" 862 | } 863 | }, 864 | "chalk": { 865 | "version": "4.1.0", 866 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 867 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 868 | "requires": { 869 | "ansi-styles": "^4.1.0", 870 | "supports-color": "^7.1.0" 871 | } 872 | }, 873 | "color-convert": { 874 | "version": "2.0.1", 875 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 876 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 877 | "requires": { 878 | "color-name": "~1.1.4" 879 | } 880 | }, 881 | "color-name": { 882 | "version": "1.1.4", 883 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 884 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 885 | }, 886 | "has-flag": { 887 | "version": "4.0.0", 888 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 889 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 890 | }, 891 | "strip-ansi": { 892 | "version": "6.0.0", 893 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 894 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 895 | "requires": { 896 | "ansi-regex": "^5.0.0" 897 | } 898 | }, 899 | "supports-color": { 900 | "version": "7.1.0", 901 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 902 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 903 | "requires": { 904 | "has-flag": "^4.0.0" 905 | } 906 | } 907 | } 908 | }, 909 | "is-extglob": { 910 | "version": "2.1.1", 911 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 912 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 913 | }, 914 | "is-fullwidth-code-point": { 915 | "version": "3.0.0", 916 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 917 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 918 | }, 919 | "is-glob": { 920 | "version": "4.0.1", 921 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 922 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 923 | "requires": { 924 | "is-extglob": "^2.1.1" 925 | } 926 | }, 927 | "isexe": { 928 | "version": "2.0.0", 929 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 930 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 931 | }, 932 | "js-tokens": { 933 | "version": "4.0.0", 934 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 935 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 936 | }, 937 | "js-yaml": { 938 | "version": "3.14.0", 939 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 940 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 941 | "requires": { 942 | "argparse": "^1.0.7", 943 | "esprima": "^4.0.0" 944 | } 945 | }, 946 | "json-schema-traverse": { 947 | "version": "0.4.1", 948 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 949 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 950 | }, 951 | "json-stable-stringify-without-jsonify": { 952 | "version": "1.0.1", 953 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 954 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" 955 | }, 956 | "levn": { 957 | "version": "0.3.0", 958 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 959 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 960 | "requires": { 961 | "prelude-ls": "~1.1.2", 962 | "type-check": "~0.3.2" 963 | } 964 | }, 965 | "lodash": { 966 | "version": "4.17.21", 967 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 968 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 969 | }, 970 | "mimic-fn": { 971 | "version": "2.1.0", 972 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 973 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 974 | }, 975 | "minimatch": { 976 | "version": "3.0.4", 977 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 978 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 979 | "requires": { 980 | "brace-expansion": "^1.1.7" 981 | } 982 | }, 983 | "minimist": { 984 | "version": "1.2.6", 985 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 986 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 987 | }, 988 | "mkdirp": { 989 | "version": "0.5.5", 990 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 991 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 992 | "requires": { 993 | "minimist": "^1.2.5" 994 | } 995 | }, 996 | "ms": { 997 | "version": "2.1.2", 998 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 999 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1000 | }, 1001 | "mute-stream": { 1002 | "version": "0.0.8", 1003 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1004 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" 1005 | }, 1006 | "natural-compare": { 1007 | "version": "1.4.0", 1008 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1009 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" 1010 | }, 1011 | "nice-try": { 1012 | "version": "1.0.5", 1013 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1014 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" 1015 | }, 1016 | "once": { 1017 | "version": "1.4.0", 1018 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1019 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1020 | "requires": { 1021 | "wrappy": "1" 1022 | } 1023 | }, 1024 | "onetime": { 1025 | "version": "5.1.0", 1026 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 1027 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 1028 | "requires": { 1029 | "mimic-fn": "^2.1.0" 1030 | } 1031 | }, 1032 | "optionator": { 1033 | "version": "0.8.3", 1034 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1035 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1036 | "requires": { 1037 | "deep-is": "~0.1.3", 1038 | "fast-levenshtein": "~2.0.6", 1039 | "levn": "~0.3.0", 1040 | "prelude-ls": "~1.1.2", 1041 | "type-check": "~0.3.2", 1042 | "word-wrap": "~1.2.3" 1043 | } 1044 | }, 1045 | "os-tmpdir": { 1046 | "version": "1.0.2", 1047 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1048 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1049 | }, 1050 | "parent-module": { 1051 | "version": "1.0.1", 1052 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1053 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1054 | "requires": { 1055 | "callsites": "^3.0.0" 1056 | } 1057 | }, 1058 | "path-is-absolute": { 1059 | "version": "1.0.1", 1060 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1061 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1062 | }, 1063 | "path-key": { 1064 | "version": "2.0.1", 1065 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1066 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 1067 | }, 1068 | "prelude-ls": { 1069 | "version": "1.1.2", 1070 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1071 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" 1072 | }, 1073 | "progress": { 1074 | "version": "2.0.3", 1075 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1076 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" 1077 | }, 1078 | "punycode": { 1079 | "version": "2.1.1", 1080 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1081 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1082 | }, 1083 | "regexpp": { 1084 | "version": "2.0.1", 1085 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 1086 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" 1087 | }, 1088 | "resolve-from": { 1089 | "version": "4.0.0", 1090 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1091 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" 1092 | }, 1093 | "restore-cursor": { 1094 | "version": "3.1.0", 1095 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1096 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1097 | "requires": { 1098 | "onetime": "^5.1.0", 1099 | "signal-exit": "^3.0.2" 1100 | } 1101 | }, 1102 | "rimraf": { 1103 | "version": "2.6.3", 1104 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1105 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1106 | "requires": { 1107 | "glob": "^7.1.3" 1108 | } 1109 | }, 1110 | "run-async": { 1111 | "version": "2.4.1", 1112 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 1113 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" 1114 | }, 1115 | "rxjs": { 1116 | "version": "6.6.0", 1117 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz", 1118 | "integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==", 1119 | "requires": { 1120 | "tslib": "^1.9.0" 1121 | } 1122 | }, 1123 | "safer-buffer": { 1124 | "version": "2.1.2", 1125 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1126 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1127 | }, 1128 | "semver": { 1129 | "version": "6.3.0", 1130 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1131 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 1132 | }, 1133 | "shebang-command": { 1134 | "version": "1.2.0", 1135 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1136 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1137 | "requires": { 1138 | "shebang-regex": "^1.0.0" 1139 | } 1140 | }, 1141 | "shebang-regex": { 1142 | "version": "1.0.0", 1143 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1144 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 1145 | }, 1146 | "signal-exit": { 1147 | "version": "3.0.3", 1148 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 1149 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 1150 | }, 1151 | "slice-ansi": { 1152 | "version": "2.1.0", 1153 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 1154 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 1155 | "requires": { 1156 | "ansi-styles": "^3.2.0", 1157 | "astral-regex": "^1.0.0", 1158 | "is-fullwidth-code-point": "^2.0.0" 1159 | }, 1160 | "dependencies": { 1161 | "is-fullwidth-code-point": { 1162 | "version": "2.0.0", 1163 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1164 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 1165 | } 1166 | } 1167 | }, 1168 | "sprintf-js": { 1169 | "version": "1.0.3", 1170 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1171 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 1172 | }, 1173 | "string-width": { 1174 | "version": "4.2.0", 1175 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1176 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1177 | "requires": { 1178 | "emoji-regex": "^8.0.0", 1179 | "is-fullwidth-code-point": "^3.0.0", 1180 | "strip-ansi": "^6.0.0" 1181 | }, 1182 | "dependencies": { 1183 | "strip-ansi": { 1184 | "version": "6.0.0", 1185 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1186 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1187 | "requires": { 1188 | "ansi-regex": "^5.0.0" 1189 | } 1190 | } 1191 | } 1192 | }, 1193 | "strip-ansi": { 1194 | "version": "5.2.0", 1195 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1196 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1197 | "requires": { 1198 | "ansi-regex": "^4.1.0" 1199 | }, 1200 | "dependencies": { 1201 | "ansi-regex": { 1202 | "version": "4.1.1", 1203 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 1204 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" 1205 | } 1206 | } 1207 | }, 1208 | "strip-json-comments": { 1209 | "version": "3.1.1", 1210 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1211 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" 1212 | }, 1213 | "supports-color": { 1214 | "version": "5.5.0", 1215 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1216 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1217 | "requires": { 1218 | "has-flag": "^3.0.0" 1219 | } 1220 | }, 1221 | "table": { 1222 | "version": "5.4.6", 1223 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 1224 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 1225 | "requires": { 1226 | "ajv": "^6.10.2", 1227 | "lodash": "^4.17.14", 1228 | "slice-ansi": "^2.1.0", 1229 | "string-width": "^3.0.0" 1230 | }, 1231 | "dependencies": { 1232 | "emoji-regex": { 1233 | "version": "7.0.3", 1234 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 1235 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" 1236 | }, 1237 | "is-fullwidth-code-point": { 1238 | "version": "2.0.0", 1239 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1240 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 1241 | }, 1242 | "string-width": { 1243 | "version": "3.1.0", 1244 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1245 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1246 | "requires": { 1247 | "emoji-regex": "^7.0.1", 1248 | "is-fullwidth-code-point": "^2.0.0", 1249 | "strip-ansi": "^5.1.0" 1250 | } 1251 | } 1252 | } 1253 | }, 1254 | "text-table": { 1255 | "version": "0.2.0", 1256 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1257 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" 1258 | }, 1259 | "through": { 1260 | "version": "2.3.8", 1261 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1262 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1263 | }, 1264 | "tmp": { 1265 | "version": "0.0.33", 1266 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1267 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1268 | "requires": { 1269 | "os-tmpdir": "~1.0.2" 1270 | } 1271 | }, 1272 | "tslib": { 1273 | "version": "1.13.0", 1274 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 1275 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" 1276 | }, 1277 | "type-check": { 1278 | "version": "0.3.2", 1279 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1280 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1281 | "requires": { 1282 | "prelude-ls": "~1.1.2" 1283 | } 1284 | }, 1285 | "type-fest": { 1286 | "version": "0.8.1", 1287 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1288 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" 1289 | }, 1290 | "uri-js": { 1291 | "version": "4.2.2", 1292 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1293 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1294 | "requires": { 1295 | "punycode": "^2.1.0" 1296 | } 1297 | }, 1298 | "v8-compile-cache": { 1299 | "version": "2.1.1", 1300 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", 1301 | "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" 1302 | }, 1303 | "which": { 1304 | "version": "1.3.1", 1305 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1306 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1307 | "requires": { 1308 | "isexe": "^2.0.0" 1309 | } 1310 | }, 1311 | "word-wrap": { 1312 | "version": "1.2.3", 1313 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1314 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" 1315 | }, 1316 | "wrappy": { 1317 | "version": "1.0.2", 1318 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1319 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1320 | }, 1321 | "write": { 1322 | "version": "1.0.3", 1323 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 1324 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 1325 | "requires": { 1326 | "mkdirp": "^0.5.1" 1327 | } 1328 | } 1329 | } 1330 | } 1331 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "yemot-router", 3 | "version": "4.4.0", 4 | "description": "", 5 | "main": "index.js", 6 | "dependencies": { 7 | "eslint": "^6.8.0", 8 | "express": "^4.17.1" 9 | }, 10 | "devDependencies": {}, 11 | "scripts": { 12 | "test": "mocha" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/MusiCode1/yemot-router.git" 17 | }, 18 | "author": "musicode1", 19 | "license": "ISC", 20 | "keywords": [ 21 | "extends express-router", 22 | "yemot", 23 | "yemot-api" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | const assert = require("assert"); 2 | 3 | describe("testeing in yemot-router", () => { 4 | 5 | describe("testing response_functions", () => { 6 | 7 | const response_functions = new (require("../lib/response_functions")); 8 | 9 | describe("testeing make_read_response function", () => { 10 | 11 | const make_read_response = response_functions.make_read_response; 12 | 13 | let massage = []; 14 | let options = {}; 15 | let r = ""; 16 | 17 | it("", () => { 18 | 19 | massage = [{ type: "text", data: "hay, is text!" }]; 20 | 21 | r = make_read_response(massage, "tap", options); 22 | 23 | assert.equal(r[0], "read=t-hay, is text!=,val_1,no,*,1,7,Number,false,true,,,,"); 24 | assert.equal(r[1], "val_1"); 25 | }); 26 | 27 | }); 28 | }); 29 | 30 | }); --------------------------------------------------------------------------------