@memberjunction/integration-connectors 5.51.0 → 6.1.0-edge.1
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/LICENSE +7 -0
- package/README.md +109 -277
- package/dist/index.d.ts +0 -36
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -38
- package/dist/index.js.map +1 -1
- package/package.json +14 -19
- package/dist/AptifyConnector.d.ts +0 -95
- package/dist/AptifyConnector.d.ts.map +0 -1
- package/dist/AptifyConnector.js +0 -760
- package/dist/AptifyConnector.js.map +0 -1
- package/dist/BlackbaudConnector.d.ts +0 -64
- package/dist/BlackbaudConnector.d.ts.map +0 -1
- package/dist/BlackbaudConnector.js +0 -916
- package/dist/BlackbaudConnector.js.map +0 -1
- package/dist/ConstantContactConnector.d.ts +0 -137
- package/dist/ConstantContactConnector.d.ts.map +0 -1
- package/dist/ConstantContactConnector.js +0 -663
- package/dist/ConstantContactConnector.js.map +0 -1
- package/dist/CventConnector.d.ts +0 -146
- package/dist/CventConnector.d.ts.map +0 -1
- package/dist/CventConnector.js +0 -540
- package/dist/CventConnector.js.map +0 -1
- package/dist/DynamicsDataverseConnector.d.ts +0 -296
- package/dist/DynamicsDataverseConnector.d.ts.map +0 -1
- package/dist/DynamicsDataverseConnector.js +0 -790
- package/dist/DynamicsDataverseConnector.js.map +0 -1
- package/dist/FileFeedConnector.d.ts +0 -64
- package/dist/FileFeedConnector.d.ts.map +0 -1
- package/dist/FileFeedConnector.js +0 -190
- package/dist/FileFeedConnector.js.map +0 -1
- package/dist/FontevaConnector.d.ts +0 -153
- package/dist/FontevaConnector.d.ts.map +0 -1
- package/dist/FontevaConnector.js +0 -421
- package/dist/FontevaConnector.js.map +0 -1
- package/dist/GrowthZoneConnector.d.ts +0 -183
- package/dist/GrowthZoneConnector.d.ts.map +0 -1
- package/dist/GrowthZoneConnector.js +0 -702
- package/dist/GrowthZoneConnector.js.map +0 -1
- package/dist/HivebriteConnector.d.ts +0 -151
- package/dist/HivebriteConnector.d.ts.map +0 -1
- package/dist/HivebriteConnector.js +0 -533
- package/dist/HivebriteConnector.js.map +0 -1
- package/dist/HubSpotConnector.d.ts +0 -523
- package/dist/HubSpotConnector.d.ts.map +0 -1
- package/dist/HubSpotConnector.js +0 -3110
- package/dist/HubSpotConnector.js.map +0 -1
- package/dist/IMISConnector.d.ts +0 -171
- package/dist/IMISConnector.d.ts.map +0 -1
- package/dist/IMISConnector.js +0 -695
- package/dist/IMISConnector.js.map +0 -1
- package/dist/MJToMJConnector.d.ts +0 -279
- package/dist/MJToMJConnector.d.ts.map +0 -1
- package/dist/MJToMJConnector.js +0 -893
- package/dist/MJToMJConnector.js.map +0 -1
- package/dist/MagnetMailConnector.d.ts +0 -163
- package/dist/MagnetMailConnector.d.ts.map +0 -1
- package/dist/MagnetMailConnector.js +0 -823
- package/dist/MagnetMailConnector.js.map +0 -1
- package/dist/MailchimpConnector.d.ts +0 -197
- package/dist/MailchimpConnector.d.ts.map +0 -1
- package/dist/MailchimpConnector.js +0 -791
- package/dist/MailchimpConnector.js.map +0 -1
- package/dist/MemberSuiteConnector.d.ts +0 -185
- package/dist/MemberSuiteConnector.d.ts.map +0 -1
- package/dist/MemberSuiteConnector.js +0 -762
- package/dist/MemberSuiteConnector.js.map +0 -1
- package/dist/NeonCRMConnector.d.ts +0 -273
- package/dist/NeonCRMConnector.d.ts.map +0 -1
- package/dist/NeonCRMConnector.js +0 -1039
- package/dist/NeonCRMConnector.js.map +0 -1
- package/dist/NetForumConnector.d.ts +0 -170
- package/dist/NetForumConnector.d.ts.map +0 -1
- package/dist/NetForumConnector.js +0 -778
- package/dist/NetForumConnector.js.map +0 -1
- package/dist/NetSuiteConnector.d.ts +0 -136
- package/dist/NetSuiteConnector.d.ts.map +0 -1
- package/dist/NetSuiteConnector.js +0 -703
- package/dist/NetSuiteConnector.js.map +0 -1
- package/dist/NimbleAMSConnector.d.ts +0 -142
- package/dist/NimbleAMSConnector.d.ts.map +0 -1
- package/dist/NimbleAMSConnector.js +0 -703
- package/dist/NimbleAMSConnector.js.map +0 -1
- package/dist/NoviConnector.d.ts +0 -178
- package/dist/NoviConnector.d.ts.map +0 -1
- package/dist/NoviConnector.js +0 -566
- package/dist/NoviConnector.js.map +0 -1
- package/dist/ORCIDConnector.d.ts +0 -207
- package/dist/ORCIDConnector.d.ts.map +0 -1
- package/dist/ORCIDConnector.js +0 -708
- package/dist/ORCIDConnector.js.map +0 -1
- package/dist/OpenWaterConnector.d.ts +0 -173
- package/dist/OpenWaterConnector.d.ts.map +0 -1
- package/dist/OpenWaterConnector.js +0 -893
- package/dist/OpenWaterConnector.js.map +0 -1
- package/dist/PathLMSConnector.d.ts +0 -395
- package/dist/PathLMSConnector.d.ts.map +0 -1
- package/dist/PathLMSConnector.js +0 -1281
- package/dist/PathLMSConnector.js.map +0 -1
- package/dist/PheedLoopConnector.d.ts +0 -119
- package/dist/PheedLoopConnector.d.ts.map +0 -1
- package/dist/PheedLoopConnector.js +0 -429
- package/dist/PheedLoopConnector.js.map +0 -1
- package/dist/PropFuelConnector.d.ts +0 -153
- package/dist/PropFuelConnector.d.ts.map +0 -1
- package/dist/PropFuelConnector.js +0 -450
- package/dist/PropFuelConnector.js.map +0 -1
- package/dist/QuickBooksConnector.d.ts +0 -92
- package/dist/QuickBooksConnector.d.ts.map +0 -1
- package/dist/QuickBooksConnector.js +0 -713
- package/dist/QuickBooksConnector.js.map +0 -1
- package/dist/RasaConnector.d.ts +0 -152
- package/dist/RasaConnector.d.ts.map +0 -1
- package/dist/RasaConnector.js +0 -929
- package/dist/RasaConnector.js.map +0 -1
- package/dist/Reach360Connector.d.ts +0 -175
- package/dist/Reach360Connector.d.ts.map +0 -1
- package/dist/Reach360Connector.js +0 -796
- package/dist/Reach360Connector.js.map +0 -1
- package/dist/RelationalDBConnector.d.ts +0 -108
- package/dist/RelationalDBConnector.d.ts.map +0 -1
- package/dist/RelationalDBConnector.js +0 -228
- package/dist/RelationalDBConnector.js.map +0 -1
- package/dist/RhythmConnector.d.ts +0 -188
- package/dist/RhythmConnector.d.ts.map +0 -1
- package/dist/RhythmConnector.js +0 -784
- package/dist/RhythmConnector.js.map +0 -1
- package/dist/SageIntacctConnector.d.ts +0 -337
- package/dist/SageIntacctConnector.d.ts.map +0 -1
- package/dist/SageIntacctConnector.js +0 -2081
- package/dist/SageIntacctConnector.js.map +0 -1
- package/dist/SalesforceConnector.d.ts +0 -461
- package/dist/SalesforceConnector.d.ts.map +0 -1
- package/dist/SalesforceConnector.js +0 -1862
- package/dist/SalesforceConnector.js.map +0 -1
- package/dist/SharePointConnector.d.ts +0 -188
- package/dist/SharePointConnector.d.ts.map +0 -1
- package/dist/SharePointConnector.js +0 -716
- package/dist/SharePointConnector.js.map +0 -1
- package/dist/WicketConnector.d.ts +0 -252
- package/dist/WicketConnector.d.ts.map +0 -1
- package/dist/WicketConnector.js +0 -938
- package/dist/WicketConnector.js.map +0 -1
- package/dist/WildApricotConnector.d.ts +0 -201
- package/dist/WildApricotConnector.d.ts.map +0 -1
- package/dist/WildApricotConnector.js +0 -1129
- package/dist/WildApricotConnector.js.map +0 -1
- package/dist/YourMembershipConnector.d.ts +0 -349
- package/dist/YourMembershipConnector.d.ts.map +0 -1
- package/dist/YourMembershipConnector.js +0 -4062
- package/dist/YourMembershipConnector.js.map +0 -1
- package/dist/generate-integration-actions.d.ts +0 -23
- package/dist/generate-integration-actions.d.ts.map +0 -1
- package/dist/generate-integration-actions.js +0 -201
- package/dist/generate-integration-actions.js.map +0 -1
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Generic CLI script to generate integration action metadata files.
|
|
4
|
-
*
|
|
5
|
-
* Instantiates registered integration connectors, calls GetActionGeneratorConfig()
|
|
6
|
-
* to get their object/field metadata, then uses ActionMetadataGenerator to produce
|
|
7
|
-
* mj-sync compatible action JSON files.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* npx tsx src/generate-integration-actions.ts [-- connector-name] [--output-dir <path>]
|
|
11
|
-
*
|
|
12
|
-
* Examples:
|
|
13
|
-
* npx tsx src/generate-integration-actions.ts # All connectors
|
|
14
|
-
* npx tsx src/generate-integration-actions.ts -- hubspot # HubSpot only
|
|
15
|
-
* npx tsx src/generate-integration-actions.ts -- salesforce # Salesforce only
|
|
16
|
-
* npx tsx src/generate-integration-actions.ts -- rasa # Rasa.io only
|
|
17
|
-
* npx tsx src/generate-integration-actions.ts -- ym # YourMembership only
|
|
18
|
-
*
|
|
19
|
-
* Note: The `--` separator is required before the connector name so `npx` passes
|
|
20
|
-
* it as a script argument rather than interpreting it as an npx option.
|
|
21
|
-
*/
|
|
22
|
-
export {};
|
|
23
|
-
//# sourceMappingURL=generate-integration-actions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-integration-actions.d.ts","sourceRoot":"","sources":["../src/generate-integration-actions.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG"}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Generic CLI script to generate integration action metadata files.
|
|
4
|
-
*
|
|
5
|
-
* Instantiates registered integration connectors, calls GetActionGeneratorConfig()
|
|
6
|
-
* to get their object/field metadata, then uses ActionMetadataGenerator to produce
|
|
7
|
-
* mj-sync compatible action JSON files.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* npx tsx src/generate-integration-actions.ts [-- connector-name] [--output-dir <path>]
|
|
11
|
-
*
|
|
12
|
-
* Examples:
|
|
13
|
-
* npx tsx src/generate-integration-actions.ts # All connectors
|
|
14
|
-
* npx tsx src/generate-integration-actions.ts -- hubspot # HubSpot only
|
|
15
|
-
* npx tsx src/generate-integration-actions.ts -- salesforce # Salesforce only
|
|
16
|
-
* npx tsx src/generate-integration-actions.ts -- rasa # Rasa.io only
|
|
17
|
-
* npx tsx src/generate-integration-actions.ts -- ym # YourMembership only
|
|
18
|
-
*
|
|
19
|
-
* Note: The `--` separator is required before the connector name so `npx` passes
|
|
20
|
-
* it as a script argument rather than interpreting it as an npx option.
|
|
21
|
-
*/
|
|
22
|
-
import * as fs from 'fs';
|
|
23
|
-
import * as path from 'path';
|
|
24
|
-
import { fileURLToPath } from 'url';
|
|
25
|
-
import { ActionMetadataGenerator, } from '@memberjunction/integration-engine';
|
|
26
|
-
import { HubSpotConnector } from './HubSpotConnector.js';
|
|
27
|
-
import { RasaConnector } from './RasaConnector.js';
|
|
28
|
-
import { SalesforceConnector } from './SalesforceConnector.js';
|
|
29
|
-
import { YourMembershipConnector } from './YourMembershipConnector.js';
|
|
30
|
-
import { SageIntacctConnector } from './SageIntacctConnector.js';
|
|
31
|
-
import { QuickBooksConnector } from './QuickBooksConnector.js';
|
|
32
|
-
/**
|
|
33
|
-
* Registry of known connector aliases → connector instance + output filename.
|
|
34
|
-
* To add a new connector, add an entry here and import the connector class above.
|
|
35
|
-
*/
|
|
36
|
-
const CONNECTOR_REGISTRY = {
|
|
37
|
-
hubspot: { Connector: new HubSpotConnector(), FileName: '.hubspot-actions.json' },
|
|
38
|
-
rasa: { Connector: new RasaConnector(), FileName: '.rasa-actions.json' },
|
|
39
|
-
salesforce: { Connector: new SalesforceConnector(), FileName: '.salesforce-actions.json' },
|
|
40
|
-
ym: { Connector: new YourMembershipConnector(), FileName: '.ym-actions.json' },
|
|
41
|
-
'sage-intacct': { Connector: new SageIntacctConnector(), FileName: '.sage-intacct-actions.json' },
|
|
42
|
-
quickbooks: { Connector: new QuickBooksConnector(), FileName: '.quickbooks-actions.json' },
|
|
43
|
-
};
|
|
44
|
-
// ─── Main ────────────────────────────────────────────────────────────
|
|
45
|
-
function main() {
|
|
46
|
-
const args = process.argv.slice(2);
|
|
47
|
-
const outputDirArg = args.indexOf('--output-dir');
|
|
48
|
-
const outputBase = outputDirArg >= 0 && args[outputDirArg + 1]
|
|
49
|
-
? args[outputDirArg + 1]
|
|
50
|
-
: path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../metadata');
|
|
51
|
-
const actionsDir = path.join(outputBase, 'actions/integrations-auto-generated');
|
|
52
|
-
const categoriesDir = path.join(outputBase, 'action-categories');
|
|
53
|
-
// Determine which connectors to generate for
|
|
54
|
-
const connectorArg = args.find(a => !a.startsWith('--') && args.indexOf(a) !== outputDirArg + 1);
|
|
55
|
-
const targetAliases = connectorArg
|
|
56
|
-
? [connectorArg.toLowerCase()]
|
|
57
|
-
: Object.keys(CONNECTOR_REGISTRY);
|
|
58
|
-
// Ensure output directories exist
|
|
59
|
-
fs.mkdirSync(actionsDir, { recursive: true });
|
|
60
|
-
fs.mkdirSync(categoriesDir, { recursive: true });
|
|
61
|
-
const generator = new ActionMetadataGenerator();
|
|
62
|
-
let totalActions = 0;
|
|
63
|
-
const allCategoryRecords = [];
|
|
64
|
-
for (const alias of targetAliases) {
|
|
65
|
-
const entry = CONNECTOR_REGISTRY[alias];
|
|
66
|
-
if (!entry) {
|
|
67
|
-
console.error(`Unknown connector: "${alias}". Known: ${Object.keys(CONNECTOR_REGISTRY).join(', ')}`);
|
|
68
|
-
process.exit(1);
|
|
69
|
-
}
|
|
70
|
-
const config = entry.Connector.GetActionGeneratorConfig();
|
|
71
|
-
if (!config) {
|
|
72
|
-
console.warn(`WARNING: Connector "${alias}" returned no action config — skipping`);
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
const result = generator.Generate(config);
|
|
76
|
-
// Merge with existing file to preserve primaryKey/sync from prior mj-sync pulls
|
|
77
|
-
const actionsPath = path.join(actionsDir, entry.FileName);
|
|
78
|
-
let existingActions = [];
|
|
79
|
-
if (fs.existsSync(actionsPath)) {
|
|
80
|
-
existingActions = JSON.parse(fs.readFileSync(actionsPath, 'utf-8'));
|
|
81
|
-
}
|
|
82
|
-
const mergedActions = mergeActionRecords(existingActions, result.ActionRecords);
|
|
83
|
-
fs.writeFileSync(actionsPath, JSON.stringify(mergedActions, null, 2) + '\n');
|
|
84
|
-
console.log(`${config.IntegrationName}: generated ${result.ActionRecords.length} actions → ${entry.FileName}`);
|
|
85
|
-
totalActions += result.ActionRecords.length;
|
|
86
|
-
// Collect category records
|
|
87
|
-
if (result.CategoryRecords.length > 0) {
|
|
88
|
-
allCategoryRecords.push(...result.CategoryRecords);
|
|
89
|
-
console.log(`${config.IntegrationName}: generated ${result.CategoryRecords.length} category record(s)`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Write shared .mj-sync.json for actions (only if we generated something)
|
|
93
|
-
if (totalActions > 0) {
|
|
94
|
-
const syncConfig = new ActionMetadataGenerator().Generate({
|
|
95
|
-
IntegrationName: '_', CategoryName: '_', Objects: [],
|
|
96
|
-
}).SyncConfig;
|
|
97
|
-
const syncPath = path.join(actionsDir, '.mj-sync.json');
|
|
98
|
-
fs.writeFileSync(syncPath, JSON.stringify(syncConfig, null, 2) + '\n');
|
|
99
|
-
}
|
|
100
|
-
// Write integration category records (merge with existing file if present)
|
|
101
|
-
if (allCategoryRecords.length > 0) {
|
|
102
|
-
const categoryFile = path.join(categoriesDir, '.integration-categories.json');
|
|
103
|
-
let existingRecords = [];
|
|
104
|
-
if (fs.existsSync(categoryFile)) {
|
|
105
|
-
existingRecords = JSON.parse(fs.readFileSync(categoryFile, 'utf-8'));
|
|
106
|
-
}
|
|
107
|
-
// Merge: preserve existing records with primaryKeys, replace/add by category Name
|
|
108
|
-
const merged = mergeCategories(existingRecords, allCategoryRecords);
|
|
109
|
-
fs.writeFileSync(categoryFile, JSON.stringify(merged, null, 2) + '\n');
|
|
110
|
-
console.log(`\nWrote ${merged.length} category record(s) → .integration-categories.json`);
|
|
111
|
-
}
|
|
112
|
-
console.log(`\nTotal: ${totalActions} actions generated`);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Merges newly generated action records with existing ones, preserving primaryKey/sync
|
|
116
|
-
* blocks that were populated by a prior `mj sync pull`. Matches actions by Name.
|
|
117
|
-
* Also preserves primaryKey/sync on nested relatedEntities (e.g., Action Params).
|
|
118
|
-
*/
|
|
119
|
-
function mergeActionRecords(existing, incoming) {
|
|
120
|
-
const existingByName = buildNameIndex(existing);
|
|
121
|
-
return incoming.map(newRec => {
|
|
122
|
-
const name = newRec.fields['Name'];
|
|
123
|
-
if (!name)
|
|
124
|
-
return newRec;
|
|
125
|
-
const oldRec = existingByName.get(name.toLowerCase());
|
|
126
|
-
if (!oldRec)
|
|
127
|
-
return newRec;
|
|
128
|
-
const merged = { ...newRec };
|
|
129
|
-
if (oldRec.primaryKey)
|
|
130
|
-
merged.primaryKey = oldRec.primaryKey;
|
|
131
|
-
if (oldRec.sync)
|
|
132
|
-
merged.sync = oldRec.sync;
|
|
133
|
-
// Merge relatedEntities (preserving primaryKey/sync on child records like Action Params)
|
|
134
|
-
if (newRec.relatedEntities && oldRec.relatedEntities) {
|
|
135
|
-
const mergedRelated = {};
|
|
136
|
-
for (const [entityName, newChildren] of Object.entries(newRec.relatedEntities)) {
|
|
137
|
-
const oldChildren = oldRec.relatedEntities[entityName];
|
|
138
|
-
if (!oldChildren) {
|
|
139
|
-
mergedRelated[entityName] = newChildren;
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
mergedRelated[entityName] = mergeChildRecords(oldChildren, newChildren);
|
|
143
|
-
}
|
|
144
|
-
merged.relatedEntities = mergedRelated;
|
|
145
|
-
}
|
|
146
|
-
return merged;
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
/** Merges child records (e.g., Action Params) by matching on Name field. */
|
|
150
|
-
function mergeChildRecords(existing, incoming) {
|
|
151
|
-
const existingByName = buildNameIndex(existing);
|
|
152
|
-
return incoming.map(newRec => {
|
|
153
|
-
const name = newRec.fields['Name'];
|
|
154
|
-
if (!name)
|
|
155
|
-
return newRec;
|
|
156
|
-
const oldRec = existingByName.get(name.toLowerCase());
|
|
157
|
-
if (!oldRec)
|
|
158
|
-
return newRec;
|
|
159
|
-
const merged = { ...newRec };
|
|
160
|
-
if (oldRec.primaryKey)
|
|
161
|
-
merged.primaryKey = oldRec.primaryKey;
|
|
162
|
-
if (oldRec.sync)
|
|
163
|
-
merged.sync = oldRec.sync;
|
|
164
|
-
return merged;
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
/** Merges new category records into existing ones, preserving primaryKey/sync for matches by Name. */
|
|
168
|
-
function mergeCategories(existing, incoming) {
|
|
169
|
-
const byName = buildNameIndex(existing);
|
|
170
|
-
for (const rec of incoming) {
|
|
171
|
-
const name = rec.fields['Name'];
|
|
172
|
-
if (!name)
|
|
173
|
-
continue;
|
|
174
|
-
const key = name.toLowerCase();
|
|
175
|
-
const old = byName.get(key);
|
|
176
|
-
if (old) {
|
|
177
|
-
const merged = { fields: rec.fields };
|
|
178
|
-
if (old.primaryKey)
|
|
179
|
-
merged.primaryKey = old.primaryKey;
|
|
180
|
-
if (old.sync)
|
|
181
|
-
merged.sync = old.sync;
|
|
182
|
-
byName.set(key, merged);
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
byName.set(key, rec);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return Array.from(byName.values());
|
|
189
|
-
}
|
|
190
|
-
/** Builds a Map from lowercase Name → record for quick lookup. */
|
|
191
|
-
function buildNameIndex(records) {
|
|
192
|
-
const index = new Map();
|
|
193
|
-
for (const rec of records) {
|
|
194
|
-
const name = rec.fields['Name'];
|
|
195
|
-
if (name)
|
|
196
|
-
index.set(name.toLowerCase(), rec);
|
|
197
|
-
}
|
|
198
|
-
return index;
|
|
199
|
-
}
|
|
200
|
-
main();
|
|
201
|
-
//# sourceMappingURL=generate-integration-actions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-integration-actions.js","sourceRoot":"","sources":["../src/generate-integration-actions.ts"],"names":[],"mappings":"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"}
|