@memberjunction/integration-actions 5.37.0 → 5.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export * from './RunSyncAction.js';
2
- export * from './BaseIntegrationPointAction.js';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,2 @@
1
1
  export * from './RunSyncAction.js';
2
- export * from './BaseIntegrationPointAction.js';
3
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/integration-actions",
3
3
  "type": "module",
4
- "version": "5.37.0",
4
+ "version": "5.39.0",
5
5
  "description": "MemberJunction Integration Engine Actions - MJ Actions for triggering and managing integration syncs",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -14,12 +14,12 @@
14
14
  "test:watch": "vitest"
15
15
  },
16
16
  "dependencies": {
17
- "@memberjunction/actions": "5.37.0",
18
- "@memberjunction/actions-base": "5.37.0",
19
- "@memberjunction/core": "5.37.0",
20
- "@memberjunction/core-entities": "5.37.0",
21
- "@memberjunction/global": "5.37.0",
22
- "@memberjunction/integration-engine": "5.37.0"
17
+ "@memberjunction/actions": "5.39.0",
18
+ "@memberjunction/actions-base": "5.39.0",
19
+ "@memberjunction/core": "5.39.0",
20
+ "@memberjunction/core-entities": "5.39.0",
21
+ "@memberjunction/global": "5.39.0",
22
+ "@memberjunction/integration-engine": "5.39.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "typescript": "^5.9.3",
@@ -1,39 +0,0 @@
1
- import { BaseAction } from '@memberjunction/actions';
2
- import { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
3
- /**
4
- * Supported write-back verbs for point operations on external connector objects.
5
- */
6
- export type IntegrationPointVerb = 'Create' | 'Update' | 'Delete' | 'Search';
7
- /**
8
- * Base class for auto-generated integration point actions.
9
- *
10
- * Provides a super-generic execution layer that delegates to the connector's
11
- * optional write-back methods (CreateRecord, UpdateRecord, DeleteRecord, SearchRecords).
12
- * Each verb × connector × object combination is exposed as a thin metadata shell
13
- * that extends this base, with no duplicated code.
14
- *
15
- * Parameters (Input):
16
- * - CompanyIntegrationID (required): ID of the CompanyIntegration to operate on
17
- * - ObjectType (required): External object name (e.g., "contacts", "members")
18
- * - Verb (required): 'Create' | 'Update' | 'Delete' | 'Search'
19
- * - ExternalID (required for Update/Delete): External system record ID
20
- * - Data (required for Create/Update): JSON string of field values
21
- * - Filter (optional for Search): JSON string of search criteria
22
- *
23
- * Parameters (Output):
24
- * - Result: JSON string of the returned record(s) from the external system
25
- */
26
- export declare abstract class BaseIntegrationPointAction extends BaseAction {
27
- protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
28
- private runCreate;
29
- private runUpdate;
30
- private runDelete;
31
- private runSearch;
32
- private loadEntities;
33
- private getStringParam;
34
- private parseJsonParam;
35
- private setOutputParam;
36
- private missingParam;
37
- private verbNotSupported;
38
- }
39
- //# sourceMappingURL=BaseIntegrationPointAction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseIntegrationPointAction.d.ts","sourceRoot":"","sources":["../src/BaseIntegrationPointAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAe,MAAM,8BAA8B,CAAC;AAUhG;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAAsB,0BAA2B,SAAQ,UAAU;cAE/C,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;YA2CzE,SAAS;YAqBT,SAAS;YAwBT,SAAS;YA0BT,SAAS;YA+BT,YAAY;IAgC1B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;CAG3B"}
@@ -1,205 +0,0 @@
1
- import { LogError, RunView } from '@memberjunction/core';
2
- import { BaseAction } from '@memberjunction/actions';
3
- import { ActionParam } from '@memberjunction/actions-base';
4
- import { ConnectorFactory, } from '@memberjunction/integration-engine';
5
- /**
6
- * Base class for auto-generated integration point actions.
7
- *
8
- * Provides a super-generic execution layer that delegates to the connector's
9
- * optional write-back methods (CreateRecord, UpdateRecord, DeleteRecord, SearchRecords).
10
- * Each verb × connector × object combination is exposed as a thin metadata shell
11
- * that extends this base, with no duplicated code.
12
- *
13
- * Parameters (Input):
14
- * - CompanyIntegrationID (required): ID of the CompanyIntegration to operate on
15
- * - ObjectType (required): External object name (e.g., "contacts", "members")
16
- * - Verb (required): 'Create' | 'Update' | 'Delete' | 'Search'
17
- * - ExternalID (required for Update/Delete): External system record ID
18
- * - Data (required for Create/Update): JSON string of field values
19
- * - Filter (optional for Search): JSON string of search criteria
20
- *
21
- * Parameters (Output):
22
- * - Result: JSON string of the returned record(s) from the external system
23
- */
24
- export class BaseIntegrationPointAction extends BaseAction {
25
- async InternalRunAction(params) {
26
- try {
27
- const companyIntegrationID = this.getStringParam(params, 'CompanyIntegrationID');
28
- if (!companyIntegrationID)
29
- return this.missingParam('CompanyIntegrationID');
30
- const objectType = this.getStringParam(params, 'ObjectType');
31
- if (!objectType)
32
- return this.missingParam('ObjectType');
33
- const verb = this.getStringParam(params, 'Verb');
34
- if (!verb || !['Create', 'Update', 'Delete', 'Search'].includes(verb)) {
35
- return {
36
- Success: false,
37
- ResultCode: 'INVALID_PARAMETER',
38
- Message: "Parameter 'Verb' must be one of: Create, Update, Delete, Search"
39
- };
40
- }
41
- const { companyIntegration, integration } = await this.loadEntities(companyIntegrationID);
42
- if (!companyIntegration || !integration) {
43
- return {
44
- Success: false,
45
- ResultCode: 'NOT_FOUND',
46
- Message: `CompanyIntegration '${companyIntegrationID}' or its Integration record not found`
47
- };
48
- }
49
- const connector = ConnectorFactory.Resolve(integration);
50
- switch (verb) {
51
- case 'Create': return await this.runCreate(connector, objectType, companyIntegration, params);
52
- case 'Update': return await this.runUpdate(connector, objectType, companyIntegration, params);
53
- case 'Delete': return await this.runDelete(connector, objectType, companyIntegration, params);
54
- case 'Search': return await this.runSearch(connector, objectType, companyIntegration, params);
55
- }
56
- }
57
- catch (error) {
58
- const message = error instanceof Error ? error.message : String(error);
59
- LogError(`[BaseIntegrationPointAction] Unexpected error: ${message}`);
60
- return { Success: false, ResultCode: 'UNEXPECTED_ERROR', Message: message };
61
- }
62
- }
63
- // ── Verb handlers ──────────────────────────────────────────────────────
64
- async runCreate(connector, objectType, companyIntegration, params) {
65
- if (!connector.SupportsCreate)
66
- return this.verbNotSupported('Create');
67
- const data = this.parseJsonParam(params, 'Data');
68
- if (!data)
69
- return this.missingParam('Data');
70
- const ctx = {
71
- ObjectName: objectType,
72
- Attributes: data,
73
- CompanyIntegration: companyIntegration,
74
- ContextUser: params.ContextUser,
75
- };
76
- const result = await connector.CreateRecord(ctx);
77
- this.setOutputParam(params, 'Result', JSON.stringify(result));
78
- return { Success: result.Success, ResultCode: result.Success ? 'SUCCESS' : 'FAILED', Message: result.ErrorMessage ?? 'Record created', Params: params.Params };
79
- }
80
- async runUpdate(connector, objectType, companyIntegration, params) {
81
- if (!connector.SupportsUpdate)
82
- return this.verbNotSupported('Update');
83
- const externalId = this.getStringParam(params, 'ExternalID');
84
- if (!externalId)
85
- return this.missingParam('ExternalID');
86
- const data = this.parseJsonParam(params, 'Data');
87
- if (!data)
88
- return this.missingParam('Data');
89
- const ctx = {
90
- ObjectName: objectType,
91
- ExternalID: externalId,
92
- Attributes: data,
93
- CompanyIntegration: companyIntegration,
94
- ContextUser: params.ContextUser,
95
- };
96
- const result = await connector.UpdateRecord(ctx);
97
- this.setOutputParam(params, 'Result', JSON.stringify(result));
98
- return { Success: result.Success, ResultCode: result.Success ? 'SUCCESS' : 'FAILED', Message: result.ErrorMessage ?? 'Record updated', Params: params.Params };
99
- }
100
- async runDelete(connector, objectType, companyIntegration, params) {
101
- if (!connector.SupportsDelete)
102
- return this.verbNotSupported('Delete');
103
- const externalId = this.getStringParam(params, 'ExternalID');
104
- if (!externalId)
105
- return this.missingParam('ExternalID');
106
- const ctx = {
107
- ObjectName: objectType,
108
- ExternalID: externalId,
109
- CompanyIntegration: companyIntegration,
110
- ContextUser: params.ContextUser,
111
- };
112
- const result = await connector.DeleteRecord(ctx);
113
- this.setOutputParam(params, 'Result', String(result.Success));
114
- return {
115
- Success: result.Success,
116
- ResultCode: result.Success ? 'SUCCESS' : 'FAILED',
117
- Message: result.ErrorMessage ?? (result.Success ? 'Record deleted' : 'Delete failed'),
118
- Params: params.Params
119
- };
120
- }
121
- async runSearch(connector, objectType, companyIntegration, params) {
122
- if (!connector.SupportsSearch)
123
- return this.verbNotSupported('Search');
124
- const rawFilter = this.parseJsonParam(params, 'Filter') ?? {};
125
- // Convert all filter values to strings for SearchContext.Filters
126
- const filters = Object.fromEntries(Object.entries(rawFilter).map(([k, v]) => [k, String(v)]));
127
- const ctx = {
128
- ObjectName: objectType,
129
- Filters: filters,
130
- CompanyIntegration: companyIntegration,
131
- ContextUser: params.ContextUser,
132
- };
133
- const result = await connector.SearchRecords(ctx);
134
- this.setOutputParam(params, 'Result', JSON.stringify(result.Records));
135
- return {
136
- Success: true,
137
- ResultCode: 'SUCCESS',
138
- Message: `Found ${result.Records.length} record(s)`,
139
- Params: params.Params
140
- };
141
- }
142
- // ── Data loaders ───────────────────────────────────────────────────────
143
- async loadEntities(companyIntegrationID) {
144
- const rv = new RunView();
145
- const ciResult = await rv.RunView({
146
- EntityName: 'Company Integrations',
147
- ExtraFilter: `ID='${companyIntegrationID}'`,
148
- MaxRows: 1,
149
- ResultType: 'entity_object'
150
- });
151
- if (!ciResult.Success || ciResult.Results.length === 0) {
152
- return { companyIntegration: null, integration: null };
153
- }
154
- const companyIntegration = ciResult.Results[0];
155
- const integrationID = companyIntegration.IntegrationID;
156
- const intResult = await rv.RunView({
157
- EntityName: 'Integrations',
158
- ExtraFilter: `ID='${integrationID}'`,
159
- MaxRows: 1,
160
- ResultType: 'entity_object'
161
- });
162
- const integration = intResult.Success && intResult.Results.length > 0 ? intResult.Results[0] : null;
163
- return { companyIntegration, integration };
164
- }
165
- // ── Private helpers ────────────────────────────────────────────────────
166
- getStringParam(params, name) {
167
- const nameLower = name.toLowerCase();
168
- const param = params.Params?.find(p => p.Name.trim().toLowerCase() === nameLower);
169
- if (!param || param.Value == null)
170
- return undefined;
171
- const value = String(param.Value).trim();
172
- return value.length > 0 ? value : undefined;
173
- }
174
- parseJsonParam(params, name) {
175
- const raw = this.getStringParam(params, name);
176
- if (!raw)
177
- return null;
178
- try {
179
- return JSON.parse(raw);
180
- }
181
- catch {
182
- return null;
183
- }
184
- }
185
- setOutputParam(params, name, value) {
186
- const existing = params.Params.find(p => p.Name === name && p.Type === 'Output');
187
- if (existing) {
188
- existing.Value = value;
189
- }
190
- else {
191
- const p = new ActionParam();
192
- p.Name = name;
193
- p.Type = 'Output';
194
- p.Value = value;
195
- params.Params.push(p);
196
- }
197
- }
198
- missingParam(name) {
199
- return { Success: false, ResultCode: 'MISSING_PARAMETER', Message: `Required parameter '${name}' is missing` };
200
- }
201
- verbNotSupported(verb) {
202
- return { Success: false, ResultCode: 'VERB_NOT_SUPPORTED', Message: `This connector does not support the '${verb}' operation` };
203
- }
204
- }
205
- //# sourceMappingURL=BaseIntegrationPointAction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseIntegrationPointAction.js","sourceRoot":"","sources":["../src/BaseIntegrationPointAction.ts"],"names":[],"mappings":"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"}