@memberjunction/integration-connectors 5.27.0 → 5.28.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/HubSpotConnector.d.ts +158 -7
- package/dist/HubSpotConnector.d.ts.map +1 -1
- package/dist/HubSpotConnector.js +1715 -116
- package/dist/HubSpotConnector.js.map +1 -1
- package/dist/YourMembershipConnector.d.ts +160 -5
- package/dist/YourMembershipConnector.d.ts.map +1 -1
- package/dist/YourMembershipConnector.js +3220 -102
- package/dist/YourMembershipConnector.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type UserInfo } from '@memberjunction/core';
|
|
2
2
|
import type { MJCompanyIntegrationEntity } from '@memberjunction/core-entities';
|
|
3
|
-
import { BaseRESTIntegrationConnector, type RESTAuthContext, type RESTResponse, type PaginationState, type PaginationType, type ConnectionTestResult, type FetchContext, type FetchBatchResult, type DefaultFieldMapping, type DefaultIntegrationConfig, type IntegrationObjectInfo } from '@memberjunction/integration-engine';
|
|
3
|
+
import { BaseRESTIntegrationConnector, type RESTAuthContext, type RESTResponse, type PaginationState, type PaginationType, type ConnectionTestResult, type FetchContext, type FetchBatchResult, type DefaultFieldMapping, type DefaultIntegrationConfig, type IntegrationObjectInfo, type ExternalObjectSchema, type ExternalFieldSchema, type CRUDResult, type CreateRecordContext, type UpdateRecordContext, type DeleteRecordContext, type SourceSchemaInfo } from '@memberjunction/integration-engine';
|
|
4
4
|
import type { MJIntegrationObjectEntity } from '@memberjunction/core-entities';
|
|
5
5
|
/** Connection configuration parsed from CompanyIntegration.Configuration JSON */
|
|
6
6
|
export interface YMConnectionConfig {
|
|
@@ -29,24 +29,88 @@ export declare class YourMembershipConnector extends BaseRESTIntegrationConnecto
|
|
|
29
29
|
/** Timestamp of the last API request, used for throttling */
|
|
30
30
|
private lastRequestTime;
|
|
31
31
|
get IntegrationName(): string;
|
|
32
|
+
get SupportsCreate(): boolean;
|
|
33
|
+
get SupportsUpdate(): boolean;
|
|
34
|
+
get SupportsDelete(): boolean;
|
|
32
35
|
GetIntegrationObjects(): IntegrationObjectInfo[];
|
|
33
36
|
GetActionGeneratorConfig(): import("@memberjunction/integration-engine").ActionGeneratorConfig;
|
|
37
|
+
DiscoverObjects(_companyIntegration: MJCompanyIntegrationEntity, _contextUser: UserInfo): Promise<ExternalObjectSchema[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Discovers fields by fetching one record from the live YM API endpoint and
|
|
40
|
+
* inferring field names/types from the response. Static metadata from
|
|
41
|
+
* YM_ACTION_OBJECTS is merged in to preserve PK, FK, description, and
|
|
42
|
+
* IsRequired/IsReadOnly annotations.
|
|
43
|
+
*
|
|
44
|
+
* Falls back to the static array if the live API call fails.
|
|
45
|
+
*/
|
|
46
|
+
DiscoverFields(companyIntegration: MJCompanyIntegrationEntity, objectName: string, contextUser: UserInfo): Promise<ExternalFieldSchema[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Fetches one record from the YM API for the given object and infers field schemas.
|
|
49
|
+
*/
|
|
50
|
+
private DiscoverFieldsFromLiveAPI;
|
|
51
|
+
/**
|
|
52
|
+
* Extracts a single sample record from the YM API response body.
|
|
53
|
+
*/
|
|
54
|
+
private ExtractSampleRecord;
|
|
55
|
+
/**
|
|
56
|
+
* Infers ExternalFieldSchema[] from a sample record's keys and values.
|
|
57
|
+
*/
|
|
58
|
+
private InferFieldsFromRecord;
|
|
59
|
+
/**
|
|
60
|
+
* Infer a MJ-compatible type string from a JavaScript value.
|
|
61
|
+
*/
|
|
62
|
+
private InferFieldType;
|
|
63
|
+
/**
|
|
64
|
+
* Merges live-discovered fields with static metadata from YM_ACTION_OBJECTS.
|
|
65
|
+
* Live fields are the base; static metadata overlays PK, FK, Description,
|
|
66
|
+
* IsRequired, and IsReadOnly where a matching field name exists.
|
|
67
|
+
*/
|
|
68
|
+
private MergeFieldsWithStaticMetadata;
|
|
69
|
+
/**
|
|
70
|
+
* Override IntrospectSchema to use live field discovery (with static fallback).
|
|
71
|
+
* Ensures DDL generation always reflects the actual API response shape.
|
|
72
|
+
*/
|
|
73
|
+
IntrospectSchema(companyIntegration: MJCompanyIntegrationEntity, contextUser: UserInfo): Promise<SourceSchemaInfo>;
|
|
34
74
|
/** Resolved config (populated after first Authenticate call) */
|
|
35
75
|
private _config;
|
|
36
76
|
/** Current adaptive request interval — increases on 429, recovers toward resolved MIN */
|
|
37
77
|
private currentRequestIntervalMs;
|
|
78
|
+
/** Successful requests since the last 429 — used to gate interval recovery */
|
|
79
|
+
private _successesSince429;
|
|
38
80
|
private get effectiveMaxRetries();
|
|
39
81
|
private get effectiveRequestTimeoutMs();
|
|
40
82
|
private get effectiveMinRequestIntervalMs();
|
|
41
|
-
|
|
83
|
+
protected get effectiveEnrichBatchSize(): number;
|
|
42
84
|
private get effectiveJsonTimeoutMs();
|
|
43
85
|
private get effectiveEnrichTimeoutMs();
|
|
44
|
-
/**
|
|
45
|
-
private
|
|
86
|
+
/** Cached parent IDs for parent-scoped fetches (keyed by objectName) */
|
|
87
|
+
private parentIdCache;
|
|
88
|
+
/**
|
|
89
|
+
* Holds the current watermark value for the duration of a FetchChanges call.
|
|
90
|
+
* Set at the top of FetchChanges so that AppendDefaultQueryParams can inject
|
|
91
|
+
* the server-side date filter param for endpoints listed in YM_SERVER_FILTER_PARAMS.
|
|
92
|
+
*/
|
|
93
|
+
private _currentWatermark;
|
|
46
94
|
protected Authenticate(companyIntegration: MJCompanyIntegrationEntity, contextUser: UserInfo): Promise<RESTAuthContext>;
|
|
47
95
|
protected BuildHeaders(auth: RESTAuthContext): Record<string, string>;
|
|
48
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Extends the base class implementation by injecting an incremental-sync date
|
|
98
|
+
* filter query parameter for endpoints that support server-side filtering.
|
|
99
|
+
*
|
|
100
|
+
* When a watermark is active (`_currentWatermark` is set by `FetchChanges`) and
|
|
101
|
+
* the current object appears in `YM_SERVER_FILTER_PARAMS`, the appropriate
|
|
102
|
+
* date param (e.g. `LastModifiedDate`, `DateFrom`, `StartDate`) is appended.
|
|
103
|
+
* The base class then appends any additional DefaultQueryParams from metadata.
|
|
104
|
+
*/
|
|
105
|
+
protected AppendDefaultQueryParams(url: string, obj: MJIntegrationObjectEntity): string;
|
|
106
|
+
protected MakeHTTPRequest(auth: RESTAuthContext, url: string, method: string, headers: Record<string, string>, body?: unknown): Promise<RESTResponse>;
|
|
49
107
|
protected NormalizeResponse(rawBody: unknown, responseDataKey: string | null): Record<string, unknown>[];
|
|
108
|
+
/**
|
|
109
|
+
* Converts empty strings and DateTime.MinValue (0001-01-01) in date-like fields to null.
|
|
110
|
+
* YM API returns "" and "0001-01-01T00:00:00" instead of null for empty date fields,
|
|
111
|
+
* which causes DATETIMEOFFSET columns to reject the value.
|
|
112
|
+
*/
|
|
113
|
+
private SanitizeDateFields;
|
|
50
114
|
protected ExtractPaginationInfo(rawBody: unknown, paginationType: PaginationType, currentPage: number, currentOffset: number, pageSize: number): PaginationState;
|
|
51
115
|
protected GetBaseURL(companyIntegration: MJCompanyIntegrationEntity, auth: RESTAuthContext): string;
|
|
52
116
|
/**
|
|
@@ -79,12 +143,45 @@ export declare class YourMembershipConnector extends BaseRESTIntegrationConnecto
|
|
|
79
143
|
* updated once all records have been written to the database.
|
|
80
144
|
*/
|
|
81
145
|
private FetchMemberBatch;
|
|
146
|
+
/**
|
|
147
|
+
* Fetches records from a flat (non-enriched) endpoint and applies client-side
|
|
148
|
+
* watermark filtering against a known date field.
|
|
149
|
+
*
|
|
150
|
+
* Used for endpoints that include a usable date field (e.g. `DateCreated`,
|
|
151
|
+
* `LastUpdated`) but have no server-side date filter query parameter.
|
|
152
|
+
* The base class pagination loop is used to collect all records, then
|
|
153
|
+
* `FilterByWatermark` narrows to only changed ones.
|
|
154
|
+
*
|
|
155
|
+
* Because these endpoints are typically small-to-medium in size, fetching
|
|
156
|
+
* all and filtering locally is acceptable.
|
|
157
|
+
*/
|
|
158
|
+
/**
|
|
159
|
+
* PeopleIDs endpoint returns a flat array of ID numbers under "IDList",
|
|
160
|
+
* not objects with named fields. This wraps each ID as {ID: value} so
|
|
161
|
+
* the engine can map it to the PeopleIDs table's ID column.
|
|
162
|
+
*/
|
|
163
|
+
private FetchPeopleIDs;
|
|
164
|
+
private FetchWithClientWatermark;
|
|
82
165
|
/**
|
|
83
166
|
* Filters records by comparing a date field against a watermark timestamp.
|
|
84
167
|
* Returns only records where the date field is newer than the watermark,
|
|
85
168
|
* plus the latest date value seen (to use as the next watermark).
|
|
86
169
|
*/
|
|
87
170
|
private FilterByWatermark;
|
|
171
|
+
/**
|
|
172
|
+
* Creates a new record in YourMembership via POST /Ams/{ClientID}/{ObjectName}.
|
|
173
|
+
*/
|
|
174
|
+
CreateRecord(ctx: CreateRecordContext): Promise<CRUDResult>;
|
|
175
|
+
/**
|
|
176
|
+
* Updates an existing record in YourMembership via PUT /Ams/{ClientID}/{ObjectName}/{Id}.
|
|
177
|
+
*/
|
|
178
|
+
UpdateRecord(ctx: UpdateRecordContext): Promise<CRUDResult>;
|
|
179
|
+
/**
|
|
180
|
+
* Deletes a record in YourMembership via DELETE /Ams/{ClientID}/{ObjectName}/{Id}.
|
|
181
|
+
*/
|
|
182
|
+
DeleteRecord(ctx: DeleteRecordContext): Promise<CRUDResult>;
|
|
183
|
+
/** Builds a standardized error CRUDResult from a failed YM response. */
|
|
184
|
+
private BuildYMCRUDErrorResult;
|
|
88
185
|
/** Tests connectivity by authenticating and fetching ClientConfig. */
|
|
89
186
|
TestConnection(companyIntegration: MJCompanyIntegrationEntity, contextUser: UserInfo): Promise<ConnectionTestResult>;
|
|
90
187
|
/** Returns suggested default configuration for YM integration setup. */
|
|
@@ -157,6 +254,49 @@ export declare class YourMembershipConnector extends BaseRESTIntegrationConnecto
|
|
|
157
254
|
private Sleep;
|
|
158
255
|
/** Checks for YM API-level errors in the response envelope. */
|
|
159
256
|
private CheckResponseError;
|
|
257
|
+
/**
|
|
258
|
+
* Returns the /Ymc/ base URL for Career Center endpoints.
|
|
259
|
+
*/
|
|
260
|
+
private GetYmcBaseURL;
|
|
261
|
+
/**
|
|
262
|
+
* Fetches all event IDs by paginating the EventIDs endpoint.
|
|
263
|
+
* Returns an array of event ID strings for use in parent-scoped fetches.
|
|
264
|
+
*/
|
|
265
|
+
private FetchAllEventIDs;
|
|
266
|
+
/**
|
|
267
|
+
* Fetches all member/people IDs from the PeopleIDs endpoint.
|
|
268
|
+
*/
|
|
269
|
+
private FetchAllMemberIDs;
|
|
270
|
+
/**
|
|
271
|
+
* Fetches all group IDs by calling the Groups endpoint and flattening
|
|
272
|
+
* the nested GroupTypeList → Groups[].Id structure.
|
|
273
|
+
*/
|
|
274
|
+
private FetchAllGroupIDs;
|
|
275
|
+
/**
|
|
276
|
+
* Fetches parent IDs from a secondary list endpoint for 'Custom' parent-scoped objects.
|
|
277
|
+
* Calls GET /Ams/{ClientID}/{sourcePath}, extracts the array at responseKey,
|
|
278
|
+
* and returns the idField value from each item as a string.
|
|
279
|
+
*
|
|
280
|
+
* Results are NOT cached here — callers manage the cache via parentIdCache.
|
|
281
|
+
*/
|
|
282
|
+
private FetchCustomParentIDs;
|
|
283
|
+
/**
|
|
284
|
+
* Fetches all records for a parent-scoped endpoint by:
|
|
285
|
+
* 1. Enumerating all parent IDs (cached per sync run)
|
|
286
|
+
* 2. Fetching child records for each parent ID
|
|
287
|
+
* 3. Returning all records as a single batch with HasMore=false
|
|
288
|
+
*
|
|
289
|
+
* Parent IDs are cached in parentIdCache so subsequent calls for the same
|
|
290
|
+
* parent type within a sync run don't re-fetch the ID list.
|
|
291
|
+
*/
|
|
292
|
+
private FetchParentScopedRecords;
|
|
293
|
+
/**
|
|
294
|
+
* Flattens YM custom field DTOs into top-level fields.
|
|
295
|
+
* Handles two shapes from the research:
|
|
296
|
+
* Simple: [{ Code: 'field_code', Response: 'value' }]
|
|
297
|
+
* Complex: [{ ExportLabel: 'label', CustomFieldValue: { FieldCode: 'code', Values: [{ Value: 'v' }] } }]
|
|
298
|
+
*/
|
|
299
|
+
private FlattenYMRecord;
|
|
160
300
|
/** Filters out YM API metadata keys that shouldn't be stored as field data. */
|
|
161
301
|
private FilterMetadataKeys;
|
|
162
302
|
/**
|
|
@@ -164,5 +304,20 @@ export declare class YourMembershipConnector extends BaseRESTIntegrationConnecto
|
|
|
164
304
|
* Used by ExtractPaginationInfo to determine if more pages exist.
|
|
165
305
|
*/
|
|
166
306
|
private EstimateRecordCount;
|
|
307
|
+
/**
|
|
308
|
+
* General-purpose PK safety net: filters out records where a declared PK field is null/missing
|
|
309
|
+
* and cannot be resolved via case-insensitive field name matching.
|
|
310
|
+
*
|
|
311
|
+
* Strategy per PK field:
|
|
312
|
+
* 1. Field is already present and non-null → keep record as-is.
|
|
313
|
+
* 2. Case-insensitive match finds the field under a different casing → copy the value.
|
|
314
|
+
* 3. No match at all → DROP the record and log a warning.
|
|
315
|
+
*
|
|
316
|
+
* Dropping is intentional: inserting with a garbage or positional PK creates phantom rows
|
|
317
|
+
* that can never be correctly updated on subsequent incremental syncs.
|
|
318
|
+
*
|
|
319
|
+
* Returns a new array with only the records that have valid PKs.
|
|
320
|
+
*/
|
|
321
|
+
private EnsurePrimaryKeys;
|
|
167
322
|
}
|
|
168
323
|
//# sourceMappingURL=YourMembershipConnector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YourMembershipConnector.d.ts","sourceRoot":"","sources":["../src/YourMembershipConnector.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,0BAA0B,EAAsB,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAEH,4BAA4B,EAC5B,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"YourMembershipConnector.d.ts","sourceRoot":"","sources":["../src/YourMembershipConnector.ts"],"names":[],"mappings":"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"}
|