@forestadmin/datasource-demo-fintech 1.0.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.
Files changed (45) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +40 -0
  3. package/dist/customizations/aml_alerts.d.ts +3 -0
  4. package/dist/customizations/aml_alerts.js +135 -0
  5. package/dist/customizations/cards.d.ts +3 -0
  6. package/dist/customizations/cards.js +95 -0
  7. package/dist/customizations/chargebacks.d.ts +3 -0
  8. package/dist/customizations/chargebacks.js +271 -0
  9. package/dist/customizations/customers.d.ts +3 -0
  10. package/dist/customizations/customers.js +15 -0
  11. package/dist/customizations/kyc_cases.d.ts +3 -0
  12. package/dist/customizations/kyc_cases.js +105 -0
  13. package/dist/customizations/kyc_documents.d.ts +3 -0
  14. package/dist/customizations/kyc_documents.js +62 -0
  15. package/dist/customizations/refund_requests.d.ts +3 -0
  16. package/dist/customizations/refund_requests.js +151 -0
  17. package/dist/customizations/sar_reports.d.ts +3 -0
  18. package/dist/customizations/sar_reports.js +27 -0
  19. package/dist/customizations/utils.d.ts +21 -0
  20. package/dist/customizations/utils.js +22 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.js +97 -0
  23. package/dist/seed/aml.d.ts +9 -0
  24. package/dist/seed/aml.js +131 -0
  25. package/dist/seed/cards.d.ts +9 -0
  26. package/dist/seed/cards.js +57 -0
  27. package/dist/seed/chargebacks.d.ts +9 -0
  28. package/dist/seed/chargebacks.js +118 -0
  29. package/dist/seed/customers.d.ts +9 -0
  30. package/dist/seed/customers.js +106 -0
  31. package/dist/seed/dates.d.ts +7 -0
  32. package/dist/seed/dates.js +28 -0
  33. package/dist/seed/index.d.ts +9 -0
  34. package/dist/seed/index.js +39 -0
  35. package/dist/seed/kyc.d.ts +9 -0
  36. package/dist/seed/kyc.js +102 -0
  37. package/dist/seed/pools.d.ts +27 -0
  38. package/dist/seed/pools.js +296 -0
  39. package/dist/seed/refunds.d.ts +9 -0
  40. package/dist/seed/refunds.js +72 -0
  41. package/dist/seed/types.d.ts +17 -0
  42. package/dist/seed/types.js +5 -0
  43. package/dist/seed/utils.d.ts +16 -0
  44. package/dist/seed/utils.js +40 -0
  45. package/package.json +33 -0
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = seedKyc;
4
+ const dates_1 = require("./dates");
5
+ const pools_1 = require("./pools");
6
+ const utils_1 = require("./utils");
7
+ /**
8
+ * Opens KYC cases (1–2 per customer) plus their documents. Case status mirrors the
9
+ * customer's compliance profile: sanctioned/PEP customers escalate, approved ones
10
+ * tend to resolve cleanly.
11
+ */
12
+ async function seedKyc(knex, customers) {
13
+ await knex.schema.createTable('kyc_cases', table => {
14
+ table.increments('id').primary();
15
+ table.integer('customer_id');
16
+ table.string('status');
17
+ table.datetime('opened_at');
18
+ table.datetime('resolved_at');
19
+ table.string('rejection_reason');
20
+ table.string('escalation_reason');
21
+ table.string('notes');
22
+ });
23
+ await knex.schema.createTable('kyc_documents', table => {
24
+ table.increments('id').primary();
25
+ table.integer('kyc_case_id');
26
+ table.integer('customer_id');
27
+ table.string('document_type');
28
+ table.string('file_url');
29
+ table.datetime('uploaded_at');
30
+ table.boolean('verified');
31
+ table.datetime('verified_at');
32
+ });
33
+ const kycCases = [];
34
+ const docs = [];
35
+ let kid = 0;
36
+ let did = 0;
37
+ for (const c of customers) {
38
+ const ncases = (0, utils_1.chance)(0.85) ? 1 : 2;
39
+ for (let k = 0; k < ncases; k += 1) {
40
+ kid += 1;
41
+ let st;
42
+ if (c.is_sanctioned)
43
+ st = (0, utils_1.pick)(['ESCALATED', 'REJECTED']);
44
+ else if (c.is_pep)
45
+ st = (0, utils_1.pick)(['ESCALATED', 'IN_REVIEW', 'PENDING_APPROVAL']);
46
+ else if (c.onboarding_status === 'APPROVED')
47
+ st = (0, utils_1.pick)(['APPROVED', 'APPROVED', 'IN_REVIEW']);
48
+ else if (c.onboarding_status === 'REJECTED')
49
+ st = 'REJECTED';
50
+ else if (c.risk_rating === 'HIGH')
51
+ st = (0, utils_1.pick)(['ESCALATED', 'IN_REVIEW', 'PENDING_APPROVAL']);
52
+ else
53
+ st = (0, utils_1.pick)(['IN_REVIEW', 'PENDING_APPROVAL', 'OPEN']);
54
+ const opened = (0, utils_1.randint)(30, 210);
55
+ kycCases.push({
56
+ id: kid,
57
+ customer_id: c.id,
58
+ status: st,
59
+ opened_at: (0, dates_1.daysAgo)(opened),
60
+ resolved_at: ['APPROVED', 'REJECTED'].includes(st)
61
+ ? (0, dates_1.daysAgo)((0, utils_1.randint)(1, Math.max(2, opened - 10)))
62
+ : null,
63
+ rejection_reason: st === 'REJECTED'
64
+ ? (0, utils_1.pick)(['Document mismatch', 'Failed liveness check', 'Sanctions concern'])
65
+ : null,
66
+ escalation_reason: st === 'ESCALATED'
67
+ ? (0, utils_1.pick)([
68
+ 'PEP match requires senior review',
69
+ 'High-risk jurisdiction',
70
+ 'Adverse media hit',
71
+ ])
72
+ : null,
73
+ notes: (0, utils_1.chance)(0.5)
74
+ ? null
75
+ : (0, utils_1.pick)([
76
+ 'Awaiting proof of address.',
77
+ 'Customer responsive.',
78
+ 'Second review scheduled.',
79
+ 'Source of funds requested.',
80
+ ]),
81
+ });
82
+ for (const dt of (0, utils_1.sample)(pools_1.DOC_TYPES, (0, utils_1.randint)(2, 5))) {
83
+ did += 1;
84
+ const verified = st === 'APPROVED' || (0, utils_1.chance)(0.5);
85
+ const up = (0, utils_1.randint)(1, Math.max(2, opened - 2));
86
+ docs.push({
87
+ id: did,
88
+ kyc_case_id: kid,
89
+ customer_id: c.id,
90
+ document_type: dt,
91
+ file_url: `https://kyc.neobank.eu/docs/${c.id}/${dt.toLowerCase()}.pdf`,
92
+ uploaded_at: (0, dates_1.daysAgo)(up),
93
+ verified,
94
+ verified_at: verified ? (0, dates_1.daysAgo)((0, utils_1.randint)(1, up)) : null,
95
+ });
96
+ }
97
+ }
98
+ }
99
+ await (0, utils_1.insertAll)(knex, 'kyc_cases', kycCases);
100
+ await (0, utils_1.insertAll)(knex, 'kyc_documents', docs);
101
+ }
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlZWQva3ljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsMEJBMkZDO0FBcEdELG1DQUFrQztBQUNsQyxtQ0FBb0M7QUFDcEMsbUNBQW1FO0FBRW5FOzs7O0dBSUc7QUFDWSxLQUFLLFVBQVUsT0FBTyxDQUFDLElBQVUsRUFBRSxTQUFxQjtJQUNyRSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNqRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDckQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QixLQUFL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
@@ -0,0 +1,27 @@
1
+ export declare const FIRST: string[];
2
+ export declare const LAST: string[];
3
+ export declare const COUNTRIES: string[];
4
+ export declare const HIGH_RISK_COUNTRIES: string[];
5
+ export declare const CITIES: Record<string, [string, string][]>;
6
+ export declare const DIAL: Record<string, string>;
7
+ export declare const STREETS: string[];
8
+ export declare const MERCHANTS: [string, string, string][];
9
+ export declare const CB_REASONS: [string, string][];
10
+ export declare const CB_STATUS: string[];
11
+ export declare const ANALYSTS: string[];
12
+ export declare const DOC_TYPES: string[];
13
+ export declare const ATYPES: string[];
14
+ export declare const REFUND_REASONS: string[];
15
+ export declare const SOURCES: string[];
16
+ export declare const ONBOARDING_STATUSES: string[];
17
+ export declare const RISK_RATINGS: string[];
18
+ export declare const CARD_TYPES: string[];
19
+ export declare const CARD_STATUSES: string[];
20
+ export declare const AML_SEVERITIES: string[];
21
+ export declare const AML_STATUSES: string[];
22
+ export declare const KYC_STATUSES: string[];
23
+ export declare const NETWORKS: string[];
24
+ export declare const REFUND_STATUSES: string[];
25
+ export declare const SAR_STATUSES: string[];
26
+ export declare const deaccent: (s: string) => string;
27
+ //# sourceMappingURL=pools.d.ts.map
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ // Curated reference pools. Kept hand-written (rather than delegated to faker) so
3
+ // that geography stays internally consistent — country, city, postal code and
4
+ // dial code always agree — which the compliance narrative relies on.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deaccent = exports.SAR_STATUSES = exports.REFUND_STATUSES = exports.NETWORKS = exports.KYC_STATUSES = exports.AML_STATUSES = exports.AML_SEVERITIES = exports.CARD_STATUSES = exports.CARD_TYPES = exports.RISK_RATINGS = exports.ONBOARDING_STATUSES = exports.SOURCES = exports.REFUND_REASONS = exports.ATYPES = exports.DOC_TYPES = exports.ANALYSTS = exports.CB_STATUS = exports.CB_REASONS = exports.MERCHANTS = exports.STREETS = exports.DIAL = exports.CITIES = exports.HIGH_RISK_COUNTRIES = exports.COUNTRIES = exports.LAST = exports.FIRST = void 0;
7
+ exports.FIRST = [
8
+ 'Emma',
9
+ 'Lucas',
10
+ 'Sofia',
11
+ 'Liam',
12
+ 'Mia',
13
+ 'Noah',
14
+ 'Olivia',
15
+ 'Hugo',
16
+ 'Léa',
17
+ 'Jonas',
18
+ 'Priya',
19
+ 'Mateo',
20
+ 'Ingrid',
21
+ 'Youssef',
22
+ 'Anna',
23
+ 'Marco',
24
+ 'Fatima',
25
+ 'Erik',
26
+ 'Chloé',
27
+ 'Viktor',
28
+ 'Aisha',
29
+ 'Daniel',
30
+ 'Elena',
31
+ 'Tomas',
32
+ 'Nadia',
33
+ 'Pablo',
34
+ 'Greta',
35
+ 'Kemal',
36
+ 'Sara',
37
+ 'Andrei',
38
+ 'Maja',
39
+ 'Stefan',
40
+ 'Camille',
41
+ 'Dimitri',
42
+ 'Zofia',
43
+ 'Omar',
44
+ 'Linnea',
45
+ 'Rafael',
46
+ 'Yara',
47
+ 'Janusz',
48
+ 'Beatriz',
49
+ 'Henrik',
50
+ 'Amara',
51
+ 'Niko',
52
+ 'Wei',
53
+ 'Ravi',
54
+ 'Sasha',
55
+ 'Lena',
56
+ ];
57
+ exports.LAST = [
58
+ 'Johansson',
59
+ 'Müller',
60
+ 'Rossi',
61
+ 'Dubois',
62
+ 'Nowak',
63
+ 'García',
64
+ 'Andersen',
65
+ 'Schneider',
66
+ 'Kowalski',
67
+ 'Ferretti',
68
+ 'Sharma',
69
+ 'Weber',
70
+ 'Lindqvist',
71
+ 'Haddad',
72
+ 'Novak',
73
+ 'Petrov',
74
+ 'Bianchi',
75
+ 'Mensah',
76
+ 'Costa',
77
+ 'Ahmadi',
78
+ 'Berg',
79
+ 'Romano',
80
+ 'Fischer',
81
+ 'Sørensen',
82
+ 'Marchetti',
83
+ 'Khan',
84
+ 'Olsen',
85
+ 'Demir',
86
+ 'Vargas',
87
+ 'Ivanov',
88
+ 'Lefebvre',
89
+ 'Kovač',
90
+ 'Jensen',
91
+ 'Moreau',
92
+ 'Santos',
93
+ 'Hassan',
94
+ 'Eriksson',
95
+ 'Lopez',
96
+ 'Popescu',
97
+ 'Wójcik',
98
+ ];
99
+ exports.COUNTRIES = [
100
+ 'DE',
101
+ 'FR',
102
+ 'SE',
103
+ 'IT',
104
+ 'ES',
105
+ 'NL',
106
+ 'PL',
107
+ 'BE',
108
+ 'DK',
109
+ 'NO',
110
+ 'FI',
111
+ 'PT',
112
+ 'AT',
113
+ 'IE',
114
+ 'CZ',
115
+ ];
116
+ exports.HIGH_RISK_COUNTRIES = ['RU', 'IR', 'SY', 'AF', 'MM', 'BY'];
117
+ exports.CITIES = {
118
+ DE: [
119
+ ['Berlin', '10117'],
120
+ ['Munich', '80331'],
121
+ ['Hamburg', '20095'],
122
+ ],
123
+ FR: [
124
+ ['Paris', '75001'],
125
+ ['Lyon', '69001'],
126
+ ['Marseille', '13001'],
127
+ ],
128
+ SE: [
129
+ ['Stockholm', '11129'],
130
+ ['Gothenburg', '41103'],
131
+ ],
132
+ IT: [
133
+ ['Milan', '20121'],
134
+ ['Rome', '00184'],
135
+ ],
136
+ ES: [
137
+ ['Madrid', '28013'],
138
+ ['Barcelona', '08001'],
139
+ ],
140
+ NL: [['Amsterdam', '1011']],
141
+ PL: [['Warsaw', '00-001']],
142
+ BE: [['Brussels', '1000']],
143
+ DK: [['Copenhagen', '1050']],
144
+ NO: [['Oslo', '0150']],
145
+ FI: [['Helsinki', '00100']],
146
+ PT: [['Lisbon', '1100']],
147
+ AT: [['Vienna', '1010']],
148
+ IE: [['Dublin', 'D01']],
149
+ CZ: [['Prague', '11000']],
150
+ RU: [['Moscow', '101000']],
151
+ IR: [['Tehran', '11369']],
152
+ SY: [['Damascus', '00963']],
153
+ AF: [['Kabul', '1001']],
154
+ MM: [['Yangon', '11181']],
155
+ BY: [['Minsk', '220000']],
156
+ };
157
+ exports.DIAL = {
158
+ DE: '49',
159
+ FR: '33',
160
+ SE: '46',
161
+ IT: '39',
162
+ ES: '34',
163
+ NL: '31',
164
+ PL: '48',
165
+ BE: '32',
166
+ DK: '45',
167
+ NO: '47',
168
+ FI: '358',
169
+ PT: '351',
170
+ AT: '43',
171
+ IE: '353',
172
+ CZ: '420',
173
+ RU: '7',
174
+ IR: '98',
175
+ SY: '963',
176
+ AF: '93',
177
+ MM: '95',
178
+ BY: '375',
179
+ };
180
+ exports.STREETS = [
181
+ 'Hauptstraße',
182
+ 'Rue de la Paix',
183
+ 'Storgatan',
184
+ 'Via Roma',
185
+ 'Calle Mayor',
186
+ 'Damrak',
187
+ 'Marszałkowska',
188
+ 'Rue Royale',
189
+ 'Nørregade',
190
+ 'Karl Johans gate',
191
+ 'Mannerheimintie',
192
+ ];
193
+ exports.MERCHANTS = [
194
+ ['Amazon EU SARL', 'E-COMMERCE', '5942'],
195
+ ['Spotify AB', 'STREAMING', '4899'],
196
+ ['Steam (Valve)', 'DIGITAL_GOODS', '5816'],
197
+ ['Wolt', 'FOOD_DELIVERY', '5814'],
198
+ ['Uber BV', 'RIDESHARE', '4121'],
199
+ ['Booking.com', 'TRAVEL', '4722'],
200
+ ['Ryanair', 'AIRLINE', '3000'],
201
+ ['MediaMarkt', 'ELECTRONICS', '5732'],
202
+ ['Zalando SE', 'FASHION', '5651'],
203
+ ['CryptoExchange XYZ', 'CRYPTO', '6051'],
204
+ ['Netflix Intl', 'STREAMING', '4899'],
205
+ ['Apple Distribution', 'DIGITAL_GOODS', '5816'],
206
+ ['Carrefour', 'GROCERY', '5411'],
207
+ ['Shell', 'FUEL', '5541'],
208
+ ['IKEA', 'FURNITURE', '5712'],
209
+ ['Glovo', 'FOOD_DELIVERY', '5814'],
210
+ ['Binance', 'CRYPTO', '6051'],
211
+ ['Decathlon', 'SPORTING', '5941'],
212
+ ];
213
+ exports.CB_REASONS = [
214
+ ['4853', 'Cardholder Dispute — Services Not Provided'],
215
+ ['4831', 'Disputed Amount'],
216
+ ['10.4', 'Fraud — Card-Not-Present'],
217
+ ['10.5', 'Fraud — Card-Present Environment'],
218
+ ['13.1', 'Merchandise Not Received'],
219
+ ['12.6', 'Duplicate Processing'],
220
+ ['4837', 'No Cardholder Authorization'],
221
+ ];
222
+ exports.CB_STATUS = [
223
+ 'INITIATED',
224
+ 'PRESENTED',
225
+ 'REPRESENTED',
226
+ 'WON',
227
+ 'LOST',
228
+ 'PRE_ARBITRATION',
229
+ 'ACCEPTED',
230
+ 'ARBITRATION',
231
+ ];
232
+ exports.ANALYSTS = [
233
+ 'a.kowalski@neobank.eu',
234
+ 's.bauer@neobank.eu',
235
+ 'm.rossi@neobank.eu',
236
+ 'compliance@neobank.eu',
237
+ ];
238
+ exports.DOC_TYPES = [
239
+ 'PASSPORT',
240
+ 'NATIONAL_ID',
241
+ 'DRIVERS_LICENSE',
242
+ 'PROOF_OF_ADDRESS',
243
+ 'SELFIE',
244
+ 'BANK_STATEMENT',
245
+ ];
246
+ exports.ATYPES = [
247
+ 'UNUSUAL_VOLUME',
248
+ 'SUSPICIOUS_PATTERN',
249
+ 'SANCTIONS_MATCH',
250
+ 'HIGH_RISK_COUNTRY',
251
+ 'RAPID_MOVEMENT',
252
+ 'STRUCTURING',
253
+ ];
254
+ exports.REFUND_REASONS = [
255
+ 'DUPLICATE_CHARGE',
256
+ 'SERVICE_NOT_RENDERED',
257
+ 'ITEM_NOT_RECEIVED',
258
+ 'UNAUTHORIZED',
259
+ 'CANCELLED_ORDER',
260
+ ];
261
+ exports.SOURCES = ['CUSTOMER_DISPUTE', 'INTERNAL_DETECTION', 'MERCHANT_ALERT'];
262
+ // Enum domains — the single source of truth for the values the seed emits, reused
263
+ // both by the builders (where they enumerate a full set) and by the enum re-typing
264
+ // in `src/index.ts`. Values only ever written by Smart Actions (e.g. `SAR_FILED`,
265
+ // `DISMISSED`) are added at the enum site, not here, since the seed never emits them.
266
+ exports.ONBOARDING_STATUSES = ['STARTED', 'PENDING_REVIEW', 'APPROVED', 'REJECTED'];
267
+ exports.RISK_RATINGS = ['LOW', 'MEDIUM', 'HIGH'];
268
+ exports.CARD_TYPES = ['VIRTUAL', 'PHYSICAL'];
269
+ exports.CARD_STATUSES = ['ACTIVE', 'BLOCKED', 'EXPIRED', 'PENDING', 'CANCELLED'];
270
+ exports.AML_SEVERITIES = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
271
+ exports.AML_STATUSES = ['OPEN', 'IN_REVIEW', 'CLEARED', 'ESCALATED'];
272
+ exports.KYC_STATUSES = [
273
+ 'OPEN',
274
+ 'IN_REVIEW',
275
+ 'PENDING_APPROVAL',
276
+ 'APPROVED',
277
+ 'REJECTED',
278
+ 'ESCALATED',
279
+ ];
280
+ exports.NETWORKS = ['VISA', 'MASTERCARD'];
281
+ exports.REFUND_STATUSES = ['PENDING', 'APPROVED', 'DECLINED', 'ESCALATED'];
282
+ exports.SAR_STATUSES = ['DRAFT', 'SUBMITTED', 'FILED'];
283
+ const ACCENTS = {
284
+ ø: 'o',
285
+ č: 'c',
286
+ š: 's',
287
+ é: 'e',
288
+ ü: 'u',
289
+ ć: 'c',
290
+ ä: 'a',
291
+ ö: 'o',
292
+ å: 'a',
293
+ };
294
+ const deaccent = (s) => s.replace(/[øčšéüćäöå]/g, c => ACCENTS[c] ?? c);
295
+ exports.deaccent = deaccent;
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VlZC9wb29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUZBQWlGO0FBQ2pGLDhFQUE4RTtBQUM5RSxxRUFBcUU7OztBQUV4RCxRQUFBLEtBQUssR0FBRztJQUNuQixNQUFNO0lBQ04sT0FBTztJQUNQLE9BQU87SUFDUCxNQUFNO0lBQ04sS0FBSztJQUNMLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtJQUNOLEtBQUs7SUFDTCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxRQUFRO0lBQ1IsU0FBUztJQUNULE1BQU07SUFDTixPQUFPO0lBQ1AsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsT0FBTztJQUNQLE1BQU07SUFDTixRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixPQUFPO0lBQ1AsTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sT0FBTztJQUNQLE1BQU07Q0FDUCxDQUFDO0FBQ1csUUFBQSxJQUFJLEdBQUc7SUFDbEIsV0FBVztJQUNYLFFBQVE7SUFDUixPQUFPO0lBQ1AsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsVUFBVTtJQUNWLFFBQVE7SUFDUixPQUFPO0lBQ1AsV0FBVztJQUNYLFFBQVE7SUFDUixPQUFPO0lBQ1AsUUFBUTtJQUNSLFNBQVM7SUFDVCxRQUFRO0lBQ1IsT0FBTztJQUNQLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7SUFDVCxVQUFVO0lBQ1YsV0FBVztJQUNYLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztJQUNQLFFBQVE7SUFDUixRQUFRO0lBQ1IsVUFBVTtJQUNWLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsVUFBVTtJQUNWLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtDQUNULENBQUM7QUFDVyxRQUFBLFNBQVMsR0FBRztJQUN2QixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7Q0FDTCxDQUFDO0FBQ1csUUFBQSxtQkFBbUIsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsUUFBQSxNQUFNLEdBQXVDO0lBQ3hELEVBQUUsRUFBRTtRQUNGLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUNuQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFDbkIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO0tBQ3JCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2xCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNqQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7S0FDdkI7SUFDRCxFQUFFLEVBQUU7UUFDRixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7UUFDdEIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDO0tBQ3hCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2xCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztLQUNsQjtJQUNELEVBQUUsRUFBRTtRQUNGLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUNuQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7S0FDdkI7SUFDRCxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztDQUMxQixDQUFDO0FBQ1csUUFBQSxJQUFJ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
@@ -0,0 +1,9 @@
1
+ import type { Customer, Refund } from './types';
2
+ import type { Knex } from 'knex';
3
+ export interface RefundsResult {
4
+ refunds: Refund[];
5
+ refundsByCust: Record<number, Refund[]>;
6
+ }
7
+ /** 55 refund requests; resolved ones carry a reviewer and resolution notes. */
8
+ export default function seedRefunds(knex: Knex, customers: Customer[]): Promise<RefundsResult>;
9
+ //# sourceMappingURL=refunds.d.ts.map
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = seedRefunds;
4
+ const dates_1 = require("./dates");
5
+ const pools_1 = require("./pools");
6
+ const utils_1 = require("./utils");
7
+ /** 55 refund requests; resolved ones carry a reviewer and resolution notes. */
8
+ async function seedRefunds(knex, customers) {
9
+ var _a;
10
+ await knex.schema.createTable('refund_requests', table => {
11
+ table.increments('id').primary();
12
+ table.string('reference');
13
+ table.integer('customer_id');
14
+ table.string('transaction_id');
15
+ table.date('transaction_date');
16
+ table.datetime('requested_at');
17
+ table.float('amount');
18
+ table.string('currency');
19
+ table.string('reason');
20
+ table.string('reason_detail');
21
+ table.string('status');
22
+ table.datetime('reviewed_at');
23
+ table.string('reviewed_by');
24
+ table.string('resolution_notes');
25
+ table.string('escalated_to');
26
+ table.datetime('created_at');
27
+ });
28
+ const refunds = [];
29
+ const refundsByCust = {};
30
+ for (let rid = 1; rid <= 55; rid += 1) {
31
+ const c = (0, utils_1.pick)(customers);
32
+ const txdate = (0, utils_1.randint)(10, 90);
33
+ const st = (0, utils_1.choices)(pools_1.REFUND_STATUSES, [30, 35, 20, 15]);
34
+ const refund = {
35
+ id: rid,
36
+ reference: `RR-2026-${String(rid).padStart(5, '0')}`,
37
+ customer_id: c.id,
38
+ transaction_id: `TXN-${(0, utils_1.randint)(10000, 99999)}`,
39
+ transaction_date: (0, dates_1.dayOnlyAgo)(txdate),
40
+ requested_at: (0, dates_1.daysAgo)(txdate - (0, utils_1.randint)(1, 5)),
41
+ amount: (0, utils_1.round2)((0, utils_1.uniform)(9, 1200)),
42
+ currency: 'EUR',
43
+ reason: (0, utils_1.pick)(pools_1.REFUND_REASONS),
44
+ reason_detail: (0, utils_1.chance)(0.5)
45
+ ? null
46
+ : (0, utils_1.pick)([
47
+ 'Charged twice for one order.',
48
+ 'Subscription not delivered.',
49
+ 'Parcel never arrived.',
50
+ 'Card used without consent.',
51
+ ]),
52
+ status: st,
53
+ reviewed_at: st !== 'PENDING' ? (0, dates_1.daysAgo)((0, utils_1.randint)(1, Math.max(2, txdate - 3))) : null,
54
+ reviewed_by: st !== 'PENDING' ? (0, utils_1.pick)(pools_1.ANALYSTS) : null,
55
+ resolution_notes: st === 'PENDING'
56
+ ? null
57
+ : (0, utils_1.pick)([
58
+ 'Refunded to source.',
59
+ 'Declined — merchant evidence.',
60
+ 'Escalated to chargeback.',
61
+ 'Approved as goodwill.',
62
+ ]),
63
+ escalated_to: st === 'ESCALATED' ? 'chargebacks' : null,
64
+ created_at: (0, dates_1.daysAgo)(txdate - (0, utils_1.randint)(0, 4)),
65
+ };
66
+ refunds.push(refund);
67
+ (refundsByCust[_a = c.id] || (refundsByCust[_a] = [])).push(refund);
68
+ }
69
+ await (0, utils_1.insertAll)(knex, 'refund_requests', refunds);
70
+ return { refunds, refundsByCust };
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWVkL3JlZnVuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFhQSw4QkFzRUM7QUFoRkQsbUNBQThDO0FBQzlDLG1DQUFvRTtBQUNwRSxtQ0FBcUY7QUFPckYsK0VBQStFO0FBQ2hFLEtBQUssVUFBVSxXQUFXLENBQ3ZDLElBQVUsRUFDVixTQUFxQjs7SUFFckIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUN2RCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QixLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakMsS0FBSyxDQUFD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
@@ -0,0 +1,17 @@
1
+ export type Row = Record<string, unknown>;
2
+ export interface Customer extends Row {
3
+ id: number;
4
+ risk_rating: string;
5
+ is_pep: boolean;
6
+ is_sanctioned: boolean;
7
+ onboarding_status: string;
8
+ }
9
+ export interface Card extends Row {
10
+ id: number;
11
+ customer_id: number;
12
+ }
13
+ export interface Refund extends Row {
14
+ id: number;
15
+ customer_id: number;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // Shared shapes passed between seed builders so that foreign keys and business
3
+ // rules stay coherent across tables (e.g. alerts are weighted by customer risk).
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VlZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLGlGQUFpRiJ9
@@ -0,0 +1,16 @@
1
+ import type { Knex } from 'knex';
2
+ export declare const randint: (lo: number, hi: number) => number;
3
+ export declare const uniform: (lo: number, hi: number) => number;
4
+ export declare const chance: (p: number) => boolean;
5
+ export declare const pick: <T>(arr: T[]) => T;
6
+ export declare const sample: <T>(arr: T[], k: number) => T[];
7
+ export declare const shuffle: <T>(arr: T[]) => T[];
8
+ export declare const round2: (n: number) => number;
9
+ /** Weighted pick mirroring the original generator (tolerates zero weights). */
10
+ export declare function choices<T>(items: T[], weights: number[]): T;
11
+ /**
12
+ * Bulk-insert in chunks to stay under SQLite's bound-parameter limit, regardless
13
+ * of how wide a table is or how many rows a builder produces.
14
+ */
15
+ export declare function insertAll(knex: Knex, table: string, rows: Record<string, unknown>[]): Promise<void>;
16
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.round2 = exports.shuffle = exports.sample = exports.pick = exports.chance = exports.uniform = exports.randint = void 0;
4
+ exports.choices = choices;
5
+ exports.insertAll = insertAll;
6
+ const faker_1 = require("@faker-js/faker");
7
+ const randint = (lo, hi) => faker_1.faker.number.int({ min: lo, max: hi });
8
+ exports.randint = randint;
9
+ const uniform = (lo, hi) => faker_1.faker.number.float({ min: lo, max: hi });
10
+ exports.uniform = uniform;
11
+ const chance = (p) => faker_1.faker.number.float() < p;
12
+ exports.chance = chance;
13
+ const pick = (arr) => faker_1.faker.helpers.arrayElement(arr);
14
+ exports.pick = pick;
15
+ const sample = (arr, k) => faker_1.faker.helpers.arrayElements(arr, k);
16
+ exports.sample = sample;
17
+ const shuffle = (arr) => faker_1.faker.helpers.shuffle(arr);
18
+ exports.shuffle = shuffle;
19
+ const round2 = (n) => Math.round(n * 100) / 100;
20
+ exports.round2 = round2;
21
+ /** Weighted pick mirroring the original generator (tolerates zero weights). */
22
+ function choices(items, weights) {
23
+ const total = weights.reduce((a, b) => a + b, 0);
24
+ let r = faker_1.faker.number.float({ min: 0, max: total });
25
+ for (let i = 0; i < items.length; i += 1) {
26
+ r -= weights[i];
27
+ if (r < 0)
28
+ return items[i];
29
+ }
30
+ return items[items.length - 1];
31
+ }
32
+ /**
33
+ * Bulk-insert in chunks to stay under SQLite's bound-parameter limit, regardless
34
+ * of how wide a table is or how many rows a builder produces.
35
+ */
36
+ async function insertAll(knex, table, rows) {
37
+ if (rows.length)
38
+ await knex.batchInsert(table, rows, 100);
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VlZC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnQkEsMEJBVUM7QUFNRCw4QkFNQztBQWpDRCwyQ0FBd0M7QUFFakMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFVLEVBQUUsQ0FBQyxhQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFBckYsUUFBQSxPQUFPLFdBQThFO0FBQzNGLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQVUsRUFBVSxFQUFFLENBQUMsYUFBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQXZGLFFBQUEsT0FBTyxXQUFnRjtBQUM3RixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVMsRUFBVyxFQUFFLENBQUMsYUFBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFBMUQsUUFBQSxNQUFNLFVBQW9EO0FBQ2hFLE1BQU0sSUFBSSxHQUFHLENBQUksR0FBUSxFQUFLLEVBQUUsQ0FBQyxhQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUEzRCxRQUFBLElBQUksUUFBdUQ7QUFDakUsTUFBTSxNQUFNLEdBQUcsQ0FBSSxHQUFRLEVBQUUsQ0FBUyxFQUFPLEVBQUUsQ0FBQyxhQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBOUUsUUFBQSxNQUFNLFVBQXdFO0FBQ3BGLE1BQU0sT0FBTyxHQUFHLENBQUksR0FBUSxFQUFPLEVBQUUsQ0FBQyxhQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUEzRCxRQUFBLE9BQU8sV0FBb0Q7QUFDakUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFTLEVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUExRCxRQUFBLE1BQU0sVUFBb0Q7QUFFdkUsK0VBQStFO0FBQy9FLFNBQWdCLE9BQU8sQ0FBSSxLQUFVLEVBQUUsT0FBaUI7SUFDdEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLFNBQVMsQ0FDN0IsSUFBVSxFQUNWLEtBQWEsRUFDYixJQUErQjtJQUUvQixJQUFJLElBQUksQ0FBQyxNQUFNO1FBQUUsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUQsQ0FBQyJ9
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@forestadmin/datasource-demo-fintech",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "license": "GPL-3.0",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/ForestAdmin/agent-nodejs.git",
12
+ "directory": "packages/datasource-demo-fintech"
13
+ },
14
+ "dependencies": {
15
+ "@faker-js/faker": "^9.0.0",
16
+ "@forestadmin/datasource-customizer": "1.69.3",
17
+ "@forestadmin/datasource-sql": "1.17.10",
18
+ "@forestadmin/datasource-toolkit": "1.53.1",
19
+ "knex": "^3.1.0",
20
+ "sqlite3": "^5.1.7"
21
+ },
22
+ "files": [
23
+ "dist/**/*.js",
24
+ "dist/**/*.d.ts"
25
+ ],
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "build:watch": "tsc --watch",
29
+ "clean": "rm -rf coverage dist",
30
+ "lint": "eslint src test",
31
+ "test": "jest"
32
+ }
33
+ }