@develit-services/bank 5.5.1 → 5.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.cjs +2 -2
- package/dist/base.d.cts +3 -3
- package/dist/base.d.mts +3 -3
- package/dist/base.d.ts +3 -3
- package/dist/base.mjs +2 -2
- package/dist/export/workflows.cjs +2 -2
- package/dist/export/workflows.mjs +2 -2
- package/dist/shared/{bank._VynZSqn.mjs → bank.Bq1AfddY.mjs} +1 -1
- package/dist/shared/{bank.DMrkshJa.cjs → bank.Dhf4K9Z2.cjs} +45 -29
- package/dist/shared/{bank.D0iIfh-X.mjs → bank.Hd9x3c7P.mjs} +47 -31
- package/dist/shared/{bank.B04qoHtD.cjs → bank.cuh6lhhy.cjs} +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.mjs +1 -1
- package/package.json +6 -1
package/dist/base.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const backendSdk = require('@develit-io/backend-sdk');
|
|
4
|
-
const paymentDirection = require('./shared/bank.
|
|
4
|
+
const paymentDirection = require('./shared/bank.Dhf4K9Z2.cjs');
|
|
5
5
|
const drizzleOrm = require('drizzle-orm');
|
|
6
6
|
const cloudflare_workers = require('cloudflare:workers');
|
|
7
7
|
const d1 = require('drizzle-orm/d1');
|
|
8
8
|
require('jose');
|
|
9
|
-
const bank = require('./shared/bank.
|
|
9
|
+
const bank = require('./shared/bank.cuh6lhhy.cjs');
|
|
10
10
|
const zod = require('zod');
|
|
11
11
|
const database_schema = require('./shared/bank.9Yw4KHyl.cjs');
|
|
12
12
|
const generalCodes = require('@develit-io/general-codes');
|
package/dist/base.d.cts
CHANGED
|
@@ -2699,9 +2699,9 @@ declare const getBatchesInputSchema: z.ZodObject<{
|
|
|
2699
2699
|
limit: z.ZodNumber;
|
|
2700
2700
|
sort: z.ZodObject<{
|
|
2701
2701
|
column: z.ZodEnum<{
|
|
2702
|
+
batchPaymentInitiatedAt: "batchPaymentInitiatedAt";
|
|
2702
2703
|
createdAt: "createdAt";
|
|
2703
2704
|
updatedAt: "updatedAt";
|
|
2704
|
-
batchPaymentInitiatedAt: "batchPaymentInitiatedAt";
|
|
2705
2705
|
}>;
|
|
2706
2706
|
direction: z.ZodEnum<{
|
|
2707
2707
|
asc: "asc";
|
|
@@ -2825,9 +2825,9 @@ declare const getPaymentsInputSchema: z.ZodObject<{
|
|
|
2825
2825
|
limit: z.ZodNumber;
|
|
2826
2826
|
sort: z.ZodObject<{
|
|
2827
2827
|
column: z.ZodEnum<{
|
|
2828
|
-
amount: "amount";
|
|
2829
2828
|
createdAt: "createdAt";
|
|
2830
2829
|
updatedAt: "updatedAt";
|
|
2830
|
+
amount: "amount";
|
|
2831
2831
|
}>;
|
|
2832
2832
|
direction: z.ZodEnum<{
|
|
2833
2833
|
asc: "asc";
|
|
@@ -3875,9 +3875,9 @@ declare const getPaymentRequestsInputSchema: z.ZodObject<{
|
|
|
3875
3875
|
limit: z.ZodNumber;
|
|
3876
3876
|
sort: z.ZodObject<{
|
|
3877
3877
|
column: z.ZodEnum<{
|
|
3878
|
-
amount: "amount";
|
|
3879
3878
|
createdAt: "createdAt";
|
|
3880
3879
|
updatedAt: "updatedAt";
|
|
3880
|
+
amount: "amount";
|
|
3881
3881
|
}>;
|
|
3882
3882
|
direction: z.ZodEnum<{
|
|
3883
3883
|
asc: "asc";
|
package/dist/base.d.mts
CHANGED
|
@@ -2699,9 +2699,9 @@ declare const getBatchesInputSchema: z.ZodObject<{
|
|
|
2699
2699
|
limit: z.ZodNumber;
|
|
2700
2700
|
sort: z.ZodObject<{
|
|
2701
2701
|
column: z.ZodEnum<{
|
|
2702
|
+
batchPaymentInitiatedAt: "batchPaymentInitiatedAt";
|
|
2702
2703
|
createdAt: "createdAt";
|
|
2703
2704
|
updatedAt: "updatedAt";
|
|
2704
|
-
batchPaymentInitiatedAt: "batchPaymentInitiatedAt";
|
|
2705
2705
|
}>;
|
|
2706
2706
|
direction: z.ZodEnum<{
|
|
2707
2707
|
asc: "asc";
|
|
@@ -2825,9 +2825,9 @@ declare const getPaymentsInputSchema: z.ZodObject<{
|
|
|
2825
2825
|
limit: z.ZodNumber;
|
|
2826
2826
|
sort: z.ZodObject<{
|
|
2827
2827
|
column: z.ZodEnum<{
|
|
2828
|
-
amount: "amount";
|
|
2829
2828
|
createdAt: "createdAt";
|
|
2830
2829
|
updatedAt: "updatedAt";
|
|
2830
|
+
amount: "amount";
|
|
2831
2831
|
}>;
|
|
2832
2832
|
direction: z.ZodEnum<{
|
|
2833
2833
|
asc: "asc";
|
|
@@ -3875,9 +3875,9 @@ declare const getPaymentRequestsInputSchema: z.ZodObject<{
|
|
|
3875
3875
|
limit: z.ZodNumber;
|
|
3876
3876
|
sort: z.ZodObject<{
|
|
3877
3877
|
column: z.ZodEnum<{
|
|
3878
|
-
amount: "amount";
|
|
3879
3878
|
createdAt: "createdAt";
|
|
3880
3879
|
updatedAt: "updatedAt";
|
|
3880
|
+
amount: "amount";
|
|
3881
3881
|
}>;
|
|
3882
3882
|
direction: z.ZodEnum<{
|
|
3883
3883
|
asc: "asc";
|
package/dist/base.d.ts
CHANGED
|
@@ -2699,9 +2699,9 @@ declare const getBatchesInputSchema: z.ZodObject<{
|
|
|
2699
2699
|
limit: z.ZodNumber;
|
|
2700
2700
|
sort: z.ZodObject<{
|
|
2701
2701
|
column: z.ZodEnum<{
|
|
2702
|
+
batchPaymentInitiatedAt: "batchPaymentInitiatedAt";
|
|
2702
2703
|
createdAt: "createdAt";
|
|
2703
2704
|
updatedAt: "updatedAt";
|
|
2704
|
-
batchPaymentInitiatedAt: "batchPaymentInitiatedAt";
|
|
2705
2705
|
}>;
|
|
2706
2706
|
direction: z.ZodEnum<{
|
|
2707
2707
|
asc: "asc";
|
|
@@ -2825,9 +2825,9 @@ declare const getPaymentsInputSchema: z.ZodObject<{
|
|
|
2825
2825
|
limit: z.ZodNumber;
|
|
2826
2826
|
sort: z.ZodObject<{
|
|
2827
2827
|
column: z.ZodEnum<{
|
|
2828
|
-
amount: "amount";
|
|
2829
2828
|
createdAt: "createdAt";
|
|
2830
2829
|
updatedAt: "updatedAt";
|
|
2830
|
+
amount: "amount";
|
|
2831
2831
|
}>;
|
|
2832
2832
|
direction: z.ZodEnum<{
|
|
2833
2833
|
asc: "asc";
|
|
@@ -3875,9 +3875,9 @@ declare const getPaymentRequestsInputSchema: z.ZodObject<{
|
|
|
3875
3875
|
limit: z.ZodNumber;
|
|
3876
3876
|
sort: z.ZodObject<{
|
|
3877
3877
|
column: z.ZodEnum<{
|
|
3878
|
-
amount: "amount";
|
|
3879
3878
|
createdAt: "createdAt";
|
|
3880
3879
|
updatedAt: "updatedAt";
|
|
3880
|
+
amount: "amount";
|
|
3881
3881
|
}>;
|
|
3882
3882
|
direction: z.ZodEnum<{
|
|
3883
3883
|
asc: "asc";
|
package/dist/base.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { uuidv4, first, buildMultiFilterConditions as buildMultiFilterConditions$1, bankAccountMetadataSchema, structuredAddressSchema, workflowInstanceStatusSchema, develitWorker, createInternalError, action, service } from '@develit-io/backend-sdk';
|
|
2
|
-
import { G as tables, g as accountInsertSchema, H as relations, o as isProcessedStatus, p as isTerminalStatus, L as getNonTerminalPaymentRequestsQuery, x as toIncomingPayment, N as calculateCzechIban, j as assignAccount, u as toBatchedPayment, y as toPaymentRequestInsert, a as FinbricksClient, F as FINBRICKS_ENDPOINTS } from './shared/bank.
|
|
2
|
+
import { G as tables, g as accountInsertSchema, H as relations, o as isProcessedStatus, p as isTerminalStatus, L as getNonTerminalPaymentRequestsQuery, x as toIncomingPayment, N as calculateCzechIban, j as assignAccount, u as toBatchedPayment, y as toPaymentRequestInsert, a as FinbricksClient, F as FINBRICKS_ENDPOINTS } from './shared/bank.Hd9x3c7P.mjs';
|
|
3
3
|
import { eq, sql, and, like, asc, desc, inArray, gte, lte, isNull, count } from 'drizzle-orm';
|
|
4
4
|
import { WorkerEntrypoint } from 'cloudflare:workers';
|
|
5
5
|
import { drizzle } from 'drizzle-orm/d1';
|
|
6
6
|
import 'jose';
|
|
7
|
-
import { h as encrypt, d as createCredentialsResolver, i as initiateConnector, e as updatePaymentRequestStatusCommand, a as getPaymentRequestsByBatchIdQuery, g as getBatchByIdQuery, u as upsertBatchCommand, j as importAesKey, f as createPaymentCommand, b as getAccountByIdQuery } from './shared/bank.
|
|
7
|
+
import { h as encrypt, d as createCredentialsResolver, i as initiateConnector, e as updatePaymentRequestStatusCommand, a as getPaymentRequestsByBatchIdQuery, g as getBatchByIdQuery, u as upsertBatchCommand, j as importAesKey, f as createPaymentCommand, b as getAccountByIdQuery } from './shared/bank.Bq1AfddY.mjs';
|
|
8
8
|
import { z } from 'zod';
|
|
9
9
|
import { I as INSTRUCTION_PRIORITIES, C as CHARGE_BEARERS, g as PAYMENT_TYPES, b as CONNECTOR_KEYS, a as BATCH_STATUSES, f as PAYMENT_STATUSES, P as PAYMENT_DIRECTIONS, e as PAYMENT_REQUEST_STATUSES } from './shared/bank.BzDNLxB_.mjs';
|
|
10
10
|
import { CURRENCY_CODES } from '@develit-io/general-codes';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const backendSdk = require('@develit-io/backend-sdk');
|
|
4
|
-
const paymentDirection = require('../shared/bank.
|
|
4
|
+
const paymentDirection = require('../shared/bank.Dhf4K9Z2.cjs');
|
|
5
5
|
const batchLifecycle = require('../shared/bank.NF8bZBy0.cjs');
|
|
6
6
|
const drizzleOrm = require('drizzle-orm');
|
|
7
|
-
const bank = require('../shared/bank.
|
|
7
|
+
const bank = require('../shared/bank.cuh6lhhy.cjs');
|
|
8
8
|
const cloudflare_workers = require('cloudflare:workers');
|
|
9
9
|
const cloudflare_workflows = require('cloudflare:workflows');
|
|
10
10
|
const d1 = require('drizzle-orm/d1');
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { first, uuidv4, asNonEmpty } from '@develit-io/backend-sdk';
|
|
2
|
-
import { G as tables, H as relations, v as toBatchedPaymentFromPaymentRequest, z as toPreparedPayment, m as isPaymentCompleted } from '../shared/bank.
|
|
2
|
+
import { G as tables, H as relations, v as toBatchedPaymentFromPaymentRequest, z as toPreparedPayment, m as isPaymentCompleted } from '../shared/bank.Hd9x3c7P.mjs';
|
|
3
3
|
import { i as isBatchAuthorized, b as isBatchFailed, d as isBatchProcessing } from '../shared/bank.XqSw509X.mjs';
|
|
4
4
|
import { eq, and, inArray } from 'drizzle-orm';
|
|
5
|
-
import { g as getBatchByIdQuery, a as getPaymentRequestsByBatchIdQuery, c as checksum, u as upsertBatchCommand, b as getAccountByIdQuery, d as createCredentialsResolver, i as initiateConnector, e as updatePaymentRequestStatusCommand, f as createPaymentCommand } from '../shared/bank.
|
|
5
|
+
import { g as getBatchByIdQuery, a as getPaymentRequestsByBatchIdQuery, c as checksum, u as upsertBatchCommand, b as getAccountByIdQuery, d as createCredentialsResolver, i as initiateConnector, e as updatePaymentRequestStatusCommand, f as createPaymentCommand } from '../shared/bank.Bq1AfddY.mjs';
|
|
6
6
|
import { WorkflowEntrypoint } from 'cloudflare:workers';
|
|
7
7
|
import { NonRetryableError } from 'cloudflare:workflows';
|
|
8
8
|
import { drizzle } from 'drizzle-orm/d1';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sql, and, eq, isNull } from 'drizzle-orm';
|
|
2
|
-
import { G as tables, b as FinbricksConnector, J as buildEndToEndId, c as MockConnector, D as DbuConnector, C as CsobConnector, K as KBConnector, M as MockCobsConnector, E as ErsteConnector } from './bank.
|
|
2
|
+
import { G as tables, b as FinbricksConnector, J as buildEndToEndId, c as MockConnector, D as DbuConnector, C as CsobConnector, K as KBConnector, M as MockCobsConnector, E as ErsteConnector } from './bank.Hd9x3c7P.mjs';
|
|
3
3
|
import { uuidv4 } from '@develit-io/backend-sdk';
|
|
4
4
|
import './bank.BzDNLxB_.mjs';
|
|
5
5
|
import 'date-fns';
|
|
@@ -644,6 +644,9 @@ const SEPA_COUNTRIES = /* @__PURE__ */ new Set([
|
|
|
644
644
|
"GI",
|
|
645
645
|
"XK"
|
|
646
646
|
]);
|
|
647
|
+
const BANK_CODE_SET = new Set(generalCodes.BANK_CODES);
|
|
648
|
+
const isBankCode = (value) => BANK_CODE_SET.has(value);
|
|
649
|
+
const toBic = (value) => value && backendSdk.bicSchema.safeParse(value).success ? value : void 0;
|
|
647
650
|
function parseOtherIdentification(value) {
|
|
648
651
|
if (!value) return {};
|
|
649
652
|
const [first, second] = value.split("/");
|
|
@@ -651,33 +654,36 @@ function parseOtherIdentification(value) {
|
|
|
651
654
|
const looksLikeIban = first.length >= 15 && /^[A-Z]{2}\d{2}[A-Z0-9]+$/.test(first);
|
|
652
655
|
if (looksLikeIban) {
|
|
653
656
|
const iban = first;
|
|
654
|
-
const swiftBic = second
|
|
657
|
+
const swiftBic = toBic(second);
|
|
655
658
|
if (iban.startsWith("CZ") && iban.length === 24) {
|
|
656
|
-
const
|
|
659
|
+
const code = iban.slice(4, 8);
|
|
657
660
|
const number = iban.slice(14, 24).replace(/^0+/, "") || iban.slice(14, 24);
|
|
658
|
-
return {
|
|
661
|
+
return {
|
|
662
|
+
iban,
|
|
663
|
+
swiftBic,
|
|
664
|
+
bankCode: isBankCode(code) ? code : void 0,
|
|
665
|
+
number
|
|
666
|
+
};
|
|
659
667
|
}
|
|
660
668
|
return { iban, swiftBic };
|
|
661
669
|
}
|
|
662
|
-
return {
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
};
|
|
670
|
+
if (!second) return { number: first };
|
|
671
|
+
if (isBankCode(second)) return { number: first, bankCode: second };
|
|
672
|
+
return { number: first, swiftBic: toBic(second) };
|
|
666
673
|
}
|
|
667
|
-
function detectPaymentType(tx, isIncoming) {
|
|
674
|
+
function detectPaymentType(tx, isIncoming, otherParsed) {
|
|
668
675
|
const related = tx.entryDetails?.transactionDetails?.relatedParties;
|
|
669
676
|
const otherParty = isIncoming ? related?.debtorAccount : related?.creditorAccount;
|
|
670
|
-
|
|
671
|
-
const otherIban = otherParty?.identification?.iban;
|
|
672
|
-
const otherCountry = otherIban?.slice(0, 2);
|
|
673
|
-
if (otherCountry
|
|
674
|
-
|
|
675
|
-
if (
|
|
676
|
-
return "SEPA";
|
|
677
|
+
const currency = tx.amount?.currency || "CZK";
|
|
678
|
+
const otherIban = otherParty?.identification?.iban || otherParsed.iban;
|
|
679
|
+
const otherCountry = otherParsed.bankCode ? "CZ" : otherIban?.slice(0, 2) || otherParsed.swiftBic?.slice(4, 6);
|
|
680
|
+
if (otherCountry) {
|
|
681
|
+
if (currency === "EUR" && SEPA_COUNTRIES.has(otherCountry)) return "SEPA";
|
|
682
|
+
if (otherCountry === "CZ" && currency === "CZK") return "DOMESTIC";
|
|
677
683
|
return "SWIFT";
|
|
678
684
|
}
|
|
679
|
-
if (
|
|
680
|
-
if (
|
|
685
|
+
if (currency === "EUR") return "SEPA";
|
|
686
|
+
if (currency !== "CZK") return "SWIFT";
|
|
681
687
|
return "DOMESTIC";
|
|
682
688
|
}
|
|
683
689
|
const mapFinbricksTransactionToPayment = (tx, account) => {
|
|
@@ -714,7 +720,11 @@ const mapFinbricksTransactionToPayment = (tx, account) => {
|
|
|
714
720
|
bankRefId: tx.fbxReference ?? tx.entryReference,
|
|
715
721
|
amount: tx.amount?.value || 0,
|
|
716
722
|
currency: tx.amount?.currency || "CZK",
|
|
717
|
-
paymentType: detectPaymentType(
|
|
723
|
+
paymentType: detectPaymentType(
|
|
724
|
+
tx,
|
|
725
|
+
isIncoming,
|
|
726
|
+
isIncoming ? debtorParsed : creditorParsed
|
|
727
|
+
),
|
|
718
728
|
status: mapFinbricksStatus(tx.status, !!tx.bookingDate?.date),
|
|
719
729
|
message: td?.remittanceInformation?.unstructured || td?.additionalRemittanceInformation || td?.additionalTransactionInformation || null,
|
|
720
730
|
processedAt: new Date(tx.bookingDate.date),
|
|
@@ -1046,7 +1056,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1046
1056
|
throw backendSdk.createInternalError(null, {
|
|
1047
1057
|
message: `Batch for unauthorized client with iban: ${payments[0].debtor.iban}`
|
|
1048
1058
|
});
|
|
1049
|
-
|
|
1059
|
+
await this.getClientId(authorizedClient.id);
|
|
1050
1060
|
const [response, error] = await backendSdk.useResult(
|
|
1051
1061
|
this.finbricks.request({
|
|
1052
1062
|
endpoint: FINBRICKS_ENDPOINTS.TRANSACTION_BATCH_INIT,
|
|
@@ -1055,7 +1065,8 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1055
1065
|
batchPaymentIdentification: {
|
|
1056
1066
|
merchantId: this.finbricks.MERCHANT_ID,
|
|
1057
1067
|
debtorAccountIban: resolveCzechDomesticIban(payments[0].debtor),
|
|
1058
|
-
clientId
|
|
1068
|
+
// TEMP: clientId disabled per client request — do not send.
|
|
1069
|
+
// clientId,
|
|
1059
1070
|
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=batch&batchId=${batchId}`,
|
|
1060
1071
|
merchantBatchId: batchId
|
|
1061
1072
|
},
|
|
@@ -1097,7 +1108,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1097
1108
|
const debtorAccount = this.connectedAccounts.find(
|
|
1098
1109
|
(acc) => acc.iban === payment.debtorIban
|
|
1099
1110
|
);
|
|
1100
|
-
|
|
1111
|
+
await this.getClientId(debtorAccount.id);
|
|
1101
1112
|
const creditorAddress = mapToFinbricksAddress(payment.creditor.address);
|
|
1102
1113
|
const debtorAddress = mapToFinbricksAddress(payment.debtor.address);
|
|
1103
1114
|
const debtorIdentification = resolveAccountIdentification(payment.debtor);
|
|
@@ -1125,8 +1136,9 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1125
1136
|
method: "POST",
|
|
1126
1137
|
body: {
|
|
1127
1138
|
merchantIdentification: {
|
|
1128
|
-
merchantId: this.finbricks.MERCHANT_ID
|
|
1129
|
-
clientId
|
|
1139
|
+
merchantId: this.finbricks.MERCHANT_ID
|
|
1140
|
+
// TEMP: clientId disabled per client request — do not send.
|
|
1141
|
+
// clientId,
|
|
1130
1142
|
},
|
|
1131
1143
|
paymentIdentification: {
|
|
1132
1144
|
merchantTransactionId: bankRefId
|
|
@@ -1177,7 +1189,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1177
1189
|
const debtorAccount = this.connectedAccounts.find(
|
|
1178
1190
|
(acc) => acc.iban === payment.debtorIban
|
|
1179
1191
|
);
|
|
1180
|
-
|
|
1192
|
+
await this.getClientId(debtorAccount.id);
|
|
1181
1193
|
const creditorAddress = mapToFinbricksAddress(payment.creditor.address);
|
|
1182
1194
|
const debtorAddress = mapToFinbricksAddress(payment.debtor.address);
|
|
1183
1195
|
const message = payment.message?.trim() ?? "";
|
|
@@ -1194,8 +1206,9 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1194
1206
|
method: "POST",
|
|
1195
1207
|
body: {
|
|
1196
1208
|
merchantIdentification: {
|
|
1197
|
-
merchantId: this.finbricks.MERCHANT_ID
|
|
1198
|
-
clientId
|
|
1209
|
+
merchantId: this.finbricks.MERCHANT_ID
|
|
1210
|
+
// TEMP: clientId disabled per client request — do not send.
|
|
1211
|
+
// clientId,
|
|
1199
1212
|
},
|
|
1200
1213
|
paymentIdentification: {
|
|
1201
1214
|
merchantTransactionId: bankRefId,
|
|
@@ -1245,7 +1258,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1245
1258
|
const debtorAccount = this.connectedAccounts.find(
|
|
1246
1259
|
(acc) => acc.iban === payment.debtor.iban
|
|
1247
1260
|
);
|
|
1248
|
-
|
|
1261
|
+
await this.getClientId(debtorAccount.id);
|
|
1249
1262
|
const [response, error] = await backendSdk.useResult(
|
|
1250
1263
|
this.finbricks.request({
|
|
1251
1264
|
endpoint: FINBRICKS_ENDPOINTS.TRANSACTION_INIT,
|
|
@@ -1258,13 +1271,16 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1258
1271
|
creditorAccountIban: resolveCzechDomesticIban(payment.creditor),
|
|
1259
1272
|
creditorName: payment.creditor.holderName,
|
|
1260
1273
|
description: this.PROVIDER === "CSOB" ? composeWithUltimateCreditor(payment.message, payment.creditor, {
|
|
1261
|
-
|
|
1274
|
+
// This rail is CZK-only (it sends no currency), and CZ domestic
|
|
1275
|
+
// clearing accepts diacritics — unlike the foreign rail.
|
|
1276
|
+
stripDiacritics: false
|
|
1262
1277
|
}) : payment.message,
|
|
1263
1278
|
variableSymbol: payment.vs ?? (payment.ss ? void 0 : autoVariableSymbol(payment.id)),
|
|
1264
1279
|
specificSymbol: payment.ss,
|
|
1265
1280
|
constantSymbol: payment.ks,
|
|
1266
1281
|
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=paymentRequest&paymentRequestId=${payment.id}`,
|
|
1267
|
-
clientId
|
|
1282
|
+
// TEMP: clientId disabled per client request — do not send.
|
|
1283
|
+
// clientId,
|
|
1268
1284
|
paymentProvider: this.PROVIDER,
|
|
1269
1285
|
instructionPriority: payment.instructionPriority ?? "NORM"
|
|
1270
1286
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { uuidv4, createInternalError, useResult, structuredAddressSchema } from '@develit-io/backend-sdk';
|
|
1
|
+
import { uuidv4, createInternalError, bicSchema, useResult, structuredAddressSchema } from '@develit-io/backend-sdk';
|
|
2
2
|
import { format, parseISO } from 'date-fns';
|
|
3
3
|
import { s as schema, h as account, i as accountCredentials, o as ott } from './bank.BzDNLxB_.mjs';
|
|
4
4
|
import { defineRelations, and, not, inArray, isNull } from 'drizzle-orm';
|
|
5
5
|
import { importPKCS8, SignJWT } from 'jose';
|
|
6
6
|
import { z } from 'zod';
|
|
7
|
-
import { CURRENCY_CODES } from '@develit-io/general-codes';
|
|
7
|
+
import { BANK_CODES, CURRENCY_CODES } from '@develit-io/general-codes';
|
|
8
8
|
import { createInsertSchema, createUpdateSchema, createSelectSchema } from 'drizzle-orm/zod';
|
|
9
9
|
import 'node:crypto';
|
|
10
10
|
|
|
@@ -642,6 +642,9 @@ const SEPA_COUNTRIES = /* @__PURE__ */ new Set([
|
|
|
642
642
|
"GI",
|
|
643
643
|
"XK"
|
|
644
644
|
]);
|
|
645
|
+
const BANK_CODE_SET = new Set(BANK_CODES);
|
|
646
|
+
const isBankCode = (value) => BANK_CODE_SET.has(value);
|
|
647
|
+
const toBic = (value) => value && bicSchema.safeParse(value).success ? value : void 0;
|
|
645
648
|
function parseOtherIdentification(value) {
|
|
646
649
|
if (!value) return {};
|
|
647
650
|
const [first, second] = value.split("/");
|
|
@@ -649,33 +652,36 @@ function parseOtherIdentification(value) {
|
|
|
649
652
|
const looksLikeIban = first.length >= 15 && /^[A-Z]{2}\d{2}[A-Z0-9]+$/.test(first);
|
|
650
653
|
if (looksLikeIban) {
|
|
651
654
|
const iban = first;
|
|
652
|
-
const swiftBic = second
|
|
655
|
+
const swiftBic = toBic(second);
|
|
653
656
|
if (iban.startsWith("CZ") && iban.length === 24) {
|
|
654
|
-
const
|
|
657
|
+
const code = iban.slice(4, 8);
|
|
655
658
|
const number = iban.slice(14, 24).replace(/^0+/, "") || iban.slice(14, 24);
|
|
656
|
-
return {
|
|
659
|
+
return {
|
|
660
|
+
iban,
|
|
661
|
+
swiftBic,
|
|
662
|
+
bankCode: isBankCode(code) ? code : void 0,
|
|
663
|
+
number
|
|
664
|
+
};
|
|
657
665
|
}
|
|
658
666
|
return { iban, swiftBic };
|
|
659
667
|
}
|
|
660
|
-
return {
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
};
|
|
668
|
+
if (!second) return { number: first };
|
|
669
|
+
if (isBankCode(second)) return { number: first, bankCode: second };
|
|
670
|
+
return { number: first, swiftBic: toBic(second) };
|
|
664
671
|
}
|
|
665
|
-
function detectPaymentType(tx, isIncoming) {
|
|
672
|
+
function detectPaymentType(tx, isIncoming, otherParsed) {
|
|
666
673
|
const related = tx.entryDetails?.transactionDetails?.relatedParties;
|
|
667
674
|
const otherParty = isIncoming ? related?.debtorAccount : related?.creditorAccount;
|
|
668
|
-
|
|
669
|
-
const otherIban = otherParty?.identification?.iban;
|
|
670
|
-
const otherCountry = otherIban?.slice(0, 2);
|
|
671
|
-
if (otherCountry
|
|
672
|
-
|
|
673
|
-
if (
|
|
674
|
-
return "SEPA";
|
|
675
|
+
const currency = tx.amount?.currency || "CZK";
|
|
676
|
+
const otherIban = otherParty?.identification?.iban || otherParsed.iban;
|
|
677
|
+
const otherCountry = otherParsed.bankCode ? "CZ" : otherIban?.slice(0, 2) || otherParsed.swiftBic?.slice(4, 6);
|
|
678
|
+
if (otherCountry) {
|
|
679
|
+
if (currency === "EUR" && SEPA_COUNTRIES.has(otherCountry)) return "SEPA";
|
|
680
|
+
if (otherCountry === "CZ" && currency === "CZK") return "DOMESTIC";
|
|
675
681
|
return "SWIFT";
|
|
676
682
|
}
|
|
677
|
-
if (
|
|
678
|
-
if (
|
|
683
|
+
if (currency === "EUR") return "SEPA";
|
|
684
|
+
if (currency !== "CZK") return "SWIFT";
|
|
679
685
|
return "DOMESTIC";
|
|
680
686
|
}
|
|
681
687
|
const mapFinbricksTransactionToPayment = (tx, account) => {
|
|
@@ -712,7 +718,11 @@ const mapFinbricksTransactionToPayment = (tx, account) => {
|
|
|
712
718
|
bankRefId: tx.fbxReference ?? tx.entryReference,
|
|
713
719
|
amount: tx.amount?.value || 0,
|
|
714
720
|
currency: tx.amount?.currency || "CZK",
|
|
715
|
-
paymentType: detectPaymentType(
|
|
721
|
+
paymentType: detectPaymentType(
|
|
722
|
+
tx,
|
|
723
|
+
isIncoming,
|
|
724
|
+
isIncoming ? debtorParsed : creditorParsed
|
|
725
|
+
),
|
|
716
726
|
status: mapFinbricksStatus(tx.status, !!tx.bookingDate?.date),
|
|
717
727
|
message: td?.remittanceInformation?.unstructured || td?.additionalRemittanceInformation || td?.additionalTransactionInformation || null,
|
|
718
728
|
processedAt: new Date(tx.bookingDate.date),
|
|
@@ -1044,7 +1054,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1044
1054
|
throw createInternalError(null, {
|
|
1045
1055
|
message: `Batch for unauthorized client with iban: ${payments[0].debtor.iban}`
|
|
1046
1056
|
});
|
|
1047
|
-
|
|
1057
|
+
await this.getClientId(authorizedClient.id);
|
|
1048
1058
|
const [response, error] = await useResult(
|
|
1049
1059
|
this.finbricks.request({
|
|
1050
1060
|
endpoint: FINBRICKS_ENDPOINTS.TRANSACTION_BATCH_INIT,
|
|
@@ -1053,7 +1063,8 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1053
1063
|
batchPaymentIdentification: {
|
|
1054
1064
|
merchantId: this.finbricks.MERCHANT_ID,
|
|
1055
1065
|
debtorAccountIban: resolveCzechDomesticIban(payments[0].debtor),
|
|
1056
|
-
clientId
|
|
1066
|
+
// TEMP: clientId disabled per client request — do not send.
|
|
1067
|
+
// clientId,
|
|
1057
1068
|
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=batch&batchId=${batchId}`,
|
|
1058
1069
|
merchantBatchId: batchId
|
|
1059
1070
|
},
|
|
@@ -1095,7 +1106,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1095
1106
|
const debtorAccount = this.connectedAccounts.find(
|
|
1096
1107
|
(acc) => acc.iban === payment.debtorIban
|
|
1097
1108
|
);
|
|
1098
|
-
|
|
1109
|
+
await this.getClientId(debtorAccount.id);
|
|
1099
1110
|
const creditorAddress = mapToFinbricksAddress(payment.creditor.address);
|
|
1100
1111
|
const debtorAddress = mapToFinbricksAddress(payment.debtor.address);
|
|
1101
1112
|
const debtorIdentification = resolveAccountIdentification(payment.debtor);
|
|
@@ -1123,8 +1134,9 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1123
1134
|
method: "POST",
|
|
1124
1135
|
body: {
|
|
1125
1136
|
merchantIdentification: {
|
|
1126
|
-
merchantId: this.finbricks.MERCHANT_ID
|
|
1127
|
-
clientId
|
|
1137
|
+
merchantId: this.finbricks.MERCHANT_ID
|
|
1138
|
+
// TEMP: clientId disabled per client request — do not send.
|
|
1139
|
+
// clientId,
|
|
1128
1140
|
},
|
|
1129
1141
|
paymentIdentification: {
|
|
1130
1142
|
merchantTransactionId: bankRefId
|
|
@@ -1175,7 +1187,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1175
1187
|
const debtorAccount = this.connectedAccounts.find(
|
|
1176
1188
|
(acc) => acc.iban === payment.debtorIban
|
|
1177
1189
|
);
|
|
1178
|
-
|
|
1190
|
+
await this.getClientId(debtorAccount.id);
|
|
1179
1191
|
const creditorAddress = mapToFinbricksAddress(payment.creditor.address);
|
|
1180
1192
|
const debtorAddress = mapToFinbricksAddress(payment.debtor.address);
|
|
1181
1193
|
const message = payment.message?.trim() ?? "";
|
|
@@ -1192,8 +1204,9 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1192
1204
|
method: "POST",
|
|
1193
1205
|
body: {
|
|
1194
1206
|
merchantIdentification: {
|
|
1195
|
-
merchantId: this.finbricks.MERCHANT_ID
|
|
1196
|
-
clientId
|
|
1207
|
+
merchantId: this.finbricks.MERCHANT_ID
|
|
1208
|
+
// TEMP: clientId disabled per client request — do not send.
|
|
1209
|
+
// clientId,
|
|
1197
1210
|
},
|
|
1198
1211
|
paymentIdentification: {
|
|
1199
1212
|
merchantTransactionId: bankRefId,
|
|
@@ -1243,7 +1256,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1243
1256
|
const debtorAccount = this.connectedAccounts.find(
|
|
1244
1257
|
(acc) => acc.iban === payment.debtor.iban
|
|
1245
1258
|
);
|
|
1246
|
-
|
|
1259
|
+
await this.getClientId(debtorAccount.id);
|
|
1247
1260
|
const [response, error] = await useResult(
|
|
1248
1261
|
this.finbricks.request({
|
|
1249
1262
|
endpoint: FINBRICKS_ENDPOINTS.TRANSACTION_INIT,
|
|
@@ -1256,13 +1269,16 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1256
1269
|
creditorAccountIban: resolveCzechDomesticIban(payment.creditor),
|
|
1257
1270
|
creditorName: payment.creditor.holderName,
|
|
1258
1271
|
description: this.PROVIDER === "CSOB" ? composeWithUltimateCreditor(payment.message, payment.creditor, {
|
|
1259
|
-
|
|
1272
|
+
// This rail is CZK-only (it sends no currency), and CZ domestic
|
|
1273
|
+
// clearing accepts diacritics — unlike the foreign rail.
|
|
1274
|
+
stripDiacritics: false
|
|
1260
1275
|
}) : payment.message,
|
|
1261
1276
|
variableSymbol: payment.vs ?? (payment.ss ? void 0 : autoVariableSymbol(payment.id)),
|
|
1262
1277
|
specificSymbol: payment.ss,
|
|
1263
1278
|
constantSymbol: payment.ks,
|
|
1264
1279
|
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=paymentRequest&paymentRequestId=${payment.id}`,
|
|
1265
|
-
clientId
|
|
1280
|
+
// TEMP: clientId disabled per client request — do not send.
|
|
1281
|
+
// clientId,
|
|
1266
1282
|
paymentProvider: this.PROVIDER,
|
|
1267
1283
|
instructionPriority: payment.instructionPriority ?? "NORM"
|
|
1268
1284
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const drizzleOrm = require('drizzle-orm');
|
|
4
|
-
const paymentDirection = require('./bank.
|
|
4
|
+
const paymentDirection = require('./bank.Dhf4K9Z2.cjs');
|
|
5
5
|
const backendSdk = require('@develit-io/backend-sdk');
|
|
6
6
|
require('./bank.9Yw4KHyl.cjs');
|
|
7
7
|
require('date-fns');
|
package/dist/types.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const paymentDirection = require('./shared/bank.
|
|
3
|
+
const paymentDirection = require('./shared/bank.Dhf4K9Z2.cjs');
|
|
4
4
|
const database_schema = require('./shared/bank.9Yw4KHyl.cjs');
|
|
5
5
|
const batchLifecycle = require('./shared/bank.NF8bZBy0.cjs');
|
|
6
6
|
const generalCodes = require('@develit-io/general-codes');
|
package/dist/types.d.cts
CHANGED
package/dist/types.d.mts
CHANGED
package/dist/types.d.ts
CHANGED
package/dist/types.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { B as BASE_TERMINAL_STATUSES, C as CsobConnector, D as DbuConnector, E as ErsteConnector, F as FINBRICKS_ENDPOINTS, a as FinbricksClient, b as FinbricksConnector, I as IBankConnector, K as KBConnector, M as MockCobsConnector, c as MockConnector, d as accountCredentialsInsertSchema, e as accountCredentialsSelectSchema, f as accountCredentialsUpdateSchema, g as accountInsertSchema, h as accountSelectSchema, i as accountUpdateSchema, j as assignAccount, k as dbuAccountConfigSchema, l as hasPaymentAccountAssigned, m as isPaymentCompleted, n as isPendingStatus, o as isProcessedStatus, p as isTerminalStatus, q as ottInsertSchema, r as ottSelectSchema, s as ottUpdateSchema, t as signFinbricksJws, u as toBatchedPayment, v as toBatchedPaymentFromPaymentRequest, w as toCompletedPayment, x as toIncomingPayment, y as toPaymentRequestInsert, z as toPreparedPayment, A as useFinbricksFetch } from './shared/bank.
|
|
1
|
+
export { B as BASE_TERMINAL_STATUSES, C as CsobConnector, D as DbuConnector, E as ErsteConnector, F as FINBRICKS_ENDPOINTS, a as FinbricksClient, b as FinbricksConnector, I as IBankConnector, K as KBConnector, M as MockCobsConnector, c as MockConnector, d as accountCredentialsInsertSchema, e as accountCredentialsSelectSchema, f as accountCredentialsUpdateSchema, g as accountInsertSchema, h as accountSelectSchema, i as accountUpdateSchema, j as assignAccount, k as dbuAccountConfigSchema, l as hasPaymentAccountAssigned, m as isPaymentCompleted, n as isPendingStatus, o as isProcessedStatus, p as isTerminalStatus, q as ottInsertSchema, r as ottSelectSchema, s as ottUpdateSchema, t as signFinbricksJws, u as toBatchedPayment, v as toBatchedPaymentFromPaymentRequest, w as toCompletedPayment, x as toIncomingPayment, y as toPaymentRequestInsert, z as toPreparedPayment, A as useFinbricksFetch } from './shared/bank.Hd9x3c7P.mjs';
|
|
2
2
|
export { A as ACCOUNT_STATUSES, B as BATCH_MODES, a as BATCH_STATUES, a as BATCH_STATUSES, C as CHARGE_BEARERS, b as CONNECTOR_KEYS, c as COUNTRY_CODES, d as CREDENTIALS_TYPES, I as INSTRUCTION_PRIORITIES, P as PAYMENT_DIRECTIONS, e as PAYMENT_REQUEST_STATUSES, f as PAYMENT_STATUSES, g as PAYMENT_TYPES, T as TOKEN_TYPES } from './shared/bank.BzDNLxB_.mjs';
|
|
3
3
|
export { i as isBatchAuthorized, a as isBatchCompleted, b as isBatchFailed, c as isBatchInitiated, d as isBatchProcessing, e as isBatchReadyToSign } from './shared/bank.XqSw509X.mjs';
|
|
4
4
|
export { BANK_CODES, CURRENCY_CODES } from '@develit-io/general-codes';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@develit-services/bank",
|
|
3
|
-
"version": "5.5.
|
|
3
|
+
"version": "5.5.3",
|
|
4
4
|
"author": "Develit.io s.r.o.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -62,5 +62,10 @@
|
|
|
62
62
|
"drizzle-orm": "^1.0.0-rc.1",
|
|
63
63
|
"zod": "^4.1.13",
|
|
64
64
|
"@develit-io/platform-sdk": "^4.7.2"
|
|
65
|
+
},
|
|
66
|
+
"peerDependenciesMeta": {
|
|
67
|
+
"@develit-io/platform-sdk": {
|
|
68
|
+
"optional": true
|
|
69
|
+
}
|
|
65
70
|
}
|
|
66
71
|
}
|