@ingeno/pipedream-services 1.0.63 → 1.0.65
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/aws/apn/partner-central-client.test.d.ts +2 -0
- package/dist/aws/apn/partner-central-client.test.d.ts.map +1 -0
- package/dist/aws/apn/partner-central-client.test.js +38 -0
- package/dist/aws/apn/partner-central-client.test.js.map +1 -0
- package/dist/aws/apn/zoho-crm/apn-opportunities-sync-step.test.d.ts +2 -0
- package/dist/aws/apn/zoho-crm/apn-opportunities-sync-step.test.d.ts.map +1 -0
- package/dist/aws/apn/zoho-crm/apn-opportunities-sync-step.test.js +34 -0
- package/dist/aws/apn/zoho-crm/apn-opportunities-sync-step.test.js.map +1 -0
- package/dist/aws/aws-list-stream.test.d.ts +3 -0
- package/dist/aws/aws-list-stream.test.d.ts.map +1 -0
- package/dist/aws/aws-list-stream.test.js +50 -0
- package/dist/aws/aws-list-stream.test.js.map +1 -0
- package/dist/collections/collections-to-table.test.d.ts +2 -0
- package/dist/collections/collections-to-table.test.d.ts.map +1 -0
- package/dist/collections/collections-to-table.test.js +105 -0
- package/dist/collections/collections-to-table.test.js.map +1 -0
- package/dist/collections/converter.test.d.ts +2 -0
- package/dist/collections/converter.test.d.ts.map +1 -0
- package/dist/collections/converter.test.js +304 -0
- package/dist/collections/converter.test.js.map +1 -0
- package/dist/postgres/posgres-test-config.d.ts +8 -0
- package/dist/postgres/posgres-test-config.d.ts.map +1 -0
- package/dist/postgres/posgres-test-config.js +8 -0
- package/dist/postgres/posgres-test-config.js.map +1 -0
- package/dist/postgres/postgres-test-connection.test.d.ts +2 -0
- package/dist/postgres/postgres-test-connection.test.d.ts.map +1 -0
- package/dist/postgres/postgres-test-connection.test.js +68 -0
- package/dist/postgres/postgres-test-connection.test.js.map +1 -0
- package/dist/postgres/postgres.d.ts.map +1 -1
- package/dist/postgres/postgres.js +5 -3
- package/dist/postgres/postgres.js.map +1 -1
- package/dist/postgres/postgres.test.d.ts +2 -0
- package/dist/postgres/postgres.test.d.ts.map +1 -0
- package/dist/postgres/postgres.test.js +497 -0
- package/dist/postgres/postgres.test.js.map +1 -0
- package/dist/streams/list-stream.test.d.ts +2 -0
- package/dist/streams/list-stream.test.d.ts.map +1 -0
- package/dist/streams/list-stream.test.js +169 -0
- package/dist/streams/list-stream.test.js.map +1 -0
- package/dist/zoho-crm/index.d.ts +1 -4
- package/dist/zoho-crm/index.d.ts.map +1 -1
- package/dist/zoho-crm/index.js +1 -4
- package/dist/zoho-crm/index.js.map +1 -1
- package/dist/zoho-crm/zoho-crm-client.d.ts +68 -0
- package/dist/zoho-crm/zoho-crm-client.d.ts.map +1 -1
- package/dist/zoho-crm/zoho-crm-client.js +216 -0
- package/dist/zoho-crm/zoho-crm-client.js.map +1 -1
- package/dist/zoho-crm/zoho-crm-client.test.d.ts +2 -0
- package/dist/zoho-crm/zoho-crm-client.test.d.ts.map +1 -0
- package/dist/zoho-crm/zoho-crm-client.test.js +341 -0
- package/dist/zoho-crm/zoho-crm-client.test.js.map +1 -0
- package/dist/zoho-crm/zoho-crm-fetcher.d.ts +2 -8
- package/dist/zoho-crm/zoho-crm-fetcher.d.ts.map +1 -1
- package/dist/zoho-crm/zoho-crm-fetcher.js +110 -28
- package/dist/zoho-crm/zoho-crm-fetcher.js.map +1 -1
- package/dist/zoho-crm/zoho-crm-to-database-collection-converter.d.ts +8 -0
- package/dist/zoho-crm/zoho-crm-to-database-collection-converter.d.ts.map +1 -0
- package/dist/zoho-crm/zoho-crm-to-database-collection-converter.js +117 -0
- package/dist/zoho-crm/zoho-crm-to-database-collection-converter.js.map +1 -0
- package/package.json +3 -2
- package/dist/zoho-crm/module-processor.d.ts +0 -8
- package/dist/zoho-crm/module-processor.d.ts.map +0 -1
- package/dist/zoho-crm/module-processor.js +0 -114
- package/dist/zoho-crm/module-processor.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
function createEmptyDatabaseSchema(schemaName) {
|
|
2
|
+
return {
|
|
3
|
+
name: schemaName,
|
|
4
|
+
prepareMode: 'drop',
|
|
5
|
+
columns: [
|
|
6
|
+
{ name: 'id', type: 'id' },
|
|
7
|
+
{ name: 'raw_data', transform: (record) => JSON.stringify(record) },
|
|
8
|
+
],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function extractAllFieldNamesFromRecords(records) {
|
|
12
|
+
const allFieldNames = records
|
|
13
|
+
.flatMap(record => Object.keys(record));
|
|
14
|
+
return [...new Set(allFieldNames)].sort();
|
|
15
|
+
}
|
|
16
|
+
function sanitizeFieldNameForDatabase(fieldName) {
|
|
17
|
+
return fieldName.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
18
|
+
}
|
|
19
|
+
function inferColumnTypeFromFieldName(fieldName) {
|
|
20
|
+
if (fieldName.includes('Date') || fieldName.includes('Time') || fieldName.includes('_time')) {
|
|
21
|
+
return fieldName.includes('Date') && !fieldName.includes('Time') ? 'date' : 'datetime';
|
|
22
|
+
}
|
|
23
|
+
if (fieldName.includes('Amount') || fieldName.includes('Revenue') || fieldName.includes('_amount')) {
|
|
24
|
+
return 'currency';
|
|
25
|
+
}
|
|
26
|
+
if (fieldName.includes('Probability') || fieldName.includes('Rate') || fieldName.includes('_rate') || fieldName.includes('_number')) {
|
|
27
|
+
return 'number';
|
|
28
|
+
}
|
|
29
|
+
if (fieldName.includes('Opt_Out') || fieldName.includes('_opt_out') || fieldName.includes('converted')) {
|
|
30
|
+
return 'bool';
|
|
31
|
+
}
|
|
32
|
+
return 'text';
|
|
33
|
+
}
|
|
34
|
+
function extractSampleValuesFromRecords(records, fieldName, sampleSize = 10) {
|
|
35
|
+
return records
|
|
36
|
+
.slice(0, sampleSize)
|
|
37
|
+
.map((record) => record[fieldName])
|
|
38
|
+
.filter((value) => value !== null && value !== undefined && value !== '');
|
|
39
|
+
}
|
|
40
|
+
function refineColumnTypeFromSampleValue(sampleValue, inferredType) {
|
|
41
|
+
if (typeof sampleValue === 'boolean') {
|
|
42
|
+
return 'bool';
|
|
43
|
+
}
|
|
44
|
+
if (typeof sampleValue === 'number') {
|
|
45
|
+
return 'number';
|
|
46
|
+
}
|
|
47
|
+
if (typeof sampleValue === 'string' && (inferredType === 'date' || inferredType === 'datetime')) {
|
|
48
|
+
const parsedDate = new Date(sampleValue);
|
|
49
|
+
return isNaN(parsedDate.getTime()) ? 'text' : inferredType;
|
|
50
|
+
}
|
|
51
|
+
return inferredType;
|
|
52
|
+
}
|
|
53
|
+
function createColumnsForNestedObject(fieldName, sanitizedColumnName, sampleValue) {
|
|
54
|
+
const nestedProperties = [
|
|
55
|
+
{ key: 'name', exists: sampleValue.name },
|
|
56
|
+
{ key: 'id', exists: sampleValue.id },
|
|
57
|
+
{ key: 'email', exists: sampleValue.email }
|
|
58
|
+
];
|
|
59
|
+
return nestedProperties
|
|
60
|
+
.filter(property => property.exists)
|
|
61
|
+
.map(property => ({
|
|
62
|
+
name: `${sanitizedColumnName}_${property.key}`,
|
|
63
|
+
path: `${fieldName}.${property.key}`
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
function createColumnFromField(fieldName, records) {
|
|
67
|
+
if (fieldName === 'id') {
|
|
68
|
+
return [{ name: 'record_id', path: 'id' }];
|
|
69
|
+
}
|
|
70
|
+
const sanitizedColumnName = sanitizeFieldNameForDatabase(fieldName);
|
|
71
|
+
let columnType = inferColumnTypeFromFieldName(fieldName);
|
|
72
|
+
const sampleValues = extractSampleValuesFromRecords(records, fieldName);
|
|
73
|
+
if (sampleValues.length > 0) {
|
|
74
|
+
const firstSampleValue = sampleValues[0];
|
|
75
|
+
if (typeof firstSampleValue === 'object' && firstSampleValue !== null) {
|
|
76
|
+
return createColumnsForNestedObject(fieldName, sanitizedColumnName, firstSampleValue);
|
|
77
|
+
}
|
|
78
|
+
columnType = refineColumnTypeFromSampleValue(firstSampleValue, columnType);
|
|
79
|
+
}
|
|
80
|
+
return [{ name: sanitizedColumnName, path: fieldName, type: columnType }];
|
|
81
|
+
}
|
|
82
|
+
function convertFieldsToColumns(fieldNames, records) {
|
|
83
|
+
const baseColumns = [{ name: 'id', type: 'id' }];
|
|
84
|
+
const fieldColumns = fieldNames.flatMap(fieldName => createColumnFromField(fieldName, records));
|
|
85
|
+
const rawDataColumn = [
|
|
86
|
+
{ name: 'raw_data', transform: (record) => JSON.stringify(record) }
|
|
87
|
+
];
|
|
88
|
+
return [...baseColumns, ...fieldColumns, ...rawDataColumn];
|
|
89
|
+
}
|
|
90
|
+
export function createDatabaseSchemaFromZohoCRMRecords(records, schemaName) {
|
|
91
|
+
if (!records || records.length === 0) {
|
|
92
|
+
return createEmptyDatabaseSchema(schemaName);
|
|
93
|
+
}
|
|
94
|
+
const allFieldNames = extractAllFieldNamesFromRecords(records);
|
|
95
|
+
const databaseColumns = convertFieldsToColumns(allFieldNames, records);
|
|
96
|
+
return {
|
|
97
|
+
name: schemaName,
|
|
98
|
+
prepareMode: 'drop',
|
|
99
|
+
columns: databaseColumns,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export async function convertZohoCRMModuleToDatabaseCollection(moduleName, client, options = {}) {
|
|
103
|
+
const { maxRecords } = options;
|
|
104
|
+
console.log(`Processing module: ${moduleName}`);
|
|
105
|
+
const zohoCRMRecords = await client.getAllRecordsWithFields(moduleName, { maxRecords: maxRecords || undefined });
|
|
106
|
+
const databaseSchema = createDatabaseSchemaFromZohoCRMRecords(zohoCRMRecords, moduleName.toLowerCase());
|
|
107
|
+
const databaseCollection = {
|
|
108
|
+
schema: databaseSchema,
|
|
109
|
+
objects: zohoCRMRecords.map((record, index) => ({
|
|
110
|
+
id: index + 1,
|
|
111
|
+
...record,
|
|
112
|
+
})),
|
|
113
|
+
};
|
|
114
|
+
console.log(`Processed ${zohoCRMRecords.length} records for module: ${moduleName}`);
|
|
115
|
+
return databaseCollection;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=zoho-crm-to-database-collection-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoho-crm-to-database-collection-converter.js","sourceRoot":"","sources":["../../src/zoho-crm/zoho-crm-to-database-collection-converter.ts"],"names":[],"mappings":"AAOA,SAAS,yBAAyB,CAAC,UAAkB;IACnD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;YAC1B,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;SACpE;KACF,CAAA;AACH,CAAC;AAED,SAAS,+BAA+B,CAAC,OAAwB;IAC/D,MAAM,aAAa,GAAG,OAAO;SAC1B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAEzC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;AAED,SAAS,4BAA4B,CAAC,SAAiB;IACrD,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED,SAAS,4BAA4B,CAAC,SAAiB;IACrD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5F,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAA;IACxF,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnG,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpI,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACvG,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAwB,EAAE,SAAiB,EAAE,aAAqB,EAAE;IAC1G,OAAO,OAAO;SACX,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;SACpB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,+BAA+B,CAAC,WAAgB,EAAE,YAAwB;IACjF,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,UAAU,CAAC,EAAE,CAAC;QAChG,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAA;QACxC,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAA;IAC5D,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,SAAS,4BAA4B,CAAC,SAAiB,EAAE,mBAA2B,EAAE,WAAgB;IACpG,MAAM,gBAAgB,GAAG;QACvB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE;QACzC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE;QACrC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE;KAC5C,CAAA;IAED,OAAO,gBAAgB;SACpB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;SACnC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,EAAE,GAAG,mBAAmB,IAAI,QAAQ,CAAC,GAAG,EAAE;QAC9C,IAAI,EAAE,GAAG,SAAS,IAAI,QAAQ,CAAC,GAAG,EAAE;KACrC,CAAC,CAAC,CAAA;AACP,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,OAAwB;IACxE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAA;IACnE,IAAI,UAAU,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAA;IAExD,MAAM,YAAY,GAAG,8BAA8B,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAEvE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAExC,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;YACtE,OAAO,4BAA4B,CAAC,SAAS,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAA;QACvF,CAAC;QAED,UAAU,GAAG,+BAA+B,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAA;IAC5E,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;AAC3E,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAoB,EAAE,OAAwB;IAC5E,MAAM,WAAW,GAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAE1D,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAClD,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAC1C,CAAA;IAED,MAAM,aAAa,GAAa;QAC9B,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,MAAW,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;KACzE,CAAA;IAED,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,OAAwB,EAAE,UAAkB;IACjG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,yBAAyB,CAAC,UAAU,CAAC,CAAA;IAC9C,CAAC;IAED,MAAM,aAAa,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAA;IAC9D,MAAM,eAAe,GAAG,sBAAsB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAEtE,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,eAAe;KACzB,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wCAAwC,CAC5D,UAAkB,EAClB,MAAqB,EACrB,UAAoC,EAAE;IAEtC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAE9B,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAA;IAE/C,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,UAAU,IAAI,SAAS,EAAE,CAAC,CAAA;IAChH,MAAM,cAAc,GAAG,sCAAsC,CAAC,cAAc,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;IAEvG,MAAM,kBAAkB,GAAe;QACrC,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC;YAC3D,EAAE,EAAE,KAAK,GAAG,CAAC;YACb,GAAG,MAAM;SACV,CAAC,CAAC;KACJ,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,cAAc,CAAC,MAAM,wBAAwB,UAAU,EAAE,CAAC,CAAA;IAEnF,OAAO,kBAAkB,CAAA;AAC3B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ingeno/pipedream-services",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.65",
|
|
4
4
|
"description": "Service utilities for Clarity data integrations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -77,7 +77,8 @@
|
|
|
77
77
|
"build": "npm run clean && npm run build:tsc",
|
|
78
78
|
"build:tsc": "tsc",
|
|
79
79
|
"build:watch": "tsc -w",
|
|
80
|
-
"lint": "eslint src/**/*.ts
|
|
80
|
+
"lint": "eslint src/**/*.ts",
|
|
81
|
+
"lint:fix": "eslint src/**/*.ts --fix",
|
|
81
82
|
"clean": "rm -rf dist",
|
|
82
83
|
"test": "vitest run",
|
|
83
84
|
"test:watch": "vitest --watch",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Collection, CollectionSchema } from '../collections/types.js';
|
|
2
|
-
import type { ZohoCRMClient, ZohoCRMRecord } from './zoho-crm-client.js';
|
|
3
|
-
export interface ModuleProcessorOptions {
|
|
4
|
-
maxRecords?: number;
|
|
5
|
-
}
|
|
6
|
-
export declare function generateSchemaFromRecords(records: ZohoCRMRecord[], schemaName: string): CollectionSchema;
|
|
7
|
-
export declare function processModule(moduleName: string, client: ZohoCRMClient, options?: ModuleProcessorOptions): Promise<Collection>;
|
|
8
|
-
//# sourceMappingURL=module-processor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-processor.d.ts","sourceRoot":"","sources":["../../src/zoho-crm/module-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAsB,MAAM,yBAAyB,CAAA;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAExE,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAGD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAuGxG;AAGD,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,UAAU,CAAC,CAqBrB"}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
// Helper function to dynamically generate schema from Zoho CRM records
|
|
2
|
-
export function generateSchemaFromRecords(records, schemaName) {
|
|
3
|
-
if (!records || records.length === 0) {
|
|
4
|
-
return {
|
|
5
|
-
name: schemaName,
|
|
6
|
-
prepareMode: 'drop',
|
|
7
|
-
columns: [
|
|
8
|
-
{ name: 'id', type: 'id' },
|
|
9
|
-
{ name: 'raw_data', transform: (record) => JSON.stringify(record) },
|
|
10
|
-
],
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
const allFields = new Set();
|
|
14
|
-
// Collect all field names from all records
|
|
15
|
-
records.forEach((record) => {
|
|
16
|
-
Object.keys(record).forEach((key) => {
|
|
17
|
-
allFields.add(key);
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
// Convert field names to database column definitions
|
|
21
|
-
const columns = [{ name: 'id', type: 'id' }];
|
|
22
|
-
// Sort fields for consistent ordering
|
|
23
|
-
const sortedFields = Array.from(allFields).sort();
|
|
24
|
-
sortedFields.forEach((field) => {
|
|
25
|
-
// Skip the 'id' field from Zoho as we handle it separately
|
|
26
|
-
if (field === 'id') {
|
|
27
|
-
columns.push({ name: 'record_id', path: 'id' });
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const columnName = field.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
31
|
-
// Determine data type based on field name patterns and sample data
|
|
32
|
-
let type = 'text';
|
|
33
|
-
// Check field name patterns
|
|
34
|
-
if (field.includes('Date') || field.includes('Time') || field.includes('_time')) {
|
|
35
|
-
type = field.includes('Date') && !field.includes('Time') ? 'date' : 'datetime';
|
|
36
|
-
}
|
|
37
|
-
else if (field.includes('Amount') || field.includes('Revenue') || field.includes('_amount')) {
|
|
38
|
-
type = 'currency';
|
|
39
|
-
}
|
|
40
|
-
else if (field.includes('Probability') ||
|
|
41
|
-
field.includes('Rate') ||
|
|
42
|
-
field.includes('_rate') ||
|
|
43
|
-
field.includes('_number')) {
|
|
44
|
-
type = 'number';
|
|
45
|
-
}
|
|
46
|
-
else if (field.includes('Opt_Out') || field.includes('_opt_out') || field.includes('converted')) {
|
|
47
|
-
type = 'bool';
|
|
48
|
-
}
|
|
49
|
-
// Sample the data to refine type detection
|
|
50
|
-
const sampleValues = records
|
|
51
|
-
.slice(0, 10)
|
|
52
|
-
.map((record) => record[field])
|
|
53
|
-
.filter((val) => val !== null && val !== undefined && val !== '');
|
|
54
|
-
if (sampleValues.length > 0) {
|
|
55
|
-
const sampleValue = sampleValues[0];
|
|
56
|
-
if (typeof sampleValue === 'boolean') {
|
|
57
|
-
type = 'bool';
|
|
58
|
-
}
|
|
59
|
-
else if (typeof sampleValue === 'number') {
|
|
60
|
-
type = 'number';
|
|
61
|
-
}
|
|
62
|
-
else if (typeof sampleValue === 'object' && sampleValue !== null) {
|
|
63
|
-
// Handle nested objects (like Owner, Account_Name, etc.)
|
|
64
|
-
if (sampleValue.name) {
|
|
65
|
-
columns.push({ name: `${columnName}_name`, path: `${field}.name` });
|
|
66
|
-
}
|
|
67
|
-
if (sampleValue.id) {
|
|
68
|
-
columns.push({ name: `${columnName}_id`, path: `${field}.id` });
|
|
69
|
-
}
|
|
70
|
-
if (sampleValue.email) {
|
|
71
|
-
columns.push({ name: `${columnName}_email`, path: `${field}.email` });
|
|
72
|
-
}
|
|
73
|
-
return; // Skip adding the main field since we're handling nested properties
|
|
74
|
-
}
|
|
75
|
-
else if (typeof sampleValue === 'string') {
|
|
76
|
-
// Check if it's a valid date/timestamp string
|
|
77
|
-
if (type === 'date' || type === 'datetime') {
|
|
78
|
-
// Try to parse the date to validate it's a proper timestamp
|
|
79
|
-
const date = new Date(sampleValue);
|
|
80
|
-
if (isNaN(date.getTime())) {
|
|
81
|
-
// Invalid date, treat as text
|
|
82
|
-
type = 'text';
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
columns.push({ name: columnName, path: field, type });
|
|
88
|
-
});
|
|
89
|
-
// Always add raw_data column for full JSON
|
|
90
|
-
columns.push({ name: 'raw_data', transform: (record) => JSON.stringify(record) });
|
|
91
|
-
return {
|
|
92
|
-
name: schemaName,
|
|
93
|
-
prepareMode: 'drop',
|
|
94
|
-
columns,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
// Generic function to process any Zoho CRM module
|
|
98
|
-
export async function processModule(moduleName, client, options = {}) {
|
|
99
|
-
const { maxRecords } = options;
|
|
100
|
-
console.log(`Processing module: ${moduleName}`);
|
|
101
|
-
const records = await client.getAllRecordsWithFields(moduleName, { maxRecords: maxRecords || undefined });
|
|
102
|
-
const schema = generateSchemaFromRecords(records, moduleName.toLowerCase());
|
|
103
|
-
// Create collection with manually assigned IDs
|
|
104
|
-
const collection = {
|
|
105
|
-
schema,
|
|
106
|
-
objects: records.map((record, index) => ({
|
|
107
|
-
id: index + 1,
|
|
108
|
-
...record,
|
|
109
|
-
})),
|
|
110
|
-
};
|
|
111
|
-
console.log(`Processed ${records.length} records for module: ${moduleName}`);
|
|
112
|
-
return collection;
|
|
113
|
-
}
|
|
114
|
-
//# sourceMappingURL=module-processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-processor.js","sourceRoot":"","sources":["../../src/zoho-crm/module-processor.ts"],"names":[],"mappings":"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"}
|