@develit-services/bank 0.8.19 → 0.8.20
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/database/schema.cjs +10 -10
- package/dist/database/schema.d.cts +1 -1
- package/dist/database/schema.d.mts +1 -1
- package/dist/database/schema.d.ts +1 -1
- package/dist/database/schema.mjs +2 -2
- package/dist/export/worker.cjs +168 -173
- package/dist/export/worker.d.cts +2 -2
- package/dist/export/worker.d.mts +2 -2
- package/dist/export/worker.d.ts +2 -2
- package/dist/export/worker.mjs +51 -56
- package/dist/export/workflows.cjs +31 -45
- package/dist/export/workflows.mjs +6 -20
- package/dist/shared/{bank.D8BIM2O3.d.cts → bank.BOY6AI1t.d.cts} +5 -2
- package/dist/shared/{bank.D8BIM2O3.d.mts → bank.BOY6AI1t.d.mts} +5 -2
- package/dist/shared/{bank.D8BIM2O3.d.ts → bank.BOY6AI1t.d.ts} +5 -2
- package/dist/shared/{bank.UJe0t85A.d.cts → bank.Bo01T_MM.d.cts} +1 -1
- package/dist/shared/{bank.xB9eTN77.mjs → bank.CPLR0Ul7.mjs} +2 -5
- package/dist/shared/{bank.B6dkPRYF.mjs → bank.Cwg6oHMM.mjs} +5 -3
- package/dist/shared/{bank.C75Z9vML.cjs → bank.DWsHTK_n.cjs} +5 -3
- package/dist/shared/{bank.C695fceV.d.ts → bank.DfTdMAi9.d.ts} +1 -1
- package/dist/shared/{bank.CXBeULUL.mjs → bank.ESTBT4J6.mjs} +50 -3
- package/dist/shared/{bank.BsIiXsFH.cjs → bank.NF8bZBy0.cjs} +0 -9
- package/dist/shared/{bank.vz1uqEYa.mjs → bank.XqSw509X.mjs} +1 -8
- package/dist/shared/{bank.DzxhtOpm.d.mts → bank.jRGa7MKk.d.mts} +1 -1
- package/dist/shared/{bank.BBXoZ5QU.cjs → bank.o95cOH_P.cjs} +56 -2
- package/dist/shared/{bank.Cev1E9sk.cjs → bank.vGCuP898.cjs} +14 -18
- package/dist/types.cjs +32 -29
- package/dist/types.d.cts +4 -4
- package/dist/types.d.mts +4 -4
- package/dist/types.d.ts +4 -4
- package/dist/types.mjs +4 -4
- package/package.json +1 -1
- package/dist/shared/bank.CR0UlyRi.mjs +0 -15
- package/dist/shared/bank.CVi6R7fr.cjs +0 -17
package/dist/export/worker.cjs
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const backendSdk = require('@develit-io/backend-sdk');
|
|
4
|
-
const
|
|
4
|
+
const database_schema = require('../shared/bank.o95cOH_P.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
|
-
const mock_connector = require('../shared/bank.
|
|
8
|
+
const mock_connector = require('../shared/bank.DWsHTK_n.cjs');
|
|
9
9
|
require('jose');
|
|
10
10
|
const zod = require('zod');
|
|
11
|
-
const paymentRequest_schema = require('../shared/bank.BBXoZ5QU.cjs');
|
|
12
11
|
const generalCodes = require('@develit-io/general-codes');
|
|
13
12
|
require('date-fns');
|
|
14
13
|
require('node:crypto');
|
|
15
|
-
require('../shared/bank.
|
|
16
|
-
require('drizzle-orm/relations');
|
|
14
|
+
const credentialsResolver = require('../shared/bank.vGCuP898.cjs');
|
|
17
15
|
require('drizzle-orm/sqlite-core');
|
|
16
|
+
require('drizzle-orm/relations');
|
|
18
17
|
require('drizzle-zod');
|
|
19
18
|
|
|
20
19
|
const upsertAccountCommand = (db, { account }) => {
|
|
21
20
|
const id = account.id || backendSdk.uuidv4();
|
|
22
21
|
const { id: _id, ...accountWithoutId } = account;
|
|
23
|
-
const command = db.insert(
|
|
24
|
-
target:
|
|
22
|
+
const command = db.insert(database_schema.tables.account).values({ ...account, id }).onConflictDoUpdate({
|
|
23
|
+
target: database_schema.tables.account.iban,
|
|
25
24
|
set: accountWithoutId
|
|
26
25
|
// preserve existing id on re-auth
|
|
27
26
|
}).returning();
|
|
@@ -38,7 +37,7 @@ const createOneTimeTokenCommand = (db, {
|
|
|
38
37
|
}) => {
|
|
39
38
|
const id = backendSdk.uuidv4();
|
|
40
39
|
const expiresAt = new Date(Date.now() + 1e3 * 60 * 60) ;
|
|
41
|
-
const command = db.insert(
|
|
40
|
+
const command = db.insert(database_schema.tables.ott).values({
|
|
42
41
|
id,
|
|
43
42
|
oneTimeToken: ott,
|
|
44
43
|
tokenType,
|
|
@@ -50,7 +49,7 @@ const createOneTimeTokenCommand = (db, {
|
|
|
50
49
|
|
|
51
50
|
const updateAccountCommand = (db, { account }) => {
|
|
52
51
|
return {
|
|
53
|
-
command: db.update(
|
|
52
|
+
command: db.update(database_schema.tables.account).set({ ...account }).where(drizzleOrm.eq(database_schema.tables.account.id, account.id)).returning()
|
|
54
53
|
};
|
|
55
54
|
};
|
|
56
55
|
|
|
@@ -58,16 +57,16 @@ const expireOneTimeTokenCommand = (db, {
|
|
|
58
57
|
ott
|
|
59
58
|
}) => {
|
|
60
59
|
return {
|
|
61
|
-
command: db.update(
|
|
60
|
+
command: db.update(database_schema.tables.ott).set({
|
|
62
61
|
expiresAt: /* @__PURE__ */ new Date()
|
|
63
|
-
}).where(drizzleOrm.eq(
|
|
62
|
+
}).where(drizzleOrm.eq(database_schema.tables.ott.oneTimeToken, ott))
|
|
64
63
|
};
|
|
65
64
|
};
|
|
66
65
|
|
|
67
66
|
const createAccountCredentialsCommand = async (db, encryptionKey, { credentials }) => {
|
|
68
67
|
const id = credentials.id || backendSdk.uuidv4();
|
|
69
|
-
const encryptedValue = await
|
|
70
|
-
const command = db.insert(
|
|
68
|
+
const encryptedValue = await credentialsResolver.encrypt(credentials.value, encryptionKey);
|
|
69
|
+
const command = db.insert(database_schema.tables.accountCredentials).values({
|
|
71
70
|
...credentials,
|
|
72
71
|
id,
|
|
73
72
|
value: encryptedValue
|
|
@@ -79,16 +78,16 @@ const createAccountCredentialsCommand = async (db, encryptionKey, { credentials
|
|
|
79
78
|
};
|
|
80
79
|
|
|
81
80
|
const deleteAccountCredentialsCommand = (db, { accountId }) => {
|
|
82
|
-
const command = db.delete(
|
|
81
|
+
const command = db.delete(database_schema.tables.accountCredentials).where(drizzleOrm.eq(database_schema.tables.accountCredentials.accountId, accountId));
|
|
83
82
|
return {
|
|
84
83
|
command
|
|
85
84
|
};
|
|
86
85
|
};
|
|
87
86
|
|
|
88
87
|
const deletePaymentsByAccountCommand = (db, { accountId }) => {
|
|
89
|
-
const command = db.update(
|
|
88
|
+
const command = db.update(database_schema.tables.payment).set({
|
|
90
89
|
deletedAt: /* @__PURE__ */ new Date()
|
|
91
|
-
}).where(drizzleOrm.eq(
|
|
90
|
+
}).where(drizzleOrm.eq(database_schema.tables.payment.accountId, accountId));
|
|
92
91
|
return {
|
|
93
92
|
command
|
|
94
93
|
};
|
|
@@ -96,7 +95,7 @@ const deletePaymentsByAccountCommand = (db, { accountId }) => {
|
|
|
96
95
|
|
|
97
96
|
const createPaymentRequestCommand = (db, { paymentRequest }) => {
|
|
98
97
|
return {
|
|
99
|
-
command: db.insert(
|
|
98
|
+
command: db.insert(database_schema.tables.paymentRequest).values({
|
|
100
99
|
...paymentRequest,
|
|
101
100
|
creditorIban: paymentRequest.creditor.iban,
|
|
102
101
|
debtorIban: paymentRequest.debtor.iban
|
|
@@ -107,16 +106,16 @@ const createPaymentRequestCommand = (db, { paymentRequest }) => {
|
|
|
107
106
|
const getAccountBatchCountsQuery = async (db, { accountId }) => {
|
|
108
107
|
const result = await db.select({
|
|
109
108
|
totalCount: drizzleOrm.sql`COUNT(*)`.as("totalCount"),
|
|
110
|
-
processingCount: drizzleOrm.sql`SUM(CASE WHEN ${
|
|
109
|
+
processingCount: drizzleOrm.sql`SUM(CASE WHEN ${database_schema.tables.batch.status} = 'PROCESSING' THEN 1 ELSE 0 END)`.as(
|
|
111
110
|
"processingCount"
|
|
112
111
|
),
|
|
113
|
-
readyToSignCount: drizzleOrm.sql`SUM(CASE WHEN ${
|
|
112
|
+
readyToSignCount: drizzleOrm.sql`SUM(CASE WHEN ${database_schema.tables.batch.status} = 'READY_TO_SIGN' THEN 1 ELSE 0 END)`.as(
|
|
114
113
|
"readyToSignCount"
|
|
115
114
|
),
|
|
116
|
-
failedCount: drizzleOrm.sql`SUM(CASE WHEN ${
|
|
115
|
+
failedCount: drizzleOrm.sql`SUM(CASE WHEN ${database_schema.tables.batch.status} = 'FAILED' THEN 1 ELSE 0 END)`.as(
|
|
117
116
|
"failedCount"
|
|
118
117
|
)
|
|
119
|
-
}).from(
|
|
118
|
+
}).from(database_schema.tables.batch).where(drizzleOrm.eq(database_schema.tables.batch.accountId, accountId)).then(backendSdk.first);
|
|
120
119
|
return result || {
|
|
121
120
|
totalCount: 0,
|
|
122
121
|
processingCount: 0,
|
|
@@ -126,18 +125,18 @@ const getAccountBatchCountsQuery = async (db, { accountId }) => {
|
|
|
126
125
|
};
|
|
127
126
|
|
|
128
127
|
const getAccountByIbanQuery = async (db, { iban }) => {
|
|
129
|
-
return await db.select().from(
|
|
128
|
+
return await db.select().from(database_schema.tables.account).where(drizzleOrm.eq(database_schema.tables.account.iban, iban)).get();
|
|
130
129
|
};
|
|
131
130
|
|
|
132
131
|
const getAllAccountsQuery = async (db, filters) => {
|
|
133
132
|
const whereConditions = drizzleOrm.and(
|
|
134
|
-
backendSdk.buildMultiFilterConditions(
|
|
133
|
+
backendSdk.buildMultiFilterConditions(database_schema.tables.account.iban, filters?.filterIbans),
|
|
135
134
|
backendSdk.buildMultiFilterConditions(
|
|
136
|
-
|
|
135
|
+
database_schema.tables.account.currency,
|
|
137
136
|
filters?.filterCurrencies
|
|
138
137
|
),
|
|
139
138
|
backendSdk.buildMultiFilterConditions(
|
|
140
|
-
|
|
139
|
+
database_schema.tables.account.bankRefId,
|
|
141
140
|
filters?.filterBankRefIds
|
|
142
141
|
)
|
|
143
142
|
);
|
|
@@ -145,11 +144,11 @@ const getAllAccountsQuery = async (db, filters) => {
|
|
|
145
144
|
const limit = filters?.limit ?? 20;
|
|
146
145
|
const offset = (page - 1) * limit;
|
|
147
146
|
const [accountsWithExpiration, countResult] = await Promise.all([
|
|
148
|
-
db.select().from(
|
|
149
|
-
|
|
150
|
-
drizzleOrm.eq(
|
|
147
|
+
db.select().from(database_schema.tables.account).leftJoin(
|
|
148
|
+
database_schema.tables.accountCredentials,
|
|
149
|
+
drizzleOrm.eq(database_schema.tables.accountCredentials.accountId, database_schema.tables.account.id)
|
|
151
150
|
).where(whereConditions).limit(limit).offset(offset),
|
|
152
|
-
db.select({ count: drizzleOrm.sql`count(*)` }).from(
|
|
151
|
+
db.select({ count: drizzleOrm.sql`count(*)` }).from(database_schema.tables.account).where(whereConditions)
|
|
153
152
|
]);
|
|
154
153
|
return {
|
|
155
154
|
accounts: accountsWithExpiration.map(
|
|
@@ -211,42 +210,42 @@ const getPaymentsWithPaginationQuery = async (db, {
|
|
|
211
210
|
}) => {
|
|
212
211
|
const whereConditions = drizzleOrm.and(
|
|
213
212
|
buildMultiFilterConditions(
|
|
214
|
-
|
|
213
|
+
database_schema.tables.payment.accountId,
|
|
215
214
|
filterPaymentAccountId
|
|
216
215
|
),
|
|
217
|
-
buildMultiFilterConditions(
|
|
218
|
-
buildMultiFilterConditions(
|
|
216
|
+
buildMultiFilterConditions(database_schema.tables.payment.amount, filterPaymentAmount),
|
|
217
|
+
buildMultiFilterConditions(database_schema.tables.payment.currency, filterPaymentCurrency),
|
|
219
218
|
buildRangeFilterConditions(
|
|
220
|
-
|
|
219
|
+
database_schema.tables.payment.createdAt,
|
|
221
220
|
filterPaymentDateFrom,
|
|
222
221
|
filterPaymentDateTo
|
|
223
222
|
),
|
|
224
|
-
buildMultiFilterConditions(
|
|
223
|
+
buildMultiFilterConditions(database_schema.tables.payment.status, filterPaymentStatus),
|
|
225
224
|
buildMultiFilterConditions(
|
|
226
|
-
|
|
225
|
+
database_schema.tables.payment.direction,
|
|
227
226
|
filterPaymentDirection
|
|
228
227
|
),
|
|
229
|
-
buildMultiFilterConditions(
|
|
230
|
-
buildMultiFilterConditions(
|
|
228
|
+
buildMultiFilterConditions(database_schema.tables.payment.id, ids),
|
|
229
|
+
buildMultiFilterConditions(database_schema.tables.payment.paymentType, filterPaymentType),
|
|
231
230
|
buildRangeFilterConditions(
|
|
232
|
-
|
|
231
|
+
database_schema.tables.payment.amount,
|
|
233
232
|
filterPaymentMinAmount,
|
|
234
233
|
filterPaymentMaxAmount
|
|
235
234
|
),
|
|
236
|
-
filterPaymentVariableSymbol !== void 0 ? drizzleOrm.eq(
|
|
237
|
-
filterPaymentSpecificSymbol !== void 0 ? drizzleOrm.eq(
|
|
238
|
-
filterPaymentConstantSymbol !== void 0 ? drizzleOrm.eq(
|
|
239
|
-
filterPaymentMessage !== void 0 ? drizzleOrm.like(
|
|
240
|
-
filterPaymentCreditorIban !== void 0 ? drizzleOrm.eq(
|
|
241
|
-
filterPaymentDebtorIban !== void 0 ? drizzleOrm.eq(
|
|
242
|
-
filterPaymentBatchId !== void 0 ? drizzleOrm.eq(
|
|
243
|
-
filterPaymentBankRefId !== void 0 ? drizzleOrm.eq(
|
|
235
|
+
filterPaymentVariableSymbol !== void 0 ? drizzleOrm.eq(database_schema.tables.payment.vs, filterPaymentVariableSymbol) : void 0,
|
|
236
|
+
filterPaymentSpecificSymbol !== void 0 ? drizzleOrm.eq(database_schema.tables.payment.ss, filterPaymentSpecificSymbol) : void 0,
|
|
237
|
+
filterPaymentConstantSymbol !== void 0 ? drizzleOrm.eq(database_schema.tables.payment.ks, filterPaymentConstantSymbol) : void 0,
|
|
238
|
+
filterPaymentMessage !== void 0 ? drizzleOrm.like(database_schema.tables.payment.message, `%${filterPaymentMessage}%`) : void 0,
|
|
239
|
+
filterPaymentCreditorIban !== void 0 ? drizzleOrm.eq(database_schema.tables.payment.creditorIban, filterPaymentCreditorIban) : void 0,
|
|
240
|
+
filterPaymentDebtorIban !== void 0 ? drizzleOrm.eq(database_schema.tables.payment.debtorIban, filterPaymentDebtorIban) : void 0,
|
|
241
|
+
filterPaymentBatchId !== void 0 ? drizzleOrm.eq(database_schema.tables.payment.batchId, filterPaymentBatchId) : void 0,
|
|
242
|
+
filterPaymentBankRefId !== void 0 ? drizzleOrm.eq(database_schema.tables.payment.bankRefId, filterPaymentBankRefId) : void 0
|
|
244
243
|
);
|
|
245
|
-
const sortColumn = resolveColumn(
|
|
244
|
+
const sortColumn = resolveColumn(database_schema.tables.payment, sort.column);
|
|
246
245
|
const [{ totalCount }] = await db.select({
|
|
247
246
|
totalCount: drizzleOrm.sql`count(*)`
|
|
248
|
-
}).from(
|
|
249
|
-
const payments = await db.select().from(
|
|
247
|
+
}).from(database_schema.tables.payment).where(whereConditions);
|
|
248
|
+
const payments = await db.select().from(database_schema.tables.payment).where(whereConditions).limit(limit).offset((page - 1) * limit).orderBy(sort.direction === "asc" ? drizzleOrm.asc(sortColumn) : drizzleOrm.desc(sortColumn));
|
|
250
249
|
return {
|
|
251
250
|
payments,
|
|
252
251
|
totalCount
|
|
@@ -261,20 +260,20 @@ const getBatchesQuery = async (db, {
|
|
|
261
260
|
filterBatchStatus
|
|
262
261
|
}) => {
|
|
263
262
|
const whereConditions = drizzleOrm.and(
|
|
264
|
-
drizzleOrm.isNull(
|
|
265
|
-
buildMultiFilterConditions(
|
|
266
|
-
buildMultiFilterConditions(
|
|
263
|
+
drizzleOrm.isNull(database_schema.tables.batch.deletedAt),
|
|
264
|
+
buildMultiFilterConditions(database_schema.tables.batch.accountId, filterBatchAccountId),
|
|
265
|
+
buildMultiFilterConditions(database_schema.tables.batch.status, filterBatchStatus)
|
|
267
266
|
);
|
|
268
|
-
const sortColumn = resolveColumn(
|
|
267
|
+
const sortColumn = resolveColumn(database_schema.tables.batch, sort.column);
|
|
269
268
|
const [{ totalCount }] = await db.select({
|
|
270
269
|
totalCount: drizzleOrm.sql`count(*)`
|
|
271
|
-
}).from(
|
|
272
|
-
const batches = await db.select().from(
|
|
270
|
+
}).from(database_schema.tables.batch).where(whereConditions);
|
|
271
|
+
const batches = await db.select().from(database_schema.tables.batch).where(whereConditions).limit(limit).offset((page - 1) * limit).orderBy(sort.direction === "asc" ? drizzleOrm.asc(sortColumn) : drizzleOrm.desc(sortColumn));
|
|
273
272
|
const batchIds = batches.map((b) => b.id);
|
|
274
|
-
const paymentRequests = batchIds.length > 0 ? await db.select().from(
|
|
273
|
+
const paymentRequests = batchIds.length > 0 ? await db.select().from(database_schema.tables.paymentRequest).where(
|
|
275
274
|
drizzleOrm.and(
|
|
276
|
-
drizzleOrm.inArray(
|
|
277
|
-
drizzleOrm.isNull(
|
|
275
|
+
drizzleOrm.inArray(database_schema.tables.paymentRequest.batchId, batchIds),
|
|
276
|
+
drizzleOrm.isNull(database_schema.tables.paymentRequest.deletedAt)
|
|
278
277
|
)
|
|
279
278
|
) : [];
|
|
280
279
|
const paymentRequestsByBatchId = Map.groupBy(
|
|
@@ -292,14 +291,14 @@ const getBatchesQuery = async (db, {
|
|
|
292
291
|
};
|
|
293
292
|
|
|
294
293
|
const getOttQuery = async (db, { ott }) => {
|
|
295
|
-
return await db.select().from(
|
|
294
|
+
return await db.select().from(database_schema.tables.ott).where(drizzleOrm.eq(database_schema.tables.ott.oneTimeToken, ott)).get();
|
|
296
295
|
};
|
|
297
296
|
|
|
298
297
|
const getPaymentRequestByIdQuery = async (db, { paymentRequestId }) => {
|
|
299
|
-
const result = await db.select().from(
|
|
298
|
+
const result = await db.select().from(database_schema.tables.paymentRequest).where(
|
|
300
299
|
drizzleOrm.and(
|
|
301
|
-
drizzleOrm.eq(
|
|
302
|
-
drizzleOrm.isNull(
|
|
300
|
+
drizzleOrm.eq(database_schema.tables.paymentRequest.id, paymentRequestId),
|
|
301
|
+
drizzleOrm.isNull(database_schema.tables.paymentRequest.deletedAt)
|
|
303
302
|
)
|
|
304
303
|
).limit(1);
|
|
305
304
|
return backendSdk.first(result);
|
|
@@ -309,53 +308,63 @@ const getPaymentRequestsQuery = async (db, params) => {
|
|
|
309
308
|
const limit = params.limit;
|
|
310
309
|
const offset = (params.page - 1) * params.limit;
|
|
311
310
|
const orderDir = params.sort.direction === "asc" ? drizzleOrm.asc : drizzleOrm.desc;
|
|
312
|
-
const orderCol = params.sort.column === "amount" ?
|
|
311
|
+
const orderCol = params.sort.column === "amount" ? database_schema.tables.paymentRequest.amount : params.sort.column === "updatedAt" ? database_schema.tables.paymentRequest.updatedAt : database_schema.tables.paymentRequest.createdAt;
|
|
313
312
|
const where = drizzleOrm.and(
|
|
314
|
-
drizzleOrm.isNull(
|
|
315
|
-
params.filterAccountId ? Array.isArray(params.filterAccountId) ? drizzleOrm.inArray(
|
|
316
|
-
params.filterStatus ? Array.isArray(params.filterStatus) ? drizzleOrm.inArray(
|
|
317
|
-
params.filterPaymentType ? Array.isArray(params.filterPaymentType) ? drizzleOrm.inArray(
|
|
318
|
-
params.filterCurrency ? Array.isArray(params.filterCurrency) ? drizzleOrm.inArray(
|
|
319
|
-
params.filterBatchId ? drizzleOrm.eq(
|
|
320
|
-
params.filterDateFrom ? drizzleOrm.gte(
|
|
321
|
-
params.filterDateTo ? drizzleOrm.lte(
|
|
322
|
-
params.filterMinAmount !== void 0 ? drizzleOrm.gte(
|
|
323
|
-
params.filterMaxAmount !== void 0 ? drizzleOrm.lte(
|
|
324
|
-
params.filterVariableSymbol ? drizzleOrm.eq(
|
|
325
|
-
params.filterSpecificSymbol ? drizzleOrm.eq(
|
|
326
|
-
params.filterConstantSymbol ? drizzleOrm.eq(
|
|
327
|
-
params.filterMessage ? drizzleOrm.like(
|
|
328
|
-
params.filterBankRefId ? drizzleOrm.eq(
|
|
329
|
-
params.filterCreditorIban ? drizzleOrm.eq(
|
|
330
|
-
params.filterDebtorIban ? drizzleOrm.eq(
|
|
331
|
-
params.ids?.length ? drizzleOrm.inArray(
|
|
313
|
+
drizzleOrm.isNull(database_schema.tables.paymentRequest.deletedAt),
|
|
314
|
+
params.filterAccountId ? Array.isArray(params.filterAccountId) ? drizzleOrm.inArray(database_schema.tables.paymentRequest.accountId, params.filterAccountId) : drizzleOrm.eq(database_schema.tables.paymentRequest.accountId, params.filterAccountId) : void 0,
|
|
315
|
+
params.filterStatus ? Array.isArray(params.filterStatus) ? drizzleOrm.inArray(database_schema.tables.paymentRequest.status, params.filterStatus) : drizzleOrm.eq(database_schema.tables.paymentRequest.status, params.filterStatus) : void 0,
|
|
316
|
+
params.filterPaymentType ? Array.isArray(params.filterPaymentType) ? drizzleOrm.inArray(database_schema.tables.paymentRequest.paymentType, params.filterPaymentType) : drizzleOrm.eq(database_schema.tables.paymentRequest.paymentType, params.filterPaymentType) : void 0,
|
|
317
|
+
params.filterCurrency ? Array.isArray(params.filterCurrency) ? drizzleOrm.inArray(database_schema.tables.paymentRequest.currency, params.filterCurrency) : drizzleOrm.eq(database_schema.tables.paymentRequest.currency, params.filterCurrency) : void 0,
|
|
318
|
+
params.filterBatchId ? drizzleOrm.eq(database_schema.tables.paymentRequest.batchId, params.filterBatchId) : void 0,
|
|
319
|
+
params.filterDateFrom ? drizzleOrm.gte(database_schema.tables.paymentRequest.createdAt, params.filterDateFrom) : void 0,
|
|
320
|
+
params.filterDateTo ? drizzleOrm.lte(database_schema.tables.paymentRequest.createdAt, params.filterDateTo) : void 0,
|
|
321
|
+
params.filterMinAmount !== void 0 ? drizzleOrm.gte(database_schema.tables.paymentRequest.amount, params.filterMinAmount) : void 0,
|
|
322
|
+
params.filterMaxAmount !== void 0 ? drizzleOrm.lte(database_schema.tables.paymentRequest.amount, params.filterMaxAmount) : void 0,
|
|
323
|
+
params.filterVariableSymbol ? drizzleOrm.eq(database_schema.tables.paymentRequest.vs, params.filterVariableSymbol) : void 0,
|
|
324
|
+
params.filterSpecificSymbol ? drizzleOrm.eq(database_schema.tables.paymentRequest.ss, params.filterSpecificSymbol) : void 0,
|
|
325
|
+
params.filterConstantSymbol ? drizzleOrm.eq(database_schema.tables.paymentRequest.ks, params.filterConstantSymbol) : void 0,
|
|
326
|
+
params.filterMessage ? drizzleOrm.like(database_schema.tables.paymentRequest.message, `%${params.filterMessage}%`) : void 0,
|
|
327
|
+
params.filterBankRefId ? drizzleOrm.eq(database_schema.tables.paymentRequest.bankRefId, params.filterBankRefId) : void 0,
|
|
328
|
+
params.filterCreditorIban ? drizzleOrm.eq(database_schema.tables.paymentRequest.creditorIban, params.filterCreditorIban) : void 0,
|
|
329
|
+
params.filterDebtorIban ? drizzleOrm.eq(database_schema.tables.paymentRequest.debtorIban, params.filterDebtorIban) : void 0,
|
|
330
|
+
params.ids?.length ? drizzleOrm.inArray(database_schema.tables.paymentRequest.id, params.ids) : void 0
|
|
332
331
|
);
|
|
333
332
|
const [paymentRequests, [{ value: totalCount }]] = await Promise.all([
|
|
334
|
-
db.select().from(
|
|
335
|
-
db.select({ value: drizzleOrm.count() }).from(
|
|
333
|
+
db.select().from(database_schema.tables.paymentRequest).where(where).orderBy(orderDir(orderCol)).limit(limit).offset(offset),
|
|
334
|
+
db.select({ value: drizzleOrm.count() }).from(database_schema.tables.paymentRequest).where(where)
|
|
336
335
|
]);
|
|
337
336
|
return { paymentRequests, totalCount };
|
|
338
337
|
};
|
|
339
338
|
|
|
340
|
-
const
|
|
341
|
-
"
|
|
342
|
-
"
|
|
343
|
-
"
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
339
|
+
const SIGNAL_MAP = {
|
|
340
|
+
OPENED: "paymentRequestOpened",
|
|
341
|
+
AUTHORIZED: "paymentRequestAuthorized",
|
|
342
|
+
COMPLETED: "paymentRequestCompleted",
|
|
343
|
+
BOOKED: "paymentRequestBooked",
|
|
344
|
+
SETTLED: "paymentRequestSettled",
|
|
345
|
+
REJECTED: "paymentRequestRejected",
|
|
346
|
+
CLOSED: "paymentRequestClosed"
|
|
347
|
+
};
|
|
348
|
+
function buildPaymentRequestEvent(pr) {
|
|
349
|
+
return {
|
|
350
|
+
eventType: "BANK_PAYMENT_REQUEST",
|
|
351
|
+
eventSignal: SIGNAL_MAP[pr.status],
|
|
352
|
+
paymentRequest: pr,
|
|
353
|
+
metadata: {
|
|
354
|
+
correlationId: pr.correlationId,
|
|
355
|
+
entityId: pr.id,
|
|
356
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
357
|
+
}
|
|
358
|
+
};
|
|
359
|
+
}
|
|
351
360
|
|
|
352
361
|
const sendPaymentInputSchema = zod.z.object({
|
|
353
362
|
correlationId: zod.z.string().min(1),
|
|
354
363
|
refId: zod.z.string().optional(),
|
|
355
364
|
amount: zod.z.number().positive(),
|
|
356
|
-
paymentType: zod.z.enum(
|
|
357
|
-
chargeBearer: zod.z.enum(
|
|
358
|
-
instructionPriority: zod.z.enum(
|
|
365
|
+
paymentType: zod.z.enum(database_schema.PAYMENT_TYPES),
|
|
366
|
+
chargeBearer: zod.z.enum(database_schema.CHARGE_BEARERS).optional(),
|
|
367
|
+
instructionPriority: zod.z.enum(database_schema.INSTRUCTION_PRIORITIES).optional(),
|
|
359
368
|
currency: zod.z.enum(generalCodes.CURRENCY_CODES),
|
|
360
369
|
vs: zod.z.string().optional(),
|
|
361
370
|
ss: zod.z.string().optional(),
|
|
@@ -371,7 +380,7 @@ const sendBatchInputSchema = zod.z.object({
|
|
|
371
380
|
});
|
|
372
381
|
|
|
373
382
|
const getAuthUriInputSchema = zod.z.object({
|
|
374
|
-
connectorKey: zod.z.enum(
|
|
383
|
+
connectorKey: zod.z.enum(database_schema.CONNECTOR_KEYS)
|
|
375
384
|
});
|
|
376
385
|
|
|
377
386
|
const authorizeAccountInputSchema = zod.z.object({
|
|
@@ -392,7 +401,7 @@ const simulateDepositInputSchema = zod.z.object({
|
|
|
392
401
|
message: zod.z.string(),
|
|
393
402
|
creditor: backendSdk.bankAccountMetadataSchema,
|
|
394
403
|
debtor: backendSdk.bankAccountMetadataSchema,
|
|
395
|
-
connectorKey: zod.z.enum(
|
|
404
|
+
connectorKey: zod.z.enum(database_schema.CONNECTOR_KEYS)
|
|
396
405
|
});
|
|
397
406
|
|
|
398
407
|
const ALLOWED_BATCH_FILTERS = {
|
|
@@ -407,7 +416,7 @@ const getBatchesInputSchema = zod.z.object({
|
|
|
407
416
|
direction: zod.z.enum(["asc", "desc"])
|
|
408
417
|
}),
|
|
409
418
|
[ALLOWED_BATCH_FILTERS.ACCOUNT_ID]: zod.z.union([zod.z.uuid(), zod.z.uuid().array()]).optional(),
|
|
410
|
-
[ALLOWED_BATCH_FILTERS.STATUS]: zod.z.union([zod.z.enum(
|
|
419
|
+
[ALLOWED_BATCH_FILTERS.STATUS]: zod.z.union([zod.z.enum(database_schema.BATCH_STATUSES), zod.z.enum(database_schema.BATCH_STATUSES).array()]).optional()
|
|
411
420
|
});
|
|
412
421
|
|
|
413
422
|
const processBatchInputSchema = zod.z.object({
|
|
@@ -465,11 +474,11 @@ const getPaymentsInputSchema = zod.z.object({
|
|
|
465
474
|
[ALLOWED_PAYMENT_FILTERS.ACCOUNT_ID]: zod.z.union([zod.z.uuid(), zod.z.uuid().array()]).optional(),
|
|
466
475
|
[ALLOWED_PAYMENT_FILTERS.AMOUNT]: zod.z.union([zod.z.number(), zod.z.number().array()]).optional(),
|
|
467
476
|
[ALLOWED_PAYMENT_FILTERS.CURRENCY]: zod.z.union([zod.z.enum(generalCodes.CURRENCY_CODES), zod.z.enum(generalCodes.CURRENCY_CODES).array()]).optional(),
|
|
468
|
-
[ALLOWED_PAYMENT_FILTERS.DIRECTION]: zod.z.union([zod.z.enum(
|
|
477
|
+
[ALLOWED_PAYMENT_FILTERS.DIRECTION]: zod.z.union([zod.z.enum(database_schema.PAYMENT_DIRECTIONS), zod.z.enum(database_schema.PAYMENT_DIRECTIONS).array()]).optional(),
|
|
469
478
|
[ALLOWED_PAYMENT_FILTERS.FROM]: zod.z.date().optional(),
|
|
470
479
|
[ALLOWED_PAYMENT_FILTERS.TO]: zod.z.date().optional(),
|
|
471
|
-
[ALLOWED_PAYMENT_FILTERS.STATUS]: zod.z.union([zod.z.enum(
|
|
472
|
-
[ALLOWED_PAYMENT_FILTERS.PAYMENT_TYPE]: zod.z.union([zod.z.enum(
|
|
480
|
+
[ALLOWED_PAYMENT_FILTERS.STATUS]: zod.z.union([zod.z.enum(database_schema.PAYMENT_STATUSES), zod.z.enum(database_schema.PAYMENT_STATUSES).array()]).optional(),
|
|
481
|
+
[ALLOWED_PAYMENT_FILTERS.PAYMENT_TYPE]: zod.z.union([zod.z.enum(database_schema.PAYMENT_TYPES), zod.z.enum(database_schema.PAYMENT_TYPES).array()]).optional(),
|
|
473
482
|
[ALLOWED_PAYMENT_FILTERS.MIN_AMOUNT]: zod.z.number().positive().optional(),
|
|
474
483
|
[ALLOWED_PAYMENT_FILTERS.MAX_AMOUNT]: zod.z.number().positive().optional(),
|
|
475
484
|
[ALLOWED_PAYMENT_FILTERS.VARIABLE_SYMBOL]: zod.z.string().regex(/^\d{1,10}$/).optional(),
|
|
@@ -514,7 +523,7 @@ zod.z.object({
|
|
|
514
523
|
});
|
|
515
524
|
|
|
516
525
|
const updateAccountInputSchema = zod.z.object({
|
|
517
|
-
account:
|
|
526
|
+
account: database_schema.accountInsertSchema
|
|
518
527
|
});
|
|
519
528
|
|
|
520
529
|
const getBankAccountsInputSchema = zod.z.object({
|
|
@@ -545,10 +554,10 @@ const getPaymentRequestsInputSchema = zod.z.object({
|
|
|
545
554
|
}),
|
|
546
555
|
filterAccountId: zod.z.union([zod.z.uuid(), zod.z.uuid().array()]).optional(),
|
|
547
556
|
filterStatus: zod.z.union([
|
|
548
|
-
zod.z.enum(
|
|
549
|
-
zod.z.enum(
|
|
557
|
+
zod.z.enum(database_schema.PAYMENT_REQUEST_STATUSES),
|
|
558
|
+
zod.z.enum(database_schema.PAYMENT_REQUEST_STATUSES).array()
|
|
550
559
|
]).optional(),
|
|
551
|
-
filterPaymentType: zod.z.union([zod.z.enum(
|
|
560
|
+
filterPaymentType: zod.z.union([zod.z.enum(database_schema.PAYMENT_TYPES), zod.z.enum(database_schema.PAYMENT_TYPES).array()]).optional(),
|
|
552
561
|
filterCurrency: zod.z.union([zod.z.enum(generalCodes.CURRENCY_CODES), zod.z.enum(generalCodes.CURRENCY_CODES).array()]).optional(),
|
|
553
562
|
filterMinAmount: zod.z.number().positive().optional(),
|
|
554
563
|
filterMaxAmount: zod.z.number().positive().optional(),
|
|
@@ -586,7 +595,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
586
595
|
// 14 days
|
|
587
596
|
this.COMPLETED_POLLING_WINDOW_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
588
597
|
this.allowedProviders = config.allowedProviders;
|
|
589
|
-
this.db = d1.drizzle(this.env.BANK_D1, { schema:
|
|
598
|
+
this.db = d1.drizzle(this.env.BANK_D1, { schema: database_schema.tables });
|
|
590
599
|
}
|
|
591
600
|
async _getAccounts(filters) {
|
|
592
601
|
return await getAllAccountsQuery(this.db, filters);
|
|
@@ -619,7 +628,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
619
628
|
connectorKey: acc.connectorKey,
|
|
620
629
|
bankRefId: acc.bankRefId
|
|
621
630
|
}));
|
|
622
|
-
resolveCredentials = await
|
|
631
|
+
resolveCredentials = await credentialsResolver.createCredentialsResolver(this.db, this.env);
|
|
623
632
|
}
|
|
624
633
|
return mock_connector.initiateConnector({
|
|
625
634
|
bank: connectorKey,
|
|
@@ -760,31 +769,15 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
760
769
|
const paymentId = pr.bankRefId ?? pr.id;
|
|
761
770
|
const newStatus = await connector.getPaymentStatus({ paymentId });
|
|
762
771
|
if (newStatus !== pr.status) {
|
|
763
|
-
await
|
|
772
|
+
await credentialsResolver.updatePaymentRequestStatusCommand(this.db, {
|
|
764
773
|
id: pr.id,
|
|
765
774
|
status: newStatus,
|
|
766
|
-
processedAt: newStatus
|
|
775
|
+
processedAt: database_schema.isProcessedStatus(newStatus) ? /* @__PURE__ */ new Date() : void 0
|
|
767
776
|
}).command.execute();
|
|
768
777
|
statusChanged++;
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
COMPLETED: "paymentRequestCompleted",
|
|
773
|
-
BOOKED: "paymentRequestBooked",
|
|
774
|
-
SETTLED: "paymentRequestSettled",
|
|
775
|
-
REJECTED: "paymentRequestRejected",
|
|
776
|
-
CLOSED: "paymentRequestClosed"
|
|
777
|
-
};
|
|
778
|
-
eventsToEmit.push({
|
|
779
|
-
eventType: "BANK_PAYMENT_REQUEST",
|
|
780
|
-
eventSignal: signalMap[newStatus],
|
|
781
|
-
paymentRequest: { ...pr, status: newStatus },
|
|
782
|
-
metadata: {
|
|
783
|
-
correlationId: pr.correlationId,
|
|
784
|
-
entityId: pr.id,
|
|
785
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
786
|
-
}
|
|
787
|
-
});
|
|
778
|
+
eventsToEmit.push(
|
|
779
|
+
buildPaymentRequestEvent({ ...pr, status: newStatus })
|
|
780
|
+
);
|
|
788
781
|
}
|
|
789
782
|
processed++;
|
|
790
783
|
} catch (err) {
|
|
@@ -815,40 +808,25 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
815
808
|
*/
|
|
816
809
|
async _deriveBatchStatus(batchId) {
|
|
817
810
|
const [allPRs, batch] = await Promise.all([
|
|
818
|
-
|
|
819
|
-
|
|
811
|
+
credentialsResolver.getPaymentRequestsByBatchIdQuery(this.db, { batchId }),
|
|
812
|
+
credentialsResolver.getBatchByIdQuery(this.db, { batchId })
|
|
820
813
|
]);
|
|
821
814
|
if (!batch || batch.status === "COMPLETED" || batch.status === "FAILED")
|
|
822
815
|
return;
|
|
823
816
|
if (allPRs.length === 0) return;
|
|
824
|
-
const terminalStatuses = [
|
|
825
|
-
"SETTLED",
|
|
826
|
-
"REJECTED",
|
|
827
|
-
"CLOSED"
|
|
828
|
-
];
|
|
829
|
-
const authorizedOrHigher = [
|
|
830
|
-
"AUTHORIZED",
|
|
831
|
-
"COMPLETED",
|
|
832
|
-
"BOOKED",
|
|
833
|
-
"SETTLED"
|
|
834
|
-
];
|
|
835
817
|
const allTerminal = allPRs.every(
|
|
836
|
-
(pr) =>
|
|
837
|
-
);
|
|
838
|
-
const allAuthorizedOrHigher = allPRs.every(
|
|
839
|
-
(pr) => [...authorizedOrHigher, ...terminalStatuses].includes(
|
|
840
|
-
pr.status
|
|
841
|
-
)
|
|
818
|
+
(pr) => database_schema.isTerminalStatus(pr.status)
|
|
842
819
|
);
|
|
820
|
+
const allAuthorizedOrHigher = allPRs.every((pr) => pr.status !== "OPENED");
|
|
843
821
|
if (allTerminal) {
|
|
844
822
|
const hasFailed = allPRs.some(
|
|
845
823
|
(pr) => pr.status === "REJECTED" || pr.status === "CLOSED"
|
|
846
824
|
);
|
|
847
|
-
await
|
|
825
|
+
await credentialsResolver.upsertBatchCommand(this.db, {
|
|
848
826
|
batch: { ...batch, status: hasFailed ? "FAILED" : "COMPLETED" }
|
|
849
827
|
}).command.execute();
|
|
850
828
|
} else if (allAuthorizedOrHigher && batch.status !== "AUTHORIZED") {
|
|
851
|
-
await
|
|
829
|
+
await credentialsResolver.upsertBatchCommand(this.db, {
|
|
852
830
|
batch: { ...batch, status: "AUTHORIZED" }
|
|
853
831
|
}).command.execute();
|
|
854
832
|
}
|
|
@@ -858,7 +836,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
858
836
|
null,
|
|
859
837
|
{ successMessage: "Payment request statuses updated" },
|
|
860
838
|
async () => {
|
|
861
|
-
const nonTerminalPRs = await getNonTerminalPaymentRequestsQuery(this.db);
|
|
839
|
+
const nonTerminalPRs = await database_schema.getNonTerminalPaymentRequestsQuery(this.db);
|
|
862
840
|
if (nonTerminalPRs.length === 0) {
|
|
863
841
|
return { processed: 0, statusChanged: 0 };
|
|
864
842
|
}
|
|
@@ -868,7 +846,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
868
846
|
const status = pr.status;
|
|
869
847
|
if (status === "OPENED" || status === "AUTHORIZED") {
|
|
870
848
|
if (pr.createdAt != null && now - pr.createdAt.getTime() > this.POLLING_TIMEOUT_MS) {
|
|
871
|
-
await
|
|
849
|
+
await credentialsResolver.updatePaymentRequestStatusCommand(this.db, {
|
|
872
850
|
id: pr.id,
|
|
873
851
|
status: "CLOSED",
|
|
874
852
|
statusReason: "Polling timeout: no final status received after 14 days",
|
|
@@ -910,7 +888,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
910
888
|
});
|
|
911
889
|
if (pr) connectorKey = pr.connectorKey;
|
|
912
890
|
} else if (batchId) {
|
|
913
|
-
const batchPrs = await
|
|
891
|
+
const batchPrs = await credentialsResolver.getPaymentRequestsByBatchIdQuery(this.db, {
|
|
914
892
|
batchId
|
|
915
893
|
});
|
|
916
894
|
if (batchPrs.length > 0) connectorKey = batchPrs[0].connectorKey;
|
|
@@ -939,7 +917,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
939
917
|
prIds.push(result.paymentRequestId);
|
|
940
918
|
}
|
|
941
919
|
if (result.type === "batch") {
|
|
942
|
-
const batchPayments = await
|
|
920
|
+
const batchPayments = await credentialsResolver.getPaymentRequestsByBatchIdQuery(
|
|
943
921
|
this.db,
|
|
944
922
|
{ batchId: result.batchId }
|
|
945
923
|
);
|
|
@@ -1090,7 +1068,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1090
1068
|
accountId: acc.id
|
|
1091
1069
|
}).command
|
|
1092
1070
|
);
|
|
1093
|
-
const encryptionKey = await
|
|
1071
|
+
const encryptionKey = await credentialsResolver.importAesKey(
|
|
1094
1072
|
(await this.env.SECRETS_STORE.get({
|
|
1095
1073
|
secretName: "BANK_SERVICE_ENCRYPTION_KEY"
|
|
1096
1074
|
})).data?.secretValue || ""
|
|
@@ -1201,7 +1179,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1201
1179
|
debtor,
|
|
1202
1180
|
debtorIban: debtor.iban
|
|
1203
1181
|
};
|
|
1204
|
-
const { command } =
|
|
1182
|
+
const { command } = credentialsResolver.createPaymentCommand(this.db, { payment });
|
|
1205
1183
|
const createdPayment = await command.execute().then(backendSdk.first);
|
|
1206
1184
|
this.logQueuePush({ payment, isPaymentExecuted: true });
|
|
1207
1185
|
await this.pushToQueue(this.env.QUEUE_BUS_QUEUE, {
|
|
@@ -1291,17 +1269,19 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1291
1269
|
try {
|
|
1292
1270
|
initiated = await initiate();
|
|
1293
1271
|
} catch (err) {
|
|
1294
|
-
await
|
|
1272
|
+
await credentialsResolver.updatePaymentRequestStatusCommand(this.db, {
|
|
1295
1273
|
id: incomingPayment.id,
|
|
1296
1274
|
deletedAt: /* @__PURE__ */ new Date()
|
|
1297
1275
|
}).command.execute();
|
|
1298
1276
|
throw err;
|
|
1299
1277
|
}
|
|
1300
|
-
await
|
|
1278
|
+
await credentialsResolver.updatePaymentRequestStatusCommand(this.db, {
|
|
1301
1279
|
id: incomingPayment.id,
|
|
1280
|
+
status: initiated.payment.status,
|
|
1302
1281
|
bankRefId: initiated.payment.bankRefId,
|
|
1303
1282
|
initiatedAt: initiated.payment.initiatedAt,
|
|
1304
|
-
authorizationUrl: initiated.authorizationUrl
|
|
1283
|
+
authorizationUrl: initiated.authorizationUrl,
|
|
1284
|
+
processedAt: database_schema.isProcessedStatus(initiated.payment.status) ? /* @__PURE__ */ new Date() : void 0
|
|
1305
1285
|
}).command.execute();
|
|
1306
1286
|
const paymentRequest = await getPaymentRequestByIdQuery(this.db, {
|
|
1307
1287
|
paymentRequestId: incomingPayment.id
|
|
@@ -1313,6 +1293,12 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1313
1293
|
status: 500
|
|
1314
1294
|
});
|
|
1315
1295
|
}
|
|
1296
|
+
if (initiated.payment.status !== "OPENED") {
|
|
1297
|
+
await this.pushToQueue(
|
|
1298
|
+
this.env.QUEUE_BUS_QUEUE,
|
|
1299
|
+
buildPaymentRequestEvent(paymentRequest)
|
|
1300
|
+
);
|
|
1301
|
+
}
|
|
1316
1302
|
return {
|
|
1317
1303
|
paymentRequest,
|
|
1318
1304
|
authorizationUrl: initiated.authorizationUrl
|
|
@@ -1405,7 +1391,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1405
1391
|
);
|
|
1406
1392
|
const batchId = backendSdk.uuidv4();
|
|
1407
1393
|
const batchMode = connector.supportsBatch(paymentType) ? "NATIVE" : "SINGLE";
|
|
1408
|
-
const batchCmd =
|
|
1394
|
+
const batchCmd = credentialsResolver.upsertBatchCommand(this.db, {
|
|
1409
1395
|
batch: {
|
|
1410
1396
|
id: batchId,
|
|
1411
1397
|
authorizationUrls: [],
|
|
@@ -1442,12 +1428,12 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1442
1428
|
result = await initiateBatch();
|
|
1443
1429
|
} catch (err) {
|
|
1444
1430
|
const deletePrCmds = incomingPayments.map(
|
|
1445
|
-
(p) =>
|
|
1431
|
+
(p) => credentialsResolver.updatePaymentRequestStatusCommand(this.db, {
|
|
1446
1432
|
id: p.id,
|
|
1447
1433
|
deletedAt: /* @__PURE__ */ new Date()
|
|
1448
1434
|
}).command
|
|
1449
1435
|
);
|
|
1450
|
-
const deleteBatchCmd =
|
|
1436
|
+
const deleteBatchCmd = credentialsResolver.upsertBatchCommand(this.db, {
|
|
1451
1437
|
batch: {
|
|
1452
1438
|
id: batchId,
|
|
1453
1439
|
accountId: account.id,
|
|
@@ -1462,14 +1448,16 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1462
1448
|
const { authorizationUrls, payments: preparedPayments } = result;
|
|
1463
1449
|
const isPerPaymentFallback = authorizationUrls.length === preparedPayments.length;
|
|
1464
1450
|
const updatePrCmds = preparedPayments.map(
|
|
1465
|
-
(pp, i) =>
|
|
1451
|
+
(pp, i) => credentialsResolver.updatePaymentRequestStatusCommand(this.db, {
|
|
1466
1452
|
id: pp.id,
|
|
1453
|
+
status: pp.status,
|
|
1467
1454
|
bankRefId: pp.bankRefId,
|
|
1468
1455
|
initiatedAt: pp.initiatedAt,
|
|
1469
|
-
authorizationUrl: isPerPaymentFallback ? authorizationUrls[i] : authorizationUrls[0]
|
|
1456
|
+
authorizationUrl: isPerPaymentFallback ? authorizationUrls[i] : authorizationUrls[0],
|
|
1457
|
+
processedAt: database_schema.isProcessedStatus(pp.status) ? /* @__PURE__ */ new Date() : void 0
|
|
1470
1458
|
}).command
|
|
1471
1459
|
);
|
|
1472
|
-
const updateBatchCmd =
|
|
1460
|
+
const updateBatchCmd = credentialsResolver.upsertBatchCommand(this.db, {
|
|
1473
1461
|
batch: {
|
|
1474
1462
|
id: batchId,
|
|
1475
1463
|
accountId: account.id,
|
|
@@ -1482,8 +1470,8 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1482
1470
|
}).command;
|
|
1483
1471
|
await this.db.batch([updateBatchCmd, ...updatePrCmds]);
|
|
1484
1472
|
const [updatedBatch, paymentRequests] = await Promise.all([
|
|
1485
|
-
|
|
1486
|
-
|
|
1473
|
+
credentialsResolver.getBatchByIdQuery(this.db, { batchId }),
|
|
1474
|
+
credentialsResolver.getPaymentRequestsByBatchIdQuery(this.db, { batchId })
|
|
1487
1475
|
]);
|
|
1488
1476
|
if (!updatedBatch) {
|
|
1489
1477
|
throw backendSdk.createInternalError(null, {
|
|
@@ -1492,6 +1480,13 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1492
1480
|
status: 500
|
|
1493
1481
|
});
|
|
1494
1482
|
}
|
|
1483
|
+
const prEvents = paymentRequests.filter((pr) => pr.status !== "OPENED").map((pr) => buildPaymentRequestEvent(pr));
|
|
1484
|
+
if (prEvents.length > 0) {
|
|
1485
|
+
await this.pushToQueue(
|
|
1486
|
+
this.env.QUEUE_BUS_QUEUE,
|
|
1487
|
+
prEvents
|
|
1488
|
+
);
|
|
1489
|
+
}
|
|
1495
1490
|
return { ...updatedBatch, paymentRequests };
|
|
1496
1491
|
}
|
|
1497
1492
|
);
|
|
@@ -1548,11 +1543,11 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1548
1543
|
if (includePendingPaymentRequestCount) {
|
|
1549
1544
|
const [row] = await this.db.select({
|
|
1550
1545
|
count: drizzleOrm.sql`count(*)`
|
|
1551
|
-
}).from(
|
|
1546
|
+
}).from(database_schema.tables.paymentRequest).where(
|
|
1552
1547
|
drizzleOrm.and(
|
|
1553
|
-
drizzleOrm.eq(
|
|
1554
|
-
drizzleOrm.eq(
|
|
1555
|
-
drizzleOrm.isNull(
|
|
1548
|
+
drizzleOrm.eq(database_schema.tables.paymentRequest.accountId, a.id),
|
|
1549
|
+
drizzleOrm.eq(database_schema.tables.paymentRequest.status, "OPENED"),
|
|
1550
|
+
drizzleOrm.isNull(database_schema.tables.paymentRequest.deletedAt)
|
|
1556
1551
|
)
|
|
1557
1552
|
);
|
|
1558
1553
|
result.pendingPaymentRequestCount = row?.count ?? 0;
|
|
@@ -1594,7 +1589,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
|
|
|
1594
1589
|
{ data: input, schema: disconnectAccountInputSchema },
|
|
1595
1590
|
{ successMessage: "Account disconnected successfully" },
|
|
1596
1591
|
async ({ accountId }) => {
|
|
1597
|
-
const account = await
|
|
1592
|
+
const account = await credentialsResolver.getAccountByIdQuery(this.db, { accountId });
|
|
1598
1593
|
if (!account) {
|
|
1599
1594
|
throw backendSdk.createInternalError(null, {
|
|
1600
1595
|
message: "Account not found",
|