Support setting custom Nordigen access duration
If agreements are already available and no custom `access_days` is passed, it will simply take the first match regardless of duration. When a new agreement is needed, it defaults to the max supported.
This commit is contained in:
parent
5f75b6a9e1
commit
691478d3e7
|
|
@ -92,14 +92,14 @@ class Nordigen
|
||||||
* accepted: ?string,
|
* accepted: ?string,
|
||||||
* }[] EndUserAgreement list
|
* }[] EndUserAgreement list
|
||||||
*/
|
*/
|
||||||
public function firstValidAgreement(string $institutionId, int $txDays): ?array
|
public function firstValidAgreement(string $institutionId, int $accessDays, int $txDays): ?array
|
||||||
{
|
{
|
||||||
$requiredScopes = ['balances', 'details', 'transactions'];
|
$requiredScopes = ['balances', 'details', 'transactions'];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return Arr::first(
|
return Arr::first(
|
||||||
$this->client->endUserAgreement->getEndUserAgreements()['results'],
|
$this->client->endUserAgreement->getEndUserAgreements()['results'],
|
||||||
function (array $eua) use ($institutionId, $requiredScopes, $txDays): bool {
|
function (array $eua) use ($institutionId, $requiredScopes, $accessDays, $txDays): bool {
|
||||||
$expiresAt = $eua['accepted'] ? (new \DateTimeImmutable($eua['accepted']))->add(
|
$expiresAt = $eua['accepted'] ? (new \DateTimeImmutable($eua['accepted']))->add(
|
||||||
new \DateInterval("P{$eua['access_valid_for_days']}D")
|
new \DateInterval("P{$eua['access_valid_for_days']}D")
|
||||||
) : false;
|
) : false;
|
||||||
|
|
@ -107,6 +107,7 @@ class Nordigen
|
||||||
return $eua['institution_id'] === $institutionId
|
return $eua['institution_id'] === $institutionId
|
||||||
&& $eua['accepted'] === null
|
&& $eua['accepted'] === null
|
||||||
&& $eua['max_historical_days'] >= $txDays
|
&& $eua['max_historical_days'] >= $txDays
|
||||||
|
&& $eua['access_valid_for_days'] >= $accessDays
|
||||||
&& !array_diff($requiredScopes, $eua['access_scope'] ?? []);
|
&& !array_diff($requiredScopes, $eua['access_scope'] ?? []);
|
||||||
},
|
},
|
||||||
null
|
null
|
||||||
|
|
@ -137,13 +138,15 @@ class Nordigen
|
||||||
* accepted: string
|
* accepted: string
|
||||||
* }|null Agreement details
|
* }|null Agreement details
|
||||||
*/
|
*/
|
||||||
public function createAgreement(array $institution, int $transactionDays): array
|
public function createAgreement(array $institution, int $accessDays, int $transactionDays): array
|
||||||
{
|
{
|
||||||
$txDays = $transactionDays < 30 ? 30 : $transactionDays;
|
$txDays = $transactionDays < 30 ? 30 : $transactionDays;
|
||||||
$max = $institution['transaction_total_days'];
|
$maxAccess = $institution['max_access_valid_for_days'];
|
||||||
|
$maxTx = $institution['transaction_total_days'];
|
||||||
|
|
||||||
return $this->client->endUserAgreement->createEndUserAgreement(
|
return $this->client->endUserAgreement->createEndUserAgreement(
|
||||||
maxHistoricalDays: $txDays > $max ? $max : $txDays,
|
accessValidForDays: $accessDays > $maxAccess ? $maxAccess : $accessDays,
|
||||||
|
maxHistoricalDays: $txDays > $maxTx ? $maxTx : $txDays,
|
||||||
institutionId: $institution['id'],
|
institutionId: $institution['id'],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,15 +86,17 @@ class NordigenController extends BaseController
|
||||||
$nordigenAccount = $nordigen->getAccount($integration->nordigen_account_id);
|
$nordigenAccount = $nordigen->getAccount($integration->nordigen_account_id);
|
||||||
$euaId = preg_replace($match, '${1}', $nordigenAccount['error']);
|
$euaId = preg_replace($match, '${1}', $nordigenAccount['error']);
|
||||||
|
|
||||||
// Fetch the old agreement and maintain its history setting
|
// Fetch the old agreement and maintain its access/history settings
|
||||||
$data['tx_days'] = $nordigen->getAgreement($euaId)['max_historical_days'];
|
$agreement = $nordigen->getAgreement($euaId);
|
||||||
|
$data['access_days'] = $agreement['max_access_valid_for_days'];
|
||||||
|
$data['tx_days'] = $agreement['max_historical_days'];
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$txDays = $data['tx_days'] ?? 0;
|
$txDays = $data['tx_days'] ?? 0;
|
||||||
|
|
||||||
$agreement = $nordigen->firstValidAgreement($institution['id'], $txDays)
|
$agreement = $nordigen->firstValidAgreement($institution['id'], $data['access_days'] ?? 0, $txDays)
|
||||||
?? $nordigen->createAgreement($institution, $txDays);
|
?? $nordigen->createAgreement($institution, $data['access_days'] ?? 9999, $txDays);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$debug = "{$e->getMessage()} ({$e->getCode()})";
|
$debug = "{$e->getMessage()} ({$e->getCode()})";
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue