├── .env ├── .gitignore ├── Pulumi.umbriel.yaml ├── Pulumi.yaml ├── README.md ├── package-lock.json ├── package.json ├── src ├── app │ ├── dynamodb │ │ ├── messages.table.ts │ │ └── pending-recipiens.table.ts │ ├── lambda │ │ ├── create-message.lambda.ts │ │ ├── handlers │ │ │ ├── create-message-handler.ts │ │ │ ├── send-message-handler.ts │ │ │ ├── sendMail.ts │ │ │ └── sliceMessageInBatches.ts │ │ ├── send-message.lambda.ts │ │ ├── sendMail.lambda.ts │ │ └── sliceMessageInBatches.lambda.ts │ ├── s3 │ │ └── mailBucket.s3.ts │ └── sqs │ │ └── sendMailQueue.sqs.ts ├── index.ts └── util │ └── create-lambda-role.ts ├── test └── create-message-payload.json └── tsconfig.json /.env: -------------------------------------------------------------------------------- 1 | DATABASE_URL='mysql://vl8v58s5t0ro:pscale_pw_-SwsSyy_CUre1RZiWSml-vNzVT9MSlSk7ION6LzjoKQ@bagh0960cem7.aws-sa-east-1-1.psdb.cloud/app?sslaccept=strict' 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /node_modules/ 3 | -------------------------------------------------------------------------------- /Pulumi.umbriel.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | aws:region: sa-east-1 3 | -------------------------------------------------------------------------------- /Pulumi.yaml: -------------------------------------------------------------------------------- 1 | name: umbriel-sls 2 | runtime: nodejs 3 | description: A minimal AWS TypeScript Pulumi program 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CLI 2 | 3 | ``` 4 | umbriel auth init 5 | 6 | umbriel message list 7 | umbriel message create --template file.html --to ./list.csv 8 | umbriel message send $MESSAGEID 9 | umbriel message events $MESSAGEID 10 | 11 | umbriel sender list 12 | ``` 13 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pulumi-sls-mail-queue", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "pulumi-sls-mail-queue", 8 | "dependencies": { 9 | "@prisma/client": "^3.14.0", 10 | "@pulumi/aws": "^5.0.0", 11 | "@pulumi/awsx": "^0.40.0", 12 | "@pulumi/pulumi": "^3.0.0" 13 | }, 14 | "devDependencies": { 15 | "@types/aws-lambda": "^8.10.97", 16 | "@types/node": "^14", 17 | "prisma": "^3.14.0" 18 | } 19 | }, 20 | "node_modules/@grpc/grpc-js": { 21 | "version": "1.3.8", 22 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz", 23 | "integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==", 24 | "dependencies": { 25 | "@types/node": ">=12.12.47" 26 | }, 27 | "engines": { 28 | "node": "^8.13.0 || >=10.10.0" 29 | } 30 | }, 31 | "node_modules/@logdna/tail-file": { 32 | "version": "2.2.0", 33 | "resolved": "https://registry.npmjs.org/@logdna/tail-file/-/tail-file-2.2.0.tgz", 34 | "integrity": "sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng==", 35 | "engines": { 36 | "node": ">=10.3.0" 37 | } 38 | }, 39 | "node_modules/@prisma/client": { 40 | "version": "3.14.0", 41 | "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.14.0.tgz", 42 | "integrity": "sha512-atb41UpgTR1MCst0VIbiHTMw8lmXnwUvE1KyUCAkq08+wJyjRE78Due+nSf+7uwqQn+fBFYVmoojtinhlLOSaA==", 43 | "hasInstallScript": true, 44 | "dependencies": { 45 | "@prisma/engines-version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" 46 | }, 47 | "engines": { 48 | "node": ">=12.6" 49 | }, 50 | "peerDependencies": { 51 | "prisma": "*" 52 | }, 53 | "peerDependenciesMeta": { 54 | "prisma": { 55 | "optional": true 56 | } 57 | } 58 | }, 59 | "node_modules/@prisma/engines": { 60 | "version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a", 61 | "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz", 62 | "integrity": "sha512-LwZvI3FY6f43xFjQNRuE10JM5R8vJzFTSmbV9X0Wuhv9kscLkjRlZt0BEoiHmO+2HA3B3xxbMfB5du7ZoSFXGg==", 63 | "devOptional": true, 64 | "hasInstallScript": true 65 | }, 66 | "node_modules/@prisma/engines-version": { 67 | "version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a", 68 | "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz", 69 | "integrity": "sha512-D+yHzq4a2r2Rrd0ZOW/mTZbgDIkUkD8ofKgusEI1xPiZz60Daks+UM7Me2ty5FzH3p/TgyhBpRrfIHx+ha20RQ==" 70 | }, 71 | "node_modules/@protobufjs/aspromise": { 72 | "version": "1.1.2", 73 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 74 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" 75 | }, 76 | "node_modules/@protobufjs/base64": { 77 | "version": "1.1.2", 78 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 79 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 80 | }, 81 | "node_modules/@protobufjs/codegen": { 82 | "version": "2.0.4", 83 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 84 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 85 | }, 86 | "node_modules/@protobufjs/eventemitter": { 87 | "version": "1.1.0", 88 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 89 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" 90 | }, 91 | "node_modules/@protobufjs/fetch": { 92 | "version": "1.1.0", 93 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 94 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 95 | "dependencies": { 96 | "@protobufjs/aspromise": "^1.1.1", 97 | "@protobufjs/inquire": "^1.1.0" 98 | } 99 | }, 100 | "node_modules/@protobufjs/float": { 101 | "version": "1.0.2", 102 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 103 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" 104 | }, 105 | "node_modules/@protobufjs/inquire": { 106 | "version": "1.1.0", 107 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 108 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" 109 | }, 110 | "node_modules/@protobufjs/path": { 111 | "version": "1.1.2", 112 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 113 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" 114 | }, 115 | "node_modules/@protobufjs/pool": { 116 | "version": "1.1.0", 117 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 118 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" 119 | }, 120 | "node_modules/@protobufjs/utf8": { 121 | "version": "1.1.0", 122 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 123 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" 124 | }, 125 | "node_modules/@pulumi/aws": { 126 | "version": "5.4.0", 127 | "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-5.4.0.tgz", 128 | "integrity": "sha512-98LnB+0CHM5xViIWD9Cs6P+lzLHvHVDw9EYVOOlNMA84pjid12f4vGBkxh3witritYVp5wpIEAaAKL3+3tUs4Q==", 129 | "hasInstallScript": true, 130 | "dependencies": { 131 | "@pulumi/pulumi": "^3.0.0", 132 | "aws-sdk": "^2.0.0", 133 | "builtin-modules": "3.0.0", 134 | "mime": "^2.0.0", 135 | "read-package-tree": "^5.2.1", 136 | "resolve": "^1.7.1" 137 | } 138 | }, 139 | "node_modules/@pulumi/awsx": { 140 | "version": "0.40.0", 141 | "resolved": "https://registry.npmjs.org/@pulumi/awsx/-/awsx-0.40.0.tgz", 142 | "integrity": "sha512-4xMmVOHT/PZQsqPAPWe1cYguUCdk0ZUJ1JN7wfYUoGy1I3LR7gxPD14IK5I79o20PmZI65BRlAwNuntByVy6xw==", 143 | "dependencies": { 144 | "@pulumi/docker": "^3.0.0", 145 | "@types/aws-lambda": "^8.10.23", 146 | "mime": "^2.0.0" 147 | }, 148 | "peerDependencies": { 149 | "@pulumi/aws": "^5.0.0", 150 | "@pulumi/pulumi": "^3.0.0" 151 | } 152 | }, 153 | "node_modules/@pulumi/docker": { 154 | "version": "3.2.0", 155 | "resolved": "https://registry.npmjs.org/@pulumi/docker/-/docker-3.2.0.tgz", 156 | "integrity": "sha512-Mm8xz1vMhuxOOtyCU/V2Py7QW+M6zMxPBBtTjKzvWBYxLe8cygh12+EjCDFK6E9X+x3mV+ZrEkon+JY93kQWhw==", 157 | "hasInstallScript": true, 158 | "dependencies": { 159 | "@pulumi/pulumi": "^3.0.0", 160 | "semver": "^5.4.0" 161 | } 162 | }, 163 | "node_modules/@pulumi/pulumi": { 164 | "version": "3.33.1", 165 | "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.33.1.tgz", 166 | "integrity": "sha512-tmOl9wwQzpU6JfC5GJ8arNLbn7LP96RtG8Y5xxb5kIIOWme2JLQs4e1y9C4RL3/DOIZTlBXH7CvQ+VURham6KA==", 167 | "dependencies": { 168 | "@grpc/grpc-js": "~1.3.8", 169 | "@logdna/tail-file": "^2.0.6", 170 | "@pulumi/query": "^0.3.0", 171 | "google-protobuf": "^3.5.0", 172 | "ini": "^2.0.0", 173 | "js-yaml": "^3.14.0", 174 | "minimist": "^1.2.6", 175 | "normalize-package-data": "^2.4.0", 176 | "protobufjs": "^6.8.6", 177 | "read-package-tree": "^5.3.1", 178 | "require-from-string": "^2.0.1", 179 | "semver": "^6.1.0", 180 | "source-map-support": "^0.4.16", 181 | "ts-node": "^7.0.1", 182 | "typescript": "~3.7.3", 183 | "upath": "^1.1.0" 184 | }, 185 | "engines": { 186 | "node": ">=8.13.0 || >=10.10.0" 187 | } 188 | }, 189 | "node_modules/@pulumi/pulumi/node_modules/semver": { 190 | "version": "6.3.0", 191 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 192 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 193 | "bin": { 194 | "semver": "bin/semver.js" 195 | } 196 | }, 197 | "node_modules/@pulumi/query": { 198 | "version": "0.3.0", 199 | "resolved": "https://registry.npmjs.org/@pulumi/query/-/query-0.3.0.tgz", 200 | "integrity": "sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==" 201 | }, 202 | "node_modules/@types/aws-lambda": { 203 | "version": "8.10.97", 204 | "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.97.tgz", 205 | "integrity": "sha512-BZk3qO4R2KN8Ts3eR6CW1n8LI46UOgv1KoDZjo8J9vOQvDeX/rsrv1H0BpEAMcSqZ1mLwTEyAMtlua5tlSn0kw==" 206 | }, 207 | "node_modules/@types/long": { 208 | "version": "4.0.2", 209 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", 210 | "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" 211 | }, 212 | "node_modules/@types/node": { 213 | "version": "14.18.18", 214 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.18.tgz", 215 | "integrity": "sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig==" 216 | }, 217 | "node_modules/argparse": { 218 | "version": "1.0.10", 219 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 220 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 221 | "dependencies": { 222 | "sprintf-js": "~1.0.2" 223 | } 224 | }, 225 | "node_modules/array.prototype.reduce": { 226 | "version": "1.0.4", 227 | "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", 228 | "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", 229 | "dependencies": { 230 | "call-bind": "^1.0.2", 231 | "define-properties": "^1.1.3", 232 | "es-abstract": "^1.19.2", 233 | "es-array-method-boxes-properly": "^1.0.0", 234 | "is-string": "^1.0.7" 235 | }, 236 | "engines": { 237 | "node": ">= 0.4" 238 | }, 239 | "funding": { 240 | "url": "https://github.com/sponsors/ljharb" 241 | } 242 | }, 243 | "node_modules/arrify": { 244 | "version": "1.0.1", 245 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 246 | "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", 247 | "engines": { 248 | "node": ">=0.10.0" 249 | } 250 | }, 251 | "node_modules/asap": { 252 | "version": "2.0.6", 253 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 254 | "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" 255 | }, 256 | "node_modules/aws-sdk": { 257 | "version": "2.1143.0", 258 | "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1143.0.tgz", 259 | "integrity": "sha512-WSFpJomqDbsO9buVBL9O3R5/qM2uGzqSEBCyo2W9IiE81mOZ/LrX0fWa9vHhYwCVBYQ2HhS+C0rwJxhRvYEhjQ==", 260 | "dependencies": { 261 | "buffer": "4.9.2", 262 | "events": "1.1.1", 263 | "ieee754": "1.1.13", 264 | "jmespath": "0.16.0", 265 | "querystring": "0.2.0", 266 | "sax": "1.2.1", 267 | "url": "0.10.3", 268 | "uuid": "3.3.2", 269 | "xml2js": "0.4.19" 270 | }, 271 | "engines": { 272 | "node": ">= 10.0.0" 273 | } 274 | }, 275 | "node_modules/balanced-match": { 276 | "version": "1.0.2", 277 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 278 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 279 | }, 280 | "node_modules/base64-js": { 281 | "version": "1.5.1", 282 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 283 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 284 | "funding": [ 285 | { 286 | "type": "github", 287 | "url": "https://github.com/sponsors/feross" 288 | }, 289 | { 290 | "type": "patreon", 291 | "url": "https://www.patreon.com/feross" 292 | }, 293 | { 294 | "type": "consulting", 295 | "url": "https://feross.org/support" 296 | } 297 | ] 298 | }, 299 | "node_modules/brace-expansion": { 300 | "version": "1.1.11", 301 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 302 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 303 | "dependencies": { 304 | "balanced-match": "^1.0.0", 305 | "concat-map": "0.0.1" 306 | } 307 | }, 308 | "node_modules/buffer": { 309 | "version": "4.9.2", 310 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 311 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 312 | "dependencies": { 313 | "base64-js": "^1.0.2", 314 | "ieee754": "^1.1.4", 315 | "isarray": "^1.0.0" 316 | } 317 | }, 318 | "node_modules/buffer-from": { 319 | "version": "1.1.2", 320 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 321 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 322 | }, 323 | "node_modules/builtin-modules": { 324 | "version": "3.0.0", 325 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", 326 | "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==", 327 | "engines": { 328 | "node": ">=6" 329 | } 330 | }, 331 | "node_modules/call-bind": { 332 | "version": "1.0.2", 333 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 334 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 335 | "dependencies": { 336 | "function-bind": "^1.1.1", 337 | "get-intrinsic": "^1.0.2" 338 | }, 339 | "funding": { 340 | "url": "https://github.com/sponsors/ljharb" 341 | } 342 | }, 343 | "node_modules/concat-map": { 344 | "version": "0.0.1", 345 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 346 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 347 | }, 348 | "node_modules/debuglog": { 349 | "version": "1.0.1", 350 | "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", 351 | "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", 352 | "engines": { 353 | "node": "*" 354 | } 355 | }, 356 | "node_modules/define-properties": { 357 | "version": "1.1.4", 358 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", 359 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", 360 | "dependencies": { 361 | "has-property-descriptors": "^1.0.0", 362 | "object-keys": "^1.1.1" 363 | }, 364 | "engines": { 365 | "node": ">= 0.4" 366 | }, 367 | "funding": { 368 | "url": "https://github.com/sponsors/ljharb" 369 | } 370 | }, 371 | "node_modules/dezalgo": { 372 | "version": "1.0.4", 373 | "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", 374 | "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", 375 | "dependencies": { 376 | "asap": "^2.0.0", 377 | "wrappy": "1" 378 | } 379 | }, 380 | "node_modules/diff": { 381 | "version": "3.5.0", 382 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 383 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 384 | "engines": { 385 | "node": ">=0.3.1" 386 | } 387 | }, 388 | "node_modules/es-abstract": { 389 | "version": "1.20.1", 390 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", 391 | "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", 392 | "dependencies": { 393 | "call-bind": "^1.0.2", 394 | "es-to-primitive": "^1.2.1", 395 | "function-bind": "^1.1.1", 396 | "function.prototype.name": "^1.1.5", 397 | "get-intrinsic": "^1.1.1", 398 | "get-symbol-description": "^1.0.0", 399 | "has": "^1.0.3", 400 | "has-property-descriptors": "^1.0.0", 401 | "has-symbols": "^1.0.3", 402 | "internal-slot": "^1.0.3", 403 | "is-callable": "^1.2.4", 404 | "is-negative-zero": "^2.0.2", 405 | "is-regex": "^1.1.4", 406 | "is-shared-array-buffer": "^1.0.2", 407 | "is-string": "^1.0.7", 408 | "is-weakref": "^1.0.2", 409 | "object-inspect": "^1.12.0", 410 | "object-keys": "^1.1.1", 411 | "object.assign": "^4.1.2", 412 | "regexp.prototype.flags": "^1.4.3", 413 | "string.prototype.trimend": "^1.0.5", 414 | "string.prototype.trimstart": "^1.0.5", 415 | "unbox-primitive": "^1.0.2" 416 | }, 417 | "engines": { 418 | "node": ">= 0.4" 419 | }, 420 | "funding": { 421 | "url": "https://github.com/sponsors/ljharb" 422 | } 423 | }, 424 | "node_modules/es-array-method-boxes-properly": { 425 | "version": "1.0.0", 426 | "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", 427 | "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" 428 | }, 429 | "node_modules/es-to-primitive": { 430 | "version": "1.2.1", 431 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 432 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 433 | "dependencies": { 434 | "is-callable": "^1.1.4", 435 | "is-date-object": "^1.0.1", 436 | "is-symbol": "^1.0.2" 437 | }, 438 | "engines": { 439 | "node": ">= 0.4" 440 | }, 441 | "funding": { 442 | "url": "https://github.com/sponsors/ljharb" 443 | } 444 | }, 445 | "node_modules/esprima": { 446 | "version": "4.0.1", 447 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 448 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 449 | "bin": { 450 | "esparse": "bin/esparse.js", 451 | "esvalidate": "bin/esvalidate.js" 452 | }, 453 | "engines": { 454 | "node": ">=4" 455 | } 456 | }, 457 | "node_modules/events": { 458 | "version": "1.1.1", 459 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 460 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", 461 | "engines": { 462 | "node": ">=0.4.x" 463 | } 464 | }, 465 | "node_modules/fs.realpath": { 466 | "version": "1.0.0", 467 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 468 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 469 | }, 470 | "node_modules/function-bind": { 471 | "version": "1.1.1", 472 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 473 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 474 | }, 475 | "node_modules/function.prototype.name": { 476 | "version": "1.1.5", 477 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", 478 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", 479 | "dependencies": { 480 | "call-bind": "^1.0.2", 481 | "define-properties": "^1.1.3", 482 | "es-abstract": "^1.19.0", 483 | "functions-have-names": "^1.2.2" 484 | }, 485 | "engines": { 486 | "node": ">= 0.4" 487 | }, 488 | "funding": { 489 | "url": "https://github.com/sponsors/ljharb" 490 | } 491 | }, 492 | "node_modules/functions-have-names": { 493 | "version": "1.2.3", 494 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 495 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 496 | "funding": { 497 | "url": "https://github.com/sponsors/ljharb" 498 | } 499 | }, 500 | "node_modules/get-intrinsic": { 501 | "version": "1.1.1", 502 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 503 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 504 | "dependencies": { 505 | "function-bind": "^1.1.1", 506 | "has": "^1.0.3", 507 | "has-symbols": "^1.0.1" 508 | }, 509 | "funding": { 510 | "url": "https://github.com/sponsors/ljharb" 511 | } 512 | }, 513 | "node_modules/get-symbol-description": { 514 | "version": "1.0.0", 515 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 516 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 517 | "dependencies": { 518 | "call-bind": "^1.0.2", 519 | "get-intrinsic": "^1.1.1" 520 | }, 521 | "engines": { 522 | "node": ">= 0.4" 523 | }, 524 | "funding": { 525 | "url": "https://github.com/sponsors/ljharb" 526 | } 527 | }, 528 | "node_modules/glob": { 529 | "version": "7.2.3", 530 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 531 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 532 | "dependencies": { 533 | "fs.realpath": "^1.0.0", 534 | "inflight": "^1.0.4", 535 | "inherits": "2", 536 | "minimatch": "^3.1.1", 537 | "once": "^1.3.0", 538 | "path-is-absolute": "^1.0.0" 539 | }, 540 | "engines": { 541 | "node": "*" 542 | }, 543 | "funding": { 544 | "url": "https://github.com/sponsors/isaacs" 545 | } 546 | }, 547 | "node_modules/google-protobuf": { 548 | "version": "3.20.1", 549 | "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.20.1.tgz", 550 | "integrity": "sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==" 551 | }, 552 | "node_modules/graceful-fs": { 553 | "version": "4.2.10", 554 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 555 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" 556 | }, 557 | "node_modules/has": { 558 | "version": "1.0.3", 559 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 560 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 561 | "dependencies": { 562 | "function-bind": "^1.1.1" 563 | }, 564 | "engines": { 565 | "node": ">= 0.4.0" 566 | } 567 | }, 568 | "node_modules/has-bigints": { 569 | "version": "1.0.2", 570 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 571 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 572 | "funding": { 573 | "url": "https://github.com/sponsors/ljharb" 574 | } 575 | }, 576 | "node_modules/has-property-descriptors": { 577 | "version": "1.0.0", 578 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 579 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 580 | "dependencies": { 581 | "get-intrinsic": "^1.1.1" 582 | }, 583 | "funding": { 584 | "url": "https://github.com/sponsors/ljharb" 585 | } 586 | }, 587 | "node_modules/has-symbols": { 588 | "version": "1.0.3", 589 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 590 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 591 | "engines": { 592 | "node": ">= 0.4" 593 | }, 594 | "funding": { 595 | "url": "https://github.com/sponsors/ljharb" 596 | } 597 | }, 598 | "node_modules/has-tostringtag": { 599 | "version": "1.0.0", 600 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 601 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 602 | "dependencies": { 603 | "has-symbols": "^1.0.2" 604 | }, 605 | "engines": { 606 | "node": ">= 0.4" 607 | }, 608 | "funding": { 609 | "url": "https://github.com/sponsors/ljharb" 610 | } 611 | }, 612 | "node_modules/hosted-git-info": { 613 | "version": "2.8.9", 614 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 615 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" 616 | }, 617 | "node_modules/ieee754": { 618 | "version": "1.1.13", 619 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 620 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 621 | }, 622 | "node_modules/inflight": { 623 | "version": "1.0.6", 624 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 625 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 626 | "dependencies": { 627 | "once": "^1.3.0", 628 | "wrappy": "1" 629 | } 630 | }, 631 | "node_modules/inherits": { 632 | "version": "2.0.4", 633 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 634 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 635 | }, 636 | "node_modules/ini": { 637 | "version": "2.0.0", 638 | "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", 639 | "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", 640 | "engines": { 641 | "node": ">=10" 642 | } 643 | }, 644 | "node_modules/internal-slot": { 645 | "version": "1.0.3", 646 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", 647 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", 648 | "dependencies": { 649 | "get-intrinsic": "^1.1.0", 650 | "has": "^1.0.3", 651 | "side-channel": "^1.0.4" 652 | }, 653 | "engines": { 654 | "node": ">= 0.4" 655 | } 656 | }, 657 | "node_modules/is-bigint": { 658 | "version": "1.0.4", 659 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 660 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 661 | "dependencies": { 662 | "has-bigints": "^1.0.1" 663 | }, 664 | "funding": { 665 | "url": "https://github.com/sponsors/ljharb" 666 | } 667 | }, 668 | "node_modules/is-boolean-object": { 669 | "version": "1.1.2", 670 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 671 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 672 | "dependencies": { 673 | "call-bind": "^1.0.2", 674 | "has-tostringtag": "^1.0.0" 675 | }, 676 | "engines": { 677 | "node": ">= 0.4" 678 | }, 679 | "funding": { 680 | "url": "https://github.com/sponsors/ljharb" 681 | } 682 | }, 683 | "node_modules/is-callable": { 684 | "version": "1.2.4", 685 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", 686 | "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", 687 | "engines": { 688 | "node": ">= 0.4" 689 | }, 690 | "funding": { 691 | "url": "https://github.com/sponsors/ljharb" 692 | } 693 | }, 694 | "node_modules/is-core-module": { 695 | "version": "2.9.0", 696 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 697 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 698 | "dependencies": { 699 | "has": "^1.0.3" 700 | }, 701 | "funding": { 702 | "url": "https://github.com/sponsors/ljharb" 703 | } 704 | }, 705 | "node_modules/is-date-object": { 706 | "version": "1.0.5", 707 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 708 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 709 | "dependencies": { 710 | "has-tostringtag": "^1.0.0" 711 | }, 712 | "engines": { 713 | "node": ">= 0.4" 714 | }, 715 | "funding": { 716 | "url": "https://github.com/sponsors/ljharb" 717 | } 718 | }, 719 | "node_modules/is-negative-zero": { 720 | "version": "2.0.2", 721 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 722 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 723 | "engines": { 724 | "node": ">= 0.4" 725 | }, 726 | "funding": { 727 | "url": "https://github.com/sponsors/ljharb" 728 | } 729 | }, 730 | "node_modules/is-number-object": { 731 | "version": "1.0.7", 732 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 733 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 734 | "dependencies": { 735 | "has-tostringtag": "^1.0.0" 736 | }, 737 | "engines": { 738 | "node": ">= 0.4" 739 | }, 740 | "funding": { 741 | "url": "https://github.com/sponsors/ljharb" 742 | } 743 | }, 744 | "node_modules/is-regex": { 745 | "version": "1.1.4", 746 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 747 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 748 | "dependencies": { 749 | "call-bind": "^1.0.2", 750 | "has-tostringtag": "^1.0.0" 751 | }, 752 | "engines": { 753 | "node": ">= 0.4" 754 | }, 755 | "funding": { 756 | "url": "https://github.com/sponsors/ljharb" 757 | } 758 | }, 759 | "node_modules/is-shared-array-buffer": { 760 | "version": "1.0.2", 761 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 762 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 763 | "dependencies": { 764 | "call-bind": "^1.0.2" 765 | }, 766 | "funding": { 767 | "url": "https://github.com/sponsors/ljharb" 768 | } 769 | }, 770 | "node_modules/is-string": { 771 | "version": "1.0.7", 772 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 773 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 774 | "dependencies": { 775 | "has-tostringtag": "^1.0.0" 776 | }, 777 | "engines": { 778 | "node": ">= 0.4" 779 | }, 780 | "funding": { 781 | "url": "https://github.com/sponsors/ljharb" 782 | } 783 | }, 784 | "node_modules/is-symbol": { 785 | "version": "1.0.4", 786 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 787 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 788 | "dependencies": { 789 | "has-symbols": "^1.0.2" 790 | }, 791 | "engines": { 792 | "node": ">= 0.4" 793 | }, 794 | "funding": { 795 | "url": "https://github.com/sponsors/ljharb" 796 | } 797 | }, 798 | "node_modules/is-weakref": { 799 | "version": "1.0.2", 800 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 801 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 802 | "dependencies": { 803 | "call-bind": "^1.0.2" 804 | }, 805 | "funding": { 806 | "url": "https://github.com/sponsors/ljharb" 807 | } 808 | }, 809 | "node_modules/isarray": { 810 | "version": "1.0.0", 811 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 812 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 813 | }, 814 | "node_modules/jmespath": { 815 | "version": "0.16.0", 816 | "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", 817 | "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", 818 | "engines": { 819 | "node": ">= 0.6.0" 820 | } 821 | }, 822 | "node_modules/js-yaml": { 823 | "version": "3.14.1", 824 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 825 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 826 | "dependencies": { 827 | "argparse": "^1.0.7", 828 | "esprima": "^4.0.0" 829 | }, 830 | "bin": { 831 | "js-yaml": "bin/js-yaml.js" 832 | } 833 | }, 834 | "node_modules/json-parse-even-better-errors": { 835 | "version": "2.3.1", 836 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 837 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 838 | }, 839 | "node_modules/long": { 840 | "version": "4.0.0", 841 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 842 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 843 | }, 844 | "node_modules/make-error": { 845 | "version": "1.3.6", 846 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 847 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 848 | }, 849 | "node_modules/mime": { 850 | "version": "2.6.0", 851 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", 852 | "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", 853 | "bin": { 854 | "mime": "cli.js" 855 | }, 856 | "engines": { 857 | "node": ">=4.0.0" 858 | } 859 | }, 860 | "node_modules/minimatch": { 861 | "version": "3.1.2", 862 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 863 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 864 | "dependencies": { 865 | "brace-expansion": "^1.1.7" 866 | }, 867 | "engines": { 868 | "node": "*" 869 | } 870 | }, 871 | "node_modules/minimist": { 872 | "version": "1.2.6", 873 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 874 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 875 | }, 876 | "node_modules/mkdirp": { 877 | "version": "0.5.6", 878 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 879 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 880 | "dependencies": { 881 | "minimist": "^1.2.6" 882 | }, 883 | "bin": { 884 | "mkdirp": "bin/cmd.js" 885 | } 886 | }, 887 | "node_modules/normalize-package-data": { 888 | "version": "2.5.0", 889 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 890 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 891 | "dependencies": { 892 | "hosted-git-info": "^2.1.4", 893 | "resolve": "^1.10.0", 894 | "semver": "2 || 3 || 4 || 5", 895 | "validate-npm-package-license": "^3.0.1" 896 | } 897 | }, 898 | "node_modules/npm-normalize-package-bin": { 899 | "version": "1.0.1", 900 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 901 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" 902 | }, 903 | "node_modules/object-inspect": { 904 | "version": "1.12.1", 905 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.1.tgz", 906 | "integrity": "sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA==", 907 | "funding": { 908 | "url": "https://github.com/sponsors/ljharb" 909 | } 910 | }, 911 | "node_modules/object-keys": { 912 | "version": "1.1.1", 913 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 914 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 915 | "engines": { 916 | "node": ">= 0.4" 917 | } 918 | }, 919 | "node_modules/object.assign": { 920 | "version": "4.1.2", 921 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 922 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 923 | "dependencies": { 924 | "call-bind": "^1.0.0", 925 | "define-properties": "^1.1.3", 926 | "has-symbols": "^1.0.1", 927 | "object-keys": "^1.1.1" 928 | }, 929 | "engines": { 930 | "node": ">= 0.4" 931 | }, 932 | "funding": { 933 | "url": "https://github.com/sponsors/ljharb" 934 | } 935 | }, 936 | "node_modules/object.getownpropertydescriptors": { 937 | "version": "2.1.4", 938 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", 939 | "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", 940 | "dependencies": { 941 | "array.prototype.reduce": "^1.0.4", 942 | "call-bind": "^1.0.2", 943 | "define-properties": "^1.1.4", 944 | "es-abstract": "^1.20.1" 945 | }, 946 | "engines": { 947 | "node": ">= 0.8" 948 | }, 949 | "funding": { 950 | "url": "https://github.com/sponsors/ljharb" 951 | } 952 | }, 953 | "node_modules/once": { 954 | "version": "1.4.0", 955 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 956 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 957 | "dependencies": { 958 | "wrappy": "1" 959 | } 960 | }, 961 | "node_modules/path-is-absolute": { 962 | "version": "1.0.1", 963 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 964 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 965 | "engines": { 966 | "node": ">=0.10.0" 967 | } 968 | }, 969 | "node_modules/path-parse": { 970 | "version": "1.0.7", 971 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 972 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 973 | }, 974 | "node_modules/prisma": { 975 | "version": "3.14.0", 976 | "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.14.0.tgz", 977 | "integrity": "sha512-l9MOgNCn/paDE+i1K2fp9NZ+Du4trzPTJsGkaQHVBufTGqzoYHuNk8JfzXuIn0Gte6/ZjyKj652Jq/Lc1tp2yw==", 978 | "devOptional": true, 979 | "hasInstallScript": true, 980 | "dependencies": { 981 | "@prisma/engines": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" 982 | }, 983 | "bin": { 984 | "prisma": "build/index.js", 985 | "prisma2": "build/index.js" 986 | }, 987 | "engines": { 988 | "node": ">=12.6" 989 | } 990 | }, 991 | "node_modules/protobufjs": { 992 | "version": "6.11.3", 993 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", 994 | "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", 995 | "hasInstallScript": true, 996 | "dependencies": { 997 | "@protobufjs/aspromise": "^1.1.2", 998 | "@protobufjs/base64": "^1.1.2", 999 | "@protobufjs/codegen": "^2.0.4", 1000 | "@protobufjs/eventemitter": "^1.1.0", 1001 | "@protobufjs/fetch": "^1.1.0", 1002 | "@protobufjs/float": "^1.0.2", 1003 | "@protobufjs/inquire": "^1.1.0", 1004 | "@protobufjs/path": "^1.1.2", 1005 | "@protobufjs/pool": "^1.1.0", 1006 | "@protobufjs/utf8": "^1.1.0", 1007 | "@types/long": "^4.0.1", 1008 | "@types/node": ">=13.7.0", 1009 | "long": "^4.0.0" 1010 | }, 1011 | "bin": { 1012 | "pbjs": "bin/pbjs", 1013 | "pbts": "bin/pbts" 1014 | } 1015 | }, 1016 | "node_modules/punycode": { 1017 | "version": "1.3.2", 1018 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1019 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 1020 | }, 1021 | "node_modules/querystring": { 1022 | "version": "0.2.0", 1023 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1024 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 1025 | "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", 1026 | "engines": { 1027 | "node": ">=0.4.x" 1028 | } 1029 | }, 1030 | "node_modules/read-package-json": { 1031 | "version": "2.1.2", 1032 | "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", 1033 | "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", 1034 | "dependencies": { 1035 | "glob": "^7.1.1", 1036 | "json-parse-even-better-errors": "^2.3.0", 1037 | "normalize-package-data": "^2.0.0", 1038 | "npm-normalize-package-bin": "^1.0.0" 1039 | } 1040 | }, 1041 | "node_modules/read-package-tree": { 1042 | "version": "5.3.1", 1043 | "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", 1044 | "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", 1045 | "deprecated": "The functionality that this package provided is now in @npmcli/arborist", 1046 | "dependencies": { 1047 | "read-package-json": "^2.0.0", 1048 | "readdir-scoped-modules": "^1.0.0", 1049 | "util-promisify": "^2.1.0" 1050 | } 1051 | }, 1052 | "node_modules/readdir-scoped-modules": { 1053 | "version": "1.1.0", 1054 | "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", 1055 | "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", 1056 | "dependencies": { 1057 | "debuglog": "^1.0.1", 1058 | "dezalgo": "^1.0.0", 1059 | "graceful-fs": "^4.1.2", 1060 | "once": "^1.3.0" 1061 | } 1062 | }, 1063 | "node_modules/regexp.prototype.flags": { 1064 | "version": "1.4.3", 1065 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", 1066 | "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", 1067 | "dependencies": { 1068 | "call-bind": "^1.0.2", 1069 | "define-properties": "^1.1.3", 1070 | "functions-have-names": "^1.2.2" 1071 | }, 1072 | "engines": { 1073 | "node": ">= 0.4" 1074 | }, 1075 | "funding": { 1076 | "url": "https://github.com/sponsors/ljharb" 1077 | } 1078 | }, 1079 | "node_modules/require-from-string": { 1080 | "version": "2.0.2", 1081 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1082 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1083 | "engines": { 1084 | "node": ">=0.10.0" 1085 | } 1086 | }, 1087 | "node_modules/resolve": { 1088 | "version": "1.22.0", 1089 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1090 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1091 | "dependencies": { 1092 | "is-core-module": "^2.8.1", 1093 | "path-parse": "^1.0.7", 1094 | "supports-preserve-symlinks-flag": "^1.0.0" 1095 | }, 1096 | "bin": { 1097 | "resolve": "bin/resolve" 1098 | }, 1099 | "funding": { 1100 | "url": "https://github.com/sponsors/ljharb" 1101 | } 1102 | }, 1103 | "node_modules/sax": { 1104 | "version": "1.2.1", 1105 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 1106 | "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" 1107 | }, 1108 | "node_modules/semver": { 1109 | "version": "5.7.1", 1110 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1111 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1112 | "bin": { 1113 | "semver": "bin/semver" 1114 | } 1115 | }, 1116 | "node_modules/side-channel": { 1117 | "version": "1.0.4", 1118 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1119 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1120 | "dependencies": { 1121 | "call-bind": "^1.0.0", 1122 | "get-intrinsic": "^1.0.2", 1123 | "object-inspect": "^1.9.0" 1124 | }, 1125 | "funding": { 1126 | "url": "https://github.com/sponsors/ljharb" 1127 | } 1128 | }, 1129 | "node_modules/source-map": { 1130 | "version": "0.5.7", 1131 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1132 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1133 | "engines": { 1134 | "node": ">=0.10.0" 1135 | } 1136 | }, 1137 | "node_modules/source-map-support": { 1138 | "version": "0.4.18", 1139 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 1140 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 1141 | "dependencies": { 1142 | "source-map": "^0.5.6" 1143 | } 1144 | }, 1145 | "node_modules/spdx-correct": { 1146 | "version": "3.1.1", 1147 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 1148 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 1149 | "dependencies": { 1150 | "spdx-expression-parse": "^3.0.0", 1151 | "spdx-license-ids": "^3.0.0" 1152 | } 1153 | }, 1154 | "node_modules/spdx-exceptions": { 1155 | "version": "2.3.0", 1156 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1157 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" 1158 | }, 1159 | "node_modules/spdx-expression-parse": { 1160 | "version": "3.0.1", 1161 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1162 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1163 | "dependencies": { 1164 | "spdx-exceptions": "^2.1.0", 1165 | "spdx-license-ids": "^3.0.0" 1166 | } 1167 | }, 1168 | "node_modules/spdx-license-ids": { 1169 | "version": "3.0.11", 1170 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", 1171 | "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" 1172 | }, 1173 | "node_modules/sprintf-js": { 1174 | "version": "1.0.3", 1175 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1176 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 1177 | }, 1178 | "node_modules/string.prototype.trimend": { 1179 | "version": "1.0.5", 1180 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", 1181 | "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", 1182 | "dependencies": { 1183 | "call-bind": "^1.0.2", 1184 | "define-properties": "^1.1.4", 1185 | "es-abstract": "^1.19.5" 1186 | }, 1187 | "funding": { 1188 | "url": "https://github.com/sponsors/ljharb" 1189 | } 1190 | }, 1191 | "node_modules/string.prototype.trimstart": { 1192 | "version": "1.0.5", 1193 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", 1194 | "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", 1195 | "dependencies": { 1196 | "call-bind": "^1.0.2", 1197 | "define-properties": "^1.1.4", 1198 | "es-abstract": "^1.19.5" 1199 | }, 1200 | "funding": { 1201 | "url": "https://github.com/sponsors/ljharb" 1202 | } 1203 | }, 1204 | "node_modules/supports-preserve-symlinks-flag": { 1205 | "version": "1.0.0", 1206 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1207 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1208 | "engines": { 1209 | "node": ">= 0.4" 1210 | }, 1211 | "funding": { 1212 | "url": "https://github.com/sponsors/ljharb" 1213 | } 1214 | }, 1215 | "node_modules/ts-node": { 1216 | "version": "7.0.1", 1217 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", 1218 | "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", 1219 | "dependencies": { 1220 | "arrify": "^1.0.0", 1221 | "buffer-from": "^1.1.0", 1222 | "diff": "^3.1.0", 1223 | "make-error": "^1.1.1", 1224 | "minimist": "^1.2.0", 1225 | "mkdirp": "^0.5.1", 1226 | "source-map-support": "^0.5.6", 1227 | "yn": "^2.0.0" 1228 | }, 1229 | "bin": { 1230 | "ts-node": "dist/bin.js" 1231 | }, 1232 | "engines": { 1233 | "node": ">=4.2.0" 1234 | } 1235 | }, 1236 | "node_modules/ts-node/node_modules/source-map": { 1237 | "version": "0.6.1", 1238 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1239 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1240 | "engines": { 1241 | "node": ">=0.10.0" 1242 | } 1243 | }, 1244 | "node_modules/ts-node/node_modules/source-map-support": { 1245 | "version": "0.5.21", 1246 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1247 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1248 | "dependencies": { 1249 | "buffer-from": "^1.0.0", 1250 | "source-map": "^0.6.0" 1251 | } 1252 | }, 1253 | "node_modules/typescript": { 1254 | "version": "3.7.7", 1255 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.7.tgz", 1256 | "integrity": "sha512-MmQdgo/XenfZPvVLtKZOq9jQQvzaUAUpcKW8Z43x9B2fOm4S5g//tPtMweZUIP+SoBqrVPEIm+dJeQ9dfO0QdA==", 1257 | "bin": { 1258 | "tsc": "bin/tsc", 1259 | "tsserver": "bin/tsserver" 1260 | }, 1261 | "engines": { 1262 | "node": ">=4.2.0" 1263 | } 1264 | }, 1265 | "node_modules/unbox-primitive": { 1266 | "version": "1.0.2", 1267 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 1268 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 1269 | "dependencies": { 1270 | "call-bind": "^1.0.2", 1271 | "has-bigints": "^1.0.2", 1272 | "has-symbols": "^1.0.3", 1273 | "which-boxed-primitive": "^1.0.2" 1274 | }, 1275 | "funding": { 1276 | "url": "https://github.com/sponsors/ljharb" 1277 | } 1278 | }, 1279 | "node_modules/upath": { 1280 | "version": "1.2.0", 1281 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", 1282 | "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", 1283 | "engines": { 1284 | "node": ">=4", 1285 | "yarn": "*" 1286 | } 1287 | }, 1288 | "node_modules/url": { 1289 | "version": "0.10.3", 1290 | "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 1291 | "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", 1292 | "dependencies": { 1293 | "punycode": "1.3.2", 1294 | "querystring": "0.2.0" 1295 | } 1296 | }, 1297 | "node_modules/util-promisify": { 1298 | "version": "2.1.0", 1299 | "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", 1300 | "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", 1301 | "dependencies": { 1302 | "object.getownpropertydescriptors": "^2.0.3" 1303 | } 1304 | }, 1305 | "node_modules/uuid": { 1306 | "version": "3.3.2", 1307 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 1308 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", 1309 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 1310 | "bin": { 1311 | "uuid": "bin/uuid" 1312 | } 1313 | }, 1314 | "node_modules/validate-npm-package-license": { 1315 | "version": "3.0.4", 1316 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1317 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1318 | "dependencies": { 1319 | "spdx-correct": "^3.0.0", 1320 | "spdx-expression-parse": "^3.0.0" 1321 | } 1322 | }, 1323 | "node_modules/which-boxed-primitive": { 1324 | "version": "1.0.2", 1325 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 1326 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 1327 | "dependencies": { 1328 | "is-bigint": "^1.0.1", 1329 | "is-boolean-object": "^1.1.0", 1330 | "is-number-object": "^1.0.4", 1331 | "is-string": "^1.0.5", 1332 | "is-symbol": "^1.0.3" 1333 | }, 1334 | "funding": { 1335 | "url": "https://github.com/sponsors/ljharb" 1336 | } 1337 | }, 1338 | "node_modules/wrappy": { 1339 | "version": "1.0.2", 1340 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1341 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1342 | }, 1343 | "node_modules/xml2js": { 1344 | "version": "0.4.19", 1345 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", 1346 | "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", 1347 | "dependencies": { 1348 | "sax": ">=0.6.0", 1349 | "xmlbuilder": "~9.0.1" 1350 | } 1351 | }, 1352 | "node_modules/xmlbuilder": { 1353 | "version": "9.0.7", 1354 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 1355 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", 1356 | "engines": { 1357 | "node": ">=4.0" 1358 | } 1359 | }, 1360 | "node_modules/yn": { 1361 | "version": "2.0.0", 1362 | "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", 1363 | "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", 1364 | "engines": { 1365 | "node": ">=4" 1366 | } 1367 | } 1368 | }, 1369 | "dependencies": { 1370 | "@grpc/grpc-js": { 1371 | "version": "1.3.8", 1372 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz", 1373 | "integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==", 1374 | "requires": { 1375 | "@types/node": ">=12.12.47" 1376 | } 1377 | }, 1378 | "@logdna/tail-file": { 1379 | "version": "2.2.0", 1380 | "resolved": "https://registry.npmjs.org/@logdna/tail-file/-/tail-file-2.2.0.tgz", 1381 | "integrity": "sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng==" 1382 | }, 1383 | "@prisma/client": { 1384 | "version": "3.14.0", 1385 | "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.14.0.tgz", 1386 | "integrity": "sha512-atb41UpgTR1MCst0VIbiHTMw8lmXnwUvE1KyUCAkq08+wJyjRE78Due+nSf+7uwqQn+fBFYVmoojtinhlLOSaA==", 1387 | "requires": { 1388 | "@prisma/engines-version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" 1389 | } 1390 | }, 1391 | "@prisma/engines": { 1392 | "version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a", 1393 | "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz", 1394 | "integrity": "sha512-LwZvI3FY6f43xFjQNRuE10JM5R8vJzFTSmbV9X0Wuhv9kscLkjRlZt0BEoiHmO+2HA3B3xxbMfB5du7ZoSFXGg==", 1395 | "devOptional": true 1396 | }, 1397 | "@prisma/engines-version": { 1398 | "version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a", 1399 | "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz", 1400 | "integrity": "sha512-D+yHzq4a2r2Rrd0ZOW/mTZbgDIkUkD8ofKgusEI1xPiZz60Daks+UM7Me2ty5FzH3p/TgyhBpRrfIHx+ha20RQ==" 1401 | }, 1402 | "@protobufjs/aspromise": { 1403 | "version": "1.1.2", 1404 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 1405 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" 1406 | }, 1407 | "@protobufjs/base64": { 1408 | "version": "1.1.2", 1409 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 1410 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 1411 | }, 1412 | "@protobufjs/codegen": { 1413 | "version": "2.0.4", 1414 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 1415 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 1416 | }, 1417 | "@protobufjs/eventemitter": { 1418 | "version": "1.1.0", 1419 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 1420 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" 1421 | }, 1422 | "@protobufjs/fetch": { 1423 | "version": "1.1.0", 1424 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 1425 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 1426 | "requires": { 1427 | "@protobufjs/aspromise": "^1.1.1", 1428 | "@protobufjs/inquire": "^1.1.0" 1429 | } 1430 | }, 1431 | "@protobufjs/float": { 1432 | "version": "1.0.2", 1433 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 1434 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" 1435 | }, 1436 | "@protobufjs/inquire": { 1437 | "version": "1.1.0", 1438 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 1439 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" 1440 | }, 1441 | "@protobufjs/path": { 1442 | "version": "1.1.2", 1443 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 1444 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" 1445 | }, 1446 | "@protobufjs/pool": { 1447 | "version": "1.1.0", 1448 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 1449 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" 1450 | }, 1451 | "@protobufjs/utf8": { 1452 | "version": "1.1.0", 1453 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 1454 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" 1455 | }, 1456 | "@pulumi/aws": { 1457 | "version": "5.4.0", 1458 | "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-5.4.0.tgz", 1459 | "integrity": "sha512-98LnB+0CHM5xViIWD9Cs6P+lzLHvHVDw9EYVOOlNMA84pjid12f4vGBkxh3witritYVp5wpIEAaAKL3+3tUs4Q==", 1460 | "requires": { 1461 | "@pulumi/pulumi": "^3.0.0", 1462 | "aws-sdk": "^2.0.0", 1463 | "builtin-modules": "3.0.0", 1464 | "mime": "^2.0.0", 1465 | "read-package-tree": "^5.2.1", 1466 | "resolve": "^1.7.1" 1467 | } 1468 | }, 1469 | "@pulumi/awsx": { 1470 | "version": "0.40.0", 1471 | "resolved": "https://registry.npmjs.org/@pulumi/awsx/-/awsx-0.40.0.tgz", 1472 | "integrity": "sha512-4xMmVOHT/PZQsqPAPWe1cYguUCdk0ZUJ1JN7wfYUoGy1I3LR7gxPD14IK5I79o20PmZI65BRlAwNuntByVy6xw==", 1473 | "requires": { 1474 | "@pulumi/docker": "^3.0.0", 1475 | "@types/aws-lambda": "^8.10.23", 1476 | "mime": "^2.0.0" 1477 | } 1478 | }, 1479 | "@pulumi/docker": { 1480 | "version": "3.2.0", 1481 | "resolved": "https://registry.npmjs.org/@pulumi/docker/-/docker-3.2.0.tgz", 1482 | "integrity": "sha512-Mm8xz1vMhuxOOtyCU/V2Py7QW+M6zMxPBBtTjKzvWBYxLe8cygh12+EjCDFK6E9X+x3mV+ZrEkon+JY93kQWhw==", 1483 | "requires": { 1484 | "@pulumi/pulumi": "^3.0.0", 1485 | "semver": "^5.4.0" 1486 | } 1487 | }, 1488 | "@pulumi/pulumi": { 1489 | "version": "3.33.1", 1490 | "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.33.1.tgz", 1491 | "integrity": "sha512-tmOl9wwQzpU6JfC5GJ8arNLbn7LP96RtG8Y5xxb5kIIOWme2JLQs4e1y9C4RL3/DOIZTlBXH7CvQ+VURham6KA==", 1492 | "requires": { 1493 | "@grpc/grpc-js": "~1.3.8", 1494 | "@logdna/tail-file": "^2.0.6", 1495 | "@pulumi/query": "^0.3.0", 1496 | "google-protobuf": "^3.5.0", 1497 | "ini": "^2.0.0", 1498 | "js-yaml": "^3.14.0", 1499 | "minimist": "^1.2.6", 1500 | "normalize-package-data": "^2.4.0", 1501 | "protobufjs": "^6.8.6", 1502 | "read-package-tree": "^5.3.1", 1503 | "require-from-string": "^2.0.1", 1504 | "semver": "^6.1.0", 1505 | "source-map-support": "^0.4.16", 1506 | "ts-node": "^7.0.1", 1507 | "typescript": "~3.7.3", 1508 | "upath": "^1.1.0" 1509 | }, 1510 | "dependencies": { 1511 | "semver": { 1512 | "version": "6.3.0", 1513 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1514 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 1515 | } 1516 | } 1517 | }, 1518 | "@pulumi/query": { 1519 | "version": "0.3.0", 1520 | "resolved": "https://registry.npmjs.org/@pulumi/query/-/query-0.3.0.tgz", 1521 | "integrity": "sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==" 1522 | }, 1523 | "@types/aws-lambda": { 1524 | "version": "8.10.97", 1525 | "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.97.tgz", 1526 | "integrity": "sha512-BZk3qO4R2KN8Ts3eR6CW1n8LI46UOgv1KoDZjo8J9vOQvDeX/rsrv1H0BpEAMcSqZ1mLwTEyAMtlua5tlSn0kw==" 1527 | }, 1528 | "@types/long": { 1529 | "version": "4.0.2", 1530 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", 1531 | "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" 1532 | }, 1533 | "@types/node": { 1534 | "version": "14.18.18", 1535 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.18.tgz", 1536 | "integrity": "sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig==" 1537 | }, 1538 | "argparse": { 1539 | "version": "1.0.10", 1540 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 1541 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 1542 | "requires": { 1543 | "sprintf-js": "~1.0.2" 1544 | } 1545 | }, 1546 | "array.prototype.reduce": { 1547 | "version": "1.0.4", 1548 | "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", 1549 | "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", 1550 | "requires": { 1551 | "call-bind": "^1.0.2", 1552 | "define-properties": "^1.1.3", 1553 | "es-abstract": "^1.19.2", 1554 | "es-array-method-boxes-properly": "^1.0.0", 1555 | "is-string": "^1.0.7" 1556 | } 1557 | }, 1558 | "arrify": { 1559 | "version": "1.0.1", 1560 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 1561 | "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" 1562 | }, 1563 | "asap": { 1564 | "version": "2.0.6", 1565 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 1566 | "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" 1567 | }, 1568 | "aws-sdk": { 1569 | "version": "2.1143.0", 1570 | "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1143.0.tgz", 1571 | "integrity": "sha512-WSFpJomqDbsO9buVBL9O3R5/qM2uGzqSEBCyo2W9IiE81mOZ/LrX0fWa9vHhYwCVBYQ2HhS+C0rwJxhRvYEhjQ==", 1572 | "requires": { 1573 | "buffer": "4.9.2", 1574 | "events": "1.1.1", 1575 | "ieee754": "1.1.13", 1576 | "jmespath": "0.16.0", 1577 | "querystring": "0.2.0", 1578 | "sax": "1.2.1", 1579 | "url": "0.10.3", 1580 | "uuid": "3.3.2", 1581 | "xml2js": "0.4.19" 1582 | } 1583 | }, 1584 | "balanced-match": { 1585 | "version": "1.0.2", 1586 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1587 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 1588 | }, 1589 | "base64-js": { 1590 | "version": "1.5.1", 1591 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1592 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1593 | }, 1594 | "brace-expansion": { 1595 | "version": "1.1.11", 1596 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1597 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1598 | "requires": { 1599 | "balanced-match": "^1.0.0", 1600 | "concat-map": "0.0.1" 1601 | } 1602 | }, 1603 | "buffer": { 1604 | "version": "4.9.2", 1605 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 1606 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 1607 | "requires": { 1608 | "base64-js": "^1.0.2", 1609 | "ieee754": "^1.1.4", 1610 | "isarray": "^1.0.0" 1611 | } 1612 | }, 1613 | "buffer-from": { 1614 | "version": "1.1.2", 1615 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1616 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 1617 | }, 1618 | "builtin-modules": { 1619 | "version": "3.0.0", 1620 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", 1621 | "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==" 1622 | }, 1623 | "call-bind": { 1624 | "version": "1.0.2", 1625 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1626 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1627 | "requires": { 1628 | "function-bind": "^1.1.1", 1629 | "get-intrinsic": "^1.0.2" 1630 | } 1631 | }, 1632 | "concat-map": { 1633 | "version": "0.0.1", 1634 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1635 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 1636 | }, 1637 | "debuglog": { 1638 | "version": "1.0.1", 1639 | "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", 1640 | "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" 1641 | }, 1642 | "define-properties": { 1643 | "version": "1.1.4", 1644 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", 1645 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", 1646 | "requires": { 1647 | "has-property-descriptors": "^1.0.0", 1648 | "object-keys": "^1.1.1" 1649 | } 1650 | }, 1651 | "dezalgo": { 1652 | "version": "1.0.4", 1653 | "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", 1654 | "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", 1655 | "requires": { 1656 | "asap": "^2.0.0", 1657 | "wrappy": "1" 1658 | } 1659 | }, 1660 | "diff": { 1661 | "version": "3.5.0", 1662 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 1663 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" 1664 | }, 1665 | "es-abstract": { 1666 | "version": "1.20.1", 1667 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", 1668 | "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", 1669 | "requires": { 1670 | "call-bind": "^1.0.2", 1671 | "es-to-primitive": "^1.2.1", 1672 | "function-bind": "^1.1.1", 1673 | "function.prototype.name": "^1.1.5", 1674 | "get-intrinsic": "^1.1.1", 1675 | "get-symbol-description": "^1.0.0", 1676 | "has": "^1.0.3", 1677 | "has-property-descriptors": "^1.0.0", 1678 | "has-symbols": "^1.0.3", 1679 | "internal-slot": "^1.0.3", 1680 | "is-callable": "^1.2.4", 1681 | "is-negative-zero": "^2.0.2", 1682 | "is-regex": "^1.1.4", 1683 | "is-shared-array-buffer": "^1.0.2", 1684 | "is-string": "^1.0.7", 1685 | "is-weakref": "^1.0.2", 1686 | "object-inspect": "^1.12.0", 1687 | "object-keys": "^1.1.1", 1688 | "object.assign": "^4.1.2", 1689 | "regexp.prototype.flags": "^1.4.3", 1690 | "string.prototype.trimend": "^1.0.5", 1691 | "string.prototype.trimstart": "^1.0.5", 1692 | "unbox-primitive": "^1.0.2" 1693 | } 1694 | }, 1695 | "es-array-method-boxes-properly": { 1696 | "version": "1.0.0", 1697 | "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", 1698 | "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" 1699 | }, 1700 | "es-to-primitive": { 1701 | "version": "1.2.1", 1702 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 1703 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 1704 | "requires": { 1705 | "is-callable": "^1.1.4", 1706 | "is-date-object": "^1.0.1", 1707 | "is-symbol": "^1.0.2" 1708 | } 1709 | }, 1710 | "esprima": { 1711 | "version": "4.0.1", 1712 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1713 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 1714 | }, 1715 | "events": { 1716 | "version": "1.1.1", 1717 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 1718 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" 1719 | }, 1720 | "fs.realpath": { 1721 | "version": "1.0.0", 1722 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1723 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 1724 | }, 1725 | "function-bind": { 1726 | "version": "1.1.1", 1727 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1728 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1729 | }, 1730 | "function.prototype.name": { 1731 | "version": "1.1.5", 1732 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", 1733 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", 1734 | "requires": { 1735 | "call-bind": "^1.0.2", 1736 | "define-properties": "^1.1.3", 1737 | "es-abstract": "^1.19.0", 1738 | "functions-have-names": "^1.2.2" 1739 | } 1740 | }, 1741 | "functions-have-names": { 1742 | "version": "1.2.3", 1743 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 1744 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" 1745 | }, 1746 | "get-intrinsic": { 1747 | "version": "1.1.1", 1748 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1749 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1750 | "requires": { 1751 | "function-bind": "^1.1.1", 1752 | "has": "^1.0.3", 1753 | "has-symbols": "^1.0.1" 1754 | } 1755 | }, 1756 | "get-symbol-description": { 1757 | "version": "1.0.0", 1758 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 1759 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 1760 | "requires": { 1761 | "call-bind": "^1.0.2", 1762 | "get-intrinsic": "^1.1.1" 1763 | } 1764 | }, 1765 | "glob": { 1766 | "version": "7.2.3", 1767 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1768 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1769 | "requires": { 1770 | "fs.realpath": "^1.0.0", 1771 | "inflight": "^1.0.4", 1772 | "inherits": "2", 1773 | "minimatch": "^3.1.1", 1774 | "once": "^1.3.0", 1775 | "path-is-absolute": "^1.0.0" 1776 | } 1777 | }, 1778 | "google-protobuf": { 1779 | "version": "3.20.1", 1780 | "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.20.1.tgz", 1781 | "integrity": "sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==" 1782 | }, 1783 | "graceful-fs": { 1784 | "version": "4.2.10", 1785 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 1786 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" 1787 | }, 1788 | "has": { 1789 | "version": "1.0.3", 1790 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1791 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1792 | "requires": { 1793 | "function-bind": "^1.1.1" 1794 | } 1795 | }, 1796 | "has-bigints": { 1797 | "version": "1.0.2", 1798 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 1799 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" 1800 | }, 1801 | "has-property-descriptors": { 1802 | "version": "1.0.0", 1803 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 1804 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 1805 | "requires": { 1806 | "get-intrinsic": "^1.1.1" 1807 | } 1808 | }, 1809 | "has-symbols": { 1810 | "version": "1.0.3", 1811 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1812 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 1813 | }, 1814 | "has-tostringtag": { 1815 | "version": "1.0.0", 1816 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1817 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1818 | "requires": { 1819 | "has-symbols": "^1.0.2" 1820 | } 1821 | }, 1822 | "hosted-git-info": { 1823 | "version": "2.8.9", 1824 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 1825 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" 1826 | }, 1827 | "ieee754": { 1828 | "version": "1.1.13", 1829 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 1830 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 1831 | }, 1832 | "inflight": { 1833 | "version": "1.0.6", 1834 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1835 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1836 | "requires": { 1837 | "once": "^1.3.0", 1838 | "wrappy": "1" 1839 | } 1840 | }, 1841 | "inherits": { 1842 | "version": "2.0.4", 1843 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1844 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1845 | }, 1846 | "ini": { 1847 | "version": "2.0.0", 1848 | "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", 1849 | "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" 1850 | }, 1851 | "internal-slot": { 1852 | "version": "1.0.3", 1853 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", 1854 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", 1855 | "requires": { 1856 | "get-intrinsic": "^1.1.0", 1857 | "has": "^1.0.3", 1858 | "side-channel": "^1.0.4" 1859 | } 1860 | }, 1861 | "is-bigint": { 1862 | "version": "1.0.4", 1863 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 1864 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 1865 | "requires": { 1866 | "has-bigints": "^1.0.1" 1867 | } 1868 | }, 1869 | "is-boolean-object": { 1870 | "version": "1.1.2", 1871 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 1872 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 1873 | "requires": { 1874 | "call-bind": "^1.0.2", 1875 | "has-tostringtag": "^1.0.0" 1876 | } 1877 | }, 1878 | "is-callable": { 1879 | "version": "1.2.4", 1880 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", 1881 | "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" 1882 | }, 1883 | "is-core-module": { 1884 | "version": "2.9.0", 1885 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 1886 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 1887 | "requires": { 1888 | "has": "^1.0.3" 1889 | } 1890 | }, 1891 | "is-date-object": { 1892 | "version": "1.0.5", 1893 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 1894 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 1895 | "requires": { 1896 | "has-tostringtag": "^1.0.0" 1897 | } 1898 | }, 1899 | "is-negative-zero": { 1900 | "version": "2.0.2", 1901 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 1902 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" 1903 | }, 1904 | "is-number-object": { 1905 | "version": "1.0.7", 1906 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 1907 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 1908 | "requires": { 1909 | "has-tostringtag": "^1.0.0" 1910 | } 1911 | }, 1912 | "is-regex": { 1913 | "version": "1.1.4", 1914 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1915 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1916 | "requires": { 1917 | "call-bind": "^1.0.2", 1918 | "has-tostringtag": "^1.0.0" 1919 | } 1920 | }, 1921 | "is-shared-array-buffer": { 1922 | "version": "1.0.2", 1923 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 1924 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 1925 | "requires": { 1926 | "call-bind": "^1.0.2" 1927 | } 1928 | }, 1929 | "is-string": { 1930 | "version": "1.0.7", 1931 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 1932 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 1933 | "requires": { 1934 | "has-tostringtag": "^1.0.0" 1935 | } 1936 | }, 1937 | "is-symbol": { 1938 | "version": "1.0.4", 1939 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 1940 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 1941 | "requires": { 1942 | "has-symbols": "^1.0.2" 1943 | } 1944 | }, 1945 | "is-weakref": { 1946 | "version": "1.0.2", 1947 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 1948 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 1949 | "requires": { 1950 | "call-bind": "^1.0.2" 1951 | } 1952 | }, 1953 | "isarray": { 1954 | "version": "1.0.0", 1955 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1956 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1957 | }, 1958 | "jmespath": { 1959 | "version": "0.16.0", 1960 | "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", 1961 | "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" 1962 | }, 1963 | "js-yaml": { 1964 | "version": "3.14.1", 1965 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1966 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1967 | "requires": { 1968 | "argparse": "^1.0.7", 1969 | "esprima": "^4.0.0" 1970 | } 1971 | }, 1972 | "json-parse-even-better-errors": { 1973 | "version": "2.3.1", 1974 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1975 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 1976 | }, 1977 | "long": { 1978 | "version": "4.0.0", 1979 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1980 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1981 | }, 1982 | "make-error": { 1983 | "version": "1.3.6", 1984 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1985 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 1986 | }, 1987 | "mime": { 1988 | "version": "2.6.0", 1989 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", 1990 | "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" 1991 | }, 1992 | "minimatch": { 1993 | "version": "3.1.2", 1994 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1995 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1996 | "requires": { 1997 | "brace-expansion": "^1.1.7" 1998 | } 1999 | }, 2000 | "minimist": { 2001 | "version": "1.2.6", 2002 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 2003 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 2004 | }, 2005 | "mkdirp": { 2006 | "version": "0.5.6", 2007 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 2008 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 2009 | "requires": { 2010 | "minimist": "^1.2.6" 2011 | } 2012 | }, 2013 | "normalize-package-data": { 2014 | "version": "2.5.0", 2015 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 2016 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 2017 | "requires": { 2018 | "hosted-git-info": "^2.1.4", 2019 | "resolve": "^1.10.0", 2020 | "semver": "2 || 3 || 4 || 5", 2021 | "validate-npm-package-license": "^3.0.1" 2022 | } 2023 | }, 2024 | "npm-normalize-package-bin": { 2025 | "version": "1.0.1", 2026 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 2027 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" 2028 | }, 2029 | "object-inspect": { 2030 | "version": "1.12.1", 2031 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.1.tgz", 2032 | "integrity": "sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA==" 2033 | }, 2034 | "object-keys": { 2035 | "version": "1.1.1", 2036 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2037 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 2038 | }, 2039 | "object.assign": { 2040 | "version": "4.1.2", 2041 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 2042 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 2043 | "requires": { 2044 | "call-bind": "^1.0.0", 2045 | "define-properties": "^1.1.3", 2046 | "has-symbols": "^1.0.1", 2047 | "object-keys": "^1.1.1" 2048 | } 2049 | }, 2050 | "object.getownpropertydescriptors": { 2051 | "version": "2.1.4", 2052 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", 2053 | "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", 2054 | "requires": { 2055 | "array.prototype.reduce": "^1.0.4", 2056 | "call-bind": "^1.0.2", 2057 | "define-properties": "^1.1.4", 2058 | "es-abstract": "^1.20.1" 2059 | } 2060 | }, 2061 | "once": { 2062 | "version": "1.4.0", 2063 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2064 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2065 | "requires": { 2066 | "wrappy": "1" 2067 | } 2068 | }, 2069 | "path-is-absolute": { 2070 | "version": "1.0.1", 2071 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2072 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 2073 | }, 2074 | "path-parse": { 2075 | "version": "1.0.7", 2076 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2077 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 2078 | }, 2079 | "prisma": { 2080 | "version": "3.14.0", 2081 | "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.14.0.tgz", 2082 | "integrity": "sha512-l9MOgNCn/paDE+i1K2fp9NZ+Du4trzPTJsGkaQHVBufTGqzoYHuNk8JfzXuIn0Gte6/ZjyKj652Jq/Lc1tp2yw==", 2083 | "devOptional": true, 2084 | "requires": { 2085 | "@prisma/engines": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" 2086 | } 2087 | }, 2088 | "protobufjs": { 2089 | "version": "6.11.3", 2090 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", 2091 | "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", 2092 | "requires": { 2093 | "@protobufjs/aspromise": "^1.1.2", 2094 | "@protobufjs/base64": "^1.1.2", 2095 | "@protobufjs/codegen": "^2.0.4", 2096 | "@protobufjs/eventemitter": "^1.1.0", 2097 | "@protobufjs/fetch": "^1.1.0", 2098 | "@protobufjs/float": "^1.0.2", 2099 | "@protobufjs/inquire": "^1.1.0", 2100 | "@protobufjs/path": "^1.1.2", 2101 | "@protobufjs/pool": "^1.1.0", 2102 | "@protobufjs/utf8": "^1.1.0", 2103 | "@types/long": "^4.0.1", 2104 | "@types/node": ">=13.7.0", 2105 | "long": "^4.0.0" 2106 | } 2107 | }, 2108 | "punycode": { 2109 | "version": "1.3.2", 2110 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 2111 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 2112 | }, 2113 | "querystring": { 2114 | "version": "0.2.0", 2115 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2116 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 2117 | }, 2118 | "read-package-json": { 2119 | "version": "2.1.2", 2120 | "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", 2121 | "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", 2122 | "requires": { 2123 | "glob": "^7.1.1", 2124 | "json-parse-even-better-errors": "^2.3.0", 2125 | "normalize-package-data": "^2.0.0", 2126 | "npm-normalize-package-bin": "^1.0.0" 2127 | } 2128 | }, 2129 | "read-package-tree": { 2130 | "version": "5.3.1", 2131 | "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", 2132 | "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", 2133 | "requires": { 2134 | "read-package-json": "^2.0.0", 2135 | "readdir-scoped-modules": "^1.0.0", 2136 | "util-promisify": "^2.1.0" 2137 | } 2138 | }, 2139 | "readdir-scoped-modules": { 2140 | "version": "1.1.0", 2141 | "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", 2142 | "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", 2143 | "requires": { 2144 | "debuglog": "^1.0.1", 2145 | "dezalgo": "^1.0.0", 2146 | "graceful-fs": "^4.1.2", 2147 | "once": "^1.3.0" 2148 | } 2149 | }, 2150 | "regexp.prototype.flags": { 2151 | "version": "1.4.3", 2152 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", 2153 | "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", 2154 | "requires": { 2155 | "call-bind": "^1.0.2", 2156 | "define-properties": "^1.1.3", 2157 | "functions-have-names": "^1.2.2" 2158 | } 2159 | }, 2160 | "require-from-string": { 2161 | "version": "2.0.2", 2162 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2163 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" 2164 | }, 2165 | "resolve": { 2166 | "version": "1.22.0", 2167 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 2168 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 2169 | "requires": { 2170 | "is-core-module": "^2.8.1", 2171 | "path-parse": "^1.0.7", 2172 | "supports-preserve-symlinks-flag": "^1.0.0" 2173 | } 2174 | }, 2175 | "sax": { 2176 | "version": "1.2.1", 2177 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 2178 | "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" 2179 | }, 2180 | "semver": { 2181 | "version": "5.7.1", 2182 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2183 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 2184 | }, 2185 | "side-channel": { 2186 | "version": "1.0.4", 2187 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 2188 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 2189 | "requires": { 2190 | "call-bind": "^1.0.0", 2191 | "get-intrinsic": "^1.0.2", 2192 | "object-inspect": "^1.9.0" 2193 | } 2194 | }, 2195 | "source-map": { 2196 | "version": "0.5.7", 2197 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2198 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 2199 | }, 2200 | "source-map-support": { 2201 | "version": "0.4.18", 2202 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 2203 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 2204 | "requires": { 2205 | "source-map": "^0.5.6" 2206 | } 2207 | }, 2208 | "spdx-correct": { 2209 | "version": "3.1.1", 2210 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 2211 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 2212 | "requires": { 2213 | "spdx-expression-parse": "^3.0.0", 2214 | "spdx-license-ids": "^3.0.0" 2215 | } 2216 | }, 2217 | "spdx-exceptions": { 2218 | "version": "2.3.0", 2219 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 2220 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" 2221 | }, 2222 | "spdx-expression-parse": { 2223 | "version": "3.0.1", 2224 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 2225 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 2226 | "requires": { 2227 | "spdx-exceptions": "^2.1.0", 2228 | "spdx-license-ids": "^3.0.0" 2229 | } 2230 | }, 2231 | "spdx-license-ids": { 2232 | "version": "3.0.11", 2233 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", 2234 | "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" 2235 | }, 2236 | "sprintf-js": { 2237 | "version": "1.0.3", 2238 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2239 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 2240 | }, 2241 | "string.prototype.trimend": { 2242 | "version": "1.0.5", 2243 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", 2244 | "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", 2245 | "requires": { 2246 | "call-bind": "^1.0.2", 2247 | "define-properties": "^1.1.4", 2248 | "es-abstract": "^1.19.5" 2249 | } 2250 | }, 2251 | "string.prototype.trimstart": { 2252 | "version": "1.0.5", 2253 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", 2254 | "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", 2255 | "requires": { 2256 | "call-bind": "^1.0.2", 2257 | "define-properties": "^1.1.4", 2258 | "es-abstract": "^1.19.5" 2259 | } 2260 | }, 2261 | "supports-preserve-symlinks-flag": { 2262 | "version": "1.0.0", 2263 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2264 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" 2265 | }, 2266 | "ts-node": { 2267 | "version": "7.0.1", 2268 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", 2269 | "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", 2270 | "requires": { 2271 | "arrify": "^1.0.0", 2272 | "buffer-from": "^1.1.0", 2273 | "diff": "^3.1.0", 2274 | "make-error": "^1.1.1", 2275 | "minimist": "^1.2.0", 2276 | "mkdirp": "^0.5.1", 2277 | "source-map-support": "^0.5.6", 2278 | "yn": "^2.0.0" 2279 | }, 2280 | "dependencies": { 2281 | "source-map": { 2282 | "version": "0.6.1", 2283 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2284 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 2285 | }, 2286 | "source-map-support": { 2287 | "version": "0.5.21", 2288 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2289 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2290 | "requires": { 2291 | "buffer-from": "^1.0.0", 2292 | "source-map": "^0.6.0" 2293 | } 2294 | } 2295 | } 2296 | }, 2297 | "typescript": { 2298 | "version": "3.7.7", 2299 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.7.tgz", 2300 | "integrity": "sha512-MmQdgo/XenfZPvVLtKZOq9jQQvzaUAUpcKW8Z43x9B2fOm4S5g//tPtMweZUIP+SoBqrVPEIm+dJeQ9dfO0QdA==" 2301 | }, 2302 | "unbox-primitive": { 2303 | "version": "1.0.2", 2304 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 2305 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 2306 | "requires": { 2307 | "call-bind": "^1.0.2", 2308 | "has-bigints": "^1.0.2", 2309 | "has-symbols": "^1.0.3", 2310 | "which-boxed-primitive": "^1.0.2" 2311 | } 2312 | }, 2313 | "upath": { 2314 | "version": "1.2.0", 2315 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", 2316 | "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" 2317 | }, 2318 | "url": { 2319 | "version": "0.10.3", 2320 | "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 2321 | "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", 2322 | "requires": { 2323 | "punycode": "1.3.2", 2324 | "querystring": "0.2.0" 2325 | } 2326 | }, 2327 | "util-promisify": { 2328 | "version": "2.1.0", 2329 | "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", 2330 | "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", 2331 | "requires": { 2332 | "object.getownpropertydescriptors": "^2.0.3" 2333 | } 2334 | }, 2335 | "uuid": { 2336 | "version": "3.3.2", 2337 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 2338 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 2339 | }, 2340 | "validate-npm-package-license": { 2341 | "version": "3.0.4", 2342 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 2343 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 2344 | "requires": { 2345 | "spdx-correct": "^3.0.0", 2346 | "spdx-expression-parse": "^3.0.0" 2347 | } 2348 | }, 2349 | "which-boxed-primitive": { 2350 | "version": "1.0.2", 2351 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 2352 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 2353 | "requires": { 2354 | "is-bigint": "^1.0.1", 2355 | "is-boolean-object": "^1.1.0", 2356 | "is-number-object": "^1.0.4", 2357 | "is-string": "^1.0.5", 2358 | "is-symbol": "^1.0.3" 2359 | } 2360 | }, 2361 | "wrappy": { 2362 | "version": "1.0.2", 2363 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2364 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2365 | }, 2366 | "xml2js": { 2367 | "version": "0.4.19", 2368 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", 2369 | "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", 2370 | "requires": { 2371 | "sax": ">=0.6.0", 2372 | "xmlbuilder": "~9.0.1" 2373 | } 2374 | }, 2375 | "xmlbuilder": { 2376 | "version": "9.0.7", 2377 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 2378 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" 2379 | }, 2380 | "yn": { 2381 | "version": "2.0.0", 2382 | "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", 2383 | "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" 2384 | } 2385 | } 2386 | } 2387 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pulumi-sls-mail-queue", 3 | "main": "src/index.ts", 4 | "devDependencies": { 5 | "@types/aws-lambda": "^8.10.97", 6 | "@types/node": "^14", 7 | "prisma": "^3.14.0" 8 | }, 9 | "dependencies": { 10 | "@prisma/client": "^3.14.0", 11 | "@pulumi/aws": "^5.0.0", 12 | "@pulumi/awsx": "^0.40.0", 13 | "@pulumi/pulumi": "^3.0.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/app/dynamodb/messages.table.ts: -------------------------------------------------------------------------------- 1 | import * as aws from "@pulumi/aws"; 2 | 3 | export const messagesTable = new aws.dynamodb.Table("messages", { 4 | attributes: [ 5 | { 6 | name: "MessageId", 7 | type: "S", 8 | }, 9 | ], 10 | billingMode: "PAY_PER_REQUEST", 11 | hashKey: "MessageId", 12 | }); 13 | 14 | -------------------------------------------------------------------------------- /src/app/dynamodb/pending-recipiens.table.ts: -------------------------------------------------------------------------------- 1 | import * as aws from "@pulumi/aws"; 2 | 3 | export const pendingRecipientsTable = new aws.dynamodb.Table("pending_recipients", { 4 | attributes: [ 5 | { 6 | name: "RecipientId", 7 | type: "S", 8 | }, 9 | ], 10 | billingMode: "PAY_PER_REQUEST", 11 | hashKey: "RecipientId", 12 | }); -------------------------------------------------------------------------------- /src/app/lambda/create-message.lambda.ts: -------------------------------------------------------------------------------- 1 | import * as aws from "@pulumi/aws"; 2 | import { createLambdaRole } from "../../util/create-lambda-role"; 3 | import { messagesTable } from "../dynamodb/messages.table"; 4 | import { mailBucket } from "../s3/mailBucket.s3"; 5 | import { createMessageHandler } from "./handlers/create-message-handler"; 6 | 7 | const { role, policyAttachment } = createLambdaRole({ 8 | name: 'create-message', 9 | policyStatements: [ 10 | { 11 | Effect: "Allow", 12 | Resource: mailBucket.arn.apply(arn => `${arn}/messages/*`), 13 | Action: [ 14 | "s3:*", 15 | ], 16 | }, 17 | { 18 | Effect: "Allow", 19 | Resource: messagesTable.arn, 20 | Action: [ 21 | "dynamodb:PutItem", 22 | ], 23 | } 24 | ] 25 | }) 26 | 27 | export const createMessageLambda = new aws.lambda.CallbackFunction("create-message", { 28 | memorySize: 256, 29 | timeout: 30, 30 | runtime: 'nodejs14.x', 31 | callback: createMessageHandler, 32 | role, 33 | environment: { 34 | variables: { 35 | bucketName: mailBucket.id, 36 | messagesTableName: messagesTable.id, 37 | } 38 | } 39 | }, { 40 | dependsOn: [ 41 | policyAttachment, 42 | ] 43 | }); -------------------------------------------------------------------------------- /src/app/lambda/handlers/create-message-handler.ts: -------------------------------------------------------------------------------- 1 | import * as aws from '@pulumi/aws' 2 | import crypto from 'node:crypto'; 3 | 4 | interface CreateMessageEvent { 5 | from: string; 6 | subject: string; 7 | templateFilePath: string; 8 | recipientListFilePath: string; 9 | } 10 | 11 | export const createMessageHandler = async (event: CreateMessageEvent): Promise => { 12 | const s3 = new aws.sdk.S3() 13 | const db = new aws.sdk.DynamoDB() 14 | // const lambda = new aws.sdk.Lambda() 15 | 16 | const { bucketName, messagesTableName } = process.env; 17 | 18 | if (!bucketName) { 19 | throw new Error('The bucket name was not provided in the environment.'); 20 | } 21 | 22 | if (!messagesTableName) { 23 | throw new Error('The messages table name was not provided in the environment.'); 24 | } 25 | 26 | await Promise.all([ 27 | s3.getObject({ 28 | Key: event.templateFilePath, 29 | Bucket: bucketName, 30 | }).promise(), 31 | s3.getObject({ 32 | Key: event.recipientListFilePath, 33 | Bucket: bucketName, 34 | }).promise() 35 | ]) 36 | 37 | const messageId = crypto.randomUUID(); 38 | 39 | await db.putItem({ 40 | TableName: messagesTableName, 41 | Item: { 42 | MessageId: { 43 | S: messageId, 44 | }, 45 | Subject: { 46 | S: event.subject, 47 | } 48 | }, 49 | ReturnValues: "NONE", 50 | }).promise() 51 | 52 | await Promise.all([ 53 | s3.copyObject({ 54 | CopySource: `${bucketName}/${event.templateFilePath}`, 55 | Bucket: bucketName, 56 | Key: `messages/${messageId}/template.html`, 57 | }).promise(), 58 | s3.copyObject({ 59 | CopySource: `${bucketName}/${event.recipientListFilePath}`, 60 | Bucket: bucketName, 61 | Key: `messages/${messageId}/recipients.json`, 62 | }).promise() 63 | ]); 64 | 65 | return { messageId } 66 | }; 67 | -------------------------------------------------------------------------------- /src/app/lambda/handlers/send-message-handler.ts: -------------------------------------------------------------------------------- 1 | import * as aws from '@pulumi/aws' 2 | import crypto from 'node:crypto'; 3 | 4 | interface SendMessageEvent { 5 | messageId: string; 6 | } 7 | 8 | interface Recipient { 9 | email: string; 10 | [key: string]: any; 11 | } 12 | 13 | export const sendMessageHandler = async (event: SendMessageEvent): Promise => { 14 | const s3 = new aws.sdk.S3() 15 | const db = new aws.sdk.DynamoDB() 16 | 17 | const { 18 | bucketName, 19 | messagesTableName, 20 | pendingRecipientsTableName, 21 | } = process.env; 22 | 23 | if (!bucketName) { 24 | throw new Error('No bucket name was not provided in the environment.'); 25 | } 26 | 27 | if (!messagesTableName) { 28 | throw new Error('No messages table name was not provided in the environment.'); 29 | } 30 | 31 | if (!pendingRecipientsTableName) { 32 | throw new Error('No pending recipients table name was not provided in the environment.'); 33 | } 34 | 35 | await db.updateItem({ 36 | TableName: messagesTableName, 37 | Key: { 38 | MessageId: { 39 | S: event.messageId, 40 | } 41 | }, 42 | UpdateExpression: 'SET SentAt = :sent_at', 43 | ExpressionAttributeValues: { 44 | ':sent_at': { 45 | S: new Date().toISOString(), 46 | } 47 | } 48 | }).promise() 49 | 50 | const recipientsFile = await s3.getObject({ 51 | Key: `messages/${event.messageId}/recipients.json`, 52 | Bucket: bucketName, 53 | }).promise() 54 | 55 | if (!recipientsFile.Body) { 56 | throw new Error('Recipients file is empty.'); 57 | } 58 | 59 | try { 60 | const BATCH_SIZE = 25; 61 | 62 | const recipientList: Recipient[] = JSON.parse(recipientsFile.Body.toString()) 63 | const numberOfBatchWrites = Math.ceil(recipientList.length / BATCH_SIZE); 64 | const batchWritesArray = Array.from({ length: numberOfBatchWrites }, (_, i) => i); 65 | 66 | await Promise.all(batchWritesArray.map(async (batchIndex) => { 67 | const startFrom = batchIndex * BATCH_SIZE; 68 | 69 | const recipientListBatch = recipientList.slice(startFrom, BATCH_SIZE * (batchIndex + 1)); 70 | 71 | const response = await db.batchWriteItem({ 72 | RequestItems: { 73 | [pendingRecipientsTableName]: recipientListBatch.map(({ email, ...metadata }) => { 74 | return { 75 | PutRequest: { 76 | Item: { 77 | RecipientId: { 78 | S: crypto.randomUUID(), 79 | }, 80 | MessageId: { 81 | S: event.messageId, 82 | }, 83 | Email: { 84 | S: email, 85 | }, 86 | } 87 | } 88 | } 89 | }) 90 | }, 91 | ReturnConsumedCapacity: "TOTAL", 92 | }).promise() 93 | 94 | console.log(JSON.stringify(response.ConsumedCapacity)); 95 | })) 96 | } catch (err) { 97 | console.log(err); 98 | throw new Error('Error parsing recipients file (JSON).') 99 | } 100 | }; 101 | -------------------------------------------------------------------------------- /src/app/lambda/handlers/sendMail.ts: -------------------------------------------------------------------------------- 1 | import { SQSEvent, SQSBatchResponse } from "aws-lambda"; 2 | import * as aws from "@pulumi/aws"; 3 | 4 | export const sendMailHandler = async (event: SQSEvent): Promise => { 5 | const ses = new aws.sdk.SES() 6 | 7 | console.log('Records'); 8 | console.log(event.Records.length); 9 | console.log(event.Records); 10 | 11 | const result = await Promise.all(event.Records.map(async message => { 12 | try { 13 | // const mailMessage = await ses.sendEmail({ 14 | // Destination: { 15 | // ToAddresses: [ 16 | // 'Diego Fernandes ' 17 | // ] 18 | // }, 19 | // Source: 'Diego Fernandes ', 20 | // Message: { 21 | // Subject: { 22 | // Data: 'Teste de e-mail (Lambda)' 23 | // }, 24 | // Body: { 25 | // Text: { 26 | // Data: `Esse é um teste de e-mail: ${message.body}` 27 | // } 28 | // } 29 | // } 30 | // }).promise() 31 | 32 | // console.log(`Message: ${message.body}`); 33 | 34 | return { 35 | status: 'sent', 36 | queueMessageId: message.messageId, 37 | // mailMessageId: mailMessage.MessageId 38 | } 39 | } catch (err) { 40 | console.log(err); 41 | 42 | return { 43 | status: 'error', 44 | queueMessageId: message.messageId, 45 | } 46 | } 47 | })) 48 | 49 | const response: SQSBatchResponse = { 50 | batchItemFailures: result 51 | .filter(resultItem => resultItem.status === 'error') 52 | .map(resultItem => { 53 | return { 54 | itemIdentifier: resultItem.queueMessageId, 55 | } 56 | }), 57 | } 58 | 59 | return response; 60 | }; 61 | -------------------------------------------------------------------------------- /src/app/lambda/handlers/sliceMessageInBatches.ts: -------------------------------------------------------------------------------- 1 | import * as aws from '@pulumi/aws' 2 | import { BucketEvent } from "@pulumi/aws/s3"; 3 | 4 | 5 | export const sliceMessageInBatchesHandler = async (event: BucketEvent): Promise => { 6 | const sqs = new aws.sdk.SQS() 7 | 8 | if (!event.Records) { 9 | return; 10 | } 11 | 12 | if (!process.env.queueURL) { 13 | return; 14 | } 15 | 16 | for (const [key, record] of event.Records.entries()) { 17 | try { 18 | 19 | 20 | // await sqs.sendMessageBatch({ 21 | // QueueUrl: process.env.queueURL, 22 | // Entries: [ 23 | // { 24 | // Id: '1', 25 | // MessageBody: record.s3.object.key 26 | // }, 27 | // { 28 | // Id: '2', 29 | // MessageBody: record.s3.object.key 30 | // }, 31 | // { 32 | // Id: '3', 33 | // MessageBody: record.s3.object.key 34 | // }, 35 | // { 36 | // Id: '4', 37 | // MessageBody: record.s3.object.key 38 | // }, 39 | // { 40 | // Id: '5', 41 | // MessageBody: record.s3.object.key 42 | // }, 43 | // { 44 | // Id: '6', 45 | // MessageBody: record.s3.object.key 46 | // }, 47 | // { 48 | // Id: '7', 49 | // MessageBody: record.s3.object.key 50 | // }, 51 | // ] 52 | // }).promise() 53 | } catch (err) { 54 | console.log(err) 55 | } 56 | } 57 | }; 58 | -------------------------------------------------------------------------------- /src/app/lambda/send-message.lambda.ts: -------------------------------------------------------------------------------- 1 | import * as aws from "@pulumi/aws"; 2 | import { createLambdaRole } from "../../util/create-lambda-role"; 3 | import { messagesTable } from "../dynamodb/messages.table"; 4 | import { pendingRecipientsTable } from "../dynamodb/pending-recipiens.table"; 5 | import { mailBucket } from "../s3/mailBucket.s3"; 6 | import { sendMessageHandler } from "./handlers/send-message-handler"; 7 | 8 | const { role, policyAttachment } = createLambdaRole({ 9 | name: 'send-message', 10 | policyStatements: [ 11 | { 12 | Effect: "Allow", 13 | Resource: mailBucket.arn.apply(arn => `${arn}/messages/*`), 14 | Action: [ 15 | "s3:*", 16 | ], 17 | }, 18 | { 19 | Sid: 'UpdateMessages', 20 | Effect: "Allow", 21 | Resource: messagesTable.arn, 22 | Action: [ 23 | "dynamodb:UpdateItem", 24 | ], 25 | }, 26 | { 27 | Sid: 'WriteRecipients', 28 | Effect: "Allow", 29 | Resource: pendingRecipientsTable.arn, 30 | Action: [ 31 | "dynamodb:BatchWriteItem", 32 | ], 33 | } 34 | ] 35 | }) 36 | 37 | export const sendMessageLambda = new aws.lambda.CallbackFunction("send-message", { 38 | memorySize: 256, 39 | timeout: 30, 40 | runtime: 'nodejs14.x', 41 | callback: sendMessageHandler, 42 | role, 43 | environment: { 44 | variables: { 45 | bucketName: mailBucket.id, 46 | messagesTableName: messagesTable.id, 47 | pendingRecipientsTableName: pendingRecipientsTable.id, 48 | } 49 | } 50 | }, { 51 | dependsOn: [ 52 | policyAttachment, 53 | ] 54 | }); -------------------------------------------------------------------------------- /src/app/lambda/sendMail.lambda.ts: -------------------------------------------------------------------------------- 1 | import * as aws from "@pulumi/aws"; 2 | import { createLambdaRole } from "../../util/create-lambda-role"; 3 | import { sendMailQueue } from "../sqs/sendMailQueue.sqs"; 4 | import { sendMailHandler } from "./handlers/sendMail"; 5 | 6 | const { role, policyAttachment } = createLambdaRole({ 7 | name: 'sendMail', 8 | policyStatements: [ 9 | { 10 | Effect: "Allow", 11 | Resource: "*", 12 | Action: [ 13 | "ses:SendEmail", 14 | ], 15 | }, 16 | { 17 | Effect: "Allow", 18 | Resource: sendMailQueue.arn, 19 | Action: [ 20 | "sqs:GetQueueAttributes", 21 | "sqs:ReceiveMessage", 22 | "sqs:DeleteMessage", 23 | ], 24 | } 25 | ] 26 | }) 27 | 28 | export const sendMailLambda = new aws.lambda.CallbackFunction("sendMailLambda", { 29 | memorySize: 256, 30 | timeout: 30, 31 | runtime: 'nodejs14.x', 32 | callback: sendMailHandler, 33 | role, 34 | }, { 35 | dependsOn: [ 36 | policyAttachment, 37 | ] 38 | }); -------------------------------------------------------------------------------- /src/app/lambda/sliceMessageInBatches.lambda.ts: -------------------------------------------------------------------------------- 1 | import * as aws from "@pulumi/aws"; 2 | import { sliceMessageInBatchesHandler } from "./handlers/sliceMessageInBatches"; 3 | import { sendMailQueue } from "../sqs/sendMailQueue.sqs"; 4 | import { createLambdaRole } from "../../util/create-lambda-role"; 5 | 6 | const { role, policyAttachment } = createLambdaRole({ 7 | name: 'sliceMessageInBatches', 8 | policyStatements: [ 9 | { 10 | Effect: "Allow", 11 | Resource: sendMailQueue.arn, 12 | Action: [ 13 | "sqs:GetQueueAttributes", 14 | "sqs:SendMessage", 15 | ], 16 | } 17 | ] 18 | }) 19 | 20 | export const sliceMessageInBatchesLambda = new aws.lambda.CallbackFunction("sliceMessageInBatchesLambda", { 21 | memorySize: 256, 22 | timeout: 30, 23 | runtime: 'nodejs14.x', 24 | callback: sliceMessageInBatchesHandler, 25 | role, 26 | environment: { 27 | variables: { 28 | queueURL: sendMailQueue.url, 29 | } 30 | } 31 | }, { 32 | dependsOn: [ 33 | policyAttachment, 34 | ] 35 | }); -------------------------------------------------------------------------------- /src/app/s3/mailBucket.s3.ts: -------------------------------------------------------------------------------- 1 | import * as aws from '@pulumi/aws'; 2 | 3 | export const mailBucket = new aws.s3.Bucket('mailBucket') 4 | -------------------------------------------------------------------------------- /src/app/sqs/sendMailQueue.sqs.ts: -------------------------------------------------------------------------------- 1 | import * as aws from '@pulumi/aws'; 2 | 3 | export const sendMailQueue = new aws.sqs.Queue('sendMailQueue', { 4 | visibilityTimeoutSeconds: 30, 5 | }) -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { messagesTable } from "./app/dynamodb/messages.table"; 2 | import { pendingRecipientsTable } from "./app/dynamodb/pending-recipiens.table"; 3 | import { createMessageLambda } from "./app/lambda/create-message.lambda"; 4 | import { sendMessageLambda } from "./app/lambda/send-message.lambda"; 5 | // import { sendMailLambda } from "./app/lambda/sendMail.lambda"; 6 | // import { sliceMessageInBatchesLambda } from "./app/lambda/sliceMessageInBatches.lambda"; 7 | import { mailBucket } from "./app/s3/mailBucket.s3"; 8 | import { sendMailQueue } from "./app/sqs/sendMailQueue.sqs"; 9 | 10 | // sendMailQueue.onEvent('mail', sendMailLambda, { 11 | // maximumBatchingWindowInSeconds: 5, 12 | // }); 13 | 14 | // mailBucket.onObjectCreated('sliceListInBatches', sliceMessageInBatchesLambda, { 15 | // filterPrefix: 'messages/', 16 | // filterSuffix: '.json' 17 | // }) 18 | 19 | export = { 20 | sendMailQueueURL: sendMailQueue.id, 21 | bucketName: mailBucket.id, 22 | createMessageLambdaName: createMessageLambda.name, 23 | sendMessageLambdaName: sendMessageLambda.name, 24 | tables: { 25 | pendingRecipients: pendingRecipientsTable.id, 26 | messages: messagesTable.id 27 | } 28 | } -------------------------------------------------------------------------------- /src/util/create-lambda-role.ts: -------------------------------------------------------------------------------- 1 | import * as aws from '@pulumi/aws'; 2 | 3 | import { PolicyStatement } from '@pulumi/aws/iam/documents'; 4 | 5 | const defaultLambdaStatement: PolicyStatement = { 6 | Effect: "Allow", 7 | Resource: "*", 8 | Action: [ 9 | "logs:CreateLogGroup", 10 | "logs:CreateLogStream", 11 | "logs:PutLogEvents", 12 | ], 13 | }; 14 | 15 | interface CreateLambdaRoleParams { 16 | name: string; 17 | policyStatements?: PolicyStatement[]; 18 | } 19 | 20 | export function createLambdaRole({ 21 | name, 22 | policyStatements = [], 23 | }: CreateLambdaRoleParams) { 24 | const role = new aws.iam.Role(`${name}-lambda-role`, { 25 | assumeRolePolicy: aws.iam.assumeRolePolicyForPrincipal({ Service: "lambda.amazonaws.com" }), 26 | }); 27 | 28 | const lambdaSESPolicy = new aws.iam.Policy(`${name}-lambda-policy`, { 29 | path: "/", 30 | policy: { 31 | Version: "2012-10-17", 32 | Statement: policyStatements.concat(defaultLambdaStatement), 33 | }, 34 | }); 35 | 36 | const policyAttachment = new aws.iam.RolePolicyAttachment( 37 | `${name}-lambda-policy-attachment`, 38 | { 39 | policyArn: lambdaSESPolicy.arn, 40 | role: role.name, 41 | }, 42 | ); 43 | 44 | return { 45 | role, 46 | policyAttachment, 47 | }; 48 | } -------------------------------------------------------------------------------- /test/create-message-payload.json: -------------------------------------------------------------------------------- 1 | { 2 | "subject": "Teste de mensagem", 3 | "from": "Diego Fernandes ", 4 | "templateFilePath": "messages/tmp/templates/message.html", 5 | "recipientListFilePath": "messages/tmp/recipients/recipients.json" 6 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "outDir": "bin", 5 | "target": "es2020", 6 | "module": "commonjs", 7 | "moduleResolution": "node", 8 | "sourceMap": true, 9 | "experimentalDecorators": true, 10 | "esModuleInterop": true, 11 | "pretty": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "noImplicitReturns": true, 14 | "forceConsistentCasingInFileNames": true 15 | }, 16 | "include": ["src"] 17 | } 18 | --------------------------------------------------------------------------------