mirror of
https://github.com/valitydev/swag-wallets-webhook-events.git
synced 2024-11-06 01:55:18 +00:00
Transfer to Swagger3. Update workflow (#8)
This commit is contained in:
parent
fd284aa0b0
commit
ec920cea3f
10
.github/workflows/build.yml
vendored
Normal file
10
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
name: Maven Build Artifact
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
uses: valitydev/base-workflow/.github/workflows/maven-swag-build.yml@v1
|
17
.github/workflows/deploy.yml
vendored
Normal file
17
.github/workflows/deploy.yml
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
name: Maven Deploy Artifact
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
- 'main'
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
uses: valitydev/base-workflow/.github/workflows/maven-swag-deploy.yml@v1
|
||||
secrets:
|
||||
server-username: ${{ secrets.OSSRH_USERNAME }}
|
||||
server-password: ${{ secrets.OSSRH_TOKEN }}
|
||||
deploy-secret-key: ${{ secrets.OSSRH_GPG_SECRET_KEY }}
|
||||
deploy-secret-key-password: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
@ -1,12 +1,13 @@
|
||||
name: build
|
||||
name: gh-pages
|
||||
on:
|
||||
- pull_request
|
||||
push:
|
||||
branches: [master]
|
||||
|
||||
env:
|
||||
NODEJS_VERSION: '16'
|
||||
|
||||
jobs:
|
||||
bundle:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
@ -19,5 +20,8 @@ jobs:
|
||||
- run: npm install
|
||||
- name: Bundle specification
|
||||
run: npm run build
|
||||
- name: Validate specification
|
||||
run: npm run test
|
||||
- name: Publish ReDoc on Github Pages
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./dist
|
14
.redocly.yaml
Normal file
14
.redocly.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
# See https://docs.redoc.ly/cli/configuration/ for more information.
|
||||
apiDefinitions:
|
||||
core: 'openapi/openapi.yaml'
|
||||
lint:
|
||||
extends:
|
||||
- recommended
|
||||
rules:
|
||||
tag-description: off
|
||||
referenceDocs:
|
||||
showConsole: true
|
||||
layout:
|
||||
scope: section
|
||||
routingStrategy: browser
|
||||
htmlTemplate: ./web/index.html
|
58
gulpfile.js
58
gulpfile.js
@ -1,58 +0,0 @@
|
||||
var gulp = require('gulp');
|
||||
var util = require('gulp-util')
|
||||
var gulpConnect = require('gulp-connect');
|
||||
var connect = require('connect');
|
||||
var cors = require('cors');
|
||||
var path = require('path');
|
||||
var exec = require('child_process').exec;
|
||||
var portfinder = require('portfinder');
|
||||
var swaggerRepo = require('swagger-repo');
|
||||
|
||||
var DIST_DIR = 'dist';
|
||||
|
||||
gulp.task('edit', gulp.series(
|
||||
function (cb) {
|
||||
exec('npm run bundle-swagger-ui', function (err, stdout, stderr) {
|
||||
console.log(stderr);
|
||||
cb(err);
|
||||
});
|
||||
},
|
||||
function () {
|
||||
portfinder.getPort({ port: 5000 }, function (err, port) {
|
||||
var app = connect();
|
||||
app.use(swaggerRepo.swaggerEditorMiddleware());
|
||||
app.listen(port);
|
||||
util.log(util.colors.green('swagger-editor started http://localhost:' + port));
|
||||
});
|
||||
}
|
||||
));
|
||||
|
||||
gulp.task('build', function (cb) {
|
||||
exec('npm run build', function (err, stdout, stderr) {
|
||||
console.log(stderr);
|
||||
cb(err);
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task('reload', gulp.parallel('build', function () {
|
||||
gulp.src(DIST_DIR).pipe(gulpConnect.reload())
|
||||
}));
|
||||
|
||||
gulp.task('watch', function () {
|
||||
gulp.watch(['spec/**/*', 'web/**/*'], gulp.series(['reload']));
|
||||
});
|
||||
|
||||
gulp.task('serve', gulp.parallel('build', 'watch', 'edit', function () {
|
||||
portfinder.getPort({ port: 3000 }, function (err, port) {
|
||||
gulpConnect.server({
|
||||
root: [DIST_DIR],
|
||||
livereload: true,
|
||||
port: port,
|
||||
middleware: function (gulpConnect, opt) {
|
||||
return [
|
||||
cors()
|
||||
]
|
||||
}
|
||||
});
|
||||
});
|
||||
}));
|
7
openapi/components/parameters/signature.yaml
Normal file
7
openapi/components/parameters/signature.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
name: Content-Signature
|
||||
in: header
|
||||
description: >
|
||||
Подпись сообщения, сформированная согласно указанным выше правилам
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
@ -1,5 +1,5 @@
|
||||
description: |
|
||||
Объём денежных средств
|
||||
Объём средств, которые необходимо вывести
|
||||
type: object
|
||||
required:
|
||||
- amount
|
||||
@ -12,5 +12,4 @@ properties:
|
||||
format: int64
|
||||
example: 1430000
|
||||
currency:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/CurrencyID'
|
||||
$ref: '../schemas/CurrencyID.yaml'
|
@ -1,6 +1,6 @@
|
||||
description: Данные банковской карты
|
||||
allOf:
|
||||
- $ref: '#/definitions/DestinationResource'
|
||||
- $ref: '../schemas/DestinationResource.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- cardNumberMask
|
||||
@ -19,8 +19,6 @@ allOf:
|
||||
type: string
|
||||
pattern: '^\d{2,4}$'
|
||||
paymentSystem:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/BankCardPaymentSystem'
|
||||
$ref: '../schemas/BankCardPaymentSystem.yaml'
|
||||
tokenProvider:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/BankCardTokenProvider'
|
||||
$ref: '../schemas/BankCardTokenProvider.yaml'
|
@ -1,6 +1,6 @@
|
||||
description: Данные криптовалютного кошелька
|
||||
allOf:
|
||||
- $ref: '#/definitions/DestinationResource'
|
||||
- $ref: '../schemas/DestinationResource.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- cryptoWalletId
|
||||
@ -13,5 +13,4 @@ allOf:
|
||||
maxLength: 256
|
||||
example: zu3TcwGI71Bpaaw2XkLWZXlhMdn4zpVzMQ
|
||||
currency:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/CryptoCurrency'
|
||||
$ref: '../schemas/CryptoCurrency.yaml'
|
@ -7,22 +7,18 @@ required:
|
||||
- resource
|
||||
properties:
|
||||
id:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/DestinationID'
|
||||
- readOnly: true
|
||||
$ref: '../schemas/DestinationID.yaml'
|
||||
name:
|
||||
description: |
|
||||
Человекочитаемое название приёмника средств, по которому его легко узнать
|
||||
type: string
|
||||
example: Squarey plastic thingy
|
||||
identity:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/IdentityID'
|
||||
$ref: '../schemas/IdentityID.yaml'
|
||||
currency:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/CurrencyID'
|
||||
$ref: '../schemas/CurrencyID.yaml'
|
||||
resource:
|
||||
$ref: '#/definitions/DestinationResource'
|
||||
$ref: '../schemas/DestinationResource.yaml'
|
||||
metadata:
|
||||
description: |
|
||||
Произвольный, специфичный для клиента API и непрозрачный для системы набор данных, ассоциированных с
|
||||
@ -31,5 +27,4 @@ properties:
|
||||
example:
|
||||
color_hint: olive-green
|
||||
externalID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/ExternalID'
|
||||
$ref: '../schemas/ExternalID.yaml'
|
@ -1,13 +1,11 @@
|
||||
description: Смена статуса приемника на авторизованный
|
||||
allOf:
|
||||
- $ref: '#/definitions/Event'
|
||||
- $ref: '../schemas/Event.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- destinationID
|
||||
properties:
|
||||
destinationID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/DestinationID'
|
||||
$ref: '../schemas/DestinationID.yaml'
|
||||
externalID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/ExternalID'
|
||||
$ref: '../schemas/ExternalID.yaml'
|
@ -1,9 +1,9 @@
|
||||
description: Событие создания приемника денежных средств
|
||||
allOf:
|
||||
- $ref: '#/definitions/Event'
|
||||
- $ref: '../schemas/Event.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- destination
|
||||
properties:
|
||||
destination:
|
||||
$ref: '#/definitions/Destination'
|
||||
$ref: '../schemas/Destination.yaml'
|
@ -1,6 +1,5 @@
|
||||
description: Ресурс приёмника денежных средств, используемый для осуществления выводов
|
||||
type: object
|
||||
discriminator: type
|
||||
required:
|
||||
- type
|
||||
properties:
|
||||
@ -12,3 +11,10 @@ properties:
|
||||
- BankCard
|
||||
- CryptoWallet
|
||||
- DigitalWallet
|
||||
|
||||
discriminator:
|
||||
propertyName: type
|
||||
mapping:
|
||||
'BankCard': '../schemas/BankCard.yaml'
|
||||
'CryptoWallet': '../schemas/CryptoWallet.yaml'
|
||||
'DigitalWallet': '../schemas/DigitalWallet.yaml'
|
@ -1,13 +1,11 @@
|
||||
description: Смена статуса приемника на не авторизованный
|
||||
allOf:
|
||||
- $ref: '#/definitions/Event'
|
||||
- $ref: '../schemas/Event.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- destinationID
|
||||
properties:
|
||||
destinationID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/DestinationID'
|
||||
$ref: '../schemas/DestinationID.yaml'
|
||||
externalID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/ExternalID'
|
||||
$ref: '../schemas/ExternalID.yaml'
|
@ -1,6 +1,6 @@
|
||||
description: Данные криптовалютного кошелька
|
||||
allOf:
|
||||
- $ref: '#/definitions/DestinationResource'
|
||||
- $ref: '../schemas/DestinationResource.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- digitalWalletId
|
@ -1,6 +1,5 @@
|
||||
description: Данные события
|
||||
type: object
|
||||
discriminator: eventType
|
||||
required:
|
||||
- occuredAt
|
||||
- topic
|
||||
@ -29,3 +28,13 @@ properties:
|
||||
- DestinationCreated
|
||||
- DestinationAuthorized
|
||||
- DestinationUnauthorized
|
||||
|
||||
discriminator:
|
||||
propertyName: eventType
|
||||
mapping:
|
||||
'WithdrawalStarted': '../schemas/WithdrawalStarted.yaml'
|
||||
'WithdrawalSucceeded': '../schemas/WithdrawalSucceeded.yaml'
|
||||
'WithdrawalFailed': '../schemas/WithdrawalFailed.yaml'
|
||||
'DestinationCreated': '../schemas/DestinationCreated.yaml'
|
||||
'DestinationAuthorized': '../schemas/DestinationAuthorized.yaml'
|
||||
'DestinationUnauthorized': '../schemas/DestinationUnauthorized.yaml'
|
6
openapi/components/schemas/GeneralError.yaml
Normal file
6
openapi/components/schemas/GeneralError.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
type: object
|
||||
required:
|
||||
- message
|
||||
properties:
|
||||
message:
|
||||
type: string
|
@ -6,26 +6,20 @@ required:
|
||||
- body
|
||||
properties:
|
||||
id:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/WithdrawalID'
|
||||
$ref: '../schemas/WithdrawalID.yaml'
|
||||
createdAt:
|
||||
description: Дата и время запуска вывода
|
||||
type: string
|
||||
format: date-time
|
||||
destination:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/DestinationID'
|
||||
$ref: '../schemas/DestinationID.yaml'
|
||||
body:
|
||||
x-rebillyMerge:
|
||||
- description: Объём средств, которые необходимо вывести
|
||||
- $ref: '#/definitions/Asset'
|
||||
$ref: '../schemas/Asset.yaml'
|
||||
metadata:
|
||||
description: |
|
||||
Произвольный, специфичный для клиента API и непрозрачный для системы набор данных, ассоциированных с
|
||||
данным выводом
|
||||
wallet:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/WalletID'
|
||||
$ref: '../schemas/WalletID.yaml'
|
||||
externalID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/ExternalID'
|
||||
$ref: '../schemas/ExternalID.yaml'
|
@ -1,13 +1,11 @@
|
||||
description: Событие о неуспешном осуществлении вывода средств
|
||||
allOf:
|
||||
- $ref: '#/definitions/Event'
|
||||
- $ref: '../schemas/Event.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- withdrawalID
|
||||
properties:
|
||||
withdrawalID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/WithdrawalID'
|
||||
$ref: '../schemas/WithdrawalID.yaml'
|
||||
externalID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/ExternalID'
|
||||
$ref: '../schemas/ExternalID.yaml'
|
@ -1,9 +1,9 @@
|
||||
description: Событие о начале осуществления вывода средств
|
||||
allOf:
|
||||
- $ref: '#/definitions/Event'
|
||||
- $ref: '../schemas/Event.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- withdrawal
|
||||
properties:
|
||||
withdrawal:
|
||||
$ref: '#/definitions/Withdrawal'
|
||||
$ref: '../schemas/Withdrawal.yaml'
|
@ -1,13 +1,11 @@
|
||||
description: Событие об успешном осуществлении вывода средств
|
||||
allOf:
|
||||
- $ref: '#/definitions/Event'
|
||||
- $ref: '../schemas/Event.yaml'
|
||||
- type: object
|
||||
required:
|
||||
- withdrawalID
|
||||
properties:
|
||||
withdrawalID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/WithdrawalID'
|
||||
$ref: '../schemas/WithdrawalID.yaml'
|
||||
externalID:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/ExternalID'
|
||||
$ref: '../schemas/ExternalID.yaml'
|
@ -1,8 +1,11 @@
|
||||
swagger: '2.0'
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
version: '0.1.0'
|
||||
title: Vality Wallets · Webhook Events API
|
||||
termsOfService: 'https://vality.dev/'
|
||||
version: 0.1.0
|
||||
title: Vality Wallets. Webhooks Events API
|
||||
termsOfService: https://vality.dev/
|
||||
license:
|
||||
name: Apache 2.0
|
||||
url: https://www.apache.org/licenses/LICENSE-2.0.html
|
||||
description: |
|
||||
|
||||
## Wallet Webhook Events API
|
||||
@ -75,22 +78,12 @@ info:
|
||||
|
||||
Набор атрибутов заголовка и список возможных алгоритмов формирования подписи
|
||||
в дальнейшем могут быть расширены.
|
||||
|
||||
schemes:
|
||||
- https
|
||||
consumes:
|
||||
- application/json; charset=utf-8
|
||||
produces:
|
||||
- application/json; charset=utf-8
|
||||
parameters:
|
||||
signature:
|
||||
name: Content-Signature
|
||||
in: header
|
||||
description: >
|
||||
Подпись сообщения, сформированная согласно указанным выше правилам
|
||||
required: true
|
||||
type: string
|
||||
servers:
|
||||
- url: 'https://merchant.site'
|
||||
tags:
|
||||
- name: Event Notifications
|
||||
x-displayName: Оповещения
|
||||
description: Доставка оповещений о событиях системы.
|
||||
paths:
|
||||
'/webhook':
|
||||
$ref: './paths/webhook-url.yaml'
|
17
openapi/paths/webhook-url.yaml
Normal file
17
openapi/paths/webhook-url.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
post:
|
||||
tags:
|
||||
- Event Notifications
|
||||
summary: Оповестить о событии
|
||||
operationId: notifyWebhookEvent
|
||||
parameters:
|
||||
- $ref: '../components/parameters/signature.yaml'
|
||||
requestBody:
|
||||
description: Данные произошедшего в платформе события
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../components/schemas/Event.yaml'
|
||||
responses:
|
||||
'200':
|
||||
description: Оповещение обработано
|
21251
package-lock.json
generated
21251
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
33
package.json
33
package.json
@ -1,28 +1,15 @@
|
||||
{
|
||||
"name": "swag-wallets-webhook-openapi-spec",
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"bower": "^1.7.7",
|
||||
"connect": "^3.4.1",
|
||||
"cors": "^2.7.1",
|
||||
"gulp-connect": "^4.2.0",
|
||||
"gulp-util": "^3.0.8",
|
||||
"json-merge-patch": "^0.2.3",
|
||||
"npm": "^8.1.3",
|
||||
"portfinder": "^1.0.3",
|
||||
"shelljs": "^0.8.5",
|
||||
"swagger-repo": "^1.5.1",
|
||||
"swagger-ui": "^2.1.4"
|
||||
},
|
||||
"name": "swag-webhook-events",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "node ./scripts/build.js",
|
||||
"bundle-swagger-ui": "node ./scripts/bundle-swagger-ui.js",
|
||||
"swagger": "swagger-repo",
|
||||
"test": "swagger-repo validate",
|
||||
"start": "gulp serve"
|
||||
"dependencies": {
|
||||
"@redocly/openapi-cli": "1.0.0-beta.81",
|
||||
"json-merge-patch": "1.0.2",
|
||||
"redoc-cli": "0.13.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"gulp": "github:gulpjs/gulp"
|
||||
"scripts": {
|
||||
"start": "openapi preview-docs",
|
||||
"build": "openapi bundle -o web_deploy/openapi.yaml && openapi bundle -o web_deploy/openapi.json",
|
||||
"validate": "openapi lint"
|
||||
}
|
||||
}
|
197
pom.xml
197
pom.xml
@ -6,8 +6,8 @@
|
||||
|
||||
<parent>
|
||||
<groupId>dev.vality</groupId>
|
||||
<artifactId>parent</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<artifactId>library-parent-pom</artifactId>
|
||||
<version>1.0.2</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>swag-wallets-webhook-events</artifactId>
|
||||
@ -21,20 +21,19 @@
|
||||
<properties>
|
||||
<default.package>dev.vality.swag.wallets.webhook.events</default.package>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<swagger-annotations-version>1.5.21</swagger-annotations-version>
|
||||
<jodatime-version>2.7</jodatime-version>
|
||||
<maven-plugin-version>1.0.0</maven-plugin-version>
|
||||
<java.version>1.8</java.version>
|
||||
<java.version>11</java.version>
|
||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||
<jetty-version>9.2.15.v20160210</jetty-version>
|
||||
<slf4j-version>1.7.21</slf4j-version>
|
||||
<junit-version>4.13.1</junit-version>
|
||||
<slf4j-version>1.7.33</slf4j-version>
|
||||
<junit-version>4.13.2</junit-version>
|
||||
<servlet-api-version>2.5</servlet-api-version>
|
||||
<jackson-version>2.13.1</jackson-version>
|
||||
<spring-version>2.6.1</spring-version>
|
||||
<springfox-version>3.0.0</springfox-version>
|
||||
<jackson-version>2.11.3</jackson-version>
|
||||
<jackson-threetenbp-version>2.6.4</jackson-threetenbp-version>
|
||||
<spring-version>5.3.14</spring-version>
|
||||
<javax-annotation-api-version>1.3.2</javax-annotation-api-version>
|
||||
<jaxb-version>2.3.1</jaxb-version>
|
||||
<openapi-generator-version>5.3.1</openapi-generator-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@ -47,20 +46,26 @@
|
||||
|
||||
<!--Spring dependencies -->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-core</artifactId>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot</artifactId>
|
||||
<version>${spring-version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-webmvc</artifactId>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
||||
<version>${spring-version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-web</artifactId>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<version>${spring-version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-commons</artifactId>
|
||||
<version>${spring-version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
@ -70,23 +75,21 @@
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger2</artifactId>
|
||||
<version>${springfox-version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-annotations</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger-ui</artifactId>
|
||||
<version>${springfox-version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.swagger</groupId>
|
||||
<artifactId>swagger-annotations</artifactId>
|
||||
<version>1.6.4</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
@ -94,12 +97,6 @@
|
||||
<version>${jackson-version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${junit-version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
@ -109,57 +106,107 @@
|
||||
<dependency>
|
||||
<groupId>javax.annotation</groupId>
|
||||
<artifactId>javax.annotation-api</artifactId>
|
||||
<version>1.3.2</version>
|
||||
<version>${javax-annotation-api-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.xml.bind</groupId>
|
||||
<artifactId>jaxb-api</artifactId>
|
||||
<version>2.3.1</version>
|
||||
</dependency>
|
||||
<!-- Bean Validation API support -->
|
||||
<dependency>
|
||||
<groupId>javax.validation</groupId>
|
||||
<artifactId>validation-api</artifactId>
|
||||
<version>1.1.0.Final</version>
|
||||
<version>2.0.1.Final</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.5.13</version>
|
||||
<groupId>javax.xml.bind</groupId>
|
||||
<artifactId>jaxb-api</artifactId>
|
||||
<version>${jaxb-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.findbugs</groupId>
|
||||
<artifactId>jsr305</artifactId>
|
||||
<version>3.0.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>jackson-databind-nullable</artifactId>
|
||||
<version>0.2.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${junit-version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>io.swagger</groupId>
|
||||
<artifactId>swagger-codegen-maven-plugin</artifactId>
|
||||
<version>2.3.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>generate</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
|
||||
<inputSpec>web_deploy/swagger.yaml</inputSpec>
|
||||
<configOptions>
|
||||
<dateLibrary>java8</dateLibrary>
|
||||
</configOptions>
|
||||
|
||||
<language>spring</language>
|
||||
<library>spring-mvc</library>
|
||||
|
||||
<apiPackage>${default.package}.api</apiPackage>
|
||||
<modelPackage>${default.package}.model</modelPackage>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>server</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||
<version>${openapi-generator-version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>spring-server</id>
|
||||
<goals>
|
||||
<goal>generate</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<inputSpec>web_deploy/openapi.yaml</inputSpec>
|
||||
<generatorName>spring</generatorName>
|
||||
<generateModels>true</generateModels>
|
||||
<generateApis>true</generateApis>
|
||||
<generateApiDocumentation>true</generateApiDocumentation>
|
||||
<generateSupportingFiles>true</generateSupportingFiles>
|
||||
<apiPackage>${default.package}.api</apiPackage>
|
||||
<modelPackage>${default.package}.model</modelPackage>
|
||||
<supportingFilesToGenerate>ApiUtil.java</supportingFilesToGenerate>
|
||||
<configOptions>
|
||||
<dateLibrary>java8</dateLibrary>
|
||||
<delegatePattern>true</delegatePattern>
|
||||
<useBeanValidation>true</useBeanValidation>
|
||||
</configOptions>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>client</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||
<version>${openapi-generator-version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>remote</id>
|
||||
<goals>
|
||||
<goal>generate</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<inputSpec>web_deploy/openapi.yaml</inputSpec>
|
||||
<generatorName>java</generatorName>
|
||||
<configOptions>
|
||||
<dateLibrary>java8</dateLibrary>
|
||||
</configOptions>
|
||||
<library>resttemplate</library>
|
||||
<apiPackage>${default.package}.api</apiPackage>
|
||||
<modelPackage>${default.package}.model</modelPackage>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
||||
|
4
renovate.json
Normal file
4
renovate.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": ["local>valitydev/.github:renovate-config"]
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
'use strict';
|
||||
|
||||
var TARGET_DIR = 'dist'
|
||||
if (process.argv[2]) {
|
||||
TARGET_DIR = process.argv[2]
|
||||
}
|
||||
|
||||
require('shelljs/global');
|
||||
set('-e');
|
||||
|
||||
mkdir('-p', TARGET_DIR);
|
||||
|
||||
cp('-R', 'web/*', TARGET_DIR + '/');
|
||||
|
||||
exec('npm run swagger bundle -- -o ' + TARGET_DIR + '/swagger.json');
|
||||
exec('npm run swagger bundle -- --yaml -o ' + TARGET_DIR + '/swagger.yaml');
|
@ -1,18 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
'use strict';
|
||||
var Path = require('path');
|
||||
|
||||
var TARGET_DIR = 'dist'
|
||||
if (process.argv[2]) {
|
||||
TARGET_DIR = process.argv[2]
|
||||
}
|
||||
|
||||
require('shelljs/global');
|
||||
set('-e');
|
||||
|
||||
mkdir('-p', TARGET_DIR);
|
||||
|
||||
var SWAGGER_UI_DIST = Path.dirname(require.resolve('swagger-ui'));
|
||||
rm('-rf', TARGET_DIR + '/swagger-ui/')
|
||||
cp('-R', SWAGGER_UI_DIST, TARGET_DIR + '/swagger-ui/')
|
||||
sed('-i', 'http://petstore.swagger.io/v2/swagger.json', '../swagger.json', TARGET_DIR + '/swagger-ui/index.html')
|
@ -1,31 +0,0 @@
|
||||
var jpointer = require('json-pointer');
|
||||
var mergePatch = require('json-merge-patch');
|
||||
|
||||
module.exports = {
|
||||
pathExpression: '$..["x-merge-properties"]',
|
||||
init: function(swagger) {
|
||||
console.log('* x-merge-properties plugin');
|
||||
},
|
||||
process: function(parent, name, jsonpath, swagger) {
|
||||
var value = parent[name];
|
||||
if (!Array.isArray(value)) {
|
||||
throw Error('x-merge-properties argument should be array at ' + jsonpath);
|
||||
}
|
||||
let required = [];
|
||||
let properties = {};
|
||||
value.forEach(function(obj) {
|
||||
if (obj.$ref && (typeof obj.$ref === 'string')) {
|
||||
obj = jpointer.get(swagger, obj.$ref.substring(1));
|
||||
}
|
||||
if (typeof obj !== 'object') throw Error('Can\'t merge non-object values at ' + jsonpath);
|
||||
required = required.concat(obj.required || []);
|
||||
properties = mergePatch.apply(properties, obj.properties || {});
|
||||
});
|
||||
delete parent[name];
|
||||
parent.required = required;
|
||||
parent.properties = properties;
|
||||
},
|
||||
finish: function(swagger) {
|
||||
// TODO: cleanup unused $refs
|
||||
},
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
var jpointer = require('json-pointer');
|
||||
var mergePatch = require('json-merge-patch');
|
||||
|
||||
module.exports = {
|
||||
pathExpression: '$..["x-rebillyMerge"]',
|
||||
init: function(swagger) {
|
||||
console.log('* x-rebillyMerge plugin');
|
||||
},
|
||||
process: function(parent, name, jsonpath, swagger) {
|
||||
var value = parent[name];
|
||||
if (!Array.isArray(value)) {
|
||||
throw Error('x-rebillyMerge argument should be array at ' + jsonpath);
|
||||
}
|
||||
let res = null;
|
||||
value.forEach(function(obj) {
|
||||
if (typeof obj !== 'object') throw Error('Can\'t merge non-object values at ' + jsonpath);
|
||||
if (obj.$ref && (typeof obj.$ref === 'string')) {
|
||||
obj = jpointer.get(swagger, obj.$ref.substring(1));
|
||||
}
|
||||
res = mergePatch.apply(res, obj);
|
||||
});
|
||||
delete parent[name];
|
||||
Object.assign(parent, res);
|
||||
},
|
||||
finish: function(swagger) {
|
||||
// TODO: cleanup unused $refs
|
||||
},
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
## Global headers
|
||||
|
||||
In order to minimize duplications you can use `headers` global object (similar to `definitions`, `responses`).
|
||||
During build process all references to global `headers` will be inlined and `headers` will be removed form resulting spec so spec will be valid (global `headers` is not allowed by Swagger spec):
|
||||
|
||||
Example:
|
||||
```yaml
|
||||
...
|
||||
headers:
|
||||
Rate-Limit-Limit:
|
||||
description: The number of allowed requests in the current period
|
||||
type: integer
|
||||
...
|
||||
paths:
|
||||
/api-keys:
|
||||
get:
|
||||
summary: Retrieve a list of api keys
|
||||
responses:
|
||||
200:
|
||||
description: A list of api keys was retrieved successfully
|
||||
headers:
|
||||
Rate-Limit-Limit:
|
||||
$ref: "#/headers/Rate-Limit-Limit"
|
||||
```
|
@ -1,24 +0,0 @@
|
||||
description: Данные счета
|
||||
type: object
|
||||
required:
|
||||
- currency
|
||||
- identity
|
||||
properties:
|
||||
id:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/AccountID'
|
||||
createdAt:
|
||||
description: Дата и время создания счета
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
currency:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/CurrencyID'
|
||||
identity:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/IdentityID'
|
||||
accountNumber:
|
||||
x-rebillyMerge:
|
||||
- $ref: '#/definitions/AccountNumber'
|
||||
|
@ -1,16 +0,0 @@
|
||||
post:
|
||||
tags:
|
||||
- Event Notifications
|
||||
summary: Оповестить о событии
|
||||
operationId: notifyWebhookEvent
|
||||
parameters:
|
||||
- $ref: '#/parameters/signature'
|
||||
- in: body
|
||||
name: event
|
||||
description: Данные произошедшего в системе события
|
||||
required: true
|
||||
schema:
|
||||
$ref: '#/definitions/Event'
|
||||
responses:
|
||||
'200':
|
||||
description: Оповещение обработано
|
@ -1,35 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<head>
|
||||
<title>Vality Wallets · Webhook Events API</title>
|
||||
<!-- Needed for adaptive design -->
|
||||
<meta charset="utf-8" />
|
||||
<!-- needed for adaptive design -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js">
|
||||
</script>
|
||||
<!-- ReDoc doesn't change outer page styles -->
|
||||
<link rel="icon" type="image/png" href="favicon.png">
|
||||
|
||||
<!--
|
||||
ReDoc uses font options from the parent element
|
||||
So override default browser styles
|
||||
-->
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id='redoc'></div>
|
||||
<script type="text/javascript">
|
||||
Redoc.init(
|
||||
"./swagger.json",
|
||||
{
|
||||
theme: {
|
||||
breakpoints: {
|
||||
// 3-panel view fix
|
||||
medium: '75rem'
|
||||
}
|
||||
}
|
||||
},
|
||||
document.getElementById('redoc')
|
||||
);
|
||||
</script>
|
||||
</body>
|
||||
{{{redocHead}}}
|
||||
</head>
|
||||
<body>
|
||||
{{{redocHTML}}}
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user