@memberjunction/core-actions 5.31.0 → 5.33.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.
@@ -14,9 +14,11 @@ import { BaseAction } from '@memberjunction/actions';
14
14
  * - **BatchSize** (default 10) — Number of records to geocode **concurrently**
15
15
  * in each parallel batch. Controls API rate pressure. Google Geocoding API
16
16
  * allows 50 QPS, so 10 is conservative and leaves headroom.
17
- * - **MaxTotalRecords** (default unlimited) — Optional hard cap on the total
18
- * number of records processed in a single run. When null/0, processes all
19
- * pending records until exhausted.
17
+ * - **MaxTotalRecords** (default 50,000) — Safety cap on the total number of
18
+ * records processed in a single run. Prevents unbounded memory growth in
19
+ * extreme cases. Override via scheduled job parameters. Logs a warning when
20
+ * the limit is reached so operators know remaining records exist for the
21
+ * next run.
20
22
  * - **MaxRetries** (default 5) — Maximum retry count for failed geocoding
21
23
  * attempts before a record is considered permanently failed.
22
24
  *
@@ -32,6 +34,10 @@ import { BaseAction } from '@memberjunction/actions';
32
34
  export declare class ScheduledGeocodingAction extends BaseAction {
33
35
  private static readonly DEFAULT_MAX_RETRIES;
34
36
  private static readonly DEFAULT_BATCH_SIZE;
37
+ /** Safety default: cap total records per run to prevent unbounded memory growth in extreme cases. */
38
+ private static readonly DEFAULT_MAX_TOTAL;
39
+ /** Page size for RunView pagination — controls how many BaseEntity objects exist simultaneously. */
40
+ private static readonly PAGE_SIZE;
35
41
  protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
36
42
  /**
37
43
  * Find records in geo-enabled entities that have no RecordGeoCode row
@@ -40,21 +46,27 @@ export declare class ScheduledGeocodingAction extends BaseAction {
40
46
  */
41
47
  private processMissingRecords;
42
48
  /**
43
- * Process all missing RecordGeoCode rows for a single entity.
44
- * Loads all entity records with non-null geo fields, filters out those
45
- * that already have a RecordGeoCode row, then geocodes the rest in
46
- * parallel batches.
49
+ * Process all missing RecordGeoCode rows for a single entity using pagination.
47
50
  *
48
- * @param entityInfo - The entity to process
49
- * @param contextUser - User context for data operations
50
- * @param batchSize - Number of concurrent geocoding operations per batch
51
- * @param maxRows - Maximum records to process (0 = unlimited)
51
+ * Instead of loading ALL entity records into memory at once (which causes OOM
52
+ * with 50k+ records), this fetches pages of PAGE_SIZE records, processes each
53
+ * page, then releases references so previous pages can be GC'd.
54
+ *
55
+ * Also loads all existing RecordGeoCode rows for this entity into a lightweight
56
+ * Map upfront (ExistingGeoCodeInfo — ~5 small fields per row, ~15MB for 50k rows)
57
+ * to eliminate the N+1 per-record FindExistingGeoCode SQL query.
52
58
  */
53
59
  private processMissingForEntity;
54
60
  /**
55
- * Retry failed geocoding attempts. Loads the source entity record
56
- * and re-runs GeoCodeSyncService. Processes all eligible failures
57
- * (or up to maxTotal) in parallel batches.
61
+ * Load a single page of entity records with non-null geo fields.
62
+ * Uses OrderBy on PK + MaxRows + offset simulation via GreaterThan filter
63
+ * to paginate without loading the full result set.
64
+ */
65
+ private loadEntityPage;
66
+ /**
67
+ * Retry failed geocoding attempts using pagination.
68
+ * Loads pages of failed RecordGeoCode rows, then loads source entity records
69
+ * and re-runs GeoCodeSyncService. Processes up to maxTotal records.
58
70
  */
59
71
  private processFailedRetries;
60
72
  /**
@@ -64,9 +76,16 @@ export declare class ScheduledGeocodingAction extends BaseAction {
64
76
  private loadSourceEntities;
65
77
  /**
66
78
  * Remove RecordGeoCode rows whose source entity record no longer exists.
67
- * Processes one entity at a time to keep queries efficient.
79
+ * Processes one entity at a time, paginating orphan queries to avoid loading
80
+ * all orphan rows into memory simultaneously.
68
81
  */
69
82
  private cleanupOrphanedRecords;
83
+ /**
84
+ * Paginated orphan cleanup for a single entity. Fetches pages of orphan rows,
85
+ * deletes them, then fetches the next page. Since deleted rows disappear from
86
+ * subsequent queries, we always fetch from offset 0.
87
+ */
88
+ private cleanupOrphansForEntity;
70
89
  /**
71
90
  * Geocode a list of entity records in parallel batches, then fire cache
72
91
  * invalidation events for each successfully geocoded record.
@@ -81,6 +100,7 @@ export declare class ScheduledGeocodingAction extends BaseAction {
81
100
  * @param entityInfo - Entity metadata
82
101
  * @param contextUser - User context
83
102
  * @param batchSize - Number of concurrent geocoding operations per batch
103
+ * @param existingGeoCodesMap - Optional pre-loaded map passed to GeoCodeSyncService
84
104
  */
85
105
  private geocodeBatch;
86
106
  /**
@@ -115,9 +135,16 @@ export declare class ScheduledGeocodingAction extends BaseAction {
115
135
  */
116
136
  private getGeoAddressFields;
117
137
  /**
118
- * Get the set of RecordIDs that already have a RecordGeoCode row for an entity.
138
+ * Load all existing RecordGeoCode rows for an entity into a lightweight Map.
139
+ * Keyed by `RecordID|LocationType` for O(1) lookup.
140
+ *
141
+ * This replaces both the old getExistingGeoCodeRecordIds() Set (for filtering
142
+ * missing records) and the per-record FindExistingGeoCode() SQL query in
143
+ * GeoCodeSyncService (for staleness checking). The map holds ~5 small string
144
+ * fields per row — even 50k rows is only ~15MB, safe to hold in memory for
145
+ * the duration of one entity's processing.
119
146
  */
120
- private getExistingGeoCodeRecordIds;
147
+ private loadExistingGeoCodesMap;
121
148
  /**
122
149
  * Build a RecordID string from an entity's primary key, matching the
123
150
  * format used in the view's LEFT JOIN to RecordGeoCode.
@@ -127,9 +154,5 @@ export declare class ScheduledGeocodingAction extends BaseAction {
127
154
  * Extract a numeric parameter with a default value.
128
155
  */
129
156
  private getNumericParam;
130
- /**
131
- * Extract an optional numeric parameter. Returns null if not provided.
132
- */
133
- private getNullableNumericParam;
134
157
  }
135
158
  //# sourceMappingURL=scheduled-geocoding.action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-geocoding.action.d.ts","sourceRoot":"","sources":["../../../src/custom/geo/scheduled-geocoding.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AASrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBACa,wBAAyB,SAAQ,UAAU;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAM;cAEhC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyCvF;;;;OAIG;YACW,qBAAqB;IA2BnC;;;;;;;;;;OAUG;YACW,uBAAuB;IAyDrC;;;;OAIG;YACW,oBAAoB;IA4DlC;;;OAGG;YACW,kBAAkB;IA6BhC;;;OAGG;YACW,sBAAsB;IA2DpC;;;;;;;;;;;;;;OAcG;YACW,YAAY;IA0B1B;;;;;;;;;;OAUG;YACW,oBAAoB;IAqBlC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,2BAA2B;IAezC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAMlC"}
1
+ {"version":3,"file":"scheduled-geocoding.action.d.ts","sourceRoot":"","sources":["../../../src/custom/geo/scheduled-geocoding.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAUrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBACa,wBAAyB,SAAQ,UAAU;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IAChD,qGAAqG;IACrG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IACnD,oGAAoG;IACpG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAO;cAExB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8CvF;;;;OAIG;YACW,qBAAqB;IA2BnC;;;;;;;;;;OAUG;YACW,uBAAuB;IA+DrC;;;;OAIG;YACW,cAAc;IA2B5B;;;;OAIG;YACW,oBAAoB;IAkElC;;;OAGG;YACW,kBAAkB;IA6BhC;;;;OAIG;YACW,sBAAsB;IAgDpC;;;;OAIG;YACW,uBAAuB;IAmDrC;;;;;;;;;;;;;;;OAeG;YACW,YAAY;IA2B1B;;;;;;;;;;OAUG;YACW,oBAAoB;IA2BlC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;;OASG;YACW,uBAAuB;IAoCrC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,eAAe;CAO1B"}
@@ -9,6 +9,7 @@ import { BaseAction } from '@memberjunction/actions';
9
9
  import { RegisterClass, MJGlobal, MJEventType } from '@memberjunction/global';
10
10
  import { RunView, Metadata, LogStatus, LogError, CompositeKey, BaseEntity, BaseEntityEvent } from '@memberjunction/core';
11
11
  import { GeoCodeSyncService } from '@memberjunction/geo-core';
12
+ import { GetDialect } from '@memberjunction/sql-dialect';
12
13
  /**
13
14
  * Scheduled geocoding maintenance action that handles three tasks:
14
15
  *
@@ -23,9 +24,11 @@ import { GeoCodeSyncService } from '@memberjunction/geo-core';
23
24
  * - **BatchSize** (default 10) — Number of records to geocode **concurrently**
24
25
  * in each parallel batch. Controls API rate pressure. Google Geocoding API
25
26
  * allows 50 QPS, so 10 is conservative and leaves headroom.
26
- * - **MaxTotalRecords** (default unlimited) — Optional hard cap on the total
27
- * number of records processed in a single run. When null/0, processes all
28
- * pending records until exhausted.
27
+ * - **MaxTotalRecords** (default 50,000) — Safety cap on the total number of
28
+ * records processed in a single run. Prevents unbounded memory growth in
29
+ * extreme cases. Override via scheduled job parameters. Logs a warning when
30
+ * the limit is reached so operators know remaining records exist for the
31
+ * next run.
29
32
  * - **MaxRetries** (default 5) — Maximum retry count for failed geocoding
30
33
  * attempts before a record is considered permanently failed.
31
34
  *
@@ -42,6 +45,10 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
42
45
  static { ScheduledGeocodingAction_1 = this; }
43
46
  static { this.DEFAULT_MAX_RETRIES = 5; }
44
47
  static { this.DEFAULT_BATCH_SIZE = 10; }
48
+ /** Safety default: cap total records per run to prevent unbounded memory growth in extreme cases. */
49
+ static { this.DEFAULT_MAX_TOTAL = 50_000; }
50
+ /** Page size for RunView pagination — controls how many BaseEntity objects exist simultaneously. */
51
+ static { this.PAGE_SIZE = 500; }
45
52
  async InternalRunAction(params) {
46
53
  const contextUser = params.ContextUser;
47
54
  if (!contextUser) {
@@ -49,20 +56,24 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
49
56
  }
50
57
  const maxRetries = this.getNumericParam(params, 'MaxRetries', ScheduledGeocodingAction_1.DEFAULT_MAX_RETRIES);
51
58
  const batchSize = this.getNumericParam(params, 'BatchSize', ScheduledGeocodingAction_1.DEFAULT_BATCH_SIZE);
52
- const maxTotal = this.getNullableNumericParam(params, 'MaxTotalRecords');
53
- LogStatus(`ScheduledGeocodingAction: Starting maintenance run (BatchSize=${batchSize}, MaxTotal=${maxTotal ?? 'unlimited'})`);
59
+ const maxTotal = this.getNumericParam(params, 'MaxTotalRecords', ScheduledGeocodingAction_1.DEFAULT_MAX_TOTAL);
60
+ LogStatus(`ScheduledGeocodingAction: Starting maintenance run (BatchSize=${batchSize}, MaxTotal=${maxTotal})`);
54
61
  const stats = { MissingProcessed: 0, MissingSuccess: 0, RetriesProcessed: 0, RetriesSuccess: 0, OrphansRemoved: 0 };
55
62
  // Step 1: Find and geocode missing records
56
63
  const missingStats = await this.processMissingRecords(contextUser, batchSize, maxTotal, params.Provider);
57
64
  stats.MissingProcessed = missingStats.Processed;
58
65
  stats.MissingSuccess = missingStats.Success;
59
66
  // Step 2: Retry failed geocoding attempts
60
- const retryMaxTotal = maxTotal != null ? Math.max(0, maxTotal - stats.MissingProcessed) : null;
67
+ const retryMaxTotal = Math.max(0, maxTotal - stats.MissingProcessed);
61
68
  const retryStats = await this.processFailedRetries(contextUser, maxRetries, batchSize, retryMaxTotal, params.Provider);
62
69
  stats.RetriesProcessed = retryStats.Processed;
63
70
  stats.RetriesSuccess = retryStats.Success;
64
71
  // Step 3: Clean up orphaned RecordGeoCode rows
65
72
  stats.OrphansRemoved = await this.cleanupOrphanedRecords(contextUser, batchSize, params.Provider);
73
+ const totalRecordsProcessed = stats.MissingProcessed + stats.RetriesProcessed;
74
+ if (totalRecordsProcessed >= maxTotal) {
75
+ LogStatus(`ScheduledGeocodingAction: WARNING — MaxTotal limit (${maxTotal}) reached. There may be remaining records for the next run.`);
76
+ }
66
77
  LogStatus(`ScheduledGeocodingAction: Complete — Missing: ${stats.MissingProcessed} processed (${stats.MissingSuccess} success), Retries: ${stats.RetriesProcessed} (${stats.RetriesSuccess} success), Orphans: ${stats.OrphansRemoved} removed`);
67
78
  return {
68
79
  Success: true,
@@ -84,9 +95,9 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
84
95
  let totalProcessed = 0;
85
96
  let totalSuccess = 0;
86
97
  for (const entityInfo of geoEntities) {
87
- if (maxTotal != null && totalProcessed >= maxTotal)
98
+ if (totalProcessed >= maxTotal)
88
99
  break;
89
- const remaining = maxTotal != null ? maxTotal - totalProcessed : null;
100
+ const remaining = maxTotal - totalProcessed;
90
101
  const entityStats = await this.processMissingForEntity(entityInfo, contextUser, batchSize, remaining);
91
102
  totalProcessed += entityStats.Processed;
92
103
  totalSuccess += entityStats.Success;
@@ -97,18 +108,17 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
97
108
  return { Processed: totalProcessed, Success: totalSuccess };
98
109
  }
99
110
  /**
100
- * Process all missing RecordGeoCode rows for a single entity.
101
- * Loads all entity records with non-null geo fields, filters out those
102
- * that already have a RecordGeoCode row, then geocodes the rest in
103
- * parallel batches.
111
+ * Process all missing RecordGeoCode rows for a single entity using pagination.
104
112
  *
105
- * @param entityInfo - The entity to process
106
- * @param contextUser - User context for data operations
107
- * @param batchSize - Number of concurrent geocoding operations per batch
108
- * @param maxRows - Maximum records to process (0 = unlimited)
113
+ * Instead of loading ALL entity records into memory at once (which causes OOM
114
+ * with 50k+ records), this fetches pages of PAGE_SIZE records, processes each
115
+ * page, then releases references so previous pages can be GC'd.
116
+ *
117
+ * Also loads all existing RecordGeoCode rows for this entity into a lightweight
118
+ * Map upfront (ExistingGeoCodeInfo — ~5 small fields per row, ~15MB for 50k rows)
119
+ * to eliminate the N+1 per-record FindExistingGeoCode SQL query.
109
120
  */
110
121
  async processMissingForEntity(entityInfo, contextUser, batchSize, maxRows) {
111
- const rv = new RunView();
112
122
  const pkField = entityInfo.FirstPrimaryKey;
113
123
  if (!pkField)
114
124
  return { Processed: 0, Success: 0 };
@@ -116,33 +126,41 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
116
126
  if (geoFields.length === 0)
117
127
  return { Processed: 0, Success: 0 };
118
128
  try {
119
- // Get all record IDs that already have a RecordGeoCode row
120
- const existingRecordIds = await this.getExistingGeoCodeRecordIds(entityInfo.ID, contextUser);
121
- // Load entity records with non-null geo fields
129
+ // Bulk load: lightweight map of all existing RecordGeoCode rows for this entity.
130
+ // Used both for filtering (which records are missing) and passed through to
131
+ // GeoCodeSyncService to eliminate per-record SQL queries.
132
+ const existingMap = await this.loadExistingGeoCodesMap(entityInfo.ID, contextUser);
122
133
  const nonNullConditions = geoFields.map(f => `${f.Name} IS NOT NULL`).join(' OR ');
123
- const result = await rv.RunView({
124
- EntityName: entityInfo.Name,
125
- ExtraFilter: `(${nonNullConditions})`,
126
- IgnoreMaxRows: true,
127
- BypassCache: true,
128
- ResultType: 'entity_object'
129
- }, contextUser);
130
- if (!result.Success || result.Results.length === 0) {
131
- return { Processed: 0, Success: 0 };
132
- }
133
- // Filter to records missing geocodes
134
- let missingRecords = result.Results
135
- .filter(entity => {
136
- const recordId = this.buildRecordId(entity);
137
- return !existingRecordIds.has(recordId);
138
- });
139
- if (maxRows != null) {
140
- missingRecords = missingRecords.slice(0, maxRows);
134
+ let totalProcessed = 0;
135
+ let totalSuccess = 0;
136
+ let pageOffset = 0;
137
+ // Paginate through entity records to avoid loading all into memory at once
138
+ while (totalProcessed < maxRows) {
139
+ const pageResult = await this.loadEntityPage(entityInfo.Name, nonNullConditions, pageOffset, contextUser);
140
+ if (!pageResult.Success || pageResult.Results.length === 0)
141
+ break;
142
+ const pageEntities = pageResult.Results;
143
+ // Filter to records missing geocodes (not in existingMap for any LocationType)
144
+ const missingRecords = pageEntities.filter(entity => {
145
+ const recordId = this.buildRecordId(entity);
146
+ // A record is "missing" if it has no existing geocode row at all.
147
+ // Check for 'Primary' since that's the only LocationType currently generated.
148
+ const key = GeoCodeSyncService.BuildGeoCodeMapKey(recordId, 'Primary');
149
+ return !existingMap.has(key);
150
+ });
151
+ if (missingRecords.length > 0) {
152
+ const budget = maxRows - totalProcessed;
153
+ const toProcess = missingRecords.slice(0, budget);
154
+ const stats = await this.geocodeBatch(toProcess, entityInfo, contextUser, batchSize, existingMap);
155
+ totalProcessed += stats.Processed;
156
+ totalSuccess += stats.Success;
157
+ }
158
+ // If this page was smaller than PAGE_SIZE, we've exhausted the entity
159
+ if (pageEntities.length < ScheduledGeocodingAction_1.PAGE_SIZE)
160
+ break;
161
+ pageOffset += ScheduledGeocodingAction_1.PAGE_SIZE;
141
162
  }
142
- if (missingRecords.length === 0)
143
- return { Processed: 0, Success: 0 };
144
- // Geocode in parallel batches
145
- return await this.geocodeBatch(missingRecords, entityInfo, contextUser, batchSize);
163
+ return { Processed: totalProcessed, Success: totalSuccess };
146
164
  }
147
165
  catch (e) {
148
166
  const msg = e instanceof Error ? e.message : String(e);
@@ -150,56 +168,85 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
150
168
  return { Processed: 0, Success: 0 };
151
169
  }
152
170
  }
171
+ /**
172
+ * Load a single page of entity records with non-null geo fields.
173
+ * Uses OrderBy on PK + MaxRows + offset simulation via GreaterThan filter
174
+ * to paginate without loading the full result set.
175
+ */
176
+ async loadEntityPage(entityName, nonNullFilter, offset, contextUser) {
177
+ const rv = new RunView();
178
+ const result = await rv.RunView({
179
+ EntityName: entityName,
180
+ ExtraFilter: `(${nonNullFilter})`,
181
+ OrderBy: 'ID',
182
+ MaxRows: ScheduledGeocodingAction_1.PAGE_SIZE,
183
+ StartRow: offset + 1, // RunView StartRow is 1-based
184
+ BypassCache: true,
185
+ ResultType: 'entity_object'
186
+ }, contextUser);
187
+ return {
188
+ Success: result.Success,
189
+ Results: result.Success ? result.Results : []
190
+ };
191
+ }
153
192
  // ================================================================
154
193
  // Step 2: Retry failed geocoding attempts
155
194
  // ================================================================
156
195
  /**
157
- * Retry failed geocoding attempts. Loads the source entity record
158
- * and re-runs GeoCodeSyncService. Processes all eligible failures
159
- * (or up to maxTotal) in parallel batches.
196
+ * Retry failed geocoding attempts using pagination.
197
+ * Loads pages of failed RecordGeoCode rows, then loads source entity records
198
+ * and re-runs GeoCodeSyncService. Processes up to maxTotal records.
160
199
  */
161
200
  async processFailedRetries(contextUser, maxRetries, batchSize, maxTotal, provider) {
162
- const rv = new RunView();
163
- const failedResult = await rv.RunView({
164
- EntityName: 'MJ: Record Geo Codes',
165
- ExtraFilter: `Status='failed' AND RetryCount < ${maxRetries}`,
166
- IgnoreMaxRows: true,
167
- OrderBy: 'RetryCount ASC, GeocodedAt ASC',
168
- ResultType: 'entity_object'
169
- }, contextUser);
170
- if (!failedResult.Success || failedResult.Results.length === 0) {
201
+ if (maxTotal <= 0)
171
202
  return { Processed: 0, Success: 0 };
172
- }
173
- let records = failedResult.Results;
174
- if (maxTotal != null) {
175
- records = records.slice(0, maxTotal);
176
- }
177
- LogStatus(`ScheduledGeocodingAction: ${records.length} failed records eligible for retry`);
178
203
  const md = (provider ?? new Metadata());
204
+ const rv = new RunView();
179
205
  let totalProcessed = 0;
180
206
  let totalSuccess = 0;
181
- // Group by entity for efficient processing
182
- const byEntity = new Map();
183
- for (const geoRecord of records) {
184
- const key = geoRecord.EntityID;
185
- let arr = byEntity.get(key);
186
- if (!arr) {
187
- arr = [];
188
- byEntity.set(key, arr);
207
+ let pageOffset = 0;
208
+ while (totalProcessed < maxTotal) {
209
+ const pageResult = await rv.RunView({
210
+ EntityName: 'MJ: Record Geo Codes',
211
+ ExtraFilter: `Status='failed' AND RetryCount < ${maxRetries}`,
212
+ OrderBy: 'RetryCount ASC, GeocodedAt ASC',
213
+ MaxRows: ScheduledGeocodingAction_1.PAGE_SIZE,
214
+ StartRow: pageOffset + 1,
215
+ BypassCache: true,
216
+ ResultType: 'entity_object'
217
+ }, contextUser);
218
+ if (!pageResult.Success || pageResult.Results.length === 0)
219
+ break;
220
+ const budget = maxTotal - totalProcessed;
221
+ const records = pageResult.Results.slice(0, budget);
222
+ if (totalProcessed === 0) {
223
+ LogStatus(`ScheduledGeocodingAction: Processing failed records for retry`);
189
224
  }
190
- arr.push(geoRecord);
191
- }
192
- for (const [entityId, geoRecords] of byEntity) {
193
- const entityInfo = md.EntityByID(entityId);
194
- if (!entityInfo)
195
- continue;
196
- // Load source entity records and geocode them in parallel batches
197
- const entities = await this.loadSourceEntities(geoRecords, entityInfo, contextUser, provider);
198
- if (entities.length === 0)
199
- continue;
200
- const stats = await this.geocodeBatch(entities, entityInfo, contextUser, batchSize);
201
- totalProcessed += stats.Processed;
202
- totalSuccess += stats.Success;
225
+ // Group by entity for efficient processing
226
+ const byEntity = new Map();
227
+ for (const geoRecord of records) {
228
+ const key = geoRecord.EntityID;
229
+ let arr = byEntity.get(key);
230
+ if (!arr) {
231
+ arr = [];
232
+ byEntity.set(key, arr);
233
+ }
234
+ arr.push(geoRecord);
235
+ }
236
+ for (const [entityId, geoRecords] of byEntity) {
237
+ const entityInfo = md.EntityByID(entityId);
238
+ if (!entityInfo)
239
+ continue;
240
+ const entities = await this.loadSourceEntities(geoRecords, entityInfo, contextUser, provider);
241
+ if (entities.length === 0)
242
+ continue;
243
+ const stats = await this.geocodeBatch(entities, entityInfo, contextUser, batchSize);
244
+ totalProcessed += stats.Processed;
245
+ totalSuccess += stats.Success;
246
+ }
247
+ if (pageResult.Results.length < ScheduledGeocodingAction_1.PAGE_SIZE)
248
+ break;
249
+ pageOffset += ScheduledGeocodingAction_1.PAGE_SIZE;
203
250
  }
204
251
  return { Processed: totalProcessed, Success: totalSuccess };
205
252
  }
@@ -230,13 +277,20 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
230
277
  // ================================================================
231
278
  /**
232
279
  * Remove RecordGeoCode rows whose source entity record no longer exists.
233
- * Processes one entity at a time to keep queries efficient.
280
+ * Processes one entity at a time, paginating orphan queries to avoid loading
281
+ * all orphan rows into memory simultaneously.
234
282
  */
235
283
  async cleanupOrphanedRecords(contextUser, batchSize, provider) {
236
284
  const rv = new RunView();
237
285
  const md = (provider ?? new Metadata());
286
+ // Resolve the dialect for the active provider once — the orphan filter
287
+ // is built per-entity but the dialect (SQL Server vs PostgreSQL) is
288
+ // bound to the provider, not the entity, so deriving it here keeps
289
+ // the per-entity loop dialect-agnostic.
290
+ const platformKey = md.PlatformKey ?? 'sqlserver';
291
+ const dialect = GetDialect(platformKey);
238
292
  let totalRemoved = 0;
239
- // Get distinct EntityIDs from RecordGeoCode
293
+ // Get distinct EntityIDs from RecordGeoCode (lightweight — just IDs)
240
294
  const entityResult = await rv.RunView({
241
295
  EntityName: 'MJ: Record Geo Codes',
242
296
  Fields: ['EntityID'],
@@ -254,22 +308,8 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
254
308
  const pkField = entityInfo.FirstPrimaryKey;
255
309
  if (!pkField)
256
310
  continue;
257
- const orphanResult = await rv.RunView({
258
- EntityName: 'MJ: Record Geo Codes',
259
- ExtraFilter: `EntityID = '${entityId}' AND NOT EXISTS (SELECT 1 FROM ${entityInfo.SchemaName}.${entityInfo.BaseTable} src WHERE CAST(src.${pkField.Name} AS NVARCHAR(450)) = RecordID)`,
260
- IgnoreMaxRows: true,
261
- ResultType: 'entity_object'
262
- }, contextUser);
263
- if (orphanResult.Success && orphanResult.Results.length > 0) {
264
- // Delete orphans in parallel batches
265
- const orphans = orphanResult.Results;
266
- for (let i = 0; i < orphans.length; i += batchSize) {
267
- const batch = orphans.slice(i, i + batchSize);
268
- const results = await Promise.allSettled(batch.map(o => o.Delete()));
269
- totalRemoved += results.filter(r => r.status === 'fulfilled' && r.value).length;
270
- }
271
- LogStatus(`ScheduledGeocodingAction: Removed ${orphanResult.Results.length} orphaned geo records for ${entityInfo.Name}`);
272
- }
311
+ const entityRemoved = await this.cleanupOrphansForEntity(entityId, entityInfo, pkField.Name, contextUser, batchSize, rv, dialect);
312
+ totalRemoved += entityRemoved;
273
313
  }
274
314
  catch (e) {
275
315
  const msg = e instanceof Error ? e.message : String(e);
@@ -278,6 +318,45 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
278
318
  }
279
319
  return totalRemoved;
280
320
  }
321
+ /**
322
+ * Paginated orphan cleanup for a single entity. Fetches pages of orphan rows,
323
+ * deletes them, then fetches the next page. Since deleted rows disappear from
324
+ * subsequent queries, we always fetch from offset 0.
325
+ */
326
+ async cleanupOrphansForEntity(entityId, entityInfo, pkFieldName, contextUser, batchSize, rv, dialect) {
327
+ let entityRemoved = 0;
328
+ const sourceRef = dialect.QuoteSchema(entityInfo.SchemaName, entityInfo.BaseView);
329
+ const pkRef = `src.${dialect.QuoteIdentifier(pkFieldName)}`;
330
+ const pkAsString = dialect.CastToBoundedString(pkRef, 450);
331
+ const entityIdLit = dialect.QuoteStringLiteral(entityId);
332
+ const orphanFilter = `EntityID = ${entityIdLit} AND NOT EXISTS (SELECT 1 FROM ${sourceRef} src WHERE ${pkAsString} = RecordID)`;
333
+ // Paginate: fetch a page, delete it, repeat. Since we're deleting rows,
334
+ // always query from the start — deleted rows won't appear again.
335
+ let hasMore = true;
336
+ while (hasMore) {
337
+ const orphanResult = await rv.RunView({
338
+ EntityName: 'MJ: Record Geo Codes',
339
+ ExtraFilter: orphanFilter,
340
+ MaxRows: ScheduledGeocodingAction_1.PAGE_SIZE,
341
+ BypassCache: true,
342
+ ResultType: 'entity_object'
343
+ }, contextUser);
344
+ if (!orphanResult.Success || orphanResult.Results.length === 0)
345
+ break;
346
+ const orphans = orphanResult.Results;
347
+ for (let i = 0; i < orphans.length; i += batchSize) {
348
+ const batch = orphans.slice(i, i + batchSize);
349
+ const results = await Promise.allSettled(batch.map(o => o.Delete()));
350
+ entityRemoved += results.filter(r => r.status === 'fulfilled' && r.value).length;
351
+ }
352
+ // If we got fewer than PAGE_SIZE, we've exhausted the orphans
353
+ hasMore = orphans.length >= ScheduledGeocodingAction_1.PAGE_SIZE;
354
+ }
355
+ if (entityRemoved > 0) {
356
+ LogStatus(`ScheduledGeocodingAction: Removed ${entityRemoved} orphaned geo records for ${entityInfo.Name}`);
357
+ }
358
+ return entityRemoved;
359
+ }
281
360
  // ================================================================
282
361
  // Core: parallel batch geocoding with cache invalidation
283
362
  // ================================================================
@@ -295,12 +374,13 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
295
374
  * @param entityInfo - Entity metadata
296
375
  * @param contextUser - User context
297
376
  * @param batchSize - Number of concurrent geocoding operations per batch
377
+ * @param existingGeoCodesMap - Optional pre-loaded map passed to GeoCodeSyncService
298
378
  */
299
- async geocodeBatch(entities, entityInfo, contextUser, batchSize) {
379
+ async geocodeBatch(entities, entityInfo, contextUser, batchSize, existingGeoCodesMap) {
300
380
  let totalSuccess = 0;
301
381
  for (let i = 0; i < entities.length; i += batchSize) {
302
382
  const batch = entities.slice(i, i + batchSize);
303
- const results = await Promise.allSettled(batch.map(entity => this.geocodeAndInvalidate(entity, contextUser)));
383
+ const results = await Promise.allSettled(batch.map(entity => this.geocodeAndInvalidate(entity, contextUser, existingGeoCodesMap)));
304
384
  const batchSuccess = results.filter(r => r.status === 'fulfilled' && r.value).length;
305
385
  totalSuccess += batchSuccess;
306
386
  if (entities.length > batchSize) {
@@ -320,9 +400,9 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
320
400
  *
321
401
  * @returns true if geocoding succeeded, false otherwise
322
402
  */
323
- async geocodeAndInvalidate(entity, contextUser) {
403
+ async geocodeAndInvalidate(entity, contextUser, existingGeoCodesMap) {
324
404
  try {
325
- const result = await GeoCodeSyncService.Instance.SyncIfChanged(entity, contextUser);
405
+ const result = await GeoCodeSyncService.Instance.SyncIfChanged(entity, contextUser, undefined, existingGeoCodesMap);
326
406
  if (result) {
327
407
  // Geocoding produced new coordinates — fire cache invalidation.
328
408
  // Reload the entity to pick up fresh data from the view (including
@@ -380,18 +460,39 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
380
460
  f.ExtendedType !== 'GeoLatitude' && f.ExtendedType !== 'GeoLongitude');
381
461
  }
382
462
  /**
383
- * Get the set of RecordIDs that already have a RecordGeoCode row for an entity.
463
+ * Load all existing RecordGeoCode rows for an entity into a lightweight Map.
464
+ * Keyed by `RecordID|LocationType` for O(1) lookup.
465
+ *
466
+ * This replaces both the old getExistingGeoCodeRecordIds() Set (for filtering
467
+ * missing records) and the per-record FindExistingGeoCode() SQL query in
468
+ * GeoCodeSyncService (for staleness checking). The map holds ~5 small string
469
+ * fields per row — even 50k rows is only ~15MB, safe to hold in memory for
470
+ * the duration of one entity's processing.
384
471
  */
385
- async getExistingGeoCodeRecordIds(entityId, contextUser) {
472
+ async loadExistingGeoCodesMap(entityId, contextUser) {
386
473
  const rv = new RunView();
387
- const existingResult = await rv.RunView({
474
+ const result = await rv.RunView({
388
475
  EntityName: 'MJ: Record Geo Codes',
389
476
  ExtraFilter: `EntityID = '${entityId}'`,
390
- Fields: ['RecordID'],
477
+ Fields: ['ID', 'RecordID', 'LocationType', 'SourceFieldHash', 'Status'],
391
478
  ResultType: 'simple',
392
- IgnoreMaxRows: true
479
+ IgnoreMaxRows: true,
480
+ BypassCache: true
393
481
  }, contextUser);
394
- return new Set(existingResult.Success ? existingResult.Results.map(r => r.RecordID) : []);
482
+ const map = new Map();
483
+ if (result.Success) {
484
+ for (const row of result.Results) {
485
+ const key = GeoCodeSyncService.BuildGeoCodeMapKey(row.RecordID, row.LocationType);
486
+ map.set(key, {
487
+ ID: row.ID,
488
+ RecordID: row.RecordID,
489
+ LocationType: row.LocationType,
490
+ SourceFieldHash: row.SourceFieldHash,
491
+ Status: row.Status
492
+ });
493
+ }
494
+ }
495
+ return map;
395
496
  }
396
497
  /**
397
498
  * Build a RecordID string from an entity's primary key, matching the
@@ -413,16 +514,6 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
413
514
  const parsed = Number(param.Value);
414
515
  return isNaN(parsed) ? defaultValue : parsed;
415
516
  }
416
- /**
417
- * Extract an optional numeric parameter. Returns null if not provided.
418
- */
419
- getNullableNumericParam(params, name) {
420
- const param = params.Params.find(p => p.Name.trim().toLowerCase() === name.toLowerCase());
421
- if (!param || param.Value === undefined || param.Value === null)
422
- return null;
423
- const parsed = Number(param.Value);
424
- return isNaN(parsed) ? null : parsed;
425
- }
426
517
  };
427
518
  ScheduledGeocodingAction = ScheduledGeocodingAction_1 = __decorate([
428
519
  RegisterClass(BaseAction, 'Scheduled Geocoding')
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-geocoding.action.js","sourceRoot":"","sources":["../../../src/custom/geo/scheduled-geocoding.action.ts"],"names":[],"mappings":";;;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EACtC,YAAY,EAAE,UAAU,EAAE,eAAe,EAC5C,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,UAAU;;aAC5B,wBAAmB,GAAG,CAAC,AAAJ,CAAK;aACxB,uBAAkB,GAAG,EAAE,AAAL,CAAM;IAEtC,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACrD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;QACvH,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,0BAAwB,CAAC,mBAAmB,CAAC,CAAC;QAC5G,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,0BAAwB,CAAC,kBAAkB,CAAC,CAAC;QACzG,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEzE,SAAS,CAAC,iEAAiE,SAAS,cAAc,QAAQ,IAAI,WAAW,GAAG,CAAC,CAAC;QAE9H,MAAM,KAAK,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAEpH,2CAA2C;QAC3C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzG,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAAC;QAChD,KAAK,CAAC,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC;QAE5C,0CAA0C;QAC1C,MAAM,aAAa,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/F,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvH,KAAK,CAAC,gBAAgB,GAAG,UAAU,CAAC,SAAS,CAAC;QAC9C,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC;QAE1C,+CAA+C;QAC/C,KAAK,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAElG,SAAS,CAAC,iDAAiD,KAAK,CAAC,gBAAgB,eAAe,KAAK,CAAC,cAAc,uBAAuB,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,cAAc,uBAAuB,KAAK,CAAC,cAAc,UAAU,CAAC,CAAC;QAEjP,OAAO;YACH,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACjC,CAAC;IACN,CAAC;IAED,mEAAmE;IACnE,6CAA6C;IAC7C,mEAAmE;IAEnE;;;;OAIG;IACK,KAAK,CAAC,qBAAqB,CAC/B,WAAqB,EACrB,SAAiB,EACjB,QAAuB,EACvB,QAA4B;QAE5B,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAiC,CAAC;QACxE,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACjE,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACnC,IAAI,QAAQ,IAAI,IAAI,IAAI,cAAc,IAAI,QAAQ;gBAAE,MAAM;YAE1D,MAAM,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;YACtE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YACtG,cAAc,IAAI,WAAW,CAAC,SAAS,CAAC;YACxC,YAAY,IAAI,WAAW,CAAC,OAAO,CAAC;QACxC,CAAC;QAED,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,uCAAuC,cAAc,qBAAqB,YAAY,yBAAyB,CAAC,CAAC;QAC/H,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAChE,CAAC;IAED;;;;;;;;;;OAUG;IACK,KAAK,CAAC,uBAAuB,CACjC,UAAsB,EACtB,WAAqB,EACrB,SAAiB,EACjB,OAAsB;QAEtB,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC;QAC3C,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAElD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAEhE,IAAI,CAAC;YACD,2DAA2D;YAC3D,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAE7F,+CAA+C;YAC/C,MAAM,iBAAiB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;gBAC5B,UAAU,EAAE,UAAU,CAAC,IAAI;gBAC3B,WAAW,EAAE,IAAI,iBAAiB,GAAG;gBACrC,aAAa,EAAE,IAAI;gBACnB,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,eAAe;aAC9B,EAAE,WAAW,CAAC,CAAC;YAEhB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjD,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACxC,CAAC;YAED,qCAAqC;YACrC,IAAI,cAAc,GAAI,MAAM,CAAC,OAAmC;iBAC3D,MAAM,CAAC,MAAM,CAAC,EAAE;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC5C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;YAEP,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBAClB,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAErE,8BAA8B;YAC9B,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,QAAQ,CAAC,gEAAgE,UAAU,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;YACpG,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACxC,CAAC;IACL,CAAC;IAED,mEAAmE;IACnE,0CAA0C;IAC1C,mEAAmE;IAEnE;;;;OAIG;IACK,KAAK,CAAC,oBAAoB,CAC9B,WAAqB,EACrB,UAAkB,EAClB,SAAiB,EACjB,QAAuB,EACvB,QAA4B;QAE5B,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QAEzB,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAwB;YACzD,UAAU,EAAE,sBAAsB;YAClC,WAAW,EAAE,oCAAoC,UAAU,EAAE;YAC7D,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,gCAAgC;YACzC,UAAU,EAAE,eAAe;SAC9B,EAAE,WAAW,CAAC,CAAC;QAEhB,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QACnC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACnB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,SAAS,CAAC,6BAA6B,OAAO,CAAC,MAAM,oCAAoC,CAAC,CAAC;QAE3F,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAiC,CAAC;QACxE,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAC;QAC5D,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC;YAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACP,GAAG,GAAG,EAAE,CAAC;gBACT,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3B,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU;gBAAE,SAAS;YAE1B,kEAAkE;YAClE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC9F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YACpF,cAAc,IAAI,KAAK,CAAC,SAAS,CAAC;YAClC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC;QAClC,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAChE,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,kBAAkB,CAC5B,UAAmC,EACnC,UAAsB,EACtB,WAAqB,EACrB,QAA4B;QAE5B,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAiC,CAAC;QACxE,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACtE,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,MAAM,EAAE,CAAC;oBACT,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,wDAAwD;YAC5D,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,mEAAmE;IACnE,yBAAyB;IACzB,mEAAmE;IAEnE;;;OAGG;IACK,KAAK,CAAC,sBAAsB,CAChC,WAAqB,EACrB,SAAiB,EACjB,QAA4B;QAE5B,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAiC,CAAC;QACxE,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,4CAA4C;QAC5C,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAuB;YACxD,UAAU,EAAE,sBAAsB;YAClC,MAAM,EAAE,CAAC,UAAU,CAAC;YACpB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,IAAI;SACtB,EAAE,WAAW,CAAC,CAAC;QAEhB,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAEpC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE1E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACD,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,CAAC,UAAU;oBAAE,SAAS;gBAE1B,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC;gBAC3C,IAAI,CAAC,OAAO;oBAAE,SAAS;gBAEvB,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAwB;oBACzD,UAAU,EAAE,sBAAsB;oBAClC,WAAW,EAAE,eAAe,QAAQ,mCAAmC,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,uBAAuB,OAAO,CAAC,IAAI,gCAAgC;oBACvL,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,eAAe;iBAC9B,EAAE,WAAW,CAAC,CAAC;gBAEhB,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1D,qCAAqC;oBACrC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;oBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;wBACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;wBAC9C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;wBACrE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;oBACpF,CAAC;oBACD,SAAS,CAAC,qCAAqC,YAAY,CAAC,OAAO,CAAC,MAAM,6BAA6B,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9H,CAAC;YACL,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvD,QAAQ,CAAC,6DAA6D,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;YAC9F,CAAC;QACL,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,mEAAmE;IACnE,yDAAyD;IACzD,mEAAmE;IAEnE;;;;;;;;;;;;;;OAcG;IACK,KAAK,CAAC,YAAY,CACtB,QAAsB,EACtB,UAAsB,EACtB,WAAqB,EACrB,SAAiB;QAEjB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACpC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CACtE,CAAC;YAEF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YACrF,YAAY,IAAI,YAAY,CAAC;YAE7B,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC9B,SAAS,CAAC,6BAA6B,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,YAAY,IAAI,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;YACzL,CAAC;QACL,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACjE,CAAC;IAED;;;;;;;;;;OAUG;IACK,KAAK,CAAC,oBAAoB,CAAC,MAAkB,EAAE,WAAqB;QACxE,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAEpF,IAAI,MAAM,EAAE,CAAC;gBACT,gEAAgE;gBAChE,mEAAmE;gBACnE,qEAAqE;gBACrE,mEAAmE;gBACnE,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,QAAQ,CAAC,+CAA+C,MAAM,CAAC,UAAU,CAAC,IAAI,YAAY,GAAG,EAAE,CAAC,CAAC;YACjG,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACK,sBAAsB,CAAC,MAAkB;QAC7C,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC7B,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QAC1B,iFAAiF;QACjF,+EAA+E;QAC/E,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,aAAyD,CAAC;QAClF,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QAErB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,WAAW,CAAC,cAAc;YACjC,SAAS,EAAE,UAAU,CAAC,aAAa;YACnC,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;IAED,mEAAmE;IACnE,UAAU;IACV,mEAAmE;IAEnE;;;;OAIG;IACK,mBAAmB,CAAC,UAAsB;QAC9C,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAChC,CAAC,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;YAC1D,CAAC,CAAC,YAAY,KAAK,aAAa,IAAI,CAAC,CAAC,YAAY,KAAK,cAAc,CACxE,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,2BAA2B,CAAC,QAAgB,EAAE,WAAqB;QAC7E,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,OAAO,CAAuB;YAC1D,UAAU,EAAE,sBAAsB;YAClC,WAAW,EAAE,eAAe,QAAQ,GAAG;YACvC,MAAM,EAAE,CAAC,UAAU,CAAC;YACpB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,IAAI;SACtB,EAAE,WAAW,CAAC,CAAC;QAEhB,OAAO,IAAI,GAAG,CACV,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAC5E,CAAC;IACN,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,MAAkB;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAuB,EAAE,IAAY,EAAE,YAAoB;QAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,YAAY,CAAC;QACrF,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,MAAuB,EAAE,IAAY;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACzC,CAAC;;AAxdQ,wBAAwB;IADpC,aAAa,CAAC,UAAU,EAAE,qBAAqB,CAAC;GACpC,wBAAwB,CAydpC"}
1
+ {"version":3,"file":"scheduled-geocoding.action.js","sourceRoot":"","sources":["../../../src/custom/geo/scheduled-geocoding.action.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/core-actions",
3
3
  "type": "module",
4
- "version": "5.31.0",
4
+ "version": "5.33.0",
5
5
  "description": "Library of generated and custom actions for the core MemberJunction framework. This library is maintained by MemberJunction and includes actions for use within the framework itself.",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -25,34 +25,35 @@
25
25
  "dependencies": {
26
26
  "@asamuzakjp/css-color": "^4.1.2",
27
27
  "@dagrejs/dagre": "^1.1.8",
28
- "@memberjunction/actions": "5.31.0",
29
- "@memberjunction/actions-base": "5.31.0",
30
- "@memberjunction/ai": "5.31.0",
31
- "@memberjunction/ai-mcp-client": "5.31.0",
32
- "@memberjunction/ai-agent-manager": "5.31.0",
33
- "@memberjunction/ai-agents": "5.31.0",
34
- "@memberjunction/ai-betty-bot": "5.31.0",
35
- "@memberjunction/ai-core-plus": "5.31.0",
36
- "@memberjunction/ai-engine-base": "5.31.0",
37
- "@memberjunction/ai-prompts": "5.31.0",
38
- "@memberjunction/ai-vector-sync": "5.31.0",
39
- "@memberjunction/aiengine": "5.31.0",
40
- "@memberjunction/geo-core": "5.31.0",
41
- "@memberjunction/code-execution": "5.31.0",
42
- "@memberjunction/communication-engine": "5.31.0",
43
- "@memberjunction/communication-types": "5.31.0",
44
- "@memberjunction/content-autotagging": "5.31.0",
45
- "@memberjunction/core": "5.31.0",
46
- "@memberjunction/core-entities": "5.31.0",
47
- "@memberjunction/core-entities-server": "5.31.0",
48
- "@memberjunction/export-engine": "5.31.0",
49
- "@memberjunction/external-change-detection": "5.31.0",
50
- "@memberjunction/generic-database-provider": "5.31.0",
51
- "@memberjunction/global": "5.31.0",
52
- "@memberjunction/integration-engine": "5.31.0",
53
- "@memberjunction/search-engine": "5.31.0",
54
- "@memberjunction/sqlserver-dataprovider": "5.31.0",
55
- "@memberjunction/storage": "5.31.0",
28
+ "@memberjunction/actions": "5.33.0",
29
+ "@memberjunction/actions-base": "5.33.0",
30
+ "@memberjunction/ai": "5.33.0",
31
+ "@memberjunction/ai-mcp-client": "5.33.0",
32
+ "@memberjunction/ai-agent-manager": "5.33.0",
33
+ "@memberjunction/ai-agents": "5.33.0",
34
+ "@memberjunction/ai-betty-bot": "5.33.0",
35
+ "@memberjunction/ai-core-plus": "5.33.0",
36
+ "@memberjunction/ai-engine-base": "5.33.0",
37
+ "@memberjunction/ai-prompts": "5.33.0",
38
+ "@memberjunction/ai-vector-sync": "5.33.0",
39
+ "@memberjunction/aiengine": "5.33.0",
40
+ "@memberjunction/geo-core": "5.33.0",
41
+ "@memberjunction/code-execution": "5.33.0",
42
+ "@memberjunction/communication-engine": "5.33.0",
43
+ "@memberjunction/communication-types": "5.33.0",
44
+ "@memberjunction/content-autotagging": "5.33.0",
45
+ "@memberjunction/core": "5.33.0",
46
+ "@memberjunction/core-entities": "5.33.0",
47
+ "@memberjunction/core-entities-server": "5.33.0",
48
+ "@memberjunction/export-engine": "5.33.0",
49
+ "@memberjunction/external-change-detection": "5.33.0",
50
+ "@memberjunction/generic-database-provider": "5.33.0",
51
+ "@memberjunction/global": "5.33.0",
52
+ "@memberjunction/integration-engine": "5.33.0",
53
+ "@memberjunction/search-engine": "5.33.0",
54
+ "@memberjunction/sql-dialect": "5.33.0",
55
+ "@memberjunction/sqlserver-dataprovider": "5.33.0",
56
+ "@memberjunction/storage": "5.33.0",
56
57
  "@types/d3-cloud": "^1.2.9",
57
58
  "@types/d3-force": "^3.0.10",
58
59
  "@types/d3-hierarchy": "^3.1.7",