@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.
@@ -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
- private get effectiveEnrichBatchSize();
83
+ protected get effectiveEnrichBatchSize(): number;
42
84
  private get effectiveJsonTimeoutMs();
43
85
  private get effectiveEnrichTimeoutMs();
44
- /** Cache of the filtered member list pending enrichment, shared across batch calls */
45
- private memberFetchCache;
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
- protected MakeHTTPRequest(auth: RESTAuthContext, url: string, method: string, headers: Record<string, string>, _body?: unknown): Promise<RESTResponse>;
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":"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"}
1
+ {"version":3,"file":"YourMembershipConnector.d.ts","sourceRoot":"","sources":["../src/YourMembershipConnector.ts"],"names":[],"mappings":"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"}