├── .gitignore ├── README.md ├── app.js ├── package-lock.json ├── package.json └── test └── completions.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # Snowpack dependency directory (https://snowpack.dev/) 45 | web_modules/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | .parcel-cache 78 | 79 | # Next.js build output 80 | .next 81 | out 82 | 83 | # Nuxt.js build / generate output 84 | .nuxt 85 | dist 86 | 87 | # Gatsby files 88 | .cache/ 89 | # Comment in the public line in if your project uses Gatsby and not Next.js 90 | # https://nextjs.org/blog/next-9-1#public-directory-support 91 | # public 92 | 93 | # vuepress build output 94 | .vuepress/dist 95 | 96 | # Serverless directories 97 | .serverless/ 98 | 99 | # FuseBox cache 100 | .fusebox/ 101 | 102 | # DynamoDB Local files 103 | .dynamodb/ 104 | 105 | # TernJS port file 106 | .tern-port 107 | 108 | # Stores VSCode versions used for testing VSCode extensions 109 | .vscode-test 110 | 111 | # yarn v2 112 | .yarn/cache 113 | .yarn/unplugged 114 | .yarn/build-state.yml 115 | .yarn/install-state.gz 116 | .pnp.* 117 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ATTENTION This package is deprecated. Use the official [OpenAI node library](https://github.com/openai/openai-node) 2 | 3 | # OpenAI API Node 4 | 5 | A simple node wrapper for the OpenAI API. 6 | 7 | ## Disclaimer 8 | 9 | The API itself and this package are meant for development and research use only. Don't use this in production. 10 | 11 | If you don't have an API key, you need to request it at [openai.com](https://beta.openai.com/) 12 | 13 | ## Install 14 | 15 | $ npm install openai-api-node 16 | 17 | ## Usage 18 | 19 | Quick start with a new completion: 20 | 21 | ```javascript 22 | const OpenAIAPI = require('../lib/openaiapi'); 23 | 24 | // Load your key from an environment variable or secret management service 25 | // (do not include your key directly in your code) 26 | const OPENAI_API_KEY = process.env.OPENAI_API_KEY 27 | 28 | const openai = new OpenAIAPI(OPENAI_API_KEY) 29 | 30 | openai.CompletionsCreate("your starting prompt") 31 | .then(function(data) { 32 | //Do something with the data. 33 | }) 34 | .catch(function(err) { 35 | //The API returned an error 36 | }) 37 | ``` 38 | 39 | You will get an object similar to the following: 40 | 41 | ```javascript 42 | { 43 | id: 'cmpl-yyyyyyyyyyy', 44 | object: 'text_completion', 45 | created: 1596217113, 46 | model: 'davinci:2020-05-03', 47 | choices: [ 48 | { 49 | text: '” problem for me', 50 | index: 0, 51 | logprobs: null, 52 | finish_reason: 'length' 53 | } 54 | ] 55 | } 56 | ``` 57 | 58 | ### Init 59 | 60 | You will need an API key to initialize the object. You can also pass the following parameters: 61 | 62 | ```javascript 63 | // Load your key from an environment variable or secret management service 64 | // (do not include your key directly in your code) 65 | const OPENAI_API_KEY = process.env.OPENAI_API_KEY 66 | 67 | const openai = new OpenAIAPI(OPENAI_API_KEY, apiBase = "api.openai.com", version = "v1") 68 | ``` 69 | 70 | ### CompletionsCreate 71 | 72 | CompletionsCreate accepts the following parameters. Only the first parameter is required: 73 | 74 | ```javascript 75 | CompletionsCreate(prompt, max_tokens=5, engine="davinci", options={}) 76 | ``` 77 | 78 | You can also pass additional options as an object 79 | 80 | ## Contribute 81 | 82 | Make a pull request :) 83 | 84 | ## Test 85 | 86 | We are using mocha to run a basic test. To pass the test, you need to put your api key in `test/completions.js` 87 | 88 | ## License 89 | 90 | [The MIT License](http://opensource.org/licenses/MIT) 91 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var http = require('https') 2 | class OpenAiAPI { 3 | 4 | constructor(personalKey, apiBase = 'api.openai.com', version = "v1") { 5 | this.__personalKey = personalKey; 6 | this.__apiBase = apiBase; 7 | this.__version = version; 8 | this.__httpOptions = { 9 | hostname: apiBase, 10 | port: 443, 11 | method: 'POST', 12 | headers: { 13 | 'Content-Type': 'application/json', 14 | 'Authorization': 'Bearer ' + personalKey 15 | } 16 | }; 17 | } 18 | CompletionsCreate(prompt, max_tokens=5, engine="davinci", moreOptions) { 19 | var self = this; 20 | var promise = new Promise(function(done, error) { 21 | var otherOptions = {path: "/"+self.__version+"/engines/"+engine+"/completions"} 22 | var options = {...otherOptions, ...self.__httpOptions } 23 | const defaultPostData = { 24 | 'prompt': prompt, 25 | 'max_tokens': max_tokens 26 | } 27 | var postData = JSON.stringify({...moreOptions, ...defaultPostData}) 28 | var responseData = ""; 29 | const req = http.request(options, (res) => { 30 | res.setEncoding('utf8'); 31 | res.on('data', (chunk) => { 32 | responseData += chunk 33 | }); 34 | res.on('end', () => { 35 | done(JSON.parse(responseData)) 36 | }); 37 | }); 38 | req.on('error', (e) => { 39 | error(e) 40 | }); 41 | req.write(postData); 42 | req.end(); 43 | }) 44 | return promise; 45 | } 46 | 47 | } 48 | module.exports = OpenAiAPI -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "openai-api-node", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@ungap/promise-all-settled": { 8 | "version": "1.1.2", 9 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 10 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 11 | "dev": true 12 | }, 13 | "ansi-colors": { 14 | "version": "4.1.1", 15 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 16 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 17 | "dev": true 18 | }, 19 | "ansi-regex": { 20 | "version": "3.0.1", 21 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", 22 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", 23 | "dev": true 24 | }, 25 | "ansi-styles": { 26 | "version": "4.3.0", 27 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 28 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 29 | "dev": true, 30 | "requires": { 31 | "color-convert": "^2.0.1" 32 | } 33 | }, 34 | "anymatch": { 35 | "version": "3.1.3", 36 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 37 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 38 | "dev": true, 39 | "requires": { 40 | "normalize-path": "^3.0.0", 41 | "picomatch": "^2.0.4" 42 | } 43 | }, 44 | "argparse": { 45 | "version": "2.0.1", 46 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 47 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 48 | "dev": true 49 | }, 50 | "balanced-match": { 51 | "version": "1.0.2", 52 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 53 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 54 | "dev": true 55 | }, 56 | "binary-extensions": { 57 | "version": "2.2.0", 58 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 59 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 60 | "dev": true 61 | }, 62 | "brace-expansion": { 63 | "version": "1.1.11", 64 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 65 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 66 | "dev": true, 67 | "requires": { 68 | "balanced-match": "^1.0.0", 69 | "concat-map": "0.0.1" 70 | } 71 | }, 72 | "braces": { 73 | "version": "3.0.2", 74 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 75 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 76 | "dev": true, 77 | "requires": { 78 | "fill-range": "^7.0.1" 79 | } 80 | }, 81 | "browser-stdout": { 82 | "version": "1.3.1", 83 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 84 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 85 | "dev": true 86 | }, 87 | "camelcase": { 88 | "version": "6.3.0", 89 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 90 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 91 | "dev": true 92 | }, 93 | "chalk": { 94 | "version": "4.1.2", 95 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 96 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 97 | "dev": true, 98 | "requires": { 99 | "ansi-styles": "^4.1.0", 100 | "supports-color": "^7.1.0" 101 | }, 102 | "dependencies": { 103 | "supports-color": { 104 | "version": "7.2.0", 105 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 106 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 107 | "dev": true, 108 | "requires": { 109 | "has-flag": "^4.0.0" 110 | } 111 | } 112 | } 113 | }, 114 | "chokidar": { 115 | "version": "3.5.1", 116 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", 117 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", 118 | "dev": true, 119 | "requires": { 120 | "anymatch": "~3.1.1", 121 | "braces": "~3.0.2", 122 | "fsevents": "~2.3.1", 123 | "glob-parent": "~5.1.0", 124 | "is-binary-path": "~2.1.0", 125 | "is-glob": "~4.0.1", 126 | "normalize-path": "~3.0.0", 127 | "readdirp": "~3.5.0" 128 | } 129 | }, 130 | "cliui": { 131 | "version": "7.0.4", 132 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 133 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 134 | "dev": true, 135 | "requires": { 136 | "string-width": "^4.2.0", 137 | "strip-ansi": "^6.0.0", 138 | "wrap-ansi": "^7.0.0" 139 | }, 140 | "dependencies": { 141 | "ansi-regex": { 142 | "version": "5.0.1", 143 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 144 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 145 | "dev": true 146 | }, 147 | "is-fullwidth-code-point": { 148 | "version": "3.0.0", 149 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 150 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 151 | "dev": true 152 | }, 153 | "string-width": { 154 | "version": "4.2.3", 155 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 156 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 157 | "dev": true, 158 | "requires": { 159 | "emoji-regex": "^8.0.0", 160 | "is-fullwidth-code-point": "^3.0.0", 161 | "strip-ansi": "^6.0.1" 162 | } 163 | }, 164 | "strip-ansi": { 165 | "version": "6.0.1", 166 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 167 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 168 | "dev": true, 169 | "requires": { 170 | "ansi-regex": "^5.0.1" 171 | } 172 | } 173 | } 174 | }, 175 | "color-convert": { 176 | "version": "2.0.1", 177 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 178 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 179 | "dev": true, 180 | "requires": { 181 | "color-name": "~1.1.4" 182 | } 183 | }, 184 | "color-name": { 185 | "version": "1.1.4", 186 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 187 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 188 | "dev": true 189 | }, 190 | "concat-map": { 191 | "version": "0.0.1", 192 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 193 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 194 | "dev": true 195 | }, 196 | "debug": { 197 | "version": "4.3.1", 198 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 199 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 200 | "dev": true, 201 | "requires": { 202 | "ms": "2.1.2" 203 | }, 204 | "dependencies": { 205 | "ms": { 206 | "version": "2.1.2", 207 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 208 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 209 | "dev": true 210 | } 211 | } 212 | }, 213 | "decamelize": { 214 | "version": "4.0.0", 215 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 216 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 217 | "dev": true 218 | }, 219 | "diff": { 220 | "version": "5.0.0", 221 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 222 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 223 | "dev": true 224 | }, 225 | "emoji-regex": { 226 | "version": "8.0.0", 227 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 228 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 229 | "dev": true 230 | }, 231 | "escalade": { 232 | "version": "3.1.1", 233 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 234 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 235 | "dev": true 236 | }, 237 | "escape-string-regexp": { 238 | "version": "4.0.0", 239 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 240 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 241 | "dev": true 242 | }, 243 | "fill-range": { 244 | "version": "7.0.1", 245 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 246 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 247 | "dev": true, 248 | "requires": { 249 | "to-regex-range": "^5.0.1" 250 | } 251 | }, 252 | "find-up": { 253 | "version": "5.0.0", 254 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 255 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 256 | "dev": true, 257 | "requires": { 258 | "locate-path": "^6.0.0", 259 | "path-exists": "^4.0.0" 260 | } 261 | }, 262 | "flat": { 263 | "version": "5.0.2", 264 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 265 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 266 | "dev": true 267 | }, 268 | "fs.realpath": { 269 | "version": "1.0.0", 270 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 271 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 272 | "dev": true 273 | }, 274 | "fsevents": { 275 | "version": "2.3.2", 276 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 277 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 278 | "dev": true, 279 | "optional": true 280 | }, 281 | "get-caller-file": { 282 | "version": "2.0.5", 283 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 284 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 285 | "dev": true 286 | }, 287 | "glob": { 288 | "version": "7.1.6", 289 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 290 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 291 | "dev": true, 292 | "requires": { 293 | "fs.realpath": "^1.0.0", 294 | "inflight": "^1.0.4", 295 | "inherits": "2", 296 | "minimatch": "^3.0.4", 297 | "once": "^1.3.0", 298 | "path-is-absolute": "^1.0.0" 299 | } 300 | }, 301 | "glob-parent": { 302 | "version": "5.1.2", 303 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 304 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 305 | "dev": true, 306 | "requires": { 307 | "is-glob": "^4.0.1" 308 | } 309 | }, 310 | "growl": { 311 | "version": "1.10.5", 312 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 313 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 314 | "dev": true 315 | }, 316 | "has-flag": { 317 | "version": "4.0.0", 318 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 319 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 320 | "dev": true 321 | }, 322 | "he": { 323 | "version": "1.2.0", 324 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 325 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 326 | "dev": true 327 | }, 328 | "inflight": { 329 | "version": "1.0.6", 330 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 331 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 332 | "dev": true, 333 | "requires": { 334 | "once": "^1.3.0", 335 | "wrappy": "1" 336 | } 337 | }, 338 | "inherits": { 339 | "version": "2.0.4", 340 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 341 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 342 | "dev": true 343 | }, 344 | "is-binary-path": { 345 | "version": "2.1.0", 346 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 347 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 348 | "dev": true, 349 | "requires": { 350 | "binary-extensions": "^2.0.0" 351 | } 352 | }, 353 | "is-extglob": { 354 | "version": "2.1.1", 355 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 356 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 357 | "dev": true 358 | }, 359 | "is-fullwidth-code-point": { 360 | "version": "2.0.0", 361 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 362 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", 363 | "dev": true 364 | }, 365 | "is-glob": { 366 | "version": "4.0.3", 367 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 368 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 369 | "dev": true, 370 | "requires": { 371 | "is-extglob": "^2.1.1" 372 | } 373 | }, 374 | "is-number": { 375 | "version": "7.0.0", 376 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 377 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 378 | "dev": true 379 | }, 380 | "is-plain-obj": { 381 | "version": "2.1.0", 382 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 383 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 384 | "dev": true 385 | }, 386 | "isexe": { 387 | "version": "2.0.0", 388 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 389 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 390 | "dev": true 391 | }, 392 | "js-yaml": { 393 | "version": "4.0.0", 394 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", 395 | "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", 396 | "dev": true, 397 | "requires": { 398 | "argparse": "^2.0.1" 399 | } 400 | }, 401 | "locate-path": { 402 | "version": "6.0.0", 403 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 404 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 405 | "dev": true, 406 | "requires": { 407 | "p-locate": "^5.0.0" 408 | } 409 | }, 410 | "log-symbols": { 411 | "version": "4.0.0", 412 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", 413 | "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", 414 | "dev": true, 415 | "requires": { 416 | "chalk": "^4.0.0" 417 | } 418 | }, 419 | "minimatch": { 420 | "version": "3.0.4", 421 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 422 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 423 | "dev": true, 424 | "requires": { 425 | "brace-expansion": "^1.1.7" 426 | } 427 | }, 428 | "mocha": { 429 | "version": "8.4.0", 430 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", 431 | "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", 432 | "dev": true, 433 | "requires": { 434 | "@ungap/promise-all-settled": "1.1.2", 435 | "ansi-colors": "4.1.1", 436 | "browser-stdout": "1.3.1", 437 | "chokidar": "3.5.1", 438 | "debug": "4.3.1", 439 | "diff": "5.0.0", 440 | "escape-string-regexp": "4.0.0", 441 | "find-up": "5.0.0", 442 | "glob": "7.1.6", 443 | "growl": "1.10.5", 444 | "he": "1.2.0", 445 | "js-yaml": "4.0.0", 446 | "log-symbols": "4.0.0", 447 | "minimatch": "3.0.4", 448 | "ms": "2.1.3", 449 | "nanoid": "3.1.20", 450 | "serialize-javascript": "5.0.1", 451 | "strip-json-comments": "3.1.1", 452 | "supports-color": "8.1.1", 453 | "which": "2.0.2", 454 | "wide-align": "1.1.3", 455 | "workerpool": "6.1.0", 456 | "yargs": "16.2.0", 457 | "yargs-parser": "20.2.4", 458 | "yargs-unparser": "2.0.0" 459 | } 460 | }, 461 | "ms": { 462 | "version": "2.1.3", 463 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 464 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 465 | "dev": true 466 | }, 467 | "nanoid": { 468 | "version": "3.1.20", 469 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", 470 | "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", 471 | "dev": true 472 | }, 473 | "normalize-path": { 474 | "version": "3.0.0", 475 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 476 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 477 | "dev": true 478 | }, 479 | "once": { 480 | "version": "1.4.0", 481 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 482 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 483 | "dev": true, 484 | "requires": { 485 | "wrappy": "1" 486 | } 487 | }, 488 | "p-limit": { 489 | "version": "3.1.0", 490 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 491 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 492 | "dev": true, 493 | "requires": { 494 | "yocto-queue": "^0.1.0" 495 | } 496 | }, 497 | "p-locate": { 498 | "version": "5.0.0", 499 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 500 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 501 | "dev": true, 502 | "requires": { 503 | "p-limit": "^3.0.2" 504 | } 505 | }, 506 | "path-exists": { 507 | "version": "4.0.0", 508 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 509 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 510 | "dev": true 511 | }, 512 | "path-is-absolute": { 513 | "version": "1.0.1", 514 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 515 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 516 | "dev": true 517 | }, 518 | "picomatch": { 519 | "version": "2.3.1", 520 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 521 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 522 | "dev": true 523 | }, 524 | "randombytes": { 525 | "version": "2.1.0", 526 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 527 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 528 | "dev": true, 529 | "requires": { 530 | "safe-buffer": "^5.1.0" 531 | } 532 | }, 533 | "readdirp": { 534 | "version": "3.5.0", 535 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 536 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 537 | "dev": true, 538 | "requires": { 539 | "picomatch": "^2.2.1" 540 | } 541 | }, 542 | "require-directory": { 543 | "version": "2.1.1", 544 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 545 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 546 | "dev": true 547 | }, 548 | "safe-buffer": { 549 | "version": "5.2.1", 550 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 551 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 552 | "dev": true 553 | }, 554 | "serialize-javascript": { 555 | "version": "5.0.1", 556 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", 557 | "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", 558 | "dev": true, 559 | "requires": { 560 | "randombytes": "^2.1.0" 561 | } 562 | }, 563 | "string-width": { 564 | "version": "2.1.1", 565 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 566 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 567 | "dev": true, 568 | "requires": { 569 | "is-fullwidth-code-point": "^2.0.0", 570 | "strip-ansi": "^4.0.0" 571 | } 572 | }, 573 | "strip-ansi": { 574 | "version": "4.0.0", 575 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 576 | "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", 577 | "dev": true, 578 | "requires": { 579 | "ansi-regex": "^3.0.0" 580 | } 581 | }, 582 | "strip-json-comments": { 583 | "version": "3.1.1", 584 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 585 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 586 | "dev": true 587 | }, 588 | "supports-color": { 589 | "version": "8.1.1", 590 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 591 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 592 | "dev": true, 593 | "requires": { 594 | "has-flag": "^4.0.0" 595 | } 596 | }, 597 | "to-regex-range": { 598 | "version": "5.0.1", 599 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 600 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 601 | "dev": true, 602 | "requires": { 603 | "is-number": "^7.0.0" 604 | } 605 | }, 606 | "which": { 607 | "version": "2.0.2", 608 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 609 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 610 | "dev": true, 611 | "requires": { 612 | "isexe": "^2.0.0" 613 | } 614 | }, 615 | "wide-align": { 616 | "version": "1.1.3", 617 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 618 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 619 | "dev": true, 620 | "requires": { 621 | "string-width": "^1.0.2 || 2" 622 | } 623 | }, 624 | "workerpool": { 625 | "version": "6.1.0", 626 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", 627 | "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", 628 | "dev": true 629 | }, 630 | "wrap-ansi": { 631 | "version": "7.0.0", 632 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 633 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 634 | "dev": true, 635 | "requires": { 636 | "ansi-styles": "^4.0.0", 637 | "string-width": "^4.1.0", 638 | "strip-ansi": "^6.0.0" 639 | }, 640 | "dependencies": { 641 | "ansi-regex": { 642 | "version": "5.0.1", 643 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 644 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 645 | "dev": true 646 | }, 647 | "is-fullwidth-code-point": { 648 | "version": "3.0.0", 649 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 650 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 651 | "dev": true 652 | }, 653 | "string-width": { 654 | "version": "4.2.3", 655 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 656 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 657 | "dev": true, 658 | "requires": { 659 | "emoji-regex": "^8.0.0", 660 | "is-fullwidth-code-point": "^3.0.0", 661 | "strip-ansi": "^6.0.1" 662 | } 663 | }, 664 | "strip-ansi": { 665 | "version": "6.0.1", 666 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 667 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 668 | "dev": true, 669 | "requires": { 670 | "ansi-regex": "^5.0.1" 671 | } 672 | } 673 | } 674 | }, 675 | "wrappy": { 676 | "version": "1.0.2", 677 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 678 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 679 | "dev": true 680 | }, 681 | "y18n": { 682 | "version": "5.0.8", 683 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 684 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 685 | "dev": true 686 | }, 687 | "yargs": { 688 | "version": "16.2.0", 689 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 690 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 691 | "dev": true, 692 | "requires": { 693 | "cliui": "^7.0.2", 694 | "escalade": "^3.1.1", 695 | "get-caller-file": "^2.0.5", 696 | "require-directory": "^2.1.1", 697 | "string-width": "^4.2.0", 698 | "y18n": "^5.0.5", 699 | "yargs-parser": "^20.2.2" 700 | }, 701 | "dependencies": { 702 | "ansi-regex": { 703 | "version": "5.0.1", 704 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 705 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 706 | "dev": true 707 | }, 708 | "is-fullwidth-code-point": { 709 | "version": "3.0.0", 710 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 711 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 712 | "dev": true 713 | }, 714 | "string-width": { 715 | "version": "4.2.3", 716 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 717 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 718 | "dev": true, 719 | "requires": { 720 | "emoji-regex": "^8.0.0", 721 | "is-fullwidth-code-point": "^3.0.0", 722 | "strip-ansi": "^6.0.1" 723 | } 724 | }, 725 | "strip-ansi": { 726 | "version": "6.0.1", 727 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 728 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 729 | "dev": true, 730 | "requires": { 731 | "ansi-regex": "^5.0.1" 732 | } 733 | } 734 | } 735 | }, 736 | "yargs-parser": { 737 | "version": "20.2.4", 738 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 739 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 740 | "dev": true 741 | }, 742 | "yargs-unparser": { 743 | "version": "2.0.0", 744 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 745 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 746 | "dev": true, 747 | "requires": { 748 | "camelcase": "^6.0.0", 749 | "decamelize": "^4.0.0", 750 | "flat": "^5.0.2", 751 | "is-plain-obj": "^2.1.0" 752 | } 753 | }, 754 | "yocto-queue": { 755 | "version": "0.1.0", 756 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 757 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 758 | "dev": true 759 | } 760 | } 761 | } 762 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "openai-api-node", 3 | "version": "1.0.0", 4 | "description": "A NodeJS client for the OpenAI API", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "mocha" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/erlapso/openai-api-node.git" 12 | }, 13 | "keywords": ["openai", "openaiapi", "gpt-3", "gpt3"], 14 | "author": "Vittorio Banfi ( https://github.com/erlapso )", 15 | "license": "MIT", 16 | "devDependencies": { 17 | "mocha": "^8.1.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/completions.js: -------------------------------------------------------------------------------- 1 | 2 | const OpenAiAPI = require('../lib/openaiapi'); 3 | describe("Completions", function() { 4 | it("should create a new assertion", function(done) { 5 | var o = new OpenAiAPI("YOUR API KEY HERE") 6 | o.CompletionsCreate("hello world") 7 | .then(function(data) { 8 | console.log(data) 9 | done() 10 | }) 11 | .catch(function(err) { 12 | done(err) 13 | }) 14 | }) 15 | }) --------------------------------------------------------------------------------