diff --git a/.github/workflows/build-and-push.yaml b/.github/workflows/build-and-push.yaml new file mode 100644 index 0000000..7e98f02 --- /dev/null +++ b/.github/workflows/build-and-push.yaml @@ -0,0 +1,17 @@ +on: + push: + branches: main + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '20' + - run: npm ci + - run: npm test + - uses: JS-DevTools/npm-publish@v3 + with: + token: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index c6bba59..1a51275 100644 --- a/.gitignore +++ b/.gitignore @@ -128,3 +128,5 @@ dist .yarn/build-state.yml .yarn/install-state.gz .pnp.* + +lib diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..eb0e50a --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..4dcb773 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,9 @@ +// @ts-check + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended +); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d03855a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1669 @@ +{ + "name": "mono-openapi", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mono-openapi", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@types/node": "^20.12.10", + "openapi-fetch": "^0.9.5" + }, + "devDependencies": { + "@eslint/js": "^9.2.0", + "eslint": "^8.57.0", + "prettier": "3.2.5", + "typescript": "^5.4.5", + "typescript-eslint": "^7.8.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.2.0.tgz", + "integrity": "sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", + "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openapi-fetch": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/openapi-fetch/-/openapi-fetch-0.9.5.tgz", + "integrity": "sha512-ToRnypJB2G5bEUZqJ4mGty/qDVgAZ4BW0znlXQAECxAp4EM8dYtgQ1mrw2Ij6W7knN4VawHvFq8uTqzXyMGNPA==", + "dependencies": { + "openapi-typescript-helpers": "^0.0.8" + } + }, + "node_modules/openapi-typescript-helpers": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.8.tgz", + "integrity": "sha512-1eNjQtbfNi5Z/kFhagDIaIRj6qqDzhjNJKz8cmMW0CVdGwT6e1GLbAfgI0d28VTJa1A8jz82jm/4dG8qNoNS8g==" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.8.0.tgz", + "integrity": "sha512-sheFG+/D8N/L7gC3WT0Q8sB97Nm573Yfr+vZFzl/4nBdYcmviBPtwGSX9TJ7wpVg28ocerKVOt+k2eGmHzcgVA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.8.0", + "@typescript-eslint/parser": "7.8.0", + "@typescript-eslint/utils": "7.8.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d81c6c7 --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "author": "Demian Parkhomenko <95881717+DemianParkhomenko@users.noreply.github.com>", + "bugs": { + "url": "https://github.com/DemianParkhomenko/mono-openapi/issues" + }, + "dependencies": { + "@types/node": "^20.12.10", + "openapi-fetch": "^0.9.5" + }, + "description": "Monobank client", + "devDependencies": { + "@eslint/js": "^9.2.0", + "eslint": "^8.57.0", + "prettier": "3.2.5", + "typescript": "^5.4.5", + "typescript-eslint": "^7.8.0" + }, + "files": [ + "/lib", + "!/lib/Tests" + ], + "keywords": [ + "monobank", + "openapi", + "client", + "api", + "swagger", + "mono", + "bank", + "typesafe" + ], + "license": "MIT", + "main": "lib/index.js", + "name": "mono-openapi", + "readmeFilename": "README.md", + "repository": { + "type": "git", + "url": "git+https://github.com/DemianParkhomenko/mono-openapi" + }, + "scripts": { + "build": "tsc", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "type": "module", + "types": "lib/index.d.ts", + "version": "1.0.0" +} diff --git a/src/generated/acquiring.d.ts b/src/generated/acquiring.d.ts new file mode 100644 index 0000000..5aba40d --- /dev/null +++ b/src/generated/acquiring.d.ts @@ -0,0 +1,2097 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + + +export interface paths { + "/api/merchant/invoice/create": { + /** + * Створення рахунку + * @description Створення рахунку для оплати + */ + post: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + /** @description Назва CMS, якщо ви розробляєте платіжний модуль для CMS */ + "X-Cms"?: string; + /** @description Версія CMS, якщо ви розробляєте платіжний модуль для CMS */ + "X-Cms-Version"?: string; + }; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["InvoiceCreateRequest"]; + }; + }; + responses: { + /** @description Посилання на оплату рахунку */ + 200: { + content: { + "application/json": components["schemas"]["InvoiceCreateResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Пошук за одним із параметрів запиту завершився неуспішно */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/invoice/status?invoiceId={invoiceId}": { + /** + * Статус рахунку + * @description Метод перевірки статусу рахунку при розсинхронізації з боку продавця або відсутності webHookUrl при створенні рахунку. + */ + get: { + parameters: { + query?: { + /** @description Ідентифікатор рахунку */ + invoiceId?: string; + }; + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Інформація про рахунок */ + 200: { + content: { + "application/json": components["schemas"]["InvoiceStatusResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Рахунок не знайдено */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/invoice/cancel": { + /** + * Скасування оплати + * @description Скасування успішної оплати рахунку + */ + post: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["InvoiceCancelRequest"]; + }; + }; + responses: { + /** @description Статус операції скасування */ + 200: { + content: { + "application/json": components["schemas"]["InvoiceCancelResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Рахунок не знайдено */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/invoice/remove": { + /** + * Інвалідація рахунку + * @description Інвалідація рахунку, якщо за ним ще не було здіснено оплати + */ + post: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["InvoiceRemoveRequest"]; + }; + }; + responses: { + /** @description Інвойс було деактивовано, пуста відповідь */ + 200: { + content: { + "application/json": components["schemas"]["EmptyResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Рахунок не знайдено */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/pubkey": { + /** + * Відкритий ключ для верифікації підписів + * @description Отримання відкритого ключа для перевірки підпису, який включено у вебхуки. Ключ можна кешувати і робити запит на отримання нового, коли верифікація підпису з поточним ключем перестане працювати. Кожного разу робити запит на отримання ключа не треба + */ + get: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Base64-закодований ECDSA відкритий ключ */ + 200: { + content: { + "application/json": components["schemas"]["PubkeyResponse"]; + }; + }; + /** @description Токен відсутній */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/invoice/finalize": { + /** Фіналізація суми холду */ + post: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["InvoiceFinalizeRequest"]; + }; + }; + responses: { + /** @description Результат фіналізації */ + 200: { + content: { + "application/json": components["schemas"]["InvoiceFinalizeResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Рахунок не знайдено */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/qr/details?qrId={qrId}": { + /** + * Інформація про QR-касу + * @description Інформація про QR-касу, лише для активованих QR-кас + */ + get: { + parameters: { + query?: { + /** @description Ідентифікатор QR-каси */ + qrId?: string; + }; + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Інформація про QR-касу */ + 200: { + content: { + "application/json": components["schemas"]["QrDetailsResponse"]; + }; + }; + /** @description Ідентифікатор QR-каси невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description QR-касу не знайдено */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/qr/reset-amount": { + /** Видалення суми оплати */ + post: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["QrResetRequest"]; + }; + }; + responses: { + /** @description Суму було видалено, пуста відповідь */ + 200: { + content: { + "application/json": components["schemas"]["EmptyResponse"]; + }; + }; + /** @description Ідентифікатор QR-каси невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description QR-касу не знайдено */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/qr/list": { + /** Список QR-кас */ + get: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Список QR-кас */ + 200: { + content: { + "application/json": components["schemas"]["QrListResponse"]; + }; + }; + /** @description Токен відсутній */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/details": { + /** Дані мерчанта */ + get: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Дані мерчанта */ + 200: { + content: { + "application/json": components["schemas"]["MerchantDetailsResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/statement": { + /** Виписка за період */ + get: { + parameters: { + query?: { + /** @description utc unix timestamp */ + from?: number; + /** @description utc unix timestamp */ + to?: number; + }; + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Виписка */ + 200: { + content: { + "application/json": components["schemas"]["MerchantStatementResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/wallet/card": { + /** Видалення токенізованої картки */ + delete: { + parameters: { + query?: { + /** @description Токен картки */ + cardToken?: string; + }; + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Картку видалено */ + 200: { + content: { + "application/json": components["schemas"]["EmptyResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/wallet": { + /** Список карток у гаманці */ + get: { + parameters: { + query?: { + /** @description Ідентифікатор гаманця покупця */ + walletId?: string; + }; + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Список токенізованих карток */ + 200: { + content: { + "application/json": components["schemas"]["MerchantWalletResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/wallet/payment": { + /** + * Оплата по токену + * @description Створення платежу за токеном картки + */ + post: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + /** @description Назва CMS, якщо ви розробляєте платіжний модуль для CMS */ + "X-Cms"?: string; + /** @description Версія CMS, якщо ви розробляєте платіжний модуль для CMS */ + "X-Cms-Version"?: string; + }; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["MerchantWalletPaymentRequest"]; + }; + }; + responses: { + /** @description Дані платежу */ + 200: { + content: { + "application/json": components["schemas"]["MerchantWalletPaymentResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/invoice/payment-direct": { + /** + * Оплата за реквізитами + * @description Створення рахунку та його оплата за реквізитами картки. Увага, це апі буде працювати тільки за умови наявності у мерчанта активного PCI DSS сертифіката! + */ + post: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + /** @description Назва CMS, якщо ви розробляєте платіжний модуль для CMS */ + "X-Cms"?: string; + /** @description Версія CMS, якщо ви розробляєте платіжний модуль для CMS */ + "X-Cms-Version"?: string; + }; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["PaymentDirectRequest"]; + }; + }; + responses: { + /** @description Дані рахунку та оплати */ + 200: { + content: { + "application/json": components["schemas"]["MerchantWalletPaymentResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/submerchant/list": { + /** + * Список субмерчантів + * @description Дане апі потрібне обмеженому колу осіб, яким при створенні рахунку треба явно вказувати термінал + */ + get: { + parameters: { + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Список субмерчантів */ + 200: { + content: { + "application/json": components["schemas"]["SubmerchantListResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/invoice/fiscal-checks?invoiceId={invoiceId}": { + /** + * Фіскальні чеки + * @description Метод для отримання даних фіскальних чеків та їх статусів + */ + get: { + parameters: { + query?: { + /** @description Ідентифікатор рахунку */ + invoiceId?: string; + }; + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Список фіскальних чеків */ + 200: { + content: { + "application/json": components["schemas"]["FiscalCheckListResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Інвойс не знайдено */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; + "/api/merchant/invoice/payment-info?invoiceId={invoiceId}": { + /** + * DEPRECATED — Розширена інформація про успішну оплату\n + * @description **Дані апі застаріле! Слід використовувати Статус рахунку, замість цього апі** \n\nДані про успішну оплату, якщо вона була здійснена\n + */ + get: { + parameters: { + query?: { + /** @description Ідентифікатор рахунку */ + invoiceId?: string; + }; + header?: { + /** @description Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/ */ + "X-Token"?: string; + }; + }; + responses: { + /** @description Інформація про успішну оплату */ + 200: { + content: { + "application/json": components["schemas"]["InvoicePaymentInfoResponse"]; + }; + }; + /** @description Один із вхідних параметрів невалідний */ + 400: { + content: { + "application/json": components["schemas"]["BadRequestError"]; + }; + }; + /** @description Токен невалідний */ + 403: { + content: { + "application/json": components["schemas"]["ForbiddenError"]; + }; + }; + /** @description Рахунок не знайдено */ + 404: { + content: { + "application/json": components["schemas"]["NotFoundError"]; + }; + }; + /** @description Http-метод невалідний */ + 405: { + content: { + "application/json": components["schemas"]["MethodNotAllowedError"]; + }; + }; + /** @description Занадто багато запитів */ + 429: { + content: { + "application/json": components["schemas"]["TooManyRequestsError"]; + }; + }; + /** @description Під час виконання запиту виникла непередбачена помилка */ + 500: { + content: { + "application/json": components["schemas"]["InternalServerError"]; + }; + }; + }; + }; + }; +} + +export type webhooks = Record; + +export interface components { + schemas: { + CancelListItem: { + /** + * @description Статус заяви скасування:\n\n `processing` - заява на скасування знаходиться в обробці\n\n `success` - заяву на скасування виконано успішно\n\n `failure` - неуспішне скасування\n + * @enum {string} + */ + status: "processing" | "success" | "failure"; + /** + * Format: int64 + * @description Сума у мінімальних одиницях + * @example 4200 + */ + amount?: number; + /** + * Format: int32 + * @description ISO 4217 код валюти + * @example 980 + */ + ccy?: number; + /** + * Format: date-time + * @description Дата і час створення заяви на скасування + */ + createdDate: string; + /** + * Format: date-time + * @description Дата і час останньої модифікації операції скасування + */ + modifiedDate: string; + /** + * @description Код авторизації + * @example 662476 + */ + approvalCode?: string; + /** + * @description Ідентифікатор транзакції в платіжній системі + * @example 060189181768 + */ + rrn?: string; + /** + * @description Референс операції скасування, який було вказано продавцем + * @example 635ace02599849e981b2cd7a65f417fe + */ + extRef?: string; + }; + QrListItem: { + /** + * @description Короткий ідентифікатор QR-каси + * @example OBJE + */ + shortQrId: string; + /** + * @description Ідентифікатор QR-каси для встановлення суми оплати на існуючих QR-кас + * @example XJ_DiM4rTd5V + */ + qrId: string; + /** + * @description Тип суми одноразової каси:\n\n `merchant` - суму встановлює мерчант\n\n `client` - суму встановлює клієнт\n\n `fix` - сума фіксована\n + * @enum {string} + */ + amountType: "merchant" | "client" | "fix"; + /** + * @description Посилання на оплату QR-каси + * @example https://pay.mbnk.biz/XJ_DiM4rTd5V + */ + pageUrl: string; + }; + MerchantStatementItem: { + /** + * @description Ідентифікатор рахунку, за яким здійснювалась оплата + * @example 2205175v4MfatvmUL2oR + */ + invoiceId: string; + /** + * @example success + * @enum {string} + */ + status: "hold" | "processing" | "success" | "failure"; + /** + * @description Маскований номер картки, за якою здійснювалась оплата + * @example 444403******1902 + */ + maskedPan: string; + /** + * Format: date-time + * @description Дата і час фін. операції у форматі RFC-3339 + */ + date: string; + /** + * @description Схема оплати:\n\n `bnpl_later_30` - bnpl-оплата\n\n `bnpl_parts_4` - платіж 4 частини\n\n `full` - повна оплата\n + * @enum {string} + */ + paymentScheme: "bnpl_later_30" | "bnpl_parts_4" | "full"; + /** + * Format: int64 + * @description Сума оплати у мінімальних одиницях (копійки для гривні) + * @example 4200 + */ + amount: number; + /** + * Format: int64 + * @description Сума, яку отримає мерчант на свій рахунок після взаєморозрахунку з банком + * @example 4100 + */ + profitAmount?: number; + /** + * Format: int32 + * @description ISO 4217 код валюти + * @example 980 + */ + ccy: number; + /** + * @description Код авторизації транзакції + * @example 662476 + */ + approvalCode?: string; + /** + * @description Ідентифікатор транзакції в платіжній системі + * @example 060189181768 + */ + rrn?: string; + /** + * @description Номер чека, замовлення, тощо, який було вказано мерчантом при створенні рахунку + * @example 84d0070ee4e44667b31371d8f8813947 + */ + reference?: string; + /** + * @description Короткий ідентифікатор QR-каси + * @example OBJE + */ + shortQrId?: string; + /** + * @description Призначення платежу, визначається продавцем + * @example Покупка щастя + */ + destination?: string; + /** @description Перелік операцій скасування */ + cancelList?: { + /** + * Format: int64 + * @description Сума оплати у мінімальних одиницях (копійки для гривні) + * @example 4200 + */ + amount: number; + /** + * Format: int32 + * @description ISO 4217 код валюти + * @example 980 + */ + ccy: number; + /** + * Format: date-time + * @description Дата і час фін. операції у форматі RFC-3339 + */ + date: string; + /** + * @description Код авторизації транзакції + * @example 662476 + */ + approvalCode?: string; + /** + * @description Ідентифікатор транзакції в платіжній системі + * @example 060189181768 + */ + rrn?: string; + /** + * @description Маскований номер картки, на яку здійснювалось повернення коштів + * @example 444403******1902 + */ + maskedPan: string; + }[]; + }; + InvoiceCreateRequest: { + /** + * Format: int64 + * @description Сума оплати у мінімальних одиницях (копійки для гривні) + * @example 4200 + */ + amount: number; + /** + * Format: int32 + * @description ISO 4217 код валюти, за замовчуванням 980 (гривня) + * @example 980 + */ + ccy?: number; + merchantPaymInfo?: components["schemas"]["MerchantPaymInfoItem"]; + /** + * @description Адреса для повернення (GET) - на цю адресу буде переадресовано користувача після завершення оплати (у разі успіху або помилки) + * @example https://example.com/your/website/result/page + */ + redirectUrl?: string; + /** + * @description Адреса для CallBack (POST) – на цю адресу буде надіслано дані про стан платежу при кожній зміні статусу. Зміст тіла запиту ідентичний відповіді запиту “Статус рахунку”. **Гарантії доставки повідомлень одне за одним не надається. Тобто, може бути ситуація, коли вебхук про успішну оплату (`status=success`) прийде пізніше за вебхук про обробку цієї оплати (`status=processing`). Краще орієнтуватись на поле `modifiedDate` при аналізі поточного статусу рахунку. Вебхук із більшим `modifiedDate` буде актуальним** + * @example https://example.com/mono/acquiring/webhook/maybesomegibberishuniquestringbutnotnecessarily + */ + webHookUrl?: string; + /** + * Format: int64 + * @description Строк дії в секундах, за замовчуванням рахунок перестає бути дійсним через 24 години + * @example 3600 + */ + validity?: number; + /** + * @description Тип операції. Для значення `hold` термін складає 9 днів. Якщо через 9 днів холд не буде фіналізовано — він скасовується + * @default debit + * @enum {string} + */ + paymentType?: "debit" | "hold"; + /** + * @description Ідентифікатор QR-каси для встановлення суми оплати на існуючих QR-кас + * @example XJ_DiM4rTd5V + */ + qrId?: string; + /** + * @description Код терміналу субмерчанта, з апі 'Список субмерчантів'. Доступний обмеженому колу мерчантів, які точно знають, що їм це потрібно + * @example 0a8637b3bccb42aa93fdeb791b8b58e9 + */ + code?: string; + /** @description Дані для збереження (токенізації) картки. Для підключення функції, зверніться, будь ласка, в підтримку monobank. Токенізація недоступна за замовчуванням */ + saveCardData?: { + /** @description Ознака зберігання картки (токенізації) після оплати */ + saveCard: boolean; + /** + * @description Ідентифікатор гаманця користувача + * @example 69f780d841a0434aa535b08821f4822c + */ + walletId?: string; + }; + }; + /** @description Інформаційні дані замовлення, яке буде оплачуватсь. Обовʼязково вказувати при активній звʼязці з ПРРО (звʼязка створюється у веб-кабінеті https://web.monobank.ua) */ + MerchantPaymInfoItem: { + /** + * @description Номер чека, замовлення, тощо; визначається мерчантом + * @example 84d0070ee4e44667b31371d8f8813947 + */ + reference?: string; + /** + * @description Призначення платежу + * @example Покупка щастя + */ + destination?: string; + /** + * @description Службове інформаційне поле + * @example Покупка щастя + */ + comment?: string; + /** + * @description Масив пошт, на які потрібно відправити фіскальний чек, якщо у мерчанта активна звʼязка з checkbox + * @example [] + */ + customerEmails?: string[]; + /** @description Склад замовлення, використовується для відображення кошика замовлення, обовʼязково вказувати при активній звʼязці з ПРРО (звʼязка створюється у веб-кабінеті https://web.monobank.ua або через портал check by mono https://www.monobank.ua/check) */ + basketOrder?: ({ + /** + * @description Назва товару + * @example Табуретка + */ + name: string; + /** + * Format: float + * @description Кількість одиниць товару + * @example 2 + */ + qty: number; + /** + * Format: int64 + * @description Сума у мінімальних одиницях валюти за одиницю товару; якщо ви торгуєте табуретками, ціна якої 21 гривня, і у вас замовлення на 2 табуретки, то qty=2, sum=2100, amount=4200 + * @example 2100 + */ + sum: number; + /** @description Лінк на зображення товару */ + icon?: string; + /** + * @description Назва одиниці вимiру товару + * @example шт. + */ + unit?: string; + /** + * @description Код товару, обов'язковий для фіскалізації + * @example d21da1c47f3c45fca10a10c32518bdeb + */ + code: string; + /** @description Значення штрих-коду, може бути потрібно для фіскалізації */ + barcode?: string; + /** @description Текст, що передує назві товару, може бути потрібний для фіскалізації */ + header?: string; + /** @description Текст, після товару, може бути потрібний для фіскалізації */ + footer?: string; + /** + * @description Масив податкових ставок, які було обрано на порталі Checkbox при реєстрації каси. При використанні ПРРО monopay податкові ставки наразі не застосовуються + * @example [] + */ + tax?: number[]; + /** @description Код УКТ ЗЕД */ + uktzed?: string; + /** @description Масив знижок або надбавок, які будуть передані в checkbox для фіскалізації, якщо звʼязку з checkbox активовано */ + discounts?: ({ + /** + * @description Тип знижки або надбавки\n`DISCOUNT` — знижка\n`EXTRA_CHARGE` — надбавка\n + * @enum {string} + */ + type: "DISCOUNT" | "EXTRA_CHARGE"; + /** + * @description Режим знижки або надбавки\n`PERCENT` — відсоток від basketOrder.sum * basketOrder.qty\n\n`VALUE` — числове значення\n + * @enum {string} + */ + mode: "PERCENT" | "VALUE"; + /** + * @description Значення, яке буде фігурувати в розрахунках + * @enum {number} + */ + value: PERCENT | VALUE; + })[]; + })[]; + }; + InvoiceCreateResponse: { + /** + * @description Ідентифікатор рахунку, унікальний + * @example p2_9ZgpZVsl3 + */ + invoiceId: string; + /** + * @description Посилання на сторінку оплати + * @example https://pay.mbnk.biz/p2_9ZgpZVsl3 + */ + pageUrl: string; + }; + PaymentDirectRequest: { + /** + * Format: int64 + * @description Сума оплати у мінімальних одиницях (копійки для гривні) + * @example 4200 + */ + amount: number; + /** + * Format: int32 + * @description ISO 4217 код валюти, за замовчуванням 980 (гривня) + * @example 980 + */ + ccy?: number; + /** @description Дані картки */ + cardData: { + /** + * @description Номер картки + * @example 4242424242424242 + */ + pan: string; + /** + * @description Термін дії картки у форматі `mmyy` + * @example 0642 + */ + exp: string; + /** + * @description Cvv + * @example 123 + */ + cvv: string; + }; + merchantPaymInfo?: components["schemas"]["MerchantPaymInfoItem"]; + /** + * @description Адреса для CallBack (POST) – на цю адресу буде надіслано дані про стан платежу при кожній зміні статусу. Зміст тіла запиту ідентичний відповіді запиту “Статус рахунку”. **Гарантії доставки повідомлень одне за одним не надається. Тобто, може бути ситуація, коли вебхук про успішну оплату (`status=success`) прийде пізніше за вебхук про обробку цієї оплати (`status=processing`). Краще орієнтуватись на поле `modifiedDate` при аналізі поточного статусу рахунку. Вебхук із більшим `modifiedDate` буде актуальним** + * @example https://example.com/mono/acquiring/webhook/maybesomegibberishuniquestringbutnotnecessarily + */ + webHookUrl?: string; + /** + * @description Тип операції. Для значення `hold` термін складає 9 днів. Якщо через 9 днів холд не буде фіналізовано — він скасовується + * @default debit + * @enum {string} + */ + paymentType?: "debit" | "hold"; + /** @description Дані для збереження (токенізації) картки. Для підключення функції, зверніться, будь ласка, в підтримку monobank. Токенізація недоступна за замовчуванням */ + saveCardData?: { + /** @description Ознака зберігання картки (токенізації) після оплати */ + saveCard: boolean; + /** + * @description Ідентифікатор гаманця користувача + * @example 69f780d841a0434aa535b08821f4822c + */ + walletId?: string; + }; + /** + * @description Адреса для повернення (GET) - на цю адресу буде переадресовано користувача після завершення оплати (у разі успіху або помилки), це поле обовʼязкове при `initiationKind=client` + * @example https://example.com/your/website/result/page + */ + redirectUrl?: string; + /** + * @description Тип проведення платежу:\n\n `merchant` - платіж з ініціативи мерчанта, наприклад, регулярний платіж — коли клієнт не бере участі у підтвердженні платежу\n\n `client` - платіж за вимогою клієнта\n + * @enum {string} + */ + initiationKind?: "merchant" | "client"; + }; + InvoiceStatusResponse: { + /** + * @description Ідентифікатор рахунку + * @example p2_9ZgpZVsl3 + */ + invoiceId: string; + /** + * @description Статус операції:\n\n `created` - рахунок створено успішно, очікується оплата\n\n `processing` - платіж обробляється\n\n `hold` - сума заблокована\n\n `success` - успішна оплата\n\n `failure` - неуспішна оплата\n\n `reversed` - оплата повернена після успіху\n\n `expired` - час дії вичерпано\n\n\nУ випадку вебхуків гарантії доставки повідомлень одне за одним не надається. Тобто, може бути ситуація, коли вебхук про успішну оплату (`success`) прийде пізніше за вебхук про обробку цієї оплати (`status=processing`). Краще орієнтуватись на поле `modifiedDate` при аналізі поточного статусу рахунку. Вебхук із більшим `modifiedDate` буде актуальним\n + * @enum {string} + */ + status: "created" | "processing" | "hold" | "success" | "failure" | "reversed" | "expired"; + /** + * @description Причина відмови + * @example Неправильний CVV код + */ + failureReason?: string; + /** + * @description Код помилки, яка виникла під час обробки платежу. Що цей код означає, і куди звернутися можна в розділі 'Помилки в процесі оплати' + * @example 59 + */ + errCode?: string; + /** + * Format: int64 + * @description Сума у мінімальних одиницях валюти + * @example 4200 + */ + amount: number; + /** + * Format: int32 + * @description Валюта + * @example 980 + */ + ccy: number; + /** + * Format: int64 + * @description Підсумкова сума у мінімальних одиницях валюти, змінюється після оплати та повернень + * @example 4200 + */ + finalAmount?: number; + /** + * Format: date-time + * @description Дата і час фін. операції + */ + createdDate?: string; + /** + * Format: date-time + * @description Дата і час останньої модифікації операції + */ + modifiedDate?: string; + /** + * @description Референс платежу, який визначається продавцем + * @example 84d0070ee4e44667b31371d8f8813947 + */ + reference?: string; + /** + * @description Призначення платежу, визначається продавцем + * @example Покупка щастя + */ + destination?: string; + /** @description Список прийнятих заявок на скасування */ + cancelList?: components["schemas"]["CancelListItem"][]; + /** @description Дані оплати, можуть бути `status=processing`, `status=success`, `status=failure`, `status=reversed` */ + paymentInfo?: { + /** + * @description Маскований номер картки, за якою здійснювалась оплата + * @example 444403******1902 + */ + maskedPan: string; + /** + * @description Код авторизації транзакції + * @example 662476 + */ + approvalCode?: string; + /** + * @description Ідентифікатор транзакції в платіжній системі + * @example 060189181768 + */ + rrn?: string; + /** + * @description Ідентифікатор транзакції + * @example 13194036 + */ + tranId?: string; + /** + * @description Ідентифікатор платіжного пристрою, через який пройшла транзакція + * @example MI001088 + */ + terminal: string; + /** + * @description Назва банку картки, якою проводилася оплата + * @example Універсал Банк + */ + bank?: string; + /** + * @description Назва платіжної системи картки + * @example visa + * @enum {string} + */ + paymentSystem: "visa" | "mastercard"; + /** + * @description Метод оплати:\n\n `pan` - оплата була здійснена за введеним номером картки\n\n `apple` - оплата була здійснена через apple pay\n\n `google` - оплата була здійснена через google pay\n\n `monobank` - оплата була здійснена через monobank\n\n `wallet` - оплата була здійснена токенізованою карткою\n\n `direct` - оплата була здійснена через апі \'Оплата за реквізитами\' (за умови, що у мерчанта був PCI DSS сертифікат)\n + * @enum {string} + */ + paymentMethod: "pan" | "apple" | "google" | "monobank" | "wallet" | "direct"; + /** + * Format: int64 + * @description Еквайрингова комісія в мінімальних одиницях + */ + fee?: number; + /** + * @description Країна банку (ISO-3166-1 numeric), якому належить картка, якою була здійснена оплата + * @example 804 + */ + country?: string; + }; + /** @description Параметри картки */ + walletData?: { + /** + * @description Токен картки + * @example 67XZtXdR4NpKU3 + */ + cardToken: string; + /** + * @description Ідентифікатор гаманця покупця + * @example c1376a611e17b059aeaf96b73258da9c + */ + walletId: string; + /** + * @description Статус токенізації картки:\n\n `new` - прийнято заявку на токенізацію\n\n `created` - картку успішно токенізовано\n\n `failed` - картку не вдалось токенізувати \n + * @enum {string} + */ + status: "new" | "created" | "failed"; + }; + }; + InvoiceCancelRequest: { + /** + * @description Ідентифікатор рахунку + * @example p2_9ZgpZVsl3 + */ + invoiceId: string; + /** + * @description Референс операції скасування, який визначається продавцем + * @example 635ace02599849e981b2cd7a65f417fe + */ + extRef?: string; + /** + * Format: int64 + * @description Сума у мінімальних одиницях (при частковому поверненні) + * @example 5000 + */ + amount?: number; + /** @description Список товарів для створення чеку повернення, поле обов\'язкове у випадку активованої опції фіскалізації */ + items?: components["schemas"]["FiscalizationItem"][]; + }; + InvoiceRemoveRequest: { + /** + * @description Ідентифікатор рахунку + * @example p2_9ZgpZVsl3 + */ + invoiceId: string; + }; + EmptyResponse: Record; + InvoiceCancelResponse: { + /** + * @description Статус операції:\n\n `processing` - заява на скасування знаходиться в обробці\n\n `success` - заяву на скасування виконано успішно\n\n `failure` - неуспішне скасування\n + * @enum {string} + */ + status: "processing" | "success" | "failure"; + /** + * Format: date-time + * @description Дата і час створення заяви на скасування + */ + createdDate: string; + /** + * Format: date-time + * @description Дата і час останньої модифікації операції скасування + */ + modifiedDate: string; + }; + InvoicePaymentInfoResponse: { + /** + * @description Маскований номер картки, за якою здійснювалась оплата + * @example 444403******1902 + */ + maskedPan: string; + /** + * @description Код авторизації транзакції + * @example 662476 + */ + approvalCode: string; + /** + * @description Ідентифікатор транзакції в платіжній системі + * @example 060189181768 + */ + rrn: string; + /** + * Format: int64 + * @description Сума авторизації у мінімальних одиницях валюти + * @example 4200 + */ + amount: number; + /** + * Format: int32 + * @description Валюта + * @example 980 + */ + ccy: number; + /** + * Format: int64 + * @description Підсумкова сума у мінімальних одиницях валюти + * @example 4200 + */ + finalAmount: number; + /** + * Format: date-time + * @description Дата і час фін. операції + */ + createdDate?: string; + /** + * @description Ідентифікатор платіжного пристрою, через який пройшла транзакція + * @example MI001088 + */ + terminal: string; + /** + * @description Тип оплати:\n\n `full` - повна оплата при покупці\n\n `bnpl_parts_4` - оплата 4-ма частинами (період платежів 14 днів)\n\n `bnpl_later_30` - оплата на 30-тий день з дня покупки\n + * @enum {string} + */ + paymentScheme: "full" | "bnpl_parts_4" | "bnpl_later_30"; + /** + * @description Метод оплати:\n\n `pan` - оплата була здійснена за введеним номером картки\n\n `apple` - оплата була здійснена через apple pay\n\n `google` - оплата була здійснена через google pay\n\n `monobank` - оплата була здійснена через monobank\n \n `wallet` - оплата була здійснена токенізованою карткою\n + * @enum {string} + */ + paymentMethod: "pan" | "apple" | "google" | "monobank" | "wallet"; + /** + * Format: int64 + * @description Еквайрингова комісія + * @example 420 + */ + fee?: number; + /** + * @description Чи належить картка, якою здійснювалась оплата, українському банку + * @example true + */ + domesticCard: boolean; + /** + * @description Країна банку (ISO-3166-1 numeric), якому належить картка, якою була здійснена оплата + * @example 804 + */ + country: string; + /** @description Список прийнятих заявок на скасування */ + cancelList?: components["schemas"]["CancelListItem"][]; + }; + InvoiceFinalizeRequest: { + /** + * @description Ідентифікатор рахунку + * @example p2_9ZgpZVsl3 + */ + invoiceId: string; + /** + * Format: int64 + * @description Сума у мінімальних одиницях + * @example 4200 + */ + amount?: number; + /** @description Список товарів для для фіскалізації, коли сума фіналізації холду не співпадає з оригінальною сумою оплати */ + items?: components["schemas"]["FiscalizationItem"][]; + }; + InvoiceFinalizeResponse: { + /** + * @description Статус заяви:\n\n `success` - заяву на фіналізацію прийнято\n + * @enum {string} + */ + status: "success"; + }; + PubkeyResponse: { + /** + * @description base64-закодований x.509 ecdsa відркитий ключ + * @example LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFK0UxRnBVZzczYmhGdmp2SzlrMlhJeTZtQkU1MQpib2F0RU1qU053Z1l5ZW55blpZQWh3Z3dyTGhNY0FpT25SYzNXWGNyMGRrY2NvVnFXcVBhWVQ5T3hRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== + */ + key: string; + }; + QrDetailsResponse: { + /** + * @description Короткий ідентифікатор QR-каси + * @example OBJE + */ + shortQrId: string; + /** + * @description Ідентифікатор рахунку для оплати, присутній лише у разі наявності встановленої суми + * @example 4EwIUTA12JIZ + */ + invoiceId?: string; + /** + * Format: int64 + * @description Сума у мінімальних одиницях + * @example 4200 + */ + amount?: number; + /** + * Format: int32 + * @description ISO 4217 код валюти + * @example 980 + */ + ccy?: number; + }; + QrResetRequest: { + /** + * @description Ідентифікатор QR-каси + * @example XJ_DiM4rTd5V + */ + qrId: string; + }; + QrListResponse: { + /** @description Список QR-кас */ + list?: components["schemas"]["QrListItem"][]; + }; + MerchantDetailsResponse: { + /** + * @description Ідентифікатор мерчанта + * @example 12o4Vv7EWy + */ + merchantId: string; + /** + * @description Найменування мерчанта + * @example Your Favourite Company + */ + merchantName: string; + /** + * @description Код ЄДРПОУ + * @example 4242424242 + */ + edrpou: string; + }; + MerchantStatementResponse: { + /** @description Виписка, впорядкована від більшої дати до меншої */ + list?: components["schemas"]["MerchantStatementItem"][]; + }; + /** @description Параметри картки */ + CardItem: { + /** + * @description Номер картки + * @example 4242424242424242 + */ + pan: string; + /** + * @description Строк дії картки у форматі MMYY + * @example 0142 + */ + exp: string; + /** + * @description CVV2 код + * @example 645 + */ + cvv: string; + }; + MerchantWalletResponse: { + wallet: components["schemas"]["WalletItem"][]; + }; + /** @description Параметри картки */ + WalletItem: { + /** + * @description Токен картки + * @example 67XZtXdR4NpKU3 + */ + cardToken: string; + /** + * @description Маскований номер картки + * @example 424242******4242 + */ + maskedPan: string; + /** + * @description Країна банку (ISO-3166-1 numeric), якому належить картка + * @example 804 + */ + country?: string; + }; + MerchantWalletPaymentRequest: { + /** + * @description Токен картки + * @example 67XZtXdR4NpKU3 + */ + cardToken: string; + /** + * Format: int64 + * @description Сума у мінімальних одиницях + * @example 4200 + */ + amount: number; + /** + * Format: int32 + * @description ISO 4217 код валюти + * @example 980 + */ + ccy: number; + /** + * @description Адреса для повернення (GET) - на цю адресу буде переадресовано користувача за умови проведення 3DS + * @example https://example.com/your/website/result/page + */ + redirectUrl?: string; + /** + * @description Адреса для CallBack (POST) – на цю адресу буде надіслано дані про стан платежу при кожній зміні статусу. Зміст тіла запиту ідентичний відповіді запиту “Статус рахунку”. **Гарантії доставки повідомлень одне за одним не надається. Тобто, може бути ситуація, коли вебхук про успішну оплату (`status=success`) прийде пізніше за вебхук про обробку цієї оплати (`status=processing`). Краще орієнтуватись на поле `modifiedDate` при аналізі поточного статусу рахунку. Вебхук із більшим `modifiedDate` буде актуальним** + * @example https://example.com/mono/acquiring/webhook/maybesomegibberishuniquestringbutnotnecessarily + */ + webHookUrl?: string; + /** + * @description Тип проведення платежу:\n\n `merchant` - платіж з ініціативи мерчанта, наприклад, регулярний платіж — коли клієнт не бере участі у підтвердженні платежу\n\n `client` - платіж за вимогою клієнта, наприклад, клієнт виконує оплату зі збереженої картки\n + * @enum {string} + */ + initiationKind: "merchant" | "client"; + merchantPaymInfo?: components["schemas"]["MerchantPaymInfoItem"]; + }; + MerchantWalletPaymentResponse: { + /** + * @description Ідентифікатор рахунку, за яким здійснювалась оплата + * @example 2210012MPLYwJjVUzchj + */ + invoiceId: string; + /** + * @description Посилання на 3DS + * @example https://example.com/tds/url + */ + tdsUrl?: string; + /** + * @description Статус оплати + * @example success + * @enum {string} + */ + status: "processing" | "success" | "failure"; + /** + * @description Причина відмови + * @example Неправильний CVV код + */ + failureReason?: string; + /** + * Format: int64 + * @description Сума у мінімальних одиницях + * @example 4200 + */ + amount: number; + /** + * Format: int32 + * @description ISO 4217 код валюти + * @example 980 + */ + ccy: number; + /** + * Format: date-time + * @description Дата і час створення заяви на оплату + */ + createdDate: string; + /** + * Format: date-time + * @description Дата і час останньої модифікації операції оплати + */ + modifiedDate: string; + }; + SubmerchantListResponse: { + list?: { + /** + * @description Ідентифікатор терміналу + * @example 0a8637b3bccb42aa93fdeb791b8b58e9 + */ + code: string; + /** + * @description ЄДРПОУ власника терміналу + * @example 4242424242 + */ + edrpou?: string; + /** + * @description IBAN власника терміналу + * @example UA213996220000026007233566001 + */ + iban: string; + }[]; + }; + FiscalCheckListResponse: { + checks?: ({ + /** + * @description Ідентифікатор чеку + * @example a2fd4aef-cdb8-4e25-9b36-b6d4672c554d + */ + id: string; + /** + * @description Тип чеку + * @example sale + * @enum {string} + */ + type: "sale" | "return"; + /** + * @description Статус чеку + * @example done + * @enum {string} + */ + status: "new" | "process" | "done" | "failed"; + /** + * @description Опис статусу чеку + * @example + */ + statusDescription?: string; + /** + * @description Посилання на чек + * @example https://cabinet.tax.gov.ua/cashregs/check + */ + taxUrl?: string; + /** + * @description base64-закодований PDF файл чеку + * @example CJFVBERi0xLj4QKJaqrrK0KMSAw123I4G9ia3go38PAovQ43JlYXRvciAoQXBhY2hl5IEZPUCBWZXJzaW9uIfDIuMykKL... + */ + file?: string; + /** + * @description Сервіс, через який виконувалась фіскалізація + * @example monopay + * @enum {string} + */ + fiscalizationSource: "checkbox" | "monopay"; + })[]; + }; + ForbiddenError: { + /** + * @description Код помилки, за яким можна розрізняти види клієнтських помилок:\n \n `FORBIDDEN` - у запиті було надіслано невалідний X-Token \n + * @example FORBIDDEN + */ + errCode: string; + /** + * @description Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто + * @example forbidden + */ + errText: string; + }; + FiscalizationItem: { + /** + * @description Назва товару + * @example Табуретка + */ + name: string; + /** + * Format: float + * @description Кількість + * @example 2 + */ + qty: number; + /** + * Format: int64 + * @description Сума у мінімальних одиницях валюти за одиницю товару + * @example 2100 + */ + sum: number; + /** + * @description Код товару, обов\'язковий для фіскалізації + * @example d21da1c47f3c45fca10a10c32518bdeb + */ + code: string; + /** + * @description Значення штрих-коду, може бути потрібно для фіскалізації + * @example 3b2a558cc6e44e218cdce301d80a1779 + */ + barcode?: string; + /** + * @description Текст, що передує назві товару, може бути потрібний для фіскалізації + * @example Хідер + */ + header?: string; + /** + * @description Текст, після товару, може бути потрібний для фіскалізації + * @example Футер + */ + footer?: string; + /** @description Масив податкових ставок, які було обрано на порталі Checkbox при реєстрації каси. При використанні ПРРО monopay податкові ставки наразі не застосовуються */ + tax?: number[]; + /** + * @description Код УКТ ЗЕД + * @example uktzedcode + */ + uktzed?: string; + }; + TooManyRequestsError: { + /** + * @description Код помилки, за яким можна розрізняти види клієнтських помилок:\n \n `TMR` - занадто багато запитів, потрібно почекати, перш ніж робити новий запит\n + * @example TMR + */ + errCode: string; + /** + * @description Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто + * @example too many requests + */ + errText: string; + }; + BadRequestError: { + /** + * @description Код помилки, за яким можна розрізняти види клієнтських помилок:\n\n `BAD_REQUEST` - запит некоректний, потрібно виправити параметри запиту та спробувати ще раз;\n \n `1001` - запит некоректний, потрібно виправити параметри запиту та спробувати ще раз; \n\n `INVALID_MERCHANT_PAYM_INFO` - некоректне значення в обʼєкті `merchantPaymInfo`; при створенні рахунку, оплатах за токеном та оплаті за реквізитами;\n \n `ORDER_IN_PROGRESS` - сума, встановлена на qr-касу вже в процесі оплати, тому при спробі видалити суму оплати буде помилка;\n \n `HOLD_INVOICE_NOT_FINALIZED` - рахунок створено з `paymentType=hold`, сплачено, але ще не фіналізовано; повертається при спробі отримати розширену інформацію про успішну оплату;\n \n `WRONG_CANCEL_AMOUNT` - при спробі скасування оплати було вказано невірну суму або цю оплату вже було скасовано;\n \n `TOKEN_NOT_FOUND` - токен картки, який було вказано в запиті, не знайдено;\n + * @example BAD_REQUEST + */ + errCode: string; + /** + * @description Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто + * @example empty \'invoiceId\' + */ + errText: string; + }; + MethodNotAllowedError: { + /** + * @description Код помилки, за яким можна розрізняти види клієнтських помилок:\n\n `METHOD_NOT_ALLOWED` - некоректний [http-метод](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods);\n + * @example METHOD_NOT_ALLOWED + */ + errCode: string; + /** + * @description Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто + * @example Method not allowed + */ + errText: string; + }; + InternalServerError: { + /** + * @description Код помилки, за яким можна розрізняти види клієнтських помилок:\n \n `INTERNAL_ERROR` - обробка запиту завершилася непередбаченою помилкою;\n\n `CANCEL_NOT_AVAILABLE` - неможливо скасувати оплату; дана помилка повертається при спробі скасування оплати;\n + * @example INTERNAL_ERROR + */ + errCode: string; + /** + * @description Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто + * @example internal server error + */ + errText: string; + }; + NotFoundError: { + /** + * @description Код помилки, за яким можна розрізняти види клієнтських помилок:\n \n `NOT_FOUND` - пошук за одним із параметрів запиту завершився неуспішно;\n \n `1004` - пошук за одним із параметрів запиту завершився неуспішно;\n + * @example NOT_FOUND + */ + errCode: string; + /** + * @description Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто + * @example invalid \'qrId\' + */ + errText: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} + +export type $defs = Record; + +export type external = Record; + +export type operations = Record; diff --git a/src/generated/acquiring.json b/src/generated/acquiring.json new file mode 100644 index 0000000..fe4d02d --- /dev/null +++ b/src/generated/acquiring.json @@ -0,0 +1,3238 @@ +{ + "openapi":"3.0.3", + "servers":[ + { + "url":"https://api.monobank.ua" + } + ], + "info":{ + "title":"Acquiring", + "version":"v2403", + "description":"На кожну зміну статусу рахунку бекенд еквайрингу виконає до 3-х спроб POST запиту, поки у відповідь не отримує http-статус 200 OK. З параметром X-Sign у хідерах. Параметр містить підпис тіла запиту вебхуку по стандарту ECDSA. Приклади верифікації підпису наведено нижче.\\n\\nAPI може працювати в режимі тестового середовища. Для цього потрібно використовувати токен із https://api.monobank.ua/\\n\\nДля тестування не потрібно мати термінал або дозвіл для тестування эквайрингу, тестове середовище доступне всім клієнтам банку. В тестовому середовищі для оплати можна використовувати будь-які номер, дату та cvv картки, навіть якщо вони не є дійсними. Єдина умова: номер картки повинен бути валідним за [алгоритмом Луна](https://uk.wikipedia.org/wiki/Алгоритм_Луна). При використанні даних реальної банківської картки, вона буде прийнята, але фінансова авторизація здійснюватись не буде.", + "x-logo":{ + "url":"logo.png", + "altText":"logo" + } + }, + "paths":{ + "/api/merchant/invoice/create":{ + "post":{ + "summary":"Створення рахунку", + "description":"Створення рахунку для оплати", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"X-Cms", + "in":"header", + "description":"Назва CMS, якщо ви розробляєте платіжний модуль для CMS", + "schema":{ + "type":"string" + } + }, + { + "name":"X-Cms-Version", + "in":"header", + "description":"Версія CMS, якщо ви розробляєте платіжний модуль для CMS", + "schema":{ + "type":"string" + } + } + ], + "requestBody":{ + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoiceCreateRequest" + } + } + } + }, + "responses":{ + "200":{ + "description":"Посилання на оплату рахунку", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoiceCreateResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"Пошук за одним із параметрів запиту завершився неуспішно", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/invoice/status?invoiceId={invoiceId}":{ + "get":{ + "summary":"Статус рахунку", + "description":"Метод перевірки статусу рахунку при розсинхронізації з боку продавця або відсутності webHookUrl при створенні рахунку.", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"invoiceId", + "in":"query", + "description":"Ідентифікатор рахунку", + "schema":{ + "type":"string", + "example":"p2_9ZgpZVsl3" + } + } + ], + "responses":{ + "200":{ + "description":"Інформація про рахунок", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoiceStatusResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"Рахунок не знайдено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/invoice/cancel":{ + "post":{ + "summary":"Скасування оплати", + "description":"Скасування успішної оплати рахунку", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + } + ], + "requestBody":{ + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoiceCancelRequest" + } + } + } + }, + "responses":{ + "200":{ + "description":"Статус операції скасування", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoiceCancelResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"Рахунок не знайдено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/invoice/remove":{ + "post":{ + "summary":"Інвалідація рахунку", + "description":"Інвалідація рахунку, якщо за ним ще не було здіснено оплати", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + } + ], + "requestBody":{ + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoiceRemoveRequest" + } + } + } + }, + "responses":{ + "200":{ + "description":"Інвойс було деактивовано, пуста відповідь", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/EmptyResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"Рахунок не знайдено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/pubkey":{ + "get":{ + "summary":"Відкритий ключ для верифікації підписів", + "description":"Отримання відкритого ключа для перевірки підпису, який включено у вебхуки. Ключ можна кешувати і робити запит на отримання нового, коли верифікація підпису з поточним ключем перестане працювати. Кожного разу робити запит на отримання ключа не треба", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + } + ], + "responses":{ + "200":{ + "description":"Base64-закодований ECDSA відкритий ключ", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/PubkeyResponse" + } + } + } + }, + "400":{ + "description":"Токен відсутній", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/invoice/finalize":{ + "post":{ + "summary":"Фіналізація суми холду", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + } + ], + "requestBody":{ + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoiceFinalizeRequest" + } + } + } + }, + "responses":{ + "200":{ + "description":"Результат фіналізації", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoiceFinalizeResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"Рахунок не знайдено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/qr/details?qrId={qrId}":{ + "get":{ + "summary":"Інформація про QR-касу", + "description":"Інформація про QR-касу, лише для активованих QR-кас", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"qrId", + "in":"query", + "description":"Ідентифікатор QR-каси", + "schema":{ + "type":"string", + "example":"OBJE" + } + } + ], + "responses":{ + "200":{ + "description":"Інформація про QR-касу", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/QrDetailsResponse" + } + } + } + }, + "400":{ + "description":"Ідентифікатор QR-каси невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"QR-касу не знайдено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/qr/reset-amount":{ + "post":{ + "summary":"Видалення суми оплати", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + } + ], + "requestBody":{ + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/QrResetRequest" + } + } + } + }, + "responses":{ + "200":{ + "description":"Суму було видалено, пуста відповідь", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/EmptyResponse" + } + } + } + }, + "400":{ + "description":"Ідентифікатор QR-каси невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"QR-касу не знайдено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/qr/list":{ + "get":{ + "summary":"Список QR-кас", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + } + ], + "responses":{ + "200":{ + "description":"Список QR-кас", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/QrListResponse" + } + } + } + }, + "400":{ + "description":"Токен відсутній", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/details":{ + "get":{ + "summary":"Дані мерчанта", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + } + ], + "responses":{ + "200":{ + "description":"Дані мерчанта", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MerchantDetailsResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/statement":{ + "get":{ + "summary":"Виписка за період", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"from", + "in":"query", + "description":"utc unix timestamp", + "schema":{ + "type":"integer", + "format":"int64", + "example":1649329978 + } + }, + { + "name":"to", + "in":"query", + "description":"utc unix timestamp", + "schema":{ + "type":"integer", + "format":"int64", + "example":1649329978 + } + } + ], + "responses":{ + "200":{ + "description":"Виписка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MerchantStatementResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/wallet/card":{ + "delete":{ + "summary":"Видалення токенізованої картки", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"cardToken", + "in":"query", + "description":"Токен картки", + "schema":{ + "type":"string", + "example":"67XZtXdR4NpKU3" + } + } + ], + "responses":{ + "200":{ + "description":"Картку видалено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/EmptyResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/wallet":{ + "get":{ + "summary":"Список карток у гаманці", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"walletId", + "in":"query", + "description":"Ідентифікатор гаманця покупця", + "schema":{ + "type":"string", + "example":"c1376a611e17b059aeaf96b73258da9c" + } + } + ], + "responses":{ + "200":{ + "description":"Список токенізованих карток", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MerchantWalletResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/wallet/payment":{ + "post":{ + "summary":"Оплата по токену", + "description":"Створення платежу за токеном картки", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"X-Cms", + "in":"header", + "description":"Назва CMS, якщо ви розробляєте платіжний модуль для CMS", + "schema":{ + "type":"string" + } + }, + { + "name":"X-Cms-Version", + "in":"header", + "description":"Версія CMS, якщо ви розробляєте платіжний модуль для CMS", + "schema":{ + "type":"string" + } + } + ], + "requestBody":{ + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MerchantWalletPaymentRequest" + } + } + } + }, + "responses":{ + "200":{ + "description":"Дані платежу", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MerchantWalletPaymentResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/invoice/payment-direct":{ + "post":{ + "summary":"Оплата за реквізитами", + "description":"Створення рахунку та його оплата за реквізитами картки. Увага, це апі буде працювати тільки за умови наявності у мерчанта активного PCI DSS сертифіката!", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"X-Cms", + "in":"header", + "description":"Назва CMS, якщо ви розробляєте платіжний модуль для CMS", + "schema":{ + "type":"string" + } + }, + { + "name":"X-Cms-Version", + "in":"header", + "description":"Версія CMS, якщо ви розробляєте платіжний модуль для CMS", + "schema":{ + "type":"string" + } + } + ], + "requestBody":{ + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/PaymentDirectRequest" + } + } + } + }, + "responses":{ + "200":{ + "description":"Дані рахунку та оплати", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MerchantWalletPaymentResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/submerchant/list":{ + "get":{ + "summary":"Список субмерчантів", + "description":"Дане апі потрібне обмеженому колу осіб, яким при створенні рахунку треба явно вказувати термінал", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + } + ], + "responses":{ + "200":{ + "description":"Список субмерчантів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/SubmerchantListResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/invoice/fiscal-checks?invoiceId={invoiceId}":{ + "get":{ + "summary":"Фіскальні чеки", + "description":"Метод для отримання даних фіскальних чеків та їх статусів", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"invoiceId", + "in":"query", + "description":"Ідентифікатор рахунку", + "schema":{ + "type":"string", + "example":"p2_9ZgpZVsl3" + } + } + ], + "responses":{ + "200":{ + "description":"Список фіскальних чеків", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/FiscalCheckListResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"Інвойс не знайдено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + }, + "/api/merchant/invoice/payment-info?invoiceId={invoiceId}":{ + "get":{ + "summary":"DEPRECATED — Розширена інформація про успішну оплату\\n", + "description":"**Дані апі застаріле! Слід використовувати Статус рахунку, замість цього апі** \\n\\nДані про успішну оплату, якщо вона була здійснена\\n", + "parameters":[ + { + "name":"X-Token", + "in":"header", + "description":"Токен з особистого кабінету https://web.monobank.ua/ або тестовий токен з https://api.monobank.ua/", + "schema":{ + "type":"string" + } + }, + { + "name":"invoiceId", + "in":"query", + "description":"Ідентифікатор рахунку", + "schema":{ + "type":"string", + "example":"p2_9ZgpZVsl3" + } + } + ], + "responses":{ + "200":{ + "description":"Інформація про успішну оплату", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InvoicePaymentInfoResponse" + } + } + } + }, + "400":{ + "description":"Один із вхідних параметрів невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/BadRequestError" + } + } + } + }, + "403":{ + "description":"Токен невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/ForbiddenError" + } + } + } + }, + "404":{ + "description":"Рахунок не знайдено", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/NotFoundError" + } + } + } + }, + "405":{ + "description":"Http-метод невалідний", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/MethodNotAllowedError" + } + } + } + }, + "429":{ + "description":"Занадто багато запитів", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/TooManyRequestsError" + } + } + } + }, + "500":{ + "description":"Під час виконання запиту виникла непередбачена помилка", + "content":{ + "application/json":{ + "schema":{ + "$ref":"#/components/schemas/InternalServerError" + } + } + } + } + } + } + } + }, + "components":{ + "schemas":{ + "CancelListItem":{ + "type":"object", + "required":[ + "status", + "createdDate", + "modifiedDate" + ], + "properties":{ + "status":{ + "type":"string", + "enum":[ + "processing", + "success", + "failure" + ], + "description":"Статус заяви скасування:\\n\\n `processing` - заява на скасування знаходиться в обробці\\n\\n `success` - заяву на скасування виконано успішно\\n\\n `failure` - неуспішне скасування\\n" + }, + "amount":{ + "type":"integer", + "format":"int64", + "description":"Сума у мінімальних одиницях", + "example":4200 + }, + "ccy":{ + "type":"integer", + "format":"int32", + "example":980, + "description":"ISO 4217 код валюти" + }, + "createdDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час створення заяви на скасування" + }, + "modifiedDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час останньої модифікації операції скасування" + }, + "approvalCode":{ + "type":"string", + "description":"Код авторизації", + "example":"662476" + }, + "rrn":{ + "type":"string", + "description":"Ідентифікатор транзакції в платіжній системі", + "example":"060189181768" + }, + "extRef":{ + "type":"string", + "example":"635ace02599849e981b2cd7a65f417fe", + "description":"Референс операції скасування, який було вказано продавцем" + } + } + }, + "QrListItem":{ + "type":"object", + "required":[ + "shortQrId", + "qrId", + "amountType", + "pageUrl" + ], + "properties":{ + "shortQrId":{ + "type":"string", + "example":"OBJE", + "description":"Короткий ідентифікатор QR-каси" + }, + "qrId":{ + "type":"string", + "description":"Ідентифікатор QR-каси для встановлення суми оплати на існуючих QR-кас", + "example":"XJ_DiM4rTd5V" + }, + "amountType":{ + "type":"string", + "enum":[ + "merchant", + "client", + "fix" + ], + "description":"Тип суми одноразової каси:\\n\\n `merchant` - суму встановлює мерчант\\n\\n `client` - суму встановлює клієнт\\n\\n `fix` - сума фіксована\\n" + }, + "pageUrl":{ + "type":"string", + "description":"Посилання на оплату QR-каси", + "example":"https://pay.mbnk.biz/XJ_DiM4rTd5V" + } + } + }, + "MerchantStatementItem":{ + "type":"object", + "required":[ + "invoiceId", + "status", + "maskedPan", + "date", + "paymentScheme", + "amount", + "profit", + "ccy" + ], + "properties":{ + "invoiceId":{ + "description":"Ідентифікатор рахунку, за яким здійснювалась оплата", + "type":"string", + "example":"2205175v4MfatvmUL2oR" + }, + "status":{ + "type":"string", + "enum":[ + "hold", + "processing", + "success", + "failure" + ], + "example":"success" + }, + "maskedPan":{ + "type":"string", + "description":"Маскований номер картки, за якою здійснювалась оплата", + "example":"444403******1902" + }, + "date":{ + "type":"string", + "format":"date-time", + "description":"Дата і час фін. операції у форматі RFC-3339" + }, + "paymentScheme":{ + "type":"string", + "enum":[ + "bnpl_later_30", + "bnpl_parts_4", + "full" + ], + "description":"Схема оплати:\\n\\n `bnpl_later_30` - bnpl-оплата\\n\\n `bnpl_parts_4` - платіж 4 частини\\n\\n `full` - повна оплата\\n" + }, + "amount":{ + "type":"integer", + "format":"int64", + "example":4200, + "description":"Сума оплати у мінімальних одиницях (копійки для гривні)" + }, + "profitAmount":{ + "type":"integer", + "format":"int64", + "example":4100, + "description":"Сума, яку отримає мерчант на свій рахунок після взаєморозрахунку з банком" + }, + "ccy":{ + "type":"integer", + "format":"int32", + "example":980, + "description":"ISO 4217 код валюти" + }, + "approvalCode":{ + "type":"string", + "description":"Код авторизації транзакції", + "example":"662476" + }, + "rrn":{ + "type":"string", + "description":"Ідентифікатор транзакції в платіжній системі", + "example":"060189181768" + }, + "reference":{ + "type":"string", + "example":"84d0070ee4e44667b31371d8f8813947", + "description":"Номер чека, замовлення, тощо, який було вказано мерчантом при створенні рахунку" + }, + "shortQrId":{ + "type":"string", + "example":"OBJE", + "description":"Короткий ідентифікатор QR-каси" + }, + "destination":{ + "type":"string", + "description":"Призначення платежу, визначається продавцем", + "example":"Покупка щастя" + }, + "cancelList":{ + "type":"array", + "description":"Перелік операцій скасування", + "items":{ + "type":"object", + "required":[ + "amount", + "ccy", + "date", + "maskedPan" + ], + "properties":{ + "amount":{ + "type":"integer", + "format":"int64", + "example":4200, + "description":"Сума оплати у мінімальних одиницях (копійки для гривні)" + }, + "ccy":{ + "type":"integer", + "format":"int32", + "example":980, + "description":"ISO 4217 код валюти" + }, + "date":{ + "type":"string", + "format":"date-time", + "description":"Дата і час фін. операції у форматі RFC-3339" + }, + "approvalCode":{ + "type":"string", + "description":"Код авторизації транзакції", + "example":"662476" + }, + "rrn":{ + "type":"string", + "description":"Ідентифікатор транзакції в платіжній системі", + "example":"060189181768" + }, + "maskedPan":{ + "type":"string", + "description":"Маскований номер картки, на яку здійснювалось повернення коштів", + "example":"444403******1902" + } + } + } + } + } + }, + "InvoiceCreateRequest":{ + "type":"object", + "required":[ + "amount" + ], + "properties":{ + "amount":{ + "type":"integer", + "format":"int64", + "example":4200, + "description":"Сума оплати у мінімальних одиницях (копійки для гривні)" + }, + "ccy":{ + "type":"integer", + "format":"int32", + "example":980, + "description":"ISO 4217 код валюти, за замовчуванням 980 (гривня)" + }, + "merchantPaymInfo":{ + "$ref":"#/components/schemas/MerchantPaymInfoItem" + }, + "redirectUrl":{ + "type":"string", + "description":"Адреса для повернення (GET) - на цю адресу буде переадресовано користувача після завершення оплати (у разі успіху або помилки)", + "example":"https://example.com/your/website/result/page" + }, + "webHookUrl":{ + "type":"string", + "description":"Адреса для CallBack (POST) – на цю адресу буде надіслано дані про стан платежу при кожній зміні статусу. Зміст тіла запиту ідентичний відповіді запиту “Статус рахунку”. **Гарантії доставки повідомлень одне за одним не надається. Тобто, може бути ситуація, коли вебхук про успішну оплату (`status=success`) прийде пізніше за вебхук про обробку цієї оплати (`status=processing`). Краще орієнтуватись на поле `modifiedDate` при аналізі поточного статусу рахунку. Вебхук із більшим `modifiedDate` буде актуальним**", + "example":"https://example.com/mono/acquiring/webhook/maybesomegibberishuniquestringbutnotnecessarily" + }, + "validity":{ + "type":"integer", + "format":"int64", + "example":3600, + "description":"Строк дії в секундах, за замовчуванням рахунок перестає бути дійсним через 24 години" + }, + "paymentType":{ + "type":"string", + "description":"Тип операції. Для значення `hold` термін складає 9 днів. Якщо через 9 днів холд не буде фіналізовано — він скасовується", + "enum":[ + "debit", + "hold" + ], + "default":"debit" + }, + "qrId":{ + "type":"string", + "description":"Ідентифікатор QR-каси для встановлення суми оплати на існуючих QR-кас", + "example":"XJ_DiM4rTd5V" + }, + "code":{ + "type":"string", + "example":"0a8637b3bccb42aa93fdeb791b8b58e9", + "description":"Код терміналу субмерчанта, з апі 'Список субмерчантів'. Доступний обмеженому колу мерчантів, які точно знають, що їм це потрібно" + }, + "saveCardData":{ + "type":"object", + "description":"Дані для збереження (токенізації) картки. Для підключення функції, зверніться, будь ласка, в підтримку monobank. Токенізація недоступна за замовчуванням", + "required":[ + "saveCard" + ], + "properties":{ + "saveCard":{ + "type":"boolean", + "description":"Ознака зберігання картки (токенізації) після оплати" + }, + "walletId":{ + "type":"string", + "required":false, + "description":"Ідентифікатор гаманця користувача", + "example":"69f780d841a0434aa535b08821f4822c" + } + } + } + } + }, + "MerchantPaymInfoItem":{ + "type":"object", + "description":"Інформаційні дані замовлення, яке буде оплачуватсь. Обовʼязково вказувати при активній звʼязці з ПРРО (звʼязка створюється у веб-кабінеті https://web.monobank.ua)", + "properties":{ + "reference":{ + "type":"string", + "example":"84d0070ee4e44667b31371d8f8813947", + "description":"Номер чека, замовлення, тощо; визначається мерчантом" + }, + "destination":{ + "type":"string", + "description":"Призначення платежу", + "example":"Покупка щастя", + "maxLength":280 + }, + "comment":{ + "type":"string", + "description":"Службове інформаційне поле", + "example":"Покупка щастя", + "maxLength":280 + }, + "customerEmails":{ + "type":"array", + "description":"Масив пошт, на які потрібно відправити фіскальний чек, якщо у мерчанта активна звʼязка з checkbox", + "uniqueItems":true, + "items":{ + "type":"string" + }, + "example":[ + + ] + }, + "basketOrder":{ + "type":"array", + "description":"Склад замовлення, використовується для відображення кошика замовлення, обовʼязково вказувати при активній звʼязці з ПРРО (звʼязка створюється у веб-кабінеті https://web.monobank.ua або через портал check by mono https://www.monobank.ua/check)", + "items":{ + "type":"object", + "description":"Перелік товарів та/або послуг", + "required":[ + "name", + "qty", + "sum", + "code" + ], + "properties":{ + "name":{ + "type":"string", + "description":"Назва товару", + "example":"Табуретка" + }, + "qty":{ + "type":"number", + "format":"float", + "description":"Кількість одиниць товару", + "example":2 + }, + "sum":{ + "type":"integer", + "format":"int64", + "description":"Сума у мінімальних одиницях валюти за одиницю товару; якщо ви торгуєте табуретками, ціна якої 21 гривня, і у вас замовлення на 2 табуретки, то qty=2, sum=2100, amount=4200", + "example":2100 + }, + "icon":{ + "type":"string", + "description":"Лінк на зображення товару" + }, + "unit":{ + "type":"string", + "description":"Назва одиниці вимiру товару", + "example":"шт." + }, + "code":{ + "type":"string", + "description":"Код товару, обов'язковий для фіскалізації", + "example":"d21da1c47f3c45fca10a10c32518bdeb" + }, + "barcode":{ + "type":"string", + "description":"Значення штрих-коду, може бути потрібно для фіскалізації" + }, + "header":{ + "type":"string", + "description":"Текст, що передує назві товару, може бути потрібний для фіскалізації" + }, + "footer":{ + "type":"string", + "description":"Текст, після товару, може бути потрібний для фіскалізації" + }, + "tax":{ + "type":"array", + "description":"Масив податкових ставок, які було обрано на порталі Checkbox при реєстрації каси. При використанні ПРРО monopay податкові ставки наразі не застосовуються", + "items":{ + "type":"integer" + }, + "example":[ + + ] + }, + "uktzed":{ + "type":"string", + "description":"Код УКТ ЗЕД" + }, + "discounts":{ + "type":"array", + "description":"Масив знижок або надбавок, які будуть передані в checkbox для фіскалізації, якщо звʼязку з checkbox активовано", + "items":{ + "type":"object", + "description":"Обʼєкт знижки або надбавки", + "required":[ + "type", + "mode", + "value" + ], + "properties":{ + "type":{ + "type":"string", + "description":"Тип знижки або надбавки\\n`DISCOUNT` — знижка\\n`EXTRA_CHARGE` — надбавка\\n", + "enum":[ + "DISCOUNT", + "EXTRA_CHARGE" + ] + }, + "mode":{ + "type":"string", + "description":"Режим знижки або надбавки\\n`PERCENT` — відсоток від basketOrder.sum * basketOrder.qty\\n\\n`VALUE` — числове значення\\n", + "enum":[ + "PERCENT", + "VALUE" + ] + }, + "value":{ + "type":"number", + "description":"Значення, яке буде фігурувати в розрахунках", + "minimum":0.01, + "multipleOf":0.01, + "enum":[ + "PERCENT", + "VALUE" + ] + } + } + } + } + } + } + } + } + }, + "InvoiceCreateResponse":{ + "type":"object", + "required":[ + "invoiceId", + "pageUrl" + ], + "properties":{ + "invoiceId":{ + "type":"string", + "example":"p2_9ZgpZVsl3", + "description":"Ідентифікатор рахунку, унікальний" + }, + "pageUrl":{ + "type":"string", + "example":"https://pay.mbnk.biz/p2_9ZgpZVsl3", + "description":"Посилання на сторінку оплати" + } + } + }, + "PaymentDirectRequest":{ + "type":"object", + "required":[ + "amount", + "cardData" + ], + "properties":{ + "amount":{ + "type":"integer", + "format":"int64", + "example":4200, + "description":"Сума оплати у мінімальних одиницях (копійки для гривні)" + }, + "ccy":{ + "type":"integer", + "format":"int32", + "example":980, + "description":"ISO 4217 код валюти, за замовчуванням 980 (гривня)" + }, + "cardData":{ + "type":"object", + "description":"Дані картки", + "required":[ + "pan", + "exp", + "cvv" + ], + "properties":{ + "pan":{ + "type":"string", + "description":"Номер картки", + "example":"4242424242424242" + }, + "exp":{ + "type":"string", + "description":"Термін дії картки у форматі `mmyy`", + "example":"0642" + }, + "cvv":{ + "type":"string", + "description":"Cvv", + "example":123 + } + } + }, + "merchantPaymInfo":{ + "$ref":"#/components/schemas/MerchantPaymInfoItem" + }, + "webHookUrl":{ + "type":"string", + "description":"Адреса для CallBack (POST) – на цю адресу буде надіслано дані про стан платежу при кожній зміні статусу. Зміст тіла запиту ідентичний відповіді запиту “Статус рахунку”. **Гарантії доставки повідомлень одне за одним не надається. Тобто, може бути ситуація, коли вебхук про успішну оплату (`status=success`) прийде пізніше за вебхук про обробку цієї оплати (`status=processing`). Краще орієнтуватись на поле `modifiedDate` при аналізі поточного статусу рахунку. Вебхук із більшим `modifiedDate` буде актуальним**", + "example":"https://example.com/mono/acquiring/webhook/maybesomegibberishuniquestringbutnotnecessarily" + }, + "paymentType":{ + "type":"string", + "description":"Тип операції. Для значення `hold` термін складає 9 днів. Якщо через 9 днів холд не буде фіналізовано — він скасовується", + "enum":[ + "debit", + "hold" + ], + "default":"debit" + }, + "saveCardData":{ + "type":"object", + "description":"Дані для збереження (токенізації) картки. Для підключення функції, зверніться, будь ласка, в підтримку monobank. Токенізація недоступна за замовчуванням", + "required":[ + "saveCard" + ], + "properties":{ + "saveCard":{ + "type":"boolean", + "description":"Ознака зберігання картки (токенізації) після оплати" + }, + "walletId":{ + "type":"string", + "required":false, + "description":"Ідентифікатор гаманця користувача", + "example":"69f780d841a0434aa535b08821f4822c" + } + } + }, + "redirectUrl":{ + "type":"string", + "description":"Адреса для повернення (GET) - на цю адресу буде переадресовано користувача після завершення оплати (у разі успіху або помилки), це поле обовʼязкове при `initiationKind=client`", + "example":"https://example.com/your/website/result/page" + }, + "initiationKind":{ + "type":"string", + "enum":[ + "merchant", + "client" + ], + "description":"Тип проведення платежу:\\n\\n `merchant` - платіж з ініціативи мерчанта, наприклад, регулярний платіж — коли клієнт не бере участі у підтвердженні платежу\\n\\n `client` - платіж за вимогою клієнта\\n" + } + } + }, + "InvoiceStatusResponse":{ + "type":"object", + "required":[ + "invoiceId", + "status", + "amount", + "ccy" + ], + "properties":{ + "invoiceId":{ + "type":"string", + "description":"Ідентифікатор рахунку", + "example":"p2_9ZgpZVsl3" + }, + "status":{ + "type":"string", + "enum":[ + "created", + "processing", + "hold", + "success", + "failure", + "reversed", + "expired" + ], + "description":"Статус операції:\\n\\n `created` - рахунок створено успішно, очікується оплата\\n\\n `processing` - платіж обробляється\\n\\n `hold` - сума заблокована\\n\\n `success` - успішна оплата\\n\\n `failure` - неуспішна оплата\\n\\n `reversed` - оплата повернена після успіху\\n\\n `expired` - час дії вичерпано\\n\\n\\nУ випадку вебхуків гарантії доставки повідомлень одне за одним не надається. Тобто, може бути ситуація, коли вебхук про успішну оплату (`success`) прийде пізніше за вебхук про обробку цієї оплати (`status=processing`). Краще орієнтуватись на поле `modifiedDate` при аналізі поточного статусу рахунку. Вебхук із більшим `modifiedDate` буде актуальним\\n" + }, + "failureReason":{ + "type":"string", + "example":"Неправильний CVV код", + "description":"Причина відмови" + }, + "errCode":{ + "type":"string", + "example":"59", + "description":"Код помилки, яка виникла під час обробки платежу. Що цей код означає, і куди звернутися можна в розділі 'Помилки в процесі оплати'" + }, + "amount":{ + "type":"integer", + "format":"int64", + "description":"Сума у мінімальних одиницях валюти", + "example":4200 + }, + "ccy":{ + "type":"integer", + "format":"int32", + "description":"Валюта", + "example":980 + }, + "finalAmount":{ + "type":"integer", + "format":"int64", + "description":"Підсумкова сума у мінімальних одиницях валюти, змінюється після оплати та повернень", + "example":4200 + }, + "createdDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час фін. операції" + }, + "modifiedDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час останньої модифікації операції" + }, + "reference":{ + "type":"string", + "description":"Референс платежу, який визначається продавцем", + "example":"84d0070ee4e44667b31371d8f8813947" + }, + "destination":{ + "type":"string", + "description":"Призначення платежу, визначається продавцем", + "example":"Покупка щастя" + }, + "cancelList":{ + "type":"array", + "description":"Список прийнятих заявок на скасування", + "items":{ + "$ref":"#/components/schemas/CancelListItem" + } + }, + "paymentInfo":{ + "type":"object", + "description":"Дані оплати, можуть бути `status=processing`, `status=success`, `status=failure`, `status=reversed`", + "required":[ + "terminal", + "paymentSystem", + "paymentMethod", + "maskedPan" + ], + "properties":{ + "maskedPan":{ + "type":"string", + "description":"Маскований номер картки, за якою здійснювалась оплата", + "example":"444403******1902" + }, + "approvalCode":{ + "type":"string", + "description":"Код авторизації транзакції", + "example":"662476" + }, + "rrn":{ + "type":"string", + "description":"Ідентифікатор транзакції в платіжній системі", + "example":"060189181768" + }, + "tranId":{ + "type":"string", + "description":"Ідентифікатор транзакції", + "example":"13194036" + }, + "terminal":{ + "type":"string", + "description":"Ідентифікатор платіжного пристрою, через який пройшла транзакція", + "example":"MI001088" + }, + "bank":{ + "type":"string", + "description":"Назва банку картки, якою проводилася оплата", + "example":"Універсал Банк" + }, + "paymentSystem":{ + "type":"string", + "enum":[ + "visa", + "mastercard" + ], + "description":"Назва платіжної системи картки", + "example":"visa" + }, + "paymentMethod":{ + "type":"string", + "enum":[ + "pan", + "apple", + "google", + "monobank", + "wallet", + "direct" + ], + "description":"Метод оплати:\\n\\n `pan` - оплата була здійснена за введеним номером картки\\n\\n `apple` - оплата була здійснена через apple pay\\n\\n `google` - оплата була здійснена через google pay\\n\\n `monobank` - оплата була здійснена через monobank\\n\\n `wallet` - оплата була здійснена токенізованою карткою\\n\\n `direct` - оплата була здійснена через апі \\'Оплата за реквізитами\\' (за умови, що у мерчанта був PCI DSS сертифікат)\\n" + }, + "fee":{ + "type":"integer", + "format":"int64", + "description":"Еквайрингова комісія в мінімальних одиницях" + }, + "country":{ + "type":"string", + "example":"804", + "description":"Країна банку (ISO-3166-1 numeric), якому належить картка, якою була здійснена оплата" + } + } + }, + "walletData":{ + "type":"object", + "description":"Параметри картки", + "required":[ + "walletId", + "cardToken", + "status" + ], + "properties":{ + "cardToken":{ + "type":"string", + "example":"67XZtXdR4NpKU3", + "description":"Токен картки" + }, + "walletId":{ + "type":"string", + "description":"Ідентифікатор гаманця покупця", + "example":"c1376a611e17b059aeaf96b73258da9c" + }, + "status":{ + "type":"string", + "enum":[ + "new", + "created", + "failed" + ], + "description":"Статус токенізації картки:\\n\\n `new` - прийнято заявку на токенізацію\\n\\n `created` - картку успішно токенізовано\\n\\n `failed` - картку не вдалось токенізувати \\n" + } + } + } + } + }, + "InvoiceCancelRequest":{ + "type":"object", + "required":[ + "invoiceId" + ], + "properties":{ + "invoiceId":{ + "type":"string", + "example":"p2_9ZgpZVsl3", + "description":"Ідентифікатор рахунку" + }, + "extRef":{ + "type":"string", + "example":"635ace02599849e981b2cd7a65f417fe", + "description":"Референс операції скасування, який визначається продавцем" + }, + "amount":{ + "type":"integer", + "format":"int64", + "example":5000, + "description":"Сума у мінімальних одиницях (при частковому поверненні)" + }, + "items":{ + "type":"array", + "description":"Список товарів для створення чеку повернення, поле обов\\'язкове у випадку активованої опції фіскалізації", + "items":{ + "$ref":"#/components/schemas/FiscalizationItem" + } + } + } + }, + "InvoiceRemoveRequest":{ + "type":"object", + "required":[ + "invoiceId" + ], + "properties":{ + "invoiceId":{ + "type":"string", + "example":"p2_9ZgpZVsl3", + "description":"Ідентифікатор рахунку" + } + } + }, + "EmptyResponse":{ + "type":"object" + }, + "InvoiceCancelResponse":{ + "type":"object", + "required":[ + "status", + "createdDate", + "modifiedDate" + ], + "properties":{ + "status":{ + "type":"string", + "enum":[ + "processing", + "success", + "failure" + ], + "description":"Статус операції:\\n\\n `processing` - заява на скасування знаходиться в обробці\\n\\n `success` - заяву на скасування виконано успішно\\n\\n `failure` - неуспішне скасування\\n" + }, + "createdDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час створення заяви на скасування" + }, + "modifiedDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час останньої модифікації операції скасування" + } + } + }, + "InvoicePaymentInfoResponse":{ + "type":"object", + "required":[ + "maskedPan", + "approvalCode", + "rrn", + "amount", + "ccy", + "finalAmount", + "terminal", + "paymentScheme", + "paymentMethod", + "domesticCard", + "country" + ], + "properties":{ + "maskedPan":{ + "type":"string", + "description":"Маскований номер картки, за якою здійснювалась оплата", + "example":"444403******1902" + }, + "approvalCode":{ + "type":"string", + "description":"Код авторизації транзакції", + "example":"662476" + }, + "rrn":{ + "type":"string", + "description":"Ідентифікатор транзакції в платіжній системі", + "example":"060189181768" + }, + "amount":{ + "type":"integer", + "format":"int64", + "description":"Сума авторизації у мінімальних одиницях валюти", + "example":4200 + }, + "ccy":{ + "type":"integer", + "format":"int32", + "description":"Валюта", + "example":980 + }, + "finalAmount":{ + "type":"integer", + "format":"int64", + "description":"Підсумкова сума у мінімальних одиницях валюти", + "example":4200 + }, + "createdDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час фін. операції" + }, + "terminal":{ + "type":"string", + "description":"Ідентифікатор платіжного пристрою, через який пройшла транзакція", + "example":"MI001088" + }, + "paymentScheme":{ + "type":"string", + "enum":[ + "full", + "bnpl_parts_4", + "bnpl_later_30" + ], + "description":"Тип оплати:\\n\\n `full` - повна оплата при покупці\\n\\n `bnpl_parts_4` - оплата 4-ма частинами (період платежів 14 днів)\\n\\n `bnpl_later_30` - оплата на 30-тий день з дня покупки\\n" + }, + "paymentMethod":{ + "type":"string", + "enum":[ + "pan", + "apple", + "google", + "monobank", + "wallet" + ], + "description":"Метод оплати:\\n\\n `pan` - оплата була здійснена за введеним номером картки\\n\\n `apple` - оплата була здійснена через apple pay\\n\\n `google` - оплата була здійснена через google pay\\n\\n `monobank` - оплата була здійснена через monobank\\n \\n `wallet` - оплата була здійснена токенізованою карткою\\n" + }, + "fee":{ + "type":"integer", + "format":"int64", + "description":"Еквайрингова комісія", + "example":420 + }, + "domesticCard":{ + "type":"boolean", + "example":true, + "description":"Чи належить картка, якою здійснювалась оплата, українському банку" + }, + "country":{ + "type":"string", + "example":"804", + "description":"Країна банку (ISO-3166-1 numeric), якому належить картка, якою була здійснена оплата" + }, + "cancelList":{ + "type":"array", + "description":"Список прийнятих заявок на скасування", + "items":{ + "$ref":"#/components/schemas/CancelListItem" + } + } + } + }, + "InvoiceFinalizeRequest":{ + "type":"object", + "required":[ + "invoiceId" + ], + "properties":{ + "invoiceId":{ + "type":"string", + "example":"p2_9ZgpZVsl3", + "description":"Ідентифікатор рахунку" + }, + "amount":{ + "type":"integer", + "format":"int64", + "example":4200, + "description":"Сума у мінімальних одиницях" + }, + "items":{ + "type":"array", + "description":"Список товарів для для фіскалізації, коли сума фіналізації холду не співпадає з оригінальною сумою оплати", + "items":{ + "$ref":"#/components/schemas/FiscalizationItem" + } + } + } + }, + "InvoiceFinalizeResponse":{ + "type":"object", + "required":[ + "status" + ], + "properties":{ + "status":{ + "type":"string", + "enum":[ + "success" + ], + "description":"Статус заяви:\\n\\n `success` - заяву на фіналізацію прийнято\\n" + } + } + }, + "PubkeyResponse":{ + "type":"object", + "required":[ + "key" + ], + "properties":{ + "key":{ + "type":"string", + "example":"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFK0UxRnBVZzczYmhGdmp2SzlrMlhJeTZtQkU1MQpib2F0RU1qU053Z1l5ZW55blpZQWh3Z3dyTGhNY0FpT25SYzNXWGNyMGRrY2NvVnFXcVBhWVQ5T3hRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "description":"base64-закодований x.509 ecdsa відркитий ключ" + } + } + }, + "QrDetailsResponse":{ + "type":"object", + "required":[ + "shortQrId" + ], + "properties":{ + "shortQrId":{ + "type":"string", + "example":"OBJE", + "description":"Короткий ідентифікатор QR-каси" + }, + "invoiceId":{ + "type":"string", + "example":"4EwIUTA12JIZ", + "description":"Ідентифікатор рахунку для оплати, присутній лише у разі наявності встановленої суми" + }, + "amount":{ + "type":"integer", + "format":"int64", + "description":"Сума у мінімальних одиницях", + "example":4200 + }, + "ccy":{ + "type":"integer", + "format":"int32", + "example":980, + "description":"ISO 4217 код валюти" + } + } + }, + "QrResetRequest":{ + "type":"object", + "required":[ + "qrId" + ], + "properties":{ + "qrId":{ + "type":"string", + "example":"XJ_DiM4rTd5V", + "description":"Ідентифікатор QR-каси" + } + } + }, + "QrListResponse":{ + "type":"object", + "properties":{ + "list":{ + "type":"array", + "description":"Список QR-кас", + "items":{ + "$ref":"#/components/schemas/QrListItem" + } + } + } + }, + "MerchantDetailsResponse":{ + "type":"object", + "required":[ + "merchantId", + "merchantName", + "edrpou" + ], + "properties":{ + "merchantId":{ + "type":"string", + "example":"12o4Vv7EWy", + "description":"Ідентифікатор мерчанта" + }, + "merchantName":{ + "type":"string", + "example":"Your Favourite Company", + "description":"Найменування мерчанта" + }, + "edrpou":{ + "type":"string", + "example":"4242424242", + "description":"Код ЄДРПОУ" + } + } + }, + "MerchantStatementResponse":{ + "type":"object", + "properties":{ + "list":{ + "type":"array", + "description":"Виписка, впорядкована від більшої дати до меншої", + "items":{ + "$ref":"#/components/schemas/MerchantStatementItem" + } + } + } + }, + "CardItem":{ + "type":"object", + "description":"Параметри картки", + "required":[ + "pan", + "exp", + "cvv" + ], + "properties":{ + "pan":{ + "type":"string", + "example":"4242424242424242", + "description":"Номер картки" + }, + "exp":{ + "type":"string", + "example":"0142", + "description":"Строк дії картки у форматі MMYY" + }, + "cvv":{ + "type":"string", + "example":"645", + "description":"CVV2 код" + } + } + }, + "MerchantWalletResponse":{ + "type":"object", + "required":[ + "wallet" + ], + "properties":{ + "wallet":{ + "type":"array", + "items":{ + "$ref":"#/components/schemas/WalletItem" + } + } + } + }, + "WalletItem":{ + "type":"object", + "description":"Параметри картки", + "required":[ + "extRef", + "cardToken", + "maskedPan", + "status" + ], + "properties":{ + "cardToken":{ + "type":"string", + "example":"67XZtXdR4NpKU3", + "description":"Токен картки" + }, + "maskedPan":{ + "type":"string", + "description":"Маскований номер картки", + "example":"424242******4242" + }, + "country":{ + "type":"string", + "example":"804", + "description":"Країна банку (ISO-3166-1 numeric), якому належить картка" + } + } + }, + "MerchantWalletPaymentRequest":{ + "type":"object", + "required":[ + "cardToken", + "amount", + "ccy", + "initiationKind" + ], + "properties":{ + "cardToken":{ + "type":"string", + "example":"67XZtXdR4NpKU3", + "description":"Токен картки" + }, + "amount":{ + "type":"integer", + "format":"int64", + "description":"Сума у мінімальних одиницях", + "example":4200 + }, + "ccy":{ + "type":"integer", + "format":"int32", + "example":980, + "description":"ISO 4217 код валюти" + }, + "redirectUrl":{ + "type":"string", + "description":"Адреса для повернення (GET) - на цю адресу буде переадресовано користувача за умови проведення 3DS", + "example":"https://example.com/your/website/result/page" + }, + "webHookUrl":{ + "type":"string", + "description":"Адреса для CallBack (POST) – на цю адресу буде надіслано дані про стан платежу при кожній зміні статусу. Зміст тіла запиту ідентичний відповіді запиту “Статус рахунку”. **Гарантії доставки повідомлень одне за одним не надається. Тобто, може бути ситуація, коли вебхук про успішну оплату (`status=success`) прийде пізніше за вебхук про обробку цієї оплати (`status=processing`). Краще орієнтуватись на поле `modifiedDate` при аналізі поточного статусу рахунку. Вебхук із більшим `modifiedDate` буде актуальним**", + "example":"https://example.com/mono/acquiring/webhook/maybesomegibberishuniquestringbutnotnecessarily" + }, + "initiationKind":{ + "type":"string", + "enum":[ + "merchant", + "client" + ], + "description":"Тип проведення платежу:\\n\\n `merchant` - платіж з ініціативи мерчанта, наприклад, регулярний платіж — коли клієнт не бере участі у підтвердженні платежу\\n\\n `client` - платіж за вимогою клієнта, наприклад, клієнт виконує оплату зі збереженої картки\\n" + }, + "merchantPaymInfo":{ + "$ref":"#/components/schemas/MerchantPaymInfoItem" + } + } + }, + "MerchantWalletPaymentResponse":{ + "type":"object", + "required":[ + "invoiceId", + "status", + "amount", + "ccy", + "createdDate", + "modifiedDate" + ], + "properties":{ + "invoiceId":{ + "description":"Ідентифікатор рахунку, за яким здійснювалась оплата", + "type":"string", + "example":"2210012MPLYwJjVUzchj" + }, + "tdsUrl":{ + "description":"Посилання на 3DS", + "type":"string", + "example":"https://example.com/tds/url" + }, + "status":{ + "type":"string", + "description":"Статус оплати", + "enum":[ + "processing", + "success", + "failure" + ], + "example":"success" + }, + "failureReason":{ + "type":"string", + "example":"Неправильний CVV код", + "description":"Причина відмови" + }, + "amount":{ + "type":"integer", + "format":"int64", + "description":"Сума у мінімальних одиницях", + "example":4200 + }, + "ccy":{ + "type":"integer", + "format":"int32", + "example":980, + "description":"ISO 4217 код валюти" + }, + "createdDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час створення заяви на оплату" + }, + "modifiedDate":{ + "type":"string", + "format":"date-time", + "description":"Дата і час останньої модифікації операції оплати" + } + } + }, + "SubmerchantListResponse":{ + "type":"object", + "properties":{ + "list":{ + "type":"array", + "items":{ + "type":"object", + "required":[ + "code", + "iban" + ], + "properties":{ + "code":{ + "type":"string", + "example":"0a8637b3bccb42aa93fdeb791b8b58e9", + "description":"Ідентифікатор терміналу" + }, + "edrpou":{ + "type":"string", + "example":"4242424242", + "description":"ЄДРПОУ власника терміналу" + }, + "iban":{ + "type":"string", + "example":"UA213996220000026007233566001", + "description":"IBAN власника терміналу" + } + } + } + } + } + }, + "FiscalCheckListResponse":{ + "type":"object", + "properties":{ + "checks":{ + "type":"array", + "items":{ + "type":"object", + "required":[ + "id", + "type", + "status", + "fiscalizationSource" + ], + "properties":{ + "id":{ + "type":"string", + "example":"a2fd4aef-cdb8-4e25-9b36-b6d4672c554d", + "description":"Ідентифікатор чеку" + }, + "type":{ + "type":"string", + "enum":[ + "sale", + "return" + ], + "example":"sale", + "description":"Тип чеку" + }, + "status":{ + "type":"string", + "enum":[ + "new", + "process", + "done", + "failed" + ], + "example":"done", + "description":"Статус чеку" + }, + "statusDescription":{ + "type":"string", + "example":"", + "description":"Опис статусу чеку" + }, + "taxUrl":{ + "type":"string", + "example":"https://cabinet.tax.gov.ua/cashregs/check", + "description":"Посилання на чек" + }, + "file":{ + "type":"string", + "example":"CJFVBERi0xLj4QKJaqrrK0KMSAw123I4G9ia3go38PAovQ43JlYXRvciAoQXBhY2hl5IEZPUCBWZXJzaW9uIfDIuMykKL...", + "description":"base64-закодований PDF файл чеку" + }, + "fiscalizationSource":{ + "type":"string", + "enum":[ + "checkbox", + "monopay" + ], + "example":"monopay", + "description":"Сервіс, через який виконувалась фіскалізація" + } + } + } + } + } + }, + "ForbiddenError":{ + "type":"object", + "required":[ + "errCode", + "errText" + ], + "properties":{ + "errCode":{ + "type":"string", + "example":"FORBIDDEN", + "description":"Код помилки, за яким можна розрізняти види клієнтських помилок:\\n \\n `FORBIDDEN` - у запиті було надіслано невалідний X-Token \\n" + }, + "errText":{ + "type":"string", + "example":"forbidden", + "description":"Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто" + } + } + }, + "FiscalizationItem":{ + "type":"object", + "required":[ + "name", + "code", + "qty", + "sum" + ], + "properties":{ + "name":{ + "type":"string", + "description":"Назва товару", + "example":"Табуретка" + }, + "qty":{ + "type":"number", + "format":"float", + "description":"Кількість", + "example":2 + }, + "sum":{ + "type":"integer", + "format":"int64", + "description":"Сума у мінімальних одиницях валюти за одиницю товару", + "example":2100 + }, + "code":{ + "type":"string", + "description":"Код товару, обов\\'язковий для фіскалізації", + "example":"d21da1c47f3c45fca10a10c32518bdeb" + }, + "barcode":{ + "type":"string", + "description":"Значення штрих-коду, може бути потрібно для фіскалізації", + "example":"3b2a558cc6e44e218cdce301d80a1779" + }, + "header":{ + "type":"string", + "description":"Текст, що передує назві товару, може бути потрібний для фіскалізації", + "example":"Хідер" + }, + "footer":{ + "type":"string", + "description":"Текст, після товару, може бути потрібний для фіскалізації", + "example":"Футер" + }, + "tax":{ + "type":"array", + "description":"Масив податкових ставок, які було обрано на порталі Checkbox при реєстрації каси. При використанні ПРРО monopay податкові ставки наразі не застосовуються", + "items":{ + "type":"integer" + } + }, + "uktzed":{ + "type":"string", + "description":"Код УКТ ЗЕД", + "example":"uktzedcode" + } + } + }, + "TooManyRequestsError":{ + "type":"object", + "required":[ + "errCode", + "errText" + ], + "properties":{ + "errCode":{ + "type":"string", + "example":"TMR", + "description":"Код помилки, за яким можна розрізняти види клієнтських помилок:\\n \\n `TMR` - занадто багато запитів, потрібно почекати, перш ніж робити новий запит\\n" + }, + "errText":{ + "type":"string", + "example":"too many requests", + "description":"Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто" + } + } + }, + "BadRequestError":{ + "type":"object", + "required":[ + "errCode", + "errText" + ], + "properties":{ + "errCode":{ + "type":"string", + "example":"BAD_REQUEST", + "description":"Код помилки, за яким можна розрізняти види клієнтських помилок:\\n\\n `BAD_REQUEST` - запит некоректний, потрібно виправити параметри запиту та спробувати ще раз;\\n \\n `1001` - запит некоректний, потрібно виправити параметри запиту та спробувати ще раз; \\n\\n `INVALID_MERCHANT_PAYM_INFO` - некоректне значення в обʼєкті `merchantPaymInfo`; при створенні рахунку, оплатах за токеном та оплаті за реквізитами;\\n \\n `ORDER_IN_PROGRESS` - сума, встановлена на qr-касу вже в процесі оплати, тому при спробі видалити суму оплати буде помилка;\\n \\n `HOLD_INVOICE_NOT_FINALIZED` - рахунок створено з `paymentType=hold`, сплачено, але ще не фіналізовано; повертається при спробі отримати розширену інформацію про успішну оплату;\\n \\n `WRONG_CANCEL_AMOUNT` - при спробі скасування оплати було вказано невірну суму або цю оплату вже було скасовано;\\n \\n `TOKEN_NOT_FOUND` - токен картки, який було вказано в запиті, не знайдено;\\n" + }, + "errText":{ + "type":"string", + "example":"empty \\'invoiceId\\'", + "description":"Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто" + } + } + }, + "MethodNotAllowedError":{ + "type":"object", + "required":[ + "errCode", + "errText" + ], + "properties":{ + "errCode":{ + "type":"string", + "example":"METHOD_NOT_ALLOWED", + "description":"Код помилки, за яким можна розрізняти види клієнтських помилок:\\n\\n `METHOD_NOT_ALLOWED` - некоректний [http-метод](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods);\\n" + }, + "errText":{ + "type":"string", + "example":"Method not allowed", + "description":"Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто" + } + } + }, + "InternalServerError":{ + "type":"object", + "required":[ + "errCode", + "errText" + ], + "properties":{ + "errCode":{ + "type":"string", + "example":"INTERNAL_ERROR", + "description":"Код помилки, за яким можна розрізняти види клієнтських помилок:\\n \\n `INTERNAL_ERROR` - обробка запиту завершилася непередбаченою помилкою;\\n\\n `CANCEL_NOT_AVAILABLE` - неможливо скасувати оплату; дана помилка повертається при спробі скасування оплати;\\n" + }, + "errText":{ + "type":"string", + "example":"internal server error", + "description":"Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто" + } + } + }, + "NotFoundError":{ + "type":"object", + "required":[ + "errCode", + "errText" + ], + "properties":{ + "errCode":{ + "type":"string", + "example":"NOT_FOUND", + "description":"Код помилки, за яким можна розрізняти види клієнтських помилок:\\n \\n `NOT_FOUND` - пошук за одним із параметрів запиту завершився неуспішно;\\n \\n `1004` - пошук за одним із параметрів запиту завершився неуспішно;\\n" + }, + "errText":{ + "type":"string", + "example":"invalid \\'qrId\\'", + "description":"Опис помилки; має виключно інформативну функцію, використовувати його в бізнес-логіці не варто" + } + } + } + } + }, + "tags":[ + { + "name":"Приклади верифікації підпису webhook", + "description":"
\\n Go\\n\\n ```go\\n\\n package main\\n\\n import (\\n 'crypto/ecdsa'\\n 'crypto/sha256'\\n 'crypto/x509'\\n 'encoding/base64'\\n 'encoding/pem'\\n 'log'\\n )\\n\\n var (\\n // example pubkey, you should receive one at https://api.monobank.ua/api/merchant/pubkey\\n pubKeyBase64 = `LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQUc1LzZ3NnZubGJZb0ZmRHlYWE4vS29CbVVjTgo3NWJSUWg4MFBhaEdldnJoanFCQnI3OXNSS0JSbnpHODFUZVQ5OEFOakU1c0R3RmZ5Znhub0ZJcmZBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==`\\n\\n // value from X-Sign header in webhook request\\n xSignBase64 = `MEUCIQC/mVKhi8FKoayul2Mim3E2oaIOCNJk5dEXxTqbkeJSOQIgOM0hsW0qcP2H8iXy1aQYpmY0SJWEaWur7nQXlKDCFxA=`\\n\\n // webhook request body bytes\\n bodyBytes = []byte(`{\\n 'invoiceId': 'p2_9ZgpZVsl3',\\n 'status': 'created',\\n 'failureReason': 'string',\\n 'amount': 4200,\\n 'ccy': 980,\\n 'finalAmount': 4200,\\n 'createdDate': '2019-08-24T14:15:22Z',\\n 'modifiedDate': '2019-08-24T14:15:22Z',\\n 'reference': '84d0070ee4e44667b31371d8f8813947',\\n 'cancelList': [\\n {\\n 'status': 'processing',\\n 'amount': 4200,\\n 'ccy': 980,\\n 'createdDate': '2019-08-24T14:15:22Z',\\n 'modifiedDate': '2019-08-24T14:15:22Z',\\n 'approvalCode': '662476',\\n 'rrn': '060189181768',\\n 'extRef': '635ace02599849e981b2cd7a65f417fe'\\n }\\n ]\\n }`)\\n )\\n\\n func main() {\\n pubKeyBytes, err := base64.StdEncoding.DecodeString(pubKeyBase64)\\n if err != nil {\\n panic(err)\\n\\n }\\n\\n signatureBytes, err := base64.StdEncoding.DecodeString(xSignBase64)\\n if err != nil {\\n panic(err)\\n }\\n\\n block, _ := pem.Decode(pubKeyBytes)\\n if block == nil {\\n panic('invalid pem')\\n }\\n\\n genericPubKey, err := x509.ParsePKIXPublicKey(block.Bytes)\\n if err != nil {\\n panic(err)\\n }\\n\\n pubKey, ok := genericPubKey.(*ecdsa.PublicKey)\\n if !ok {\\n panic('invalid key')\\n }\\n\\n hash := sha256.Sum256(bodyBytes)\\n\\n ok = ecdsa.VerifyASN1(pubKey, hash[:], signatureBytes)\\n if !ok {\\n panic('invalid X-Sign')\\n }\\n\\n log.Println('OK')\\n } \\n ```\\n
\\n
\\n Python\\n\\n ```python\\n\\n import base64\\n import hashlib\\n\\n import ecdsa\\n\\n # example pubkey, you should receive one at https://api.monobank.ua/api/merchant/pubkey\\n pub_key_base64 = 'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQUc1LzZ3NnZubGJZb0ZmRHlYWE4vS29CbVVjTgo3NWJSUWg4MFBhaEdldnJoanFCQnI3OXNSS0JSbnpHODFUZVQ5OEFOakU1c0R3RmZ5Znhub0ZJcmZBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg=='\\n\\n # value from X-Sign header in webhook request\\n x_sign_base64 = 'MEUCIQC/mVKhi8FKoayul2Mim3E2oaIOCNJk5dEXxTqbkeJSOQIgOM0hsW0qcP2H8iXy1aQYpmY0SJWEaWur7nQXlKDCFxA='\\n\\n # webhook request body bytes\\n body_bytes = b\\'\\'\\'{\\n 'invoiceId': 'p2_9ZgpZVsl3',\\n 'status': 'created',\\n 'failureReason': 'string',\\n 'amount': 4200,\\n 'ccy': 980,\\n 'finalAmount': 4200,\\n 'createdDate': '2019-08-24T14:15:22Z',\\n 'modifiedDate': '2019-08-24T14:15:22Z',\\n 'reference': '84d0070ee4e44667b31371d8f8813947',\\n 'cancelList': [\\n {\\n 'status': 'processing',\\n 'amount': 4200,\\n 'ccy': 980,\\n 'createdDate': '2019-08-24T14:15:22Z',\\n 'modifiedDate': '2019-08-24T14:15:22Z',\\n 'approvalCode': '662476',\\n 'rrn': '060189181768',\\n 'extRef': '635ace02599849e981b2cd7a65f417fe'\\n }\\n ]\\n }\\'\\'\\'\\n\\n if __name__ == \\'__main__\\':\\n pub_key_bytes = base64.b64decode(pub_key_base64)\\n signature_bytes = base64.b64decode(x_sign_base64)\\n pub_key = ecdsa.VerifyingKey.from_pem(pub_key_bytes.decode())\\n\\n ok = pub_key.verify(signature_bytes, body_bytes, sigdecode=ecdsa.util.sigdecode_der, hashfunc=hashlib.sha256)\\n if ok:\\n print('OK')\\n else:\\n print('NOT OK')\\n ```\\n
\\n
\\n Php\\n\\n ```php\\n\\n \\n
\\n NodeJs\\n\\n ```javascript\\n\\n const crypto = require(\\'crypto\\');\\n\\n // example pubkey, you should receive one at https://api.monobank.ua/api/merchant/pubkey\\n let pubKeyBase64 = 'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQUc1LzZ3NnZubGJZb0ZmRHlYWE4vS29CbVVjTgo3NWJSUWg4MFBhaEdldnJoanFCQnI3OXNSS0JSbnpHODFUZVQ5OEFOakU1c0R3RmZ5Znhub0ZJcmZBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==';\\n\\n // value from X-Sign header in webhook request\\n let xSignBase64 = 'MEUCIQC/mVKhi8FKoayul2Mim3E2oaIOCNJk5dEXxTqbkeJSOQIgOM0hsW0qcP2H8iXy1aQYpmY0SJWEaWur7nQXlKDCFxA=';\\n\\n let message = `{\\n 'invoiceId': 'p2_9ZgpZVsl3',\\n 'status': 'created',\\n 'failureReason': 'string',\\n 'amount': 4200,\\n 'ccy': 980,\\n 'finalAmount': 4200,\\n 'createdDate': '2019-08-24T14:15:22Z',\\n 'modifiedDate': '2019-08-24T14:15:22Z',\\n 'reference': '84d0070ee4e44667b31371d8f8813947',\\n 'cancelList': [\\n {\\n 'status': 'processing',\\n 'amount': 4200,\\n 'ccy': 980,\\n 'createdDate': '2019-08-24T14:15:22Z',\\n 'modifiedDate': '2019-08-24T14:15:22Z',\\n 'approvalCode': '662476',\\n 'rrn': '060189181768',\\n 'extRef': '635ace02599849e981b2cd7a65f417fe'\\n }\\n ]\\n }`\\n\\n let signatureBuf = Buffer.from(xSignBase64, \\'base64\\');\\n let publicKeyBuf = Buffer.from(pubKeyBase64, \\'base64\\');\\n\\n let verify = crypto.createVerify(\\'SHA256\\');\\n\\n verify.write(message);\\n verify.end();\\n\\n let result = verify.verify(publicKeyBuf, signatureBuf);\\n\\n console.log(result === true ? 'OK' : 'NOT OK');\\n ```\\n
\\n" + }, + { + "name":"Помилки в процесі оплати", + "description":"
\\n Помилки в процесі оплати\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
errCode з вебхуку або Статусу рахункуТекст помилкиКуди звернутися
6Операцію заблоковано банком-емітентомбанк, який випустив картку
40Карта втрачена. Витрати обмеженібанк, який випустив картку
41Карта втрачена. Витрати обмеженібанк, який випустив картку
50Витрати по карті обмеженібанк, який випустив картку
51У картки, з якої ви намагаєтеся зробити переказ, закінчився строк діїбанк, який випустив картку
51У картки, з якої ви намагаєтеся зробити переказ, закінчився строк діїбанк, який випустив картку
52Номер картки вказано невірнобанк, який випустив картку
54Стався технічний збійбанк, який випустив картку
55Помилка налаштувань торгівельної точкиmonobank
56Тип карти не підтримує подібні оплатибанк, який випустив картку
57Транзакція не підтримуєтьсябанк, який випустив картку
57Помилка налаштувань торгівельної точкиmonobank
58Витрати по карті обмежені на покупкубанк, який випустив картку
58Витрати по карті обмеженібанк, який випустив картку
59На картці недостатньо коштів для завершення покупки)банк, який випустив картку
60На картці перевищено ліміт кількості видаткових операційбанк, який випустив картку
61На картці перевищено інтернет-лімітбанк, який випустив картку
62Досягнуто або перевищено ліміт на кількість неправильних вводів PIN-кодубанк, який випустив картку
63На картці перевищено інтернет-лімітбанк, який випустив картку
67Помилка налаштувань торгівельної точкиmonobank
68Відмова в проведені операції з боку МПСбанк, який випустив картку
71Операцію заблоковано банком-емітентомбанк, який випустив картку
72Операцію заблоковано банком-емітентомбанк, який випустив картку
73Помилка маршрутизаціїmonobank
74Помилка налаштувань торгівельної точки. )monobank
75Операцію заблоковано банком-емітентомбанк, який випустив картку
80Неправильний CVV код (3 цифри на звороті картки)банк, який випустив картку
81Неправильний CVV2 код (3 цифри на звороті картки)банк, який випустив картку
82Транзакція не дозволена з такими умовами проведеннябанк, який випустив картку
82Транзакція не дозволена з такими умовами проведеннябанк, який випустив картку
82Помилка налаштувань торгівельної точкиmonobank
83Перевищені ліміти спроб оплати з картбанк, який випустив картку
84Неправильне значення перевірочного числа 3D Secure Cardholder Authentication Verification Valuemonobank
98Помилка налаштувань торгівельної точкиmonobank
1000Здається, наш кіт облажавсяmonobank
1005Здається, наш кіт облажавсяmonobank
1010Здається, наш кіт облажавсяmonobank
1014Для проведення оплати потрібно вказати повні реквізити картипокупець
10343-D Secure перевірку не пройденобанк, який випустив картку
10353-D Secure перевірку не пройденобанк, який випустив картку
1036Здається, наш кіт облажавсяmonobank
1044Помилка налаштувань торгівельної точкиmonobank
10453-D Secure перевірку не пройденобанк, який випустив картку
1053Помилка налаштувань торгівельної точкиmonobank
10543-D Secure перевірку не пройденоmonobank
1056Переказ можливий тільки на картку українського банкуmonobank
1064Оплата можлива лише з використанням карток Mastercard або Visaбанк, який випустив картку
1066Помилка налаштувань торгівельної точкиmonobank
1077Сума оплати менша ніж допустима сума (налаштування МПС)API
1080Термін дії карти вказаний невірнобанк, який випустив картку
1090Інформація про клієнта не знайденаmonobank
1115Помилка налаштувань торгівельної точкиmonobank
1121Помилка налаштувань торгівельної точкиmonobank
1145Мінімальна сума переказуmonobank
1165Операцію заблоковано банком-емітентомбанк, який випустив картку
1187Треба вказати імя отримувача API
1193Операцію заблоковано банком-емітентомбанк, який випустив картку
1194Цей спосіб поповнення працює тільки з картами інших банківmonobank
1200Обов\\'язкова наявність CVV коду (3 цифри на звороті картки)банк, який випустив картку
1405Платіжна система обмежила переказибанк, який випустив картку
1406Карта заблокована риск-менеджемнтомбанк, який випустив картку
1407Операцію заблоковано ризик-менеджментомmonobank
1408Операцію заблоковано банком-емітентомбанк, який випустив картку
1411Цей вид операцій з гривневих карток тимчасово обмеженийmonobank
1413Операцію заблоковано банком-емітентомбанк, який випустив картку
1419Термін дії карти вказаний невірнобанк, який випустив картку
1420Здається, наш кіт облажавсяmonobank
14213-D Secure перевірку не пройденобанк, який випустив картку
1422Виникла помилка на етапі 3-D Secure)банк, який випустив картку
1425Виникла помилка на етапі 3-D Secure)банк, який випустив картку
1428Операцію заблоковано банком-емітентомбанк, який випустив картку
14293-D Secure перевірку не пройденобанк, який випустив картку
1433Перевірте імʼя та прізвище отримувача. У випадку зазначення недостовірних даних, банк може відхилити переказmonobank
1436Кацапське гівно не обслуговуємоmonobank
1439Недопустима операція для використання за програмою єВідновленняmonobank
1458Операция відхилена на кроці 3DSбанк, який випустив картку
8001Минув термін дії посилання на оплатупокупець
8002Клієнт відмінив оплатупокупець
8003Стався технічний збійmonobank
8004Проблеми з проведенням 3-D Secure банк, який випустив картку
8005Ой, ой, перевищено ліміти на прийом оплатmonobank
8006Ой, ой, перевищено ліміти на прийом оплатmonobank
\\n
\\n" + } + ] +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..3ddd8ed --- /dev/null +++ b/src/index.ts @@ -0,0 +1,15 @@ +import createClient from 'openapi-fetch'; +import type { paths as pathsAcquiring } from './generated/acquiring.js'; + +export type ClientOptions = Parameters[0]; + +export const createClientMonoAcquiring = ({ + clientOptions, +}: { + clientOptions: ClientOptions; +}) => { + return createClient({ + baseUrl: 'https://api.monobank.ua', + ...clientOptions, + }); +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7cc4ac3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "incremental": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "./lib", + "rootDir": "./src", + "paths": { + "@/*": ["./src/*"] + }, + "allowJs": true, + "strict": true, + "noImplicitAny": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "removeComments": false, + "pretty": true, + "strictNullChecks": true + }, + "include": ["./src"], + "exclude": ["./node_modules"] +}