twenty-import-csv 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 (74) hide show
  1. package/.env.example +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +208 -0
  4. package/dist/browser-automation.d.ts +24 -0
  5. package/dist/browser-automation.d.ts.map +1 -0
  6. package/dist/browser-automation.js +295 -0
  7. package/dist/browser-automation.js.map +1 -0
  8. package/dist/cli-browser.d.ts +3 -0
  9. package/dist/cli-browser.d.ts.map +1 -0
  10. package/dist/cli-browser.js +134 -0
  11. package/dist/cli-browser.js.map +1 -0
  12. package/dist/cli-fixed.d.ts +3 -0
  13. package/dist/cli-fixed.d.ts.map +1 -0
  14. package/dist/cli-fixed.js +112 -0
  15. package/dist/cli-fixed.js.map +1 -0
  16. package/dist/cli-simple.d.ts +3 -0
  17. package/dist/cli-simple.d.ts.map +1 -0
  18. package/dist/cli-simple.js +167 -0
  19. package/dist/cli-simple.js.map +1 -0
  20. package/dist/cli.d.ts +3 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +167 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/load-graphql.d.ts +23 -0
  25. package/dist/load-graphql.d.ts.map +1 -0
  26. package/dist/load-graphql.js +239 -0
  27. package/dist/load-graphql.js.map +1 -0
  28. package/dist/load-old.d.ts +24 -0
  29. package/dist/load-old.d.ts.map +1 -0
  30. package/dist/load-old.js +183 -0
  31. package/dist/load-old.js.map +1 -0
  32. package/dist/load-real.d.ts +23 -0
  33. package/dist/load-real.d.ts.map +1 -0
  34. package/dist/load-real.js +202 -0
  35. package/dist/load-real.js.map +1 -0
  36. package/dist/load.d.ts +24 -0
  37. package/dist/load.d.ts.map +1 -0
  38. package/dist/load.js +195 -0
  39. package/dist/load.js.map +1 -0
  40. package/dist/mapper.d.ts +16 -0
  41. package/dist/mapper.d.ts.map +1 -0
  42. package/dist/mapper.js +181 -0
  43. package/dist/mapper.js.map +1 -0
  44. package/dist/parser-broken.d.ts +11 -0
  45. package/dist/parser-broken.d.ts.map +1 -0
  46. package/dist/parser-broken.js +88 -0
  47. package/dist/parser-broken.js.map +1 -0
  48. package/dist/parser-old.d.ts +11 -0
  49. package/dist/parser-old.d.ts.map +1 -0
  50. package/dist/parser-old.js +90 -0
  51. package/dist/parser-old.js.map +1 -0
  52. package/dist/parser.d.ts +11 -0
  53. package/dist/parser.d.ts.map +1 -0
  54. package/dist/parser.js +83 -0
  55. package/dist/parser.js.map +1 -0
  56. package/dist/reporter.d.ts +15 -0
  57. package/dist/reporter.d.ts.map +1 -0
  58. package/dist/reporter.js +144 -0
  59. package/dist/reporter.js.map +1 -0
  60. package/examples/contacts-mapping.txt +8 -0
  61. package/examples/contacts.csv +6 -0
  62. package/package.json +50 -0
  63. package/src/browser-automation.ts +350 -0
  64. package/src/cli-browser.ts +134 -0
  65. package/src/cli-simple.ts +158 -0
  66. package/src/cli.ts +159 -0
  67. package/src/load-graphql.ts +238 -0
  68. package/src/load-old.ts +177 -0
  69. package/src/load-real.ts +199 -0
  70. package/src/load.ts +197 -0
  71. package/src/mapper.ts +183 -0
  72. package/src/parser.ts +55 -0
  73. package/src/reporter.ts +131 -0
  74. package/tsconfig.json +24 -0
@@ -0,0 +1,23 @@
1
+ import { ParsedRecord } from './parser';
2
+ export interface LoadResult {
3
+ success: number;
4
+ errors: number;
5
+ errorLog: string[];
6
+ }
7
+ export interface BatchResult {
8
+ success: boolean;
9
+ count: number;
10
+ error?: string;
11
+ }
12
+ export declare class TwentyGraphQLClient {
13
+ private client;
14
+ private baseUrl;
15
+ private apiKey;
16
+ constructor(baseUrl: string, apiKey: string);
17
+ testConnection(): Promise<boolean>;
18
+ createRecords(objectType: string, records: ParsedRecord[]): Promise<BatchResult>;
19
+ getObjectEndpoint(objectType: string): string;
20
+ }
21
+ export declare function loadToTwenty(data: ParsedRecord[], objectType: string, twentyUrl: string, twentyKey: string, batchSize: number, progressBar: any): Promise<LoadResult>;
22
+ export declare function saveErrorLog(errorLog: string[], filename: string): void;
23
+ //# sourceMappingURL=load-graphql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-graphql.d.ts","sourceRoot":"","sources":["../src/load-graphql.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAcrC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBlC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA8FtF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAe9C;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAAE,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,UAAU,CAAC,CAsDrB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMvE"}
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TwentyGraphQLClient = void 0;
40
+ exports.loadToTwenty = loadToTwenty;
41
+ exports.saveErrorLog = saveErrorLog;
42
+ const axios_1 = __importDefault(require("axios"));
43
+ const fs = __importStar(require("fs"));
44
+ class TwentyGraphQLClient {
45
+ constructor(baseUrl, apiKey) {
46
+ this.baseUrl = baseUrl.replace(/\/$/, ''); // Remove trailing slash
47
+ this.apiKey = apiKey;
48
+ this.client = axios_1.default.create({
49
+ baseURL: `${this.baseUrl}`,
50
+ headers: {
51
+ 'Authorization': `Bearer ${this.apiKey}`,
52
+ 'Content-Type': 'application/json'
53
+ },
54
+ timeout: 30000
55
+ });
56
+ }
57
+ async testConnection() {
58
+ try {
59
+ const query = `
60
+ query {
61
+ people {
62
+ edges {
63
+ node {
64
+ id
65
+ }
66
+ }
67
+ }
68
+ }
69
+ `;
70
+ const response = await this.client.post('/graphql', { query });
71
+ return response.status === 200 && !response.data.errors;
72
+ }
73
+ catch (error) {
74
+ console.error('❌ Connection test failed:', error.response?.data || error.message);
75
+ return false;
76
+ }
77
+ }
78
+ async createRecords(objectType, records) {
79
+ try {
80
+ // Prepare GraphQL mutation based on object type
81
+ let mutation;
82
+ let inputType;
83
+ switch (objectType.toLowerCase()) {
84
+ case 'people':
85
+ mutation = `
86
+ mutation CreatePeople($input: [PersonCreateInput!]!) {
87
+ createPeople(input: $input) {
88
+ id
89
+ name {
90
+ firstName
91
+ lastName
92
+ }
93
+ email
94
+ phone
95
+ }
96
+ }
97
+ `;
98
+ inputType = 'PersonCreateInput';
99
+ break;
100
+ case 'companies':
101
+ mutation = `
102
+ mutation CreateCompanies($input: [CompanyCreateInput!]!) {
103
+ createCompanies(input: $input) {
104
+ id
105
+ name
106
+ domainName
107
+ phone
108
+ }
109
+ }
110
+ `;
111
+ inputType = 'CompanyCreateInput';
112
+ break;
113
+ default:
114
+ throw new Error(`Unsupported object type: ${objectType}`);
115
+ }
116
+ // Transform records to GraphQL format
117
+ const graphqlRecords = records.map(record => {
118
+ const transformed = {};
119
+ if (objectType === 'people') {
120
+ // Handle name field
121
+ if (record['name.firstName'] || record['name.lastName']) {
122
+ transformed.name = {
123
+ firstName: record['name.firstName'] || '',
124
+ lastName: record['name.lastName'] || ''
125
+ };
126
+ }
127
+ // Copy other fields
128
+ if (record.email)
129
+ transformed.email = record.email;
130
+ if (record.phone)
131
+ transformed.phone = record.phone;
132
+ if (record.jobTitle)
133
+ transformed.jobTitle = record.jobTitle;
134
+ if (record.city)
135
+ transformed.city = record.city;
136
+ if (record.country)
137
+ transformed.country = record.country;
138
+ }
139
+ return transformed;
140
+ });
141
+ const response = await this.client.post('/graphql', {
142
+ query: mutation,
143
+ variables: {
144
+ input: graphqlRecords
145
+ }
146
+ });
147
+ if (response.data.errors) {
148
+ return {
149
+ success: false,
150
+ count: 0,
151
+ error: response.data.errors.map((e) => e.message).join('; ')
152
+ };
153
+ }
154
+ return {
155
+ success: true,
156
+ count: records.length
157
+ };
158
+ }
159
+ catch (error) {
160
+ return {
161
+ success: false,
162
+ count: 0,
163
+ error: error.response?.data?.message || error.message
164
+ };
165
+ }
166
+ }
167
+ getObjectEndpoint(objectType) {
168
+ const endpoints = {
169
+ 'people': 'people',
170
+ 'persons': 'people',
171
+ 'contacts': 'people',
172
+ 'companies': 'companies',
173
+ 'organization': 'companies',
174
+ 'opportunities': 'opportunities',
175
+ 'deals': 'opportunities',
176
+ 'tasks': 'tasks',
177
+ 'notes': 'notes'
178
+ };
179
+ return endpoints[objectType.toLowerCase()] || objectType;
180
+ }
181
+ }
182
+ exports.TwentyGraphQLClient = TwentyGraphQLClient;
183
+ async function loadToTwenty(data, objectType, twentyUrl, twentyKey, batchSize, progressBar) {
184
+ const client = new TwentyGraphQLClient(twentyUrl, twentyKey);
185
+ const errorLog = [];
186
+ let successCount = 0;
187
+ let errorCount = 0;
188
+ // Test connection first
189
+ console.log('🔗 Testing Twenty CRM GraphQL connection...');
190
+ const isConnected = await client.testConnection();
191
+ if (!isConnected) {
192
+ throw new Error('Failed to connect to Twenty CRM. Check URL and API key.');
193
+ }
194
+ console.log('✅ GraphQL connection successful');
195
+ console.log(`📤 Loading ${data.length} records via GraphQL...`);
196
+ // Process in batches
197
+ for (let i = 0; i < data.length; i += batchSize) {
198
+ const batch = data.slice(i, i + batchSize);
199
+ const batchNumber = Math.floor(i / batchSize) + 1;
200
+ const totalBatches = Math.ceil(data.length / batchSize);
201
+ try {
202
+ progressBar.update((i / data.length) * 100, {
203
+ batch: `${batchNumber}/${totalBatches}`,
204
+ records: `${i + 1}-${Math.min(i + batchSize, data.length)}`
205
+ });
206
+ const batchResult = await client.createRecords(objectType, batch);
207
+ if (batchResult.success) {
208
+ successCount += batchResult.count;
209
+ console.log(`✅ Batch ${batchNumber} imported successfully`);
210
+ }
211
+ else {
212
+ errorCount += batch.length;
213
+ const errorMsg = `Batch ${batchNumber}: ${batchResult.error}`;
214
+ errorLog.push(errorMsg);
215
+ console.error(`❌ ${errorMsg}`);
216
+ }
217
+ }
218
+ catch (error) {
219
+ const errorMsg = `Batch ${batchNumber}: ${error.message}`;
220
+ errorLog.push(errorMsg);
221
+ errorCount += batch.length;
222
+ }
223
+ // Small delay to avoid rate limiting
224
+ await new Promise(resolve => setTimeout(resolve, 100));
225
+ }
226
+ return {
227
+ success: successCount,
228
+ errors: errorCount,
229
+ errorLog
230
+ };
231
+ }
232
+ function saveErrorLog(errorLog, filename) {
233
+ if (errorLog.length === 0)
234
+ return;
235
+ const logContent = errorLog.join('\n');
236
+ fs.writeFileSync(filename, logContent, 'utf8');
237
+ console.log(`📄 Error log saved to ${filename}`);
238
+ }
239
+ //# sourceMappingURL=load-graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-graphql.js","sourceRoot":"","sources":["../src/load-graphql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { ParsedRecord } from './parser';
2
+ export interface LoadResult {
3
+ success: number;
4
+ errors: number;
5
+ errorLog: string[];
6
+ }
7
+ export interface BatchResult {
8
+ success: boolean;
9
+ count: number;
10
+ error?: string;
11
+ }
12
+ export declare class TwentyAPIClient {
13
+ private client;
14
+ private baseUrl;
15
+ private apiKey;
16
+ constructor(baseUrl: string, apiKey: string);
17
+ testConnection(): Promise<boolean>;
18
+ createRecords(objectType: string, records: ParsedRecord[]): Promise<BatchResult>;
19
+ createRecord(objectType: string, record: ParsedRecord): Promise<BatchResult>;
20
+ getObjectEndpoint(objectType: string): string;
21
+ }
22
+ export declare function loadToTwenty(data: ParsedRecord[], objectType: string, twentyUrl: string, twentyKey: string, batchSize: number, progressBar: any): Promise<LoadResult>;
23
+ export declare function saveErrorLog(errorLog: string[], filename: string): void;
24
+ //# sourceMappingURL=load-old.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-old.d.ts","sourceRoot":"","sources":["../src/load-old.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAcrC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBhF,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBlF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAe9C;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAAE,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,UAAU,CAAC,CAgErB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMvE"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TwentyAPIClient = void 0;
40
+ exports.loadToTwenty = loadToTwenty;
41
+ exports.saveErrorLog = saveErrorLog;
42
+ const axios_1 = __importDefault(require("axios"));
43
+ const fs = __importStar(require("fs"));
44
+ class TwentyAPIClient {
45
+ constructor(baseUrl, apiKey) {
46
+ this.baseUrl = baseUrl.replace(/\/$/, ''); // Remove trailing slash
47
+ this.apiKey = apiKey;
48
+ this.client = axios_1.default.create({
49
+ baseURL: `${this.baseUrl}/rest`,
50
+ headers: {
51
+ 'Authorization': `Bearer ${this.apiKey}`,
52
+ 'Content-Type': 'application/json'
53
+ },
54
+ timeout: 30000
55
+ });
56
+ }
57
+ async testConnection() {
58
+ try {
59
+ const response = await this.client.get('/people', { params: { limit: 1 } });
60
+ return response.status === 200;
61
+ }
62
+ catch (error) {
63
+ console.error('❌ Connection test failed:', error.response?.data || error.message);
64
+ return false;
65
+ }
66
+ }
67
+ async createRecords(objectType, records) {
68
+ try {
69
+ const response = await this.client.post(`/${objectType}`, {
70
+ data: records
71
+ });
72
+ return {
73
+ success: true,
74
+ count: records.length
75
+ };
76
+ }
77
+ catch (error) {
78
+ return {
79
+ success: false,
80
+ count: 0,
81
+ error: error.response?.data?.message || error.message
82
+ };
83
+ }
84
+ }
85
+ async createRecord(objectType, record) {
86
+ try {
87
+ const response = await this.client.post(`/${objectType}`, record);
88
+ return {
89
+ success: true,
90
+ count: 1
91
+ };
92
+ }
93
+ catch (error) {
94
+ return {
95
+ success: false,
96
+ count: 0,
97
+ error: error.response?.data?.message || error.message
98
+ };
99
+ }
100
+ }
101
+ getObjectEndpoint(objectType) {
102
+ const endpoints = {
103
+ 'people': 'people',
104
+ 'persons': 'people',
105
+ 'contacts': 'people',
106
+ 'companies': 'companies',
107
+ 'organization': 'companies',
108
+ 'opportunities': 'opportunities',
109
+ 'deals': 'opportunities',
110
+ 'tasks': 'tasks',
111
+ 'notes': 'notes'
112
+ };
113
+ return endpoints[objectType.toLowerCase()] || objectType;
114
+ }
115
+ }
116
+ exports.TwentyAPIClient = TwentyAPIClient;
117
+ async function loadToTwenty(data, objectType, twentyUrl, twentyKey, batchSize, progressBar) {
118
+ const client = new TwentyAPIClient(twentyUrl, twentyKey);
119
+ const errorLog = [];
120
+ let successCount = 0;
121
+ let errorCount = 0;
122
+ // Test connection first
123
+ console.log('🔗 Testing Twenty CRM connection...');
124
+ const isConnected = await client.testConnection();
125
+ if (!isConnected) {
126
+ throw new Error('Failed to connect to Twenty CRM. Check URL and API key.');
127
+ }
128
+ console.log('✅ Connection successful');
129
+ const endpoint = client.getObjectEndpoint(objectType);
130
+ console.log(`📤 Loading ${data.length} records to ${endpoint}...`);
131
+ // Process in batches
132
+ for (let i = 0; i < data.length; i += batchSize) {
133
+ const batch = data.slice(i, i + batchSize);
134
+ const batchNumber = Math.floor(i / batchSize) + 1;
135
+ const totalBatches = Math.ceil(data.length / batchSize);
136
+ try {
137
+ progressBar.update((i / data.length) * 100, {
138
+ batch: `${batchNumber}/${totalBatches}`,
139
+ records: `${i + 1}-${Math.min(i + batchSize, data.length)}`
140
+ });
141
+ // Try batch create first (if supported)
142
+ const batchResult = await client.createRecords(endpoint, batch);
143
+ if (batchResult.success) {
144
+ successCount += batchResult.count;
145
+ }
146
+ else {
147
+ // Fallback to individual records
148
+ console.warn(`⚠️ Batch create failed, trying individual records...`);
149
+ for (const record of batch) {
150
+ const result = await client.createRecord(endpoint, record);
151
+ if (result.success) {
152
+ successCount++;
153
+ }
154
+ else {
155
+ errorCount++;
156
+ const errorMsg = `Record ${JSON.stringify(record)}: ${result.error}`;
157
+ errorLog.push(errorMsg);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ catch (error) {
163
+ const errorMsg = `Batch ${batchNumber}: ${error.message}`;
164
+ errorLog.push(errorMsg);
165
+ errorCount += batch.length;
166
+ }
167
+ // Small delay to avoid rate limiting
168
+ await new Promise(resolve => setTimeout(resolve, 100));
169
+ }
170
+ return {
171
+ success: successCount,
172
+ errors: errorCount,
173
+ errorLog
174
+ };
175
+ }
176
+ function saveErrorLog(errorLog, filename) {
177
+ if (errorLog.length === 0)
178
+ return;
179
+ const logContent = errorLog.join('\n');
180
+ fs.writeFileSync(filename, logContent, 'utf8');
181
+ console.log(`📄 Error log saved to ${filename}`);
182
+ }
183
+ //# sourceMappingURL=load-old.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-old.js","sourceRoot":"","sources":["../src/load-old.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ParsedRecord } from './parser';
2
+ export interface LoadResult {
3
+ success: number;
4
+ errors: number;
5
+ errorLog: string[];
6
+ }
7
+ export interface BatchResult {
8
+ success: boolean;
9
+ count: number;
10
+ error?: string;
11
+ }
12
+ export declare class TwentyRealAPIClient {
13
+ private client;
14
+ private baseUrl;
15
+ private apiKey;
16
+ constructor(baseUrl: string, apiKey: string);
17
+ testConnection(): Promise<boolean>;
18
+ createRecords(objectType: string, records: ParsedRecord[]): Promise<BatchResult>;
19
+ getObjectEndpoint(objectType: string): string;
20
+ }
21
+ export declare function loadToTwenty(data: ParsedRecord[], objectType: string, twentyUrl: string, twentyKey: string, batchSize: number, progressBar: any): Promise<LoadResult>;
22
+ export declare function saveErrorLog(errorLog: string[], filename: string): void;
23
+ //# sourceMappingURL=load-real.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-real.d.ts","sourceRoot":"","sources":["../src/load-real.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAcrC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAWlC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAkEtF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAe9C;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAAE,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,UAAU,CAAC,CAsDrB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMvE"}