Compare commits
10 Commits
f13d417549
...
345f84c0b2
Author | SHA1 | Date |
---|---|---|
dankito | 345f84c0b2 | |
dankito | c5abc20506 | |
dankito | 9a292a0e6c | |
dankito | eb80537be4 | |
dankito | 02eb0f5804 | |
dankito | 7437ac0cf5 | |
dankito | ec519f77b5 | |
dankito | f64d3b103d | |
dankito | 84b2df03b6 | |
dankito | 68c2606a22 |
|
@ -93,7 +93,7 @@ kotlin {
|
||||||
|
|
||||||
jvmMain {
|
jvmMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("com.fasterxml.jackson.core:jackson-annotations:2.15.0")
|
compileOnly("com.fasterxml.jackson.core:jackson-annotations:2.15.0")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jvmTest { }
|
jvmTest { }
|
||||||
|
|
|
@ -4,9 +4,9 @@ import net.codinux.banking.client.model.config.NoArgConstructor
|
||||||
|
|
||||||
@NoArgConstructor
|
@NoArgConstructor
|
||||||
open class AccountCredentials(
|
open class AccountCredentials(
|
||||||
var bankCode: String,
|
val bankCode: String,
|
||||||
var loginName: String,
|
val loginName: String,
|
||||||
var password: String
|
val password: String
|
||||||
) {
|
) {
|
||||||
override fun toString() = "$bankCode $loginName"
|
override fun toString() = "$bankCode $loginName"
|
||||||
}
|
}
|
|
@ -1,3 +1,9 @@
|
||||||
package net.codinux.banking.client.model.config
|
package net.codinux.banking.client.model.config
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Annotation to be able to apply Jackson's @com.fasterxml.jackson.annotation.JsonIgnore in common module
|
||||||
|
*/
|
||||||
|
// match the target and retention settings of Jackson's JsonIgnore annotation
|
||||||
|
@Target(AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FIELD, AnnotationTarget.PROPERTY_GETTER)
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
expect annotation class JsonIgnore()
|
expect annotation class JsonIgnore()
|
||||||
|
|
|
@ -9,7 +9,7 @@ open class GetAccountDataRequest(bankCode: String, loginName: String, password:
|
||||||
: AccountCredentials(bankCode, loginName, password) {
|
: AccountCredentials(bankCode, loginName, password) {
|
||||||
|
|
||||||
constructor(credentials: AccountCredentials, options: GetAccountDataOptions? = null)
|
constructor(credentials: AccountCredentials, options: GetAccountDataOptions? = null)
|
||||||
: this(credentials.bankCode, credentials.loginName, credentials.loginName, options)
|
: this(credentials.bankCode, credentials.loginName, credentials.password, options)
|
||||||
|
|
||||||
override fun toString() = "${super.toString()}: $options"
|
override fun toString() = "${super.toString()}: $options"
|
||||||
}
|
}
|
|
@ -5,6 +5,7 @@ import net.codinux.banking.client.model.CustomerAccount
|
||||||
import net.codinux.banking.client.model.config.JsonIgnore
|
import net.codinux.banking.client.model.config.JsonIgnore
|
||||||
import net.codinux.banking.client.model.config.NoArgConstructor
|
import net.codinux.banking.client.model.config.NoArgConstructor
|
||||||
|
|
||||||
|
@Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED")
|
||||||
@NoArgConstructor
|
@NoArgConstructor
|
||||||
open class GetAccountDataResponse(
|
open class GetAccountDataResponse(
|
||||||
val customer: CustomerAccount
|
val customer: CustomerAccount
|
||||||
|
|
|
@ -3,6 +3,7 @@ package net.codinux.banking.client.model.tan
|
||||||
import net.codinux.banking.client.model.config.JsonIgnore
|
import net.codinux.banking.client.model.config.JsonIgnore
|
||||||
import net.codinux.banking.client.model.config.NoArgConstructor
|
import net.codinux.banking.client.model.config.NoArgConstructor
|
||||||
|
|
||||||
|
@Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED")
|
||||||
@NoArgConstructor
|
@NoArgConstructor
|
||||||
open class FlickerCode(
|
open class FlickerCode(
|
||||||
val challengeHHD_UC: String,
|
val challengeHHD_UC: String,
|
||||||
|
@ -10,7 +11,7 @@ open class FlickerCode(
|
||||||
val decodingError: String? = null
|
val decodingError: String? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@JsonIgnore
|
@get:JsonIgnore
|
||||||
val decodingSuccessful: Boolean
|
val decodingSuccessful: Boolean
|
||||||
get() = decodingError == null
|
get() = decodingError == null
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package net.codinux.banking.client.model.tan
|
||||||
import net.codinux.banking.client.model.config.JsonIgnore
|
import net.codinux.banking.client.model.config.JsonIgnore
|
||||||
import net.codinux.banking.client.model.config.NoArgConstructor
|
import net.codinux.banking.client.model.config.NoArgConstructor
|
||||||
|
|
||||||
|
@Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED")
|
||||||
@NoArgConstructor
|
@NoArgConstructor
|
||||||
open class TanImage(
|
open class TanImage(
|
||||||
val mimeType: String,
|
val mimeType: String,
|
||||||
|
@ -10,7 +11,7 @@ open class TanImage(
|
||||||
val decodingError: String? = null
|
val decodingError: String? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@JsonIgnore
|
@get:JsonIgnore
|
||||||
val decodingSuccessful: Boolean
|
val decodingSuccessful: Boolean
|
||||||
get() = decodingError == null
|
get() = decodingError == null
|
||||||
|
|
||||||
|
|
|
@ -4,15 +4,13 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
kotlin("multiplatform")
|
kotlin("multiplatform")
|
||||||
|
|
||||||
|
id("maven-publish")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
// TODO: remove again as soon as kmp-web-client is released
|
|
||||||
maven {
|
|
||||||
setUrl("https://oss.sonatype.org/content/repositories/snapshots/")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,7 +81,7 @@ kotlin {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":BankingClient"))
|
api(project(":BankingClient"))
|
||||||
|
|
||||||
api("net.codinux.banking:fints4k:1.0.0-Alpha-11-SNAPSHOT")
|
api("net.codinux.banking:fints4k:1.0.0-Alpha-11")
|
||||||
|
|
||||||
api("org.jetbrains.kotlinx:kotlinx-datetime:$kotlinxDateTimeVersion")
|
api("org.jetbrains.kotlinx:kotlinx-datetime:$kotlinxDateTimeVersion")
|
||||||
}
|
}
|
||||||
|
@ -121,6 +119,21 @@ kotlin {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ext["customArtifactId"] = "fints4k-banking-client"
|
//ext["customArtifactId"] = "fints4k-banking-client"
|
||||||
|
//
|
||||||
|
//apply(from = "../gradle/scripts/publish-codinux.gradle.kts")
|
||||||
|
|
||||||
apply(from = "../gradle/scripts/publish-codinux.gradle.kts")
|
|
||||||
|
publishing {
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
name = "codinux"
|
||||||
|
url = uri("https://maven.dankito.net/api/packages/codinux/maven")
|
||||||
|
|
||||||
|
credentials(PasswordCredentials::class.java) {
|
||||||
|
username = project.property("codinuxRegistryWriterUsername") as String
|
||||||
|
password = project.property("codinuxRegistryWriterPassword") as String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,93 @@
|
||||||
|
# Banking Client
|
||||||
|
|
||||||
|
Library to abstract over different banking client implementations like [fints4k](https://git.dankito.net/codinux/fints4k).
|
||||||
|
|
||||||
|
It's primary purpose is to abstract away the different implementation details and to create a common model that can be
|
||||||
|
used in all projects directly or indirectly referencing it - Web Service, Middleware, Native Apps, HTML Apps - so that
|
||||||
|
not each project has the implement to model again.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
### Gradle:
|
||||||
|
|
||||||
|
```
|
||||||
|
plugins {
|
||||||
|
kotlin("jvm") version "2.0.10" // or kotlin("multiplatform"), depending on your requirements
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
setUrl("https://maven.dankito.net/api/packages/codinux/maven")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation("net.codinux.banking.client:fints4k-banking-client:0.5.0")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Get AccountData
|
||||||
|
|
||||||
|
Retrieves data like accounts, balance and booked transactions (Konten, Saldo und Kontoumsätze).
|
||||||
|
|
||||||
|
Basically:
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
class ShowUsage {
|
||||||
|
|
||||||
|
private val bankCode = "" // Bankleitzahl deiner Bank
|
||||||
|
|
||||||
|
private val loginName = "" // Online-Banking Login Name mit dem du dich beim Online-Banking deiner Bank anmeldest
|
||||||
|
|
||||||
|
private val password = "" // Online-Banking Password mit dem du dich beim Online-Banking deiner Bank anmeldest
|
||||||
|
|
||||||
|
|
||||||
|
fun getAccountData() {
|
||||||
|
val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback())
|
||||||
|
|
||||||
|
val response = client.getAccountData()
|
||||||
|
|
||||||
|
response.data?.let { data ->
|
||||||
|
val customer = data.customer
|
||||||
|
println("Kunde: ${customer.customerName} ${customer.accounts.size} Konten @ ${customer.bic} ${customer.bankName}")
|
||||||
|
|
||||||
|
println()
|
||||||
|
println("Konten:")
|
||||||
|
customer.accounts.sortedBy { it.type }.forEach { account ->
|
||||||
|
println("${account.identifier} ${account.productName} ${account.balance} ${account.currency}")
|
||||||
|
}
|
||||||
|
|
||||||
|
println()
|
||||||
|
println("Umsätze:")
|
||||||
|
data.bookedTransactions.forEach { transaction ->
|
||||||
|
println("${transaction.valueDate} ${transaction.amount} ${transaction.currency} ${transaction.otherPartyName ?: ""} - ${transaction.reference}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This fetches the booked account transactions of the last 90 days. In most cases no TAN is required for this.
|
||||||
|
|
||||||
|
In case there is, add TAN handling in Client Callback:
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback { tanChallenge, callback ->
|
||||||
|
val tan: String? = null // if a TAN is required, add a UI or ...
|
||||||
|
callback.invoke(EnterTanResult(tan)) // ... set a break point here, get TAN e.g. from your TAN app, set tan variable in debugger view and resume debugger
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
Add some error handling by checking `response.error`:
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
response.error?.let{ error ->
|
||||||
|
println("Could not fetch account data: ${error.internalError ?: error.errorMessagesFromBank.joinToString()}")
|
||||||
|
}
|
||||||
|
```
|
|
@ -0,0 +1,16 @@
|
||||||
|
plugins {
|
||||||
|
kotlin("jvm")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
setUrl("https://maven.dankito.net/api/packages/codinux/maven")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation("net.codinux.banking.client:fints4k-banking-client:0.5.0")
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
package net.codinux.banking.client.fints4k.example
|
||||||
|
|
||||||
|
import net.codinux.banking.client.SimpleBankingClientCallback
|
||||||
|
import net.codinux.banking.client.fints4k.FinTs4kBankingClientForCustomer
|
||||||
|
import net.codinux.banking.client.getAccountData
|
||||||
|
import net.codinux.banking.client.model.tan.EnterTanResult
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
ShowUsage().getAccountData()
|
||||||
|
}
|
||||||
|
|
||||||
|
class ShowUsage {
|
||||||
|
|
||||||
|
private val bankCode = "" // Bankleitzahl deiner Bank
|
||||||
|
|
||||||
|
private val loginName = "" // Online-Banking Login Name mit dem du dich beim Online-Banking deiner Bank anmeldest
|
||||||
|
|
||||||
|
private val password = "" // Online-Banking Password mit dem du dich beim Online-Banking deiner Bank anmeldest
|
||||||
|
|
||||||
|
|
||||||
|
fun getAccountData() {
|
||||||
|
val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback { tanChallenge, callback ->
|
||||||
|
val tan: String? = null // if a TAN is required, add a UI or ...
|
||||||
|
callback.invoke(EnterTanResult(tan)) // ... set a break point here, get TAN e.g. from your TAN app, set tan variable in debugger view and resume debugger
|
||||||
|
})
|
||||||
|
|
||||||
|
val response = client.getAccountData()
|
||||||
|
|
||||||
|
response.error?.let{ error ->
|
||||||
|
println("Could not fetch account data: ${error.internalError ?: error.errorMessagesFromBank.joinToString()}")
|
||||||
|
}
|
||||||
|
|
||||||
|
response.data?.let { data ->
|
||||||
|
val customer = data.customer
|
||||||
|
println("Kunde: ${customer.customerName} ${customer.accounts.size} Konten @ ${customer.bic} ${customer.bankName}")
|
||||||
|
|
||||||
|
println()
|
||||||
|
println("Konten:")
|
||||||
|
customer.accounts.sortedBy { it.type }.forEach { account ->
|
||||||
|
println("${account.identifier} ${account.productName} ${account.balance} ${account.currency}")
|
||||||
|
}
|
||||||
|
|
||||||
|
println()
|
||||||
|
println("Umsätze:")
|
||||||
|
data.bookedTransactions.forEach { transaction ->
|
||||||
|
println("${transaction.valueDate} ${transaction.amount} ${transaction.currency} ${transaction.otherPartyName ?: ""} - ${transaction.reference}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,10 +12,13 @@ buildscript {
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
group = "net.codinux.banking.client"
|
group = "net.codinux.banking.client"
|
||||||
version = "1.0.0-SNAPSHOT"
|
version = "0.5.1-SNAPSHOT"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
setUrl("https://maven.dankito.net/api/packages/codinux/maven")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,6 @@ kotlin.code.style=official
|
||||||
|
|
||||||
kotlinVersion=2.0.10
|
kotlinVersion=2.0.10
|
||||||
|
|
||||||
kotlinxDateTimeVersion=0.6.0
|
kotlinxDateTimeVersion=0.5.0
|
||||||
jsJodaTimeZoneVersion=2.3.0
|
jsJodaTimeZoneVersion=2.3.0
|
||||||
coroutinesVersion=1.8.1
|
coroutinesVersion=1.8.1
|
||||||
|
|
|
@ -427,6 +427,13 @@
|
||||||
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
|
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
|
||||||
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
|
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
|
||||||
|
|
||||||
|
abort-controller@3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
|
||||||
|
integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
|
||||||
|
dependencies:
|
||||||
|
event-target-shim "^5.0.0"
|
||||||
|
|
||||||
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
|
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
|
||||||
version "1.3.8"
|
version "1.3.8"
|
||||||
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
|
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
|
||||||
|
@ -1087,6 +1094,11 @@ etag@~1.8.1:
|
||||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||||
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
|
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
|
||||||
|
|
||||||
|
event-target-shim@^5.0.0:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
|
||||||
|
integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
|
||||||
|
|
||||||
eventemitter3@^4.0.0:
|
eventemitter3@^4.0.0:
|
||||||
version "4.0.7"
|
version "4.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
|
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
|
||||||
|
@ -2016,6 +2028,13 @@ neo-async@^2.6.2:
|
||||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||||
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
||||||
|
|
||||||
|
node-fetch@2.6.7:
|
||||||
|
version "2.6.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||||
|
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||||
|
dependencies:
|
||||||
|
whatwg-url "^5.0.0"
|
||||||
|
|
||||||
node-forge@^1:
|
node-forge@^1:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
|
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
|
||||||
|
@ -2759,6 +2778,11 @@ toidentifier@1.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
||||||
|
|
||||||
|
tr46@~0.0.3:
|
||||||
|
version "0.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||||
|
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
|
||||||
|
|
||||||
tree-dump@^1.0.1:
|
tree-dump@^1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.2.tgz#c460d5921caeb197bde71d0e9a7b479848c5b8ac"
|
resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.2.tgz#c460d5921caeb197bde71d0e9a7b479848c5b8ac"
|
||||||
|
@ -2857,6 +2881,11 @@ wbuf@^1.1.0, wbuf@^1.7.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
minimalistic-assert "^1.0.0"
|
minimalistic-assert "^1.0.0"
|
||||||
|
|
||||||
|
webidl-conversions@^3.0.0:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
||||||
|
integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
|
||||||
|
|
||||||
webpack-cli@5.1.4:
|
webpack-cli@5.1.4:
|
||||||
version "5.1.4"
|
version "5.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b"
|
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b"
|
||||||
|
@ -2989,6 +3018,14 @@ websocket-extensions@>=0.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
|
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
|
||||||
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
|
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
|
||||||
|
|
||||||
|
whatwg-url@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
|
||||||
|
integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
|
||||||
|
dependencies:
|
||||||
|
tr46 "~0.0.3"
|
||||||
|
webidl-conversions "^3.0.0"
|
||||||
|
|
||||||
which@^1.2.1:
|
which@^1.2.1:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||||
|
@ -3043,6 +3080,11 @@ wrappy@1:
|
||||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
|
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
|
||||||
|
|
||||||
|
ws@8.5.0:
|
||||||
|
version "8.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
|
||||||
|
integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
|
||||||
|
|
||||||
ws@^8.16.0:
|
ws@^8.16.0:
|
||||||
version "8.18.0"
|
version "8.18.0"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
|
||||||
|
|
|
@ -28,3 +28,8 @@ include("BankingClientModel")
|
||||||
include("BankingClient")
|
include("BankingClient")
|
||||||
|
|
||||||
include("FinTs4jBankingClient")
|
include("FinTs4jBankingClient")
|
||||||
|
project(":FinTs4jBankingClient").apply {
|
||||||
|
name = "fints4k-banking-client"
|
||||||
|
}
|
||||||
|
|
||||||
|
include("SampleApp")
|
||||||
|
|
Loading…
Reference in New Issue