Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions npm-shrinkwrap.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@kontist/mock-solaris",
"version": "1.0.183",
"version": "1.0.184",
"description": "Mock Service for Solaris API",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -777,7 +777,7 @@ app.post(

// BACKOFFICE - SCHEDULED TRANSFERS
app.post(
"/__BACKOFFICE__/triggerScheduledTransfer/:personId/:scheduledTransferId",
"/__BACKOFFICE__/triggerScheduledTransfer/:accountId/:scheduledTransferId",
safeRequestHandler(
scheduledTransfersAPI.triggerScheduledTransferRequestHandler
)
Expand Down
1 change: 1 addition & 0 deletions src/helpers/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,7 @@ export enum TransactionWebhookEvent {
"SEPA_TIMED_ORDER" = "SEPA_TIMED_ORDER",
"SEPA_DIRECT_DEBIT_RETURN" = "SEPA_DIRECT_DEBIT_RETURN",
"SCHEDULED_TRANSFER_STATUS_CHANGED" = "SCHEDULED_TRANSFER_STATUS_CHANGED",
"SEPA_CREDIT_TRANSACTION_DECLINED" = "SEPA_CREDIT_TRANSACTION_DECLINED",
}

export enum PersonWebhookEvent {
Expand Down
6 changes: 5 additions & 1 deletion src/helpers/webhooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ const WEBHOOK_SECRETS = {
process.env.SOLARIS_SEPA_TIMED_ORDER_WEBHOOK_SECRET,
[TransactionWebhookEvent.SEPA_DIRECT_DEBIT_RETURN]:
process.env.SOLARIS_SEPA_DIRECT_DEBIT_RETURN_WEBHOOK_SECRET,
[TransactionWebhookEvent.SCHEDULED_TRANSFER_STATUS_CHANGED]:
process.env.SOLARIS_SCHEDULED_TRANSFER_STATUS_CHANGED_WEBHOOK_SECRET,
[TransactionWebhookEvent.SEPA_CREDIT_TRANSACTION_DECLINED]:
process.env.SOLARIS_SEPA_CREDIT_TRANSACTION_DECLINED_WEBHOOK_SECRET,

[AccountWebhookEvent.ACCOUNT_BLOCK]:
process.env.SOLARIS_ACCOUNT_BLOCK_WEBHOOK_SECRET,
Expand Down Expand Up @@ -158,7 +162,7 @@ export const triggerWebhook = async ({
try {
await triggerRequest(webhook.url);
} catch (err) {
log.error(`Webhook request to ${webhook.url} failed`, err);
log.error(`Webhook request to ${webhook.url} failed`, err.message);
throw err;
}
};
8 changes: 4 additions & 4 deletions src/routes/backoffice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -611,8 +611,8 @@ export const processQueuedBooking = async (
if (id) {
const findQueuedBooking = (queuedBooking) => queuedBooking.id === id;
booking = bookings.find(findQueuedBooking);
// Standing orders are not removed until cancelled or expired.
if (!isStandingOrder) {
// Standing orders and scheduled transfers are not removed until cancelled or expired.
if (!isStandingOrder && !isScheduledTransfer) {
_.remove(bookings, findQueuedBooking);
}
} else {
Expand Down Expand Up @@ -716,8 +716,8 @@ export const processBusinessQueuedBooking = async (
if (id) {
const findQueuedBooking = (queuedBooking) => queuedBooking.id === id;
booking = bookings.find(findQueuedBooking);
// Standing orders are not removed until cancelled or expired.
if (!isStandingOrder) {
// Standing orders and scheduled transfers are not removed until cancelled or expired.
if (!isStandingOrder && !isScheduledTransfer) {
_.remove(bookings, findQueuedBooking);
}
} else {
Expand Down
56 changes: 47 additions & 9 deletions src/routes/scheduledTransfers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
processQueuedBooking,
} from "./backoffice";
import {
Booking,
EXECUTION_SCHEDULE,
SCHEDULED_TRANSFER_STATUS,
ScheduledTransfer,
Expand Down Expand Up @@ -312,17 +313,47 @@ export const triggerScheduledTransferRequestHandler = async (req, res) => {
scheduledTransferId
);

let booking;
let booking: Booking;

if (!declinedReason) {
booking = (await person)
? processQueuedBooking(accountId, scheduledTransferId, false, true)
booking = await (!!person
? processQueuedBooking(person.id, scheduledTransferId, false, true)
: processBusinessQueuedBooking(
accountId,
business.id,
scheduledTransferId,
false,
true
);
));
} else {
const { scheduledTransfer } = await getScheduledTransfer(
accountId,
scheduledTransferId
);

const payload = {
id: scheduledTransferId,
status: "declined",
reference: "",
amount: {
value: scheduledTransfer.amount.value,
unit: "cents",
currency: "EUR",
},
description: scheduledTransfer.description,
recipient_iban: scheduledTransfer.creditor_iban,
recipient_name: scheduledTransfer.creditor_name,
recipient_bic: scheduledTransfer.creditor_bic || "SOLARIS",
end_to_end_id: "END2ENDREJ",
schedule_id: scheduledTransferId,
batch_id: null,
created_at: moment().toISOString(),
rejection_reason: declinedReason,
};

await triggerWebhook({
type: TransactionWebhookEvent.SEPA_CREDIT_TRANSACTION_DECLINED,
payload,
});
}

// We need to update next execution date and call webhook in all cases, even when a scheduled transfer is declined
Expand Down Expand Up @@ -368,7 +399,7 @@ const updateScheduledTransferNextExecutionDateAndStatus = async (
scheduledTransferId
) => {
const { scheduledTransfer } = await getScheduledTransfer(
account,
account.id,
scheduledTransferId
);

Expand Down Expand Up @@ -523,6 +554,13 @@ const hasFundsToExecuteScheduledTransfer = async (
(so) => so.id === scheduledTransferId
);

if (!scheduledTransfer) {
log.error(
`hasFundsToExecuteScheduledTransfer: Scheduled transfer not found: ${scheduledTransferId}`
);
return false;
}

return account.balance.value >= scheduledTransfer.amount.value;
};

Expand All @@ -531,7 +569,7 @@ const triggerSepaScheduledTransactionWebhook = async ({
scheduledTransferId,
}) => {
const { scheduledTransfer } = await getScheduledTransfer(
person.account,
person.account.id,
scheduledTransferId
);

Expand All @@ -548,8 +586,8 @@ const triggerSepaScheduledTransactionWebhook = async ({
};

const getScheduledTransfer = async (
accountId,
scheduledTransferId
accountId: string,
scheduledTransferId: string
): Promise<{
scheduledTransfer: ScheduledTransfer;
}> => {
Expand Down
Loading