@develit-services/bank 0.0.43 → 0.1.0
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 +1 -1
- 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 +1 -1
- package/dist/export/worker.cjs +115 -567
- package/dist/export/worker.d.cts +86 -19
- package/dist/export/worker.d.mts +87 -18
- package/dist/export/worker.d.ts +86 -19
- package/dist/export/worker.mjs +107 -556
- package/dist/export/workflows.cjs +21 -0
- package/dist/export/workflows.d.cts +2 -0
- package/dist/export/workflows.d.mts +2 -0
- package/dist/export/workflows.d.ts +2 -0
- package/dist/export/workflows.mjs +15 -0
- package/dist/export/wrangler.cjs +7 -0
- package/dist/export/wrangler.d.cts +5 -0
- package/dist/export/wrangler.d.mts +5 -0
- package/dist/export/wrangler.d.ts +5 -0
- package/dist/export/wrangler.mjs +7 -0
- package/dist/shared/{bank.BVzOzXdX.cjs → bank.3YYIj-n6.cjs} +11 -9
- package/dist/shared/{bank.6WoCPIFy.mjs → bank.B72e0ibs.mjs} +1 -1
- package/dist/shared/{bank.BPcrbUBa.cjs → bank.BgpXGC_1.cjs} +1 -1
- package/dist/shared/{bank.B7uB4cyW.d.cts → bank.BriEYREq.d.cts} +6 -6
- package/dist/shared/{bank.B7uB4cyW.d.mts → bank.BriEYREq.d.mts} +6 -6
- package/dist/shared/{bank.B7uB4cyW.d.ts → bank.BriEYREq.d.ts} +6 -6
- package/dist/shared/bank.CH22Zrdv.d.cts +20 -0
- package/dist/shared/bank.CH22Zrdv.d.mts +20 -0
- package/dist/shared/bank.CH22Zrdv.d.ts +20 -0
- package/dist/shared/{bank.BWcFhTu1.mjs → bank.CcKNlFRd.mjs} +11 -9
- package/dist/shared/{bank.C9Z9B0Po.d.ts → bank.DSZbtb1J.d.mts} +40 -36
- package/dist/shared/{bank.B_JR9YGK.d.cts → bank.Ddhhr_rz.d.ts} +40 -36
- package/dist/shared/{bank.Dadvg35r.d.mts → bank.DqRaP8LS.d.cts} +40 -36
- package/dist/shared/bank.GMK4QNvo.cjs +276 -0
- package/dist/shared/bank.jyyw3_3-.mjs +267 -0
- package/dist/types.cjs +2 -2
- package/dist/types.d.cts +16 -9
- package/dist/types.d.mts +16 -9
- package/dist/types.d.ts +16 -9
- package/dist/types.mjs +2 -2
- package/package.json +6 -1
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { Environment } from '@develit-io/backend-sdk';
|
|
2
|
-
import { CURRENCY_CODES, BANK_CODES, CODES } from '@develit-io/general-codes';
|
|
3
|
-
import { a as PaymentInsertType, t as tables } from './bank.B7uB4cyW.mjs';
|
|
4
2
|
import { DrizzleD1Database } from 'drizzle-orm/d1';
|
|
3
|
+
import { a as PaymentInsertType, t as tables } from './bank.BriEYREq.cjs';
|
|
4
|
+
import { CURRENCY_CODES, BANK_CODES, CODES } from '@develit-io/general-codes';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import * as drizzle_zod from 'drizzle-zod';
|
|
7
7
|
import * as drizzle_orm_sqlite_core from 'drizzle-orm/sqlite-core';
|
|
8
8
|
|
|
9
|
+
interface BankAccountWithLastSync extends ConnectedAccount {
|
|
10
|
+
lastSyncedAt: Date;
|
|
11
|
+
}
|
|
12
|
+
declare const CONNECTOR_KEYS: readonly ["ERSTE", "FINBRICKS", "MOCK", "CREDITAS", "MOCK_COBS", "FIO", "MONETA"];
|
|
13
|
+
type ConnectorKey = (typeof CONNECTOR_KEYS)[number];
|
|
14
|
+
declare const CREDENTIALS_TYPES: readonly ["AUTH_TOKEN", "REFRESH_TOKEN", "CLIENT_ID", "API_KEY"];
|
|
15
|
+
type CredentialsType = (typeof CREDENTIALS_TYPES)[number];
|
|
16
|
+
declare const TOKEN_TYPES: readonly ["ACCOUNT_AUTHORIZATION"];
|
|
17
|
+
type TokenType = (typeof TOKEN_TYPES)[number];
|
|
18
|
+
interface ConfigEnvironmentBank {
|
|
19
|
+
allowedProviders: ConnectorKey[];
|
|
20
|
+
}
|
|
21
|
+
|
|
9
22
|
declare const PAYMENT_TYPES: readonly ["SEPA", "SWIFT", "IFSC", "DOMESTIC"];
|
|
10
23
|
type PaymentType = (typeof PAYMENT_TYPES)[number];
|
|
11
24
|
declare const CHARGE_BEARERS: readonly ["SHA", "OUR", "BEN"];
|
|
@@ -34,22 +47,9 @@ type AccountStatus = (typeof ACCOUNT_STATUSES)[number];
|
|
|
34
47
|
type Currency = CODES.Currency;
|
|
35
48
|
|
|
36
49
|
type BankCode = (typeof BANK_CODES)[number];
|
|
37
|
-
declare const COUNTRY_CODES: ["
|
|
50
|
+
declare const COUNTRY_CODES: ["AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW", ...("AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW")[]];
|
|
38
51
|
type CountryCode = (typeof COUNTRY_CODES)[number];
|
|
39
52
|
|
|
40
|
-
interface BankAccountWithLastSync extends ConnectedAccount {
|
|
41
|
-
lastSyncedAt: Date;
|
|
42
|
-
}
|
|
43
|
-
declare const CONNECTOR_KEYS: readonly ["ERSTE", "FINBRICKS", "MOCK", "CREDITAS", "MOCK_COBS", "FIO", "MONETA"];
|
|
44
|
-
type ConnectorKey = (typeof CONNECTOR_KEYS)[number];
|
|
45
|
-
declare const CREDENTIALS_TYPES: readonly ["AUTH_TOKEN", "REFRESH_TOKEN", "CLIENT_ID", "API_KEY"];
|
|
46
|
-
type CredentialsType = (typeof CREDENTIALS_TYPES)[number];
|
|
47
|
-
declare const TOKEN_TYPES: readonly ["ACCOUNT_AUTHORIZATION"];
|
|
48
|
-
type TokenType = (typeof TOKEN_TYPES)[number];
|
|
49
|
-
interface ConfigEnvironmentBank {
|
|
50
|
-
allowedProviders: ConnectorKey[];
|
|
51
|
-
}
|
|
52
|
-
|
|
53
53
|
type WithStatus<T extends {
|
|
54
54
|
status: PaymentStatus;
|
|
55
55
|
}, S extends PaymentStatus> = Omit<T, 'status'> & {
|
|
@@ -106,10 +106,14 @@ declare abstract class IBankConnector {
|
|
|
106
106
|
}): Promise<InitiatedBatch>;
|
|
107
107
|
abstract initiateSEPAPayment(payment: IncomingPaymentMessage): Promise<InitiatedPayment>;
|
|
108
108
|
abstract initiateSinglePayment(payment: PaymentPreparedInsertType): Promise<InitiatedPayment>;
|
|
109
|
-
abstract getAllAccountPayments({ account, db,
|
|
109
|
+
abstract getAllAccountPayments({ account, db, environment, filter, }: {
|
|
110
110
|
account: AccountSelectType;
|
|
111
111
|
db: DrizzleD1Database<typeof tables>;
|
|
112
|
-
|
|
112
|
+
environment: Environment;
|
|
113
|
+
filter: {
|
|
114
|
+
dateFrom: Date;
|
|
115
|
+
dateTo?: Date;
|
|
116
|
+
};
|
|
113
117
|
}): Promise<PaymentInsertType[]>;
|
|
114
118
|
abstract getPaymentStatus({ paymentId, }: {
|
|
115
119
|
paymentId: string;
|
|
@@ -217,15 +221,15 @@ declare const accountInsertSchema: drizzle_zod.BuildSchema<"insert", {
|
|
|
217
221
|
identity: undefined;
|
|
218
222
|
generated: undefined;
|
|
219
223
|
}, {}, {}>;
|
|
220
|
-
|
|
221
|
-
name: "
|
|
224
|
+
syncIntervalS: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
225
|
+
name: "sync_interval_s";
|
|
222
226
|
tableName: "account";
|
|
223
227
|
dataType: "number";
|
|
224
228
|
columnType: "SQLiteInteger";
|
|
225
229
|
data: number;
|
|
226
230
|
driverParam: number;
|
|
227
|
-
notNull:
|
|
228
|
-
hasDefault:
|
|
231
|
+
notNull: true;
|
|
232
|
+
hasDefault: true;
|
|
229
233
|
isPrimaryKey: false;
|
|
230
234
|
isAutoincrement: false;
|
|
231
235
|
hasRuntimeDefault: false;
|
|
@@ -408,14 +412,14 @@ declare const accountInsertSchema: drizzle_zod.BuildSchema<"insert", {
|
|
|
408
412
|
tableName: "account";
|
|
409
413
|
dataType: "string";
|
|
410
414
|
columnType: "SQLiteText";
|
|
411
|
-
data: "
|
|
415
|
+
data: "AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW";
|
|
412
416
|
driverParam: string;
|
|
413
417
|
notNull: true;
|
|
414
418
|
hasDefault: false;
|
|
415
419
|
isPrimaryKey: false;
|
|
416
420
|
isAutoincrement: false;
|
|
417
421
|
hasRuntimeDefault: false;
|
|
418
|
-
enumValues: ["
|
|
422
|
+
enumValues: ["AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW", ...("AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW")[]];
|
|
419
423
|
baseColumn: never;
|
|
420
424
|
identity: undefined;
|
|
421
425
|
generated: undefined;
|
|
@@ -682,15 +686,15 @@ declare const accountUpdateSchema: drizzle_zod.BuildSchema<"update", {
|
|
|
682
686
|
identity: undefined;
|
|
683
687
|
generated: undefined;
|
|
684
688
|
}, {}, {}>;
|
|
685
|
-
|
|
686
|
-
name: "
|
|
689
|
+
syncIntervalS: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
690
|
+
name: "sync_interval_s";
|
|
687
691
|
tableName: "account";
|
|
688
692
|
dataType: "number";
|
|
689
693
|
columnType: "SQLiteInteger";
|
|
690
694
|
data: number;
|
|
691
695
|
driverParam: number;
|
|
692
|
-
notNull:
|
|
693
|
-
hasDefault:
|
|
696
|
+
notNull: true;
|
|
697
|
+
hasDefault: true;
|
|
694
698
|
isPrimaryKey: false;
|
|
695
699
|
isAutoincrement: false;
|
|
696
700
|
hasRuntimeDefault: false;
|
|
@@ -873,14 +877,14 @@ declare const accountUpdateSchema: drizzle_zod.BuildSchema<"update", {
|
|
|
873
877
|
tableName: "account";
|
|
874
878
|
dataType: "string";
|
|
875
879
|
columnType: "SQLiteText";
|
|
876
|
-
data: "
|
|
880
|
+
data: "AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW";
|
|
877
881
|
driverParam: string;
|
|
878
882
|
notNull: true;
|
|
879
883
|
hasDefault: false;
|
|
880
884
|
isPrimaryKey: false;
|
|
881
885
|
isAutoincrement: false;
|
|
882
886
|
hasRuntimeDefault: false;
|
|
883
|
-
enumValues: ["
|
|
887
|
+
enumValues: ["AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW", ...("AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW")[]];
|
|
884
888
|
baseColumn: never;
|
|
885
889
|
identity: undefined;
|
|
886
890
|
generated: undefined;
|
|
@@ -1147,15 +1151,15 @@ declare const accountSelectSchema: drizzle_zod.BuildSchema<"select", {
|
|
|
1147
1151
|
identity: undefined;
|
|
1148
1152
|
generated: undefined;
|
|
1149
1153
|
}, {}, {}>;
|
|
1150
|
-
|
|
1151
|
-
name: "
|
|
1154
|
+
syncIntervalS: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
1155
|
+
name: "sync_interval_s";
|
|
1152
1156
|
tableName: "account";
|
|
1153
1157
|
dataType: "number";
|
|
1154
1158
|
columnType: "SQLiteInteger";
|
|
1155
1159
|
data: number;
|
|
1156
1160
|
driverParam: number;
|
|
1157
|
-
notNull:
|
|
1158
|
-
hasDefault:
|
|
1161
|
+
notNull: true;
|
|
1162
|
+
hasDefault: true;
|
|
1159
1163
|
isPrimaryKey: false;
|
|
1160
1164
|
isAutoincrement: false;
|
|
1161
1165
|
hasRuntimeDefault: false;
|
|
@@ -1338,14 +1342,14 @@ declare const accountSelectSchema: drizzle_zod.BuildSchema<"select", {
|
|
|
1338
1342
|
tableName: "account";
|
|
1339
1343
|
dataType: "string";
|
|
1340
1344
|
columnType: "SQLiteText";
|
|
1341
|
-
data: "
|
|
1345
|
+
data: "AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW";
|
|
1342
1346
|
driverParam: string;
|
|
1343
1347
|
notNull: true;
|
|
1344
1348
|
hasDefault: false;
|
|
1345
1349
|
isPrimaryKey: false;
|
|
1346
1350
|
isAutoincrement: false;
|
|
1347
1351
|
hasRuntimeDefault: false;
|
|
1348
|
-
enumValues: ["
|
|
1352
|
+
enumValues: ["AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW", ...("AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BO" | "BQ" | "BA" | "BW" | "BR" | "IO" | "VG" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CK" | "CR" | "HR" | "CW" | "CY" | "CZ" | "CD" | "DK" | "DJ" | "DM" | "DO" | "TL" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GR" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "GY" | "HT" | "HN" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "CI" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LI" | "LT" | "LU" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MQ" | "MR" | "MU" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "NA" | "NP" | "NL" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "NO" | "OM" | "PK" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "CG" | "RE" | "RO" | "RU" | "RW" | "BL" | "KN" | "LC" | "MF" | "VC" | "WS" | "SM" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "TW" | "TJ" | "TZ" | "TH" | "TG" | "TO" | "TT" | "TN" | "TR" | "TM" | "UM" | "VI" | "UG" | "UA" | "AE" | "GB" | "UZ" | "VU" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW")[]];
|
|
1349
1353
|
baseColumn: never;
|
|
1350
1354
|
identity: undefined;
|
|
1351
1355
|
generated: undefined;
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const cloudflare_workers = require('cloudflare:workers');
|
|
4
|
+
const cloudflare_workflows = require('cloudflare:workflows');
|
|
5
|
+
const d1 = require('drizzle-orm/d1');
|
|
6
|
+
const database_schema = require('./bank.3YYIj-n6.cjs');
|
|
7
|
+
require('@develit-io/backend-sdk');
|
|
8
|
+
const drizzleOrm = require('drizzle-orm');
|
|
9
|
+
const mockCobs_connector = require('./bank.BgpXGC_1.cjs');
|
|
10
|
+
require('jose');
|
|
11
|
+
require('@develit-io/general-codes');
|
|
12
|
+
|
|
13
|
+
const createPaymentCommand = (db, { payment }) => {
|
|
14
|
+
return {
|
|
15
|
+
command: db.insert(database_schema.tables.payment).values(payment).returning()
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const updatePaymentCommand = (db, { payment }) => {
|
|
20
|
+
return {
|
|
21
|
+
command: db.update(database_schema.tables.payment).set(payment).where(drizzleOrm.eq(database_schema.tables.payment.id, payment.id)).returning()
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const updateAccountLastSyncCommand = (db, { lastSyncedAt, accountId }) => {
|
|
26
|
+
const command = db.update(database_schema.tables.account).set({
|
|
27
|
+
lastSyncedAt
|
|
28
|
+
}).where(drizzleOrm.eq(database_schema.tables.account.id, accountId)).returning();
|
|
29
|
+
return {
|
|
30
|
+
command
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const getAccountByIdQuery = async (db, { accountId }) => {
|
|
35
|
+
return await db.select().from(database_schema.tables.account).where(drizzleOrm.eq(database_schema.tables.account.id, accountId)).get();
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const getCredentialsByAccountId = async (db, { accountId }) => {
|
|
39
|
+
const cred = await db.select().from(database_schema.tables.accountCredentials).where(drizzleOrm.eq(database_schema.tables.accountCredentials.accountId, accountId)).get();
|
|
40
|
+
return cred;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const getPaymentsByBankRefIdsQuery = async (db, { ids }) => {
|
|
44
|
+
return await db.select().from(database_schema.tables.payment).where(drizzleOrm.inArray(database_schema.tables.payment.bankRefId, ids));
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
class CreditasConnector extends database_schema.FinbricksConnector {
|
|
48
|
+
constructor(config) {
|
|
49
|
+
super("CREDITAS", config);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
class FioConnector extends database_schema.FinbricksConnector {
|
|
54
|
+
constructor(config) {
|
|
55
|
+
super("FIO", config);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
class MonetaConnector extends database_schema.FinbricksConnector {
|
|
60
|
+
constructor(config) {
|
|
61
|
+
super("MONETA", config);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const initiateConnector = ({
|
|
66
|
+
bank,
|
|
67
|
+
env,
|
|
68
|
+
connectedAccounts
|
|
69
|
+
}) => {
|
|
70
|
+
switch (bank) {
|
|
71
|
+
case "ERSTE":
|
|
72
|
+
return new database_schema.ErsteConnector({
|
|
73
|
+
API_KEY: env.ERSTE_API_KEY,
|
|
74
|
+
CLIENT_ID: env.ERSTE_CLIENT_ID,
|
|
75
|
+
CLIENT_SECRET: env.ERSTE_CLIENT_SECRET,
|
|
76
|
+
REDIRECT_URI: env.REDIRECT_URI,
|
|
77
|
+
AUTH_URI: env.ERSTE_AUTH_URI,
|
|
78
|
+
PAYMENTS_URI: env.ERSTE_PAYMENTS_URI,
|
|
79
|
+
ACCOUNTS_URI: env.ERSTE_ACCOUNTS_URI,
|
|
80
|
+
connectedAccounts
|
|
81
|
+
});
|
|
82
|
+
case "CREDITAS":
|
|
83
|
+
return new CreditasConnector({
|
|
84
|
+
BASE_URI: env.FINBRICKS_BASE_URI,
|
|
85
|
+
MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
|
|
86
|
+
PRIVATE_KEY_PEM: env.FINBRICKS_PRIVATE_KEY_PEM,
|
|
87
|
+
REDIRECT_URI: env.REDIRECT_URI,
|
|
88
|
+
connectedAccounts
|
|
89
|
+
});
|
|
90
|
+
case "MOCK_COBS":
|
|
91
|
+
return new mockCobs_connector.MockCobsConnector({
|
|
92
|
+
BASE_URI: env.FINBRICKS_BASE_URI,
|
|
93
|
+
MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
|
|
94
|
+
PRIVATE_KEY_PEM: env.FINBRICKS_PRIVATE_KEY_PEM,
|
|
95
|
+
REDIRECT_URI: env.REDIRECT_URI,
|
|
96
|
+
connectedAccounts
|
|
97
|
+
});
|
|
98
|
+
case "FIO":
|
|
99
|
+
return new FioConnector({
|
|
100
|
+
BASE_URI: env.FINBRICKS_BASE_URI,
|
|
101
|
+
MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
|
|
102
|
+
PRIVATE_KEY_PEM: env.FINBRICKS_PRIVATE_KEY_PEM,
|
|
103
|
+
REDIRECT_URI: env.REDIRECT_URI,
|
|
104
|
+
connectedAccounts
|
|
105
|
+
});
|
|
106
|
+
case "MONETA":
|
|
107
|
+
return new MonetaConnector({
|
|
108
|
+
BASE_URI: env.FINBRICKS_BASE_URI,
|
|
109
|
+
MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
|
|
110
|
+
PRIVATE_KEY_PEM: env.FINBRICKS_PRIVATE_KEY_PEM,
|
|
111
|
+
REDIRECT_URI: env.REDIRECT_URI,
|
|
112
|
+
connectedAccounts
|
|
113
|
+
});
|
|
114
|
+
default:
|
|
115
|
+
return new database_schema.MockConnector();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
function pushToQueue(queue, message) {
|
|
120
|
+
if (!Array.isArray(message)) return queue.send(message, { contentType: "v8" });
|
|
121
|
+
return queue.sendBatch(
|
|
122
|
+
message.map((m) => ({
|
|
123
|
+
body: m,
|
|
124
|
+
contentType: "v8"
|
|
125
|
+
}))
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
class SyncAccountPaymentsWorkflow extends cloudflare_workers.WorkflowEntrypoint {
|
|
129
|
+
async run(event, step) {
|
|
130
|
+
const { accountId } = event.payload;
|
|
131
|
+
const db = d1.drizzle(this.env.BANK_D1, { schema: database_schema.tables });
|
|
132
|
+
while (true) {
|
|
133
|
+
const account = await step.do("load account", async () => {
|
|
134
|
+
const account2 = await getAccountByIdQuery(db, { accountId });
|
|
135
|
+
if (!account2) {
|
|
136
|
+
throw new cloudflare_workflows.NonRetryableError(`Bank account not found: ${accountId}`);
|
|
137
|
+
}
|
|
138
|
+
return account2;
|
|
139
|
+
});
|
|
140
|
+
if (!account.lastSyncedAt) {
|
|
141
|
+
return { status: "skipped_no_last_sync" };
|
|
142
|
+
}
|
|
143
|
+
const credentials = await step.do(
|
|
144
|
+
"load account credentials",
|
|
145
|
+
async () => {
|
|
146
|
+
const credentials2 = await getCredentialsByAccountId(db, { accountId });
|
|
147
|
+
if (!credentials2) {
|
|
148
|
+
throw new cloudflare_workflows.NonRetryableError(
|
|
149
|
+
`No credentials found for account: ${accountId}`
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
return credentials2;
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
const connector = await step.do(
|
|
156
|
+
`init ${account.connectorKey} connector`,
|
|
157
|
+
async () => {
|
|
158
|
+
return initiateConnector({
|
|
159
|
+
env: this.env,
|
|
160
|
+
bank: account.connectorKey,
|
|
161
|
+
connectedAccounts: [
|
|
162
|
+
{
|
|
163
|
+
...account,
|
|
164
|
+
iban: account.iban,
|
|
165
|
+
token: credentials.value
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
const payments = await step.do(
|
|
172
|
+
"fetch bank payments",
|
|
173
|
+
{
|
|
174
|
+
retries: { limit: 5, delay: 2e3, backoff: "constant" },
|
|
175
|
+
timeout: "30 seconds"
|
|
176
|
+
},
|
|
177
|
+
async () => {
|
|
178
|
+
const fetched = await connector.getAllAccountPayments({
|
|
179
|
+
environment: this.env.ENVIRONMENT,
|
|
180
|
+
db,
|
|
181
|
+
account,
|
|
182
|
+
filter: { dateFrom: account.lastSyncedAt }
|
|
183
|
+
});
|
|
184
|
+
return fetched.map((p) => ({
|
|
185
|
+
...p,
|
|
186
|
+
direction: database_schema.getPaymentDirection(p, account.iban)
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
);
|
|
190
|
+
if (payments.length === 0) {
|
|
191
|
+
return { status: "no_new_payments" };
|
|
192
|
+
}
|
|
193
|
+
const bankRefIds = payments.map((payment) => payment.bankRefId).filter(Boolean);
|
|
194
|
+
const existing = await step.do("load existing payments", async () => {
|
|
195
|
+
return await getPaymentsByBankRefIdsQuery(db, {
|
|
196
|
+
ids: bankRefIds
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
const paymentsToUpdate = payments.filter(
|
|
200
|
+
(p) => existing.some((e) => e.bankRefId === p.bankRefId)
|
|
201
|
+
);
|
|
202
|
+
if (paymentsToUpdate.length)
|
|
203
|
+
await step.do("update existing payments", async () => {
|
|
204
|
+
const commands = paymentsToUpdate.map(
|
|
205
|
+
(p) => updatePaymentCommand(db, { payment: p }).command
|
|
206
|
+
);
|
|
207
|
+
await db.batch([commands[0], ...commands.slice(1)]);
|
|
208
|
+
await pushToQueue(
|
|
209
|
+
this.env.QUEUE_BUS_QUEUE,
|
|
210
|
+
paymentsToUpdate.map((p) => ({
|
|
211
|
+
eventType: "BANK_PAYMENT",
|
|
212
|
+
eventSignal: "paymentUpdated",
|
|
213
|
+
bankPayment: p,
|
|
214
|
+
metadata: {
|
|
215
|
+
correlationId: p.correlationId,
|
|
216
|
+
entityId: p.id,
|
|
217
|
+
idempotencySuffix: p.status,
|
|
218
|
+
timestamp: (/* @__PURE__ */ new Date()).toDateString()
|
|
219
|
+
}
|
|
220
|
+
}))
|
|
221
|
+
);
|
|
222
|
+
});
|
|
223
|
+
const paymentsToCreate = payments.filter(
|
|
224
|
+
(p) => !existing.some((e) => e.bankRefId === p.bankRefId)
|
|
225
|
+
);
|
|
226
|
+
if (paymentsToCreate.length)
|
|
227
|
+
await step.do("create new payments", async () => {
|
|
228
|
+
const commands = paymentsToCreate.map(
|
|
229
|
+
(p) => createPaymentCommand(db, { payment: p }).command
|
|
230
|
+
);
|
|
231
|
+
await db.batch([commands[0], ...commands.slice(1)]);
|
|
232
|
+
await pushToQueue(
|
|
233
|
+
this.env.QUEUE_BUS_QUEUE,
|
|
234
|
+
paymentsToCreate.map((p) => ({
|
|
235
|
+
eventType: "BANK_PAYMENT",
|
|
236
|
+
eventSignal: "paymentCreated",
|
|
237
|
+
bankPayment: p,
|
|
238
|
+
metadata: {
|
|
239
|
+
correlationId: p.correlationId,
|
|
240
|
+
entityId: p.id,
|
|
241
|
+
timestamp: (/* @__PURE__ */ new Date()).toDateString()
|
|
242
|
+
}
|
|
243
|
+
}))
|
|
244
|
+
);
|
|
245
|
+
});
|
|
246
|
+
await step.do("determine new lastSyncedAt", async () => {
|
|
247
|
+
const latest = payments.reduce((current, p) => {
|
|
248
|
+
return new Date(p.createdAt).getTime() > new Date(current.createdAt).getTime() ? p : current;
|
|
249
|
+
}, payments[0]);
|
|
250
|
+
await updateAccountLastSyncCommand(db, {
|
|
251
|
+
accountId: account.id,
|
|
252
|
+
lastSyncedAt: latest.createdAt
|
|
253
|
+
}).command.execute();
|
|
254
|
+
return latest.createdAt;
|
|
255
|
+
});
|
|
256
|
+
await step.sleep(
|
|
257
|
+
"Sleep for next sync",
|
|
258
|
+
`${account.syncIntervalS} seconds`
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const workflows = {
|
|
265
|
+
__proto__: null,
|
|
266
|
+
SyncAccountPaymentsWorkflow: SyncAccountPaymentsWorkflow
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
exports.SyncAccountPaymentsWorkflow = SyncAccountPaymentsWorkflow;
|
|
270
|
+
exports.createPaymentCommand = createPaymentCommand;
|
|
271
|
+
exports.getCredentialsByAccountId = getCredentialsByAccountId;
|
|
272
|
+
exports.getPaymentsByBankRefIdsQuery = getPaymentsByBankRefIdsQuery;
|
|
273
|
+
exports.initiateConnector = initiateConnector;
|
|
274
|
+
exports.updateAccountLastSyncCommand = updateAccountLastSyncCommand;
|
|
275
|
+
exports.updatePaymentCommand = updatePaymentCommand;
|
|
276
|
+
exports.workflows = workflows;
|