@memberjunction/core 5.47.0 → 5.49.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/generic/RegisterForStartup.d.ts +78 -1
- package/dist/generic/RegisterForStartup.d.ts.map +1 -1
- package/dist/generic/RegisterForStartup.js +108 -7
- package/dist/generic/RegisterForStartup.js.map +1 -1
- package/dist/generic/baseEntity.d.ts +5 -0
- package/dist/generic/baseEntity.d.ts.map +1 -1
- package/dist/generic/baseEntity.js +25 -4
- package/dist/generic/baseEntity.js.map +1 -1
- package/dist/generic/compositeKey.d.ts.map +1 -1
- package/dist/generic/compositeKey.js +8 -1
- package/dist/generic/compositeKey.js.map +1 -1
- package/dist/generic/interfaces.d.ts +7 -0
- package/dist/generic/interfaces.d.ts.map +1 -1
- package/dist/generic/interfaces.js.map +1 -1
- package/dist/generic/localCacheManager.d.ts +179 -7
- package/dist/generic/localCacheManager.d.ts.map +1 -1
- package/dist/generic/localCacheManager.js +409 -26
- package/dist/generic/localCacheManager.js.map +1 -1
- package/dist/generic/permissionInterfaces.d.ts +11 -0
- package/dist/generic/permissionInterfaces.d.ts.map +1 -1
- package/dist/generic/permissionInterfaces.js +13 -2
- package/dist/generic/permissionInterfaces.js.map +1 -1
- package/dist/generic/providerBase.d.ts +87 -4
- package/dist/generic/providerBase.d.ts.map +1 -1
- package/dist/generic/providerBase.js +325 -62
- package/dist/generic/providerBase.js.map +1 -1
- package/dist/generic/util.d.ts.map +1 -1
- package/dist/generic/util.js +6 -0
- package/dist/generic/util.js.map +1 -1
- package/dist/views/runView.d.ts +1 -1
- package/dist/views/runView.d.ts.map +1 -1
- package/dist/views/runView.js +18 -3
- package/dist/views/runView.js.map +1 -1
- package/dist/views/viewInfo.js +1 -1
- package/dist/views/viewInfo.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseSingleton } from "@memberjunction/global";
|
|
2
2
|
import { AggregateResult, DatasetItemFilterType, DatasetResultType, IMetadataProvider, ILocalStorageProvider } from "./interfaces.js";
|
|
3
|
-
import { RunViewParams } from "../views/runView.js";
|
|
3
|
+
import { AggregateExpression, RunViewParams } from "../views/runView.js";
|
|
4
4
|
import { BaseEntityEvent } from "./baseEntity.js";
|
|
5
5
|
import { CompositeKey } from "./compositeKey.js";
|
|
6
6
|
/**
|
|
@@ -95,6 +95,13 @@ export interface CachedRunViewResult {
|
|
|
95
95
|
aggregateResults?: AggregateResult[];
|
|
96
96
|
/** Total row count from the database — may differ from rowCount for paginated queries */
|
|
97
97
|
totalRowCount?: number;
|
|
98
|
+
/**
|
|
99
|
+
* Schema fingerprint captured when these rows were cached, surfaced from the stored payload
|
|
100
|
+
* so in-place maintenance can carry it FORWARD when rewriting the slot (B38). Without it the
|
|
101
|
+
* rewrite drops the hash, and `isSchemaStaleCacheEntry` short-circuits on a missing hash —
|
|
102
|
+
* permanently disabling post-migration drift detection for that slot.
|
|
103
|
+
*/
|
|
104
|
+
schemaHash?: string;
|
|
98
105
|
}
|
|
99
106
|
/**
|
|
100
107
|
* Configuration for the LocalCacheManager
|
|
@@ -301,7 +308,11 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
301
308
|
SetStorageProvider(newProvider: ILocalStorageProvider): Promise<void>;
|
|
302
309
|
/**
|
|
303
310
|
* Extracts the entity name from a RunView fingerprint.
|
|
304
|
-
* Fingerprint format: `
|
|
311
|
+
* Fingerprint format: `Entity|Filter|OrderBy|MaxRows|StartRow|AggHash|UserSearch[|…]`
|
|
312
|
+
* (built in GenerateRunViewFingerprint below — that array is the ground truth). NOTE:
|
|
313
|
+
* `ResultType` is deliberately NOT a segment; the cache stores plain JSON regardless and
|
|
314
|
+
* transformation happens post-cache. An earlier version of this comment listed it, which
|
|
315
|
+
* would put any new segment-indexing predicate one position off — MaxRows is [3], not [4].
|
|
305
316
|
* @param fingerprint - The RunView cache fingerprint
|
|
306
317
|
* @returns The entity name, or null if the fingerprint is malformed
|
|
307
318
|
*/
|
|
@@ -313,6 +324,131 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
313
324
|
* @param fingerprint - The RunView cache fingerprint
|
|
314
325
|
*/
|
|
315
326
|
protected isFilteredFingerprint(fingerprint: string): boolean;
|
|
327
|
+
/**
|
|
328
|
+
* Returns true if the slot was cached under an ORDER BY (fingerprint segment [2]).
|
|
329
|
+
*
|
|
330
|
+
* An ordered slot's row SET can be maintained in place, but its ORDER cannot: an upsert
|
|
331
|
+
* appends the new row at map-insertion end and leaves re-sorted rows at their old positions,
|
|
332
|
+
* so the slot silently stops honoring the order the caller asked for — wrong for any
|
|
333
|
+
* "first row of the ordered set" consumer. Re-sorting in JS would require reimplementing SQL
|
|
334
|
+
* ORDER BY semantics (collations, NULL ordering, expression sorts), which is exactly the kind
|
|
335
|
+
* of "derive it in JS" shortcut this file keeps having to walk back.
|
|
336
|
+
*
|
|
337
|
+
* DELETE remains maintainable: removing a row preserves the relative order of the rest. This
|
|
338
|
+
* mirrors the filtered-slot asymmetry, and the branch order in
|
|
339
|
+
* processEntityEventForFingerprint (delete is checked before the filtered classification)
|
|
340
|
+
* delivers it without extra wiring. `BaseEngine` already refuses ordered configs for
|
|
341
|
+
* in-place mutation (`canUseImmediateMutation`); this closes the same gap in the raw
|
|
342
|
+
* provider cache. (B42)
|
|
343
|
+
*
|
|
344
|
+
* @param parts - the fingerprint already split on '|'
|
|
345
|
+
*/
|
|
346
|
+
protected hasOrderBy(parts: string[]): boolean;
|
|
347
|
+
/**
|
|
348
|
+
* Returns true if the slot was produced by a user search (fingerprint segment [6]).
|
|
349
|
+
*
|
|
350
|
+
* `UserSearchString` generates LIKE / full-text WHERE clauses, so it narrows rows exactly as
|
|
351
|
+
* `ExtraFilter` does — but it lives at index [6], INSIDE the 7-segment base, where neither the
|
|
352
|
+
* `parts[1]` filter check nor `hasNarrowingSegment` (which starts at index 7) was looking.
|
|
353
|
+
*
|
|
354
|
+
* Same bug class as H1/H3, different hiding place: a row-narrowing predicate invisible to the
|
|
355
|
+
* maintainability check. Demonstrated by upserting a non-matching row into a search slot —
|
|
356
|
+
* a search for "annual gala" subsequently served "Totally Unrelated Row". Explorer grid
|
|
357
|
+
* searches are the reachable surface. (N1)
|
|
358
|
+
*
|
|
359
|
+
* @param parts - the fingerprint already split on '|'
|
|
360
|
+
*/
|
|
361
|
+
protected hasUserSearch(parts: string[]): boolean;
|
|
362
|
+
/**
|
|
363
|
+
* Returns true if the slot carries aggregate results (fingerprint segment [5], `aggHash`).
|
|
364
|
+
*
|
|
365
|
+
* ## Why an aggregate slot must be INVALIDATED, not maintained (H2)
|
|
366
|
+
* The aggregate was computed by the DATABASE over the pre-mutation row set. After an in-place
|
|
367
|
+
* upsert/remove there is no way to recompute it in JS for the general case: `COUNT(*)` shifts
|
|
368
|
+
* by one, `SUM`/`AVG` need the mutated row's contribution to the specific expression, and
|
|
369
|
+
* `MAX`/`MIN` may or may not move depending on the value.
|
|
370
|
+
*
|
|
371
|
+
* The first attempt at this fix CARRIED the cached aggregate forward — which was worse than
|
|
372
|
+
* the bug it replaced. Verified live: after a save the slot reported `rows=7` alongside
|
|
373
|
+
* `COUNT(*) = 6`. A caller can detect a MISSING aggregate; it cannot detect a stale one, and
|
|
374
|
+
* the read path reports `Success: true` / `cacheStatus: 'hit'` either way. Silently wrong
|
|
375
|
+
* beats loudly absent only if you never look.
|
|
376
|
+
*
|
|
377
|
+
* So: same treatment as subset slots. The value is not derivable in JS, therefore the slot is
|
|
378
|
+
* dropped and the next read recomputes it against the database.
|
|
379
|
+
*
|
|
380
|
+
* @param parts - the fingerprint already split on '|'
|
|
381
|
+
*/
|
|
382
|
+
protected hasAggregates(parts: string[]): boolean;
|
|
383
|
+
/**
|
|
384
|
+
* Returns true if the fingerprint carries any segment BEYOND the 7-part base that narrows the
|
|
385
|
+
* result set — i.e. the slot holds fewer rows than an unfiltered read of the same entity would.
|
|
386
|
+
*
|
|
387
|
+
* ## Why this exists (H1/H3)
|
|
388
|
+
* The base fingerprint is `Entity|Filter|OrderBy|MaxRows|StartRow|AggHash|UserSearch`, and the
|
|
389
|
+
* original filtered-check inspected ONLY `parts[1]`. But two later segments narrow the rows
|
|
390
|
+
* WITHOUT touching that segment:
|
|
391
|
+
*
|
|
392
|
+
* - `vw:<id>` — a saved view's `WhereClause` lives ON THE VIEW, not in `params.ExtraFilter`,
|
|
393
|
+
* so the filter segment stays `_`. The slot was therefore classified
|
|
394
|
+
* unfiltered and UPSERTED IN PLACE on save — serving rows the view's own
|
|
395
|
+
* WhereClause excludes. Views are how users are shown a restricted row set,
|
|
396
|
+
* so this reads as a data/permission leak, not merely stale data.
|
|
397
|
+
* - `rls:<h>` — the per-user Row-Level-Security predicate is appended AFTER the filter
|
|
398
|
+
* segment is built. Same misclassification, worse consequence: a save by
|
|
399
|
+
* user A was upserted into user B's RLS-scoped slot, injecting a row B's
|
|
400
|
+
* predicate excludes. That is an RLS bypass.
|
|
401
|
+
*
|
|
402
|
+
* ## Why it is written as a DENY-by-default allowlist
|
|
403
|
+
* Enumerating the narrowing segments would repeat the original mistake: the next segment
|
|
404
|
+
* someone appends is silently treated as maintainable until it causes a leak. So this
|
|
405
|
+
* enumerates only what is provably SAFE and treats everything else as narrowing:
|
|
406
|
+
*
|
|
407
|
+
* - `imr:1` — IgnoreMaxRows WIDENS the set (it removes a cap), so in-place maintenance
|
|
408
|
+
* remains valid.
|
|
409
|
+
* - connection — the `<driver>://host:port/` suffix is slot IDENTITY, not a predicate.
|
|
410
|
+
*
|
|
411
|
+
* Anything else — present or future — falls through to "narrowing", and the slot is
|
|
412
|
+
* conservatively invalidated on mutation rather than maintained. A new segment can therefore
|
|
413
|
+
* cost a cache refill, but it can never silently serve the wrong rows.
|
|
414
|
+
*
|
|
415
|
+
* @param parts - the fingerprint already split on '|'
|
|
416
|
+
*/
|
|
417
|
+
protected hasNarrowingSegment(parts: string[]): boolean;
|
|
418
|
+
/**
|
|
419
|
+
* Returns true if the fingerprint identifies a **subset slot** — a cache entry whose rows are
|
|
420
|
+
* a TRUNCATION (`MaxRows`) or an OFFSET WINDOW (`StartRow`) of the matching set rather than
|
|
421
|
+
* the complete set.
|
|
422
|
+
*
|
|
423
|
+
* Subset slots are safe to STORE and SERVE (a cold read of the slot is exactly what the DB
|
|
424
|
+
* would have returned), but they must NEVER be maintained in place by the BaseEntity
|
|
425
|
+
* save/delete event path:
|
|
426
|
+
*
|
|
427
|
+
* - **Save/upsert** appends the saved row to the slot, so a `MaxRows: 1` slot grows to 2, 3,
|
|
428
|
+
* 4 … rows — silently violating the caller's own row limit and serving a set that is
|
|
429
|
+
* neither the first-N nor the full set (one arbitrary original row plus every locally
|
|
430
|
+
* saved row).
|
|
431
|
+
* - **Delete/remove** shrinks the slot below the limit, so a `MaxRows: 1` slot serves 0 rows
|
|
432
|
+
* while the DB still has 47 matching rows to choose a TOP 1 from.
|
|
433
|
+
*
|
|
434
|
+
* Neither can be repaired in JS: deciding whether a newly saved row belongs *inside* the
|
|
435
|
+
* window, and which row it would displace, requires re-running the query's TOP/OFFSET against
|
|
436
|
+
* the database. So we treat subset slots exactly as filtered slots are treated on save —
|
|
437
|
+
* conservatively INVALIDATE and let the next read repopulate from the DB.
|
|
438
|
+
*
|
|
439
|
+
* This is the row-level counterpart to the `totalRowCount` subset-slot handling: the total is
|
|
440
|
+
* maintained across the delta because the DB total is knowable; the ROWS are not, so the slot
|
|
441
|
+
* is dropped instead.
|
|
442
|
+
*
|
|
443
|
+
* Fingerprint format: `Entity|Filter|OrderBy|MaxRows|StartRow|AggHash|UserSearch[|…]`.
|
|
444
|
+
* Parsing is deliberately conservative — if the segments aren't cleanly numeric (e.g. a filter
|
|
445
|
+
* value containing a literal `|` shifts the positions), we return false and preserve existing
|
|
446
|
+
* behavior rather than over-invalidating. Such a fingerprint is filtered by definition, and
|
|
447
|
+
* filtered slots are already invalidated on save.
|
|
448
|
+
*
|
|
449
|
+
* @param fingerprint - The RunView cache fingerprint
|
|
450
|
+
*/
|
|
451
|
+
protected isSubsetFingerprint(fingerprint: string): boolean;
|
|
316
452
|
/**
|
|
317
453
|
* Checks whether a cached RunView entry is structurally stale due to a schema change
|
|
318
454
|
* (e.g., new columns added via migration + CodeGen). Compares the stored schema hash
|
|
@@ -505,7 +641,11 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
505
641
|
* Generates a human-readable cache fingerprint for a RunView request.
|
|
506
642
|
* This fingerprint uniquely identifies the query based on its parameters and connection.
|
|
507
643
|
*
|
|
508
|
-
* Format:
|
|
644
|
+
* Format: Entity|Filter|OrderBy|MaxRows|StartRow|AggHash|UserSearch[|appended…][|connection]
|
|
645
|
+
* (the parts array below is the ground truth). NOTE: resultType is NOT a segment — an older
|
|
646
|
+
* version of this comment listed it, which put every index after [2] off by one; that exact
|
|
647
|
+
* off-by-one trap has already bitten a segment-indexing predicate once (see the note on
|
|
648
|
+
* extractEntityFromFingerprint).
|
|
509
649
|
* Example: Users|Active=1|Name ASC|simple|100|0|a1b2c3d4|localhost
|
|
510
650
|
*
|
|
511
651
|
* @param params - The RunView parameters
|
|
@@ -526,6 +666,23 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
526
666
|
* @returns A hash string, or '_' if no aggregates
|
|
527
667
|
*/
|
|
528
668
|
private generateAggregateHash;
|
|
669
|
+
/**
|
|
670
|
+
* Reorders cached AggregateResults to match the CALLER's requested Aggregates[] order.
|
|
671
|
+
*
|
|
672
|
+
* The aggregate fingerprint (see {@link generateAggregateHash}) is deliberately
|
|
673
|
+
* order-insensitive — it sorts the aggregates — so two semantically-identical views
|
|
674
|
+
* requested as [A,B] and [B,A] share a single cache slot (cache-efficient). But the
|
|
675
|
+
* {@link RunViewResult.AggregateResults} contract is "in same order as input Aggregates
|
|
676
|
+
* array" — PER caller. A slot warmed as [A,B] therefore hands a [B,A] caller its results
|
|
677
|
+
* in the wrong order unless we remap on the way out. This does that remap.
|
|
678
|
+
*
|
|
679
|
+
* Matching is by (expression, effective alias) — the same identity that produced the
|
|
680
|
+
* aggHash (a result's alias defaults to its expression when the request omitted one).
|
|
681
|
+
* Fail-safe: returns the input unchanged when there are no aggregates to reorder, the
|
|
682
|
+
* counts differ, or any aggregate can't be matched — so a remap is never able to drop or
|
|
683
|
+
* fabricate a result.
|
|
684
|
+
*/
|
|
685
|
+
ReorderAggregateResultsToRequest(cachedResults: AggregateResult[] | undefined, requestedAggregates: AggregateExpression[] | undefined): AggregateResult[] | undefined;
|
|
529
686
|
/**
|
|
530
687
|
* Simple hash function for creating short fingerprints from strings.
|
|
531
688
|
* Not cryptographic, just for deduplication/fingerprinting purposes.
|
|
@@ -625,13 +782,16 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
625
782
|
* @param deletedRecordIDs - Record IDs (in CompositeKey concatenated string format) that have been deleted
|
|
626
783
|
* @param primaryKeyFieldName - The name of the primary key field (or first PK field for composite keys)
|
|
627
784
|
* @param newMaxUpdatedAt - The new maxUpdatedAt timestamp after applying the delta
|
|
628
|
-
* @param
|
|
785
|
+
* @param serverRowCount - The database's authoritative total row count (fresh COUNT(*) over the
|
|
786
|
+
* view) from the smart-cache check. Used as the merged entry's `totalRowCount` when it exceeds
|
|
787
|
+
* the cached slice size — this keeps paginated / MaxRows-limited slots from undercounting the
|
|
788
|
+
* true total. The visible `rowCount` is still derived from the merged results length.
|
|
629
789
|
* @param aggregateResults - Optional fresh aggregate results (since aggregates can't be differentially computed)
|
|
630
790
|
* @param provider - The IMetadataProvider that produced these results (for AllowCaching gating
|
|
631
791
|
* in multi-provider scenarios). Falls back to global Metadata.Provider when omitted.
|
|
632
792
|
* @returns The merged results after applying the differential update, or null if cache not found
|
|
633
793
|
*/
|
|
634
|
-
ApplyDifferentialUpdate(fingerprint: string, params: RunViewParams, updatedRows: unknown[], deletedRecordIDs: string[], primaryKeyFieldName: string, newMaxUpdatedAt: string,
|
|
794
|
+
ApplyDifferentialUpdate(fingerprint: string, params: RunViewParams, updatedRows: unknown[], deletedRecordIDs: string[], primaryKeyFieldName: string, newMaxUpdatedAt: string, serverRowCount?: number, aggregateResults?: AggregateResult[], provider?: IMetadataProvider): Promise<CachedRunViewResult | null>;
|
|
635
795
|
/**
|
|
636
796
|
* Upserts a single entity in a cached RunView result.
|
|
637
797
|
* Used by BaseEngine for immediate cache sync when an entity is saved.
|
|
@@ -665,6 +825,16 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
665
825
|
/**
|
|
666
826
|
* Stores updated results array back to the cache and updates the registry.
|
|
667
827
|
* Shared by UpsertSingleEntity and RemoveSingleEntity to avoid duplication.
|
|
828
|
+
*
|
|
829
|
+
* `prior` carries the pre-mutation total + row count so `totalRowCount` (the DATABASE
|
|
830
|
+
* total) is MAINTAINED across the in-place add/remove rather than dropped. Dropping it
|
|
831
|
+
* made reads fall back to `results.length`, which for a paginated / MaxRows-limited slot
|
|
832
|
+
* is only a SUBSET of the rows — so after the first save/delete event the slot's total
|
|
833
|
+
* collapsed to the cached slice size, undercounting the true total. That is the RunView
|
|
834
|
+
* TotalRowCount discrepancy where a fresh `count_only` reported a larger count than a
|
|
835
|
+
* cached paginated read. We adjust the prior total by the net row delta (add/remove) so a
|
|
836
|
+
* full-dataset slot is unchanged (prior total == prior length) while a subset slot keeps a
|
|
837
|
+
* correct total.
|
|
668
838
|
*/
|
|
669
839
|
private storeCachedResults;
|
|
670
840
|
/**
|
|
@@ -686,7 +856,7 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
686
856
|
* @param connectionPrefix - Prefix identifying the connection (e.g., server URL) to differentiate caches across connections
|
|
687
857
|
* @returns A unique, human-readable fingerprint string
|
|
688
858
|
*/
|
|
689
|
-
GenerateRunQueryFingerprint(queryId?: string, queryName?: string, parameters?: Record<string, unknown>, connectionPrefix?: string): string;
|
|
859
|
+
GenerateRunQueryFingerprint(queryId?: string, queryName?: string, parameters?: Record<string, unknown>, connectionPrefix?: string, categoryPath?: string): string;
|
|
690
860
|
/**
|
|
691
861
|
* Stores a RunQuery result in the cache.
|
|
692
862
|
*
|
|
@@ -698,7 +868,7 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
698
868
|
* @param queryId - Optional query ID for reference
|
|
699
869
|
* @param ttlMs - Optional TTL in milliseconds (for cache expiry tracking)
|
|
700
870
|
*/
|
|
701
|
-
SetRunQueryResult(fingerprint: string, queryName: string, results: unknown[], maxUpdatedAt: string, rowCount?: number, queryId?: string, ttlMs?: number): Promise<void>;
|
|
871
|
+
SetRunQueryResult(fingerprint: string, queryName: string, results: unknown[], maxUpdatedAt: string, rowCount?: number, queryId?: string, ttlMs?: number, warmedForUserID?: string): Promise<void>;
|
|
702
872
|
/**
|
|
703
873
|
* Retrieves a cached RunQuery result.
|
|
704
874
|
*
|
|
@@ -710,6 +880,8 @@ export declare class LocalCacheManager extends BaseSingleton<LocalCacheManager>
|
|
|
710
880
|
maxUpdatedAt: string;
|
|
711
881
|
rowCount: number;
|
|
712
882
|
queryId?: string;
|
|
883
|
+
/** User who executed the authorized miss that produced this slot (B43 tie-breaker). */
|
|
884
|
+
warmedForUserID?: string;
|
|
713
885
|
} | null>;
|
|
714
886
|
/**
|
|
715
887
|
* Invalidates a cached RunQuery result.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localCacheManager.d.ts","sourceRoot":"","sources":["../../src/generic/localCacheManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAyB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACnI,OAAO,
|
|
1
|
+
{"version":3,"file":"localCacheManager.d.ts","sourceRoot":"","sources":["../../src/generic/localCacheManager.ts"],"names":[],"mappings":"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"}
|