@x12i/memorix-hippox 1.0.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.
Files changed (58) hide show
  1. package/README.md +96 -0
  2. package/dist/collection-resolver.d.ts +16 -0
  3. package/dist/collection-resolver.d.ts.map +1 -0
  4. package/dist/collection-resolver.js +121 -0
  5. package/dist/collection-resolver.js.map +1 -0
  6. package/dist/config.d.ts +9 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +24 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/filters.d.ts +10 -0
  11. package/dist/filters.d.ts.map +1 -0
  12. package/dist/filters.js +75 -0
  13. package/dist/filters.js.map +1 -0
  14. package/dist/http/register-routes.d.ts +12 -0
  15. package/dist/http/register-routes.d.ts.map +1 -0
  16. package/dist/http/register-routes.js +90 -0
  17. package/dist/http/register-routes.js.map +1 -0
  18. package/dist/index-recommendations.d.ts +4 -0
  19. package/dist/index-recommendations.d.ts.map +1 -0
  20. package/dist/index-recommendations.js +40 -0
  21. package/dist/index-recommendations.js.map +1 -0
  22. package/dist/index.d.ts +14 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +13 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/legacy-bridge.d.ts +27 -0
  27. package/dist/legacy-bridge.d.ts.map +1 -0
  28. package/dist/legacy-bridge.js +53 -0
  29. package/dist/legacy-bridge.js.map +1 -0
  30. package/dist/paths.d.ts +15 -0
  31. package/dist/paths.d.ts.map +1 -0
  32. package/dist/paths.js +79 -0
  33. package/dist/paths.js.map +1 -0
  34. package/dist/resolve.d.ts +11 -0
  35. package/dist/resolve.d.ts.map +1 -0
  36. package/dist/resolve.js +180 -0
  37. package/dist/resolve.js.map +1 -0
  38. package/dist/service.d.ts +43 -0
  39. package/dist/service.d.ts.map +1 -0
  40. package/dist/service.js +96 -0
  41. package/dist/service.js.map +1 -0
  42. package/dist/simulate.d.ts +11 -0
  43. package/dist/simulate.d.ts.map +1 -0
  44. package/dist/simulate.js +211 -0
  45. package/dist/simulate.js.map +1 -0
  46. package/dist/store.d.ts +39 -0
  47. package/dist/store.d.ts.map +1 -0
  48. package/dist/store.js +180 -0
  49. package/dist/store.js.map +1 -0
  50. package/dist/types.d.ts +135 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/validation.d.ts +18 -0
  55. package/dist/validation.d.ts.map +1 -0
  56. package/dist/validation.js +107 -0
  57. package/dist/validation.js.map +1 -0
  58. package/package.json +68 -0
@@ -0,0 +1,211 @@
1
+ import { loadHippoxConfig } from './config.js';
2
+ import { buildTargetQueryFromLink } from './filters.js';
3
+ import { countObjectTypeDocuments, readObjectTypeDocuments, resolveObjectTypeCollection, } from './collection-resolver.js';
4
+ import { recommendIndexesForLink } from './index-recommendations.js';
5
+ import { readPath, readRecordId } from './paths.js';
6
+ export async function simulateContextLink(options) {
7
+ const config = loadHippoxConfig(options.processEnv);
8
+ const sampleLimit = options.sampleLimit ?? config.simulationLimit;
9
+ const examplesLimit = options.examplesLimit ?? config.simulationExamplesLimit;
10
+ const link = options.link;
11
+ const retrieval = options.retrieval;
12
+ const sourceBinding = await resolveObjectTypeCollection(retrieval, link.sourceObjectType, link.sourceContentType);
13
+ const targetBinding = await resolveObjectTypeCollection(retrieval, link.targetObjectType, link.targetContentType);
14
+ const sourceCount = await countObjectTypeDocuments(retrieval, sourceBinding);
15
+ const targetCount = await countObjectTypeDocuments(retrieval, targetBinding);
16
+ const driveFromSource = sourceCount <= targetCount;
17
+ const smallerCount = driveFromSource ? sourceCount : targetCount;
18
+ const exhaustive = sourceCount <= sampleLimit && targetCount <= sampleLimit;
19
+ const sampleSize = exhaustive ? smallerCount : Math.min(sampleLimit, smallerCount);
20
+ const sampledRecords = driveFromSource
21
+ ? await readObjectTypeDocuments(retrieval, sourceBinding, { limit: sampleSize })
22
+ : await readObjectTypeDocuments(retrieval, targetBinding, { limit: sampleSize });
23
+ let matchedSourceCount = 0;
24
+ let unmatchedSourceCount = 0;
25
+ let multipleMatchSourceCount = 0;
26
+ let queriedTargetCount = 0;
27
+ const propertyStats = initPropertyStats(link);
28
+ const examples = [];
29
+ const misses = [];
30
+ const warnings = [];
31
+ if (driveFromSource) {
32
+ for (const sourceRecord of sampledRecords) {
33
+ const sourceId = readRecordId(sourceRecord);
34
+ const query = buildTargetQueryFromLink(link, sourceRecord);
35
+ updatePropertyStats(propertyStats, link, sourceRecord, query !== null);
36
+ if (!query) {
37
+ unmatchedSourceCount += 1;
38
+ pushMiss(misses, examplesLimit, {
39
+ sourceRecordId: sourceId,
40
+ reason: 'missing join source field values',
41
+ joinValues: joinValuesForRecord(link, sourceRecord),
42
+ });
43
+ continue;
44
+ }
45
+ const matches = await readObjectTypeDocuments(retrieval, targetBinding, {
46
+ query,
47
+ limit: 5,
48
+ });
49
+ queriedTargetCount += 1;
50
+ if (matches.length === 0) {
51
+ unmatchedSourceCount += 1;
52
+ pushMiss(misses, examplesLimit, {
53
+ sourceRecordId: sourceId,
54
+ reason: 'no target match',
55
+ joinValues: joinValuesForRecord(link, sourceRecord),
56
+ });
57
+ }
58
+ else if (matches.length === 1) {
59
+ matchedSourceCount += 1;
60
+ pushExample(examples, examplesLimit, {
61
+ sourceRecordId: sourceId,
62
+ targetRecordIds: matches.map(readRecordId),
63
+ joinValues: joinValuesForRecord(link, sourceRecord),
64
+ });
65
+ }
66
+ else {
67
+ multipleMatchSourceCount += 1;
68
+ matchedSourceCount += 1;
69
+ pushExample(examples, examplesLimit, {
70
+ sourceRecordId: sourceId,
71
+ targetRecordIds: matches.map(readRecordId),
72
+ joinValues: joinValuesForRecord(link, sourceRecord),
73
+ });
74
+ }
75
+ }
76
+ }
77
+ else {
78
+ warnings.push({
79
+ code: 'target_driven_sampling',
80
+ message: 'Target collection is smaller; simulation sampled target records and checked reverse coverage heuristically.',
81
+ severity: 'info',
82
+ });
83
+ for (const targetRecord of sampledRecords) {
84
+ queriedTargetCount += 1;
85
+ const reverseMatches = await countReverseMatches(retrieval, sourceBinding, link, targetRecord);
86
+ if (reverseMatches === 0)
87
+ unmatchedSourceCount += 1;
88
+ else if (reverseMatches > 1)
89
+ multipleMatchSourceCount += 1;
90
+ else
91
+ matchedSourceCount += 1;
92
+ }
93
+ }
94
+ const evaluated = driveFromSource ? sampledRecords.length : sampledRecords.length;
95
+ const overallMatchQuality = evaluated > 0 ? matchedSourceCount / evaluated : 0;
96
+ const propertyQuality = finalizePropertyStats(propertyStats, evaluated);
97
+ if (multipleMatchSourceCount > 0 && evaluated > 0 && multipleMatchSourceCount / evaluated > 0.2) {
98
+ warnings.push({
99
+ code: 'high_duplicate_matches',
100
+ message: 'More than 20% of sampled sources match multiple target records.',
101
+ severity: 'warn',
102
+ });
103
+ }
104
+ if (overallMatchQuality < 0.5) {
105
+ warnings.push({
106
+ code: 'low_confidence',
107
+ message: 'Overall match quality is below 50%.',
108
+ severity: 'warn',
109
+ });
110
+ }
111
+ if (sourceCount > sampleLimit || targetCount > sampleLimit) {
112
+ warnings.push({
113
+ code: 'sampled_mode',
114
+ message: `Simulation used sampling with limit ${sampleLimit}.`,
115
+ severity: 'info',
116
+ });
117
+ }
118
+ const indexRecommendations = await recommendIndexesForLink(retrieval, link);
119
+ return {
120
+ mode: exhaustive ? 'exhaustive' : 'sampled',
121
+ sampleLimit,
122
+ sourceRecordCount: sourceCount,
123
+ targetRecordCount: targetCount,
124
+ sampledSourceCount: driveFromSource ? sampledRecords.length : 0,
125
+ queriedTargetCount,
126
+ matchedSourceCount,
127
+ unmatchedSourceCount,
128
+ multipleMatchSourceCount,
129
+ overallMatchQuality,
130
+ propertyQuality,
131
+ examples,
132
+ misses,
133
+ warnings,
134
+ indexRecommendations,
135
+ simulatedAt: new Date().toISOString(),
136
+ };
137
+ }
138
+ function initPropertyStats(link) {
139
+ const stats = new Map();
140
+ for (const join of link.join) {
141
+ stats.set(`${join.sourcePath}->${join.targetPath}`, { matched: 0, missing: 0 });
142
+ }
143
+ return stats;
144
+ }
145
+ function updatePropertyStats(stats, link, sourceRecord, allJoinValuesPresent) {
146
+ for (const join of link.join) {
147
+ const key = `${join.sourcePath}->${join.targetPath}`;
148
+ const row = stats.get(key);
149
+ const value = readPath(sourceRecord, join.sourcePath);
150
+ if (value === undefined || value === null)
151
+ row.missing += 1;
152
+ else if (allJoinValuesPresent)
153
+ row.matched += 1;
154
+ }
155
+ }
156
+ function finalizePropertyStats(stats, evaluated) {
157
+ const out = [];
158
+ for (const [key, row] of stats.entries()) {
159
+ const [sourcePath, targetPath] = key.split('->');
160
+ out.push({
161
+ sourcePath: sourcePath,
162
+ targetPath: targetPath,
163
+ matchedCount: row.matched,
164
+ missingSourceFieldCount: row.missing,
165
+ sampleCoverage: evaluated > 0 ? row.matched / evaluated : 0,
166
+ });
167
+ }
168
+ return out;
169
+ }
170
+ function joinValuesForRecord(link, sourceRecord) {
171
+ const out = {};
172
+ for (const join of link.join) {
173
+ out[join.sourcePath] = readPath(sourceRecord, join.sourcePath);
174
+ }
175
+ return out;
176
+ }
177
+ function pushExample(list, limit, item) {
178
+ if (list.length >= limit)
179
+ return;
180
+ list.push(item);
181
+ }
182
+ function pushMiss(list, limit, item) {
183
+ if (list.length >= limit)
184
+ return;
185
+ list.push(item);
186
+ }
187
+ async function countReverseMatches(retrieval, sourceBinding, link, targetRecord) {
188
+ const syntheticSource = { data: {} };
189
+ for (const join of link.join) {
190
+ const targetValue = readPath(targetRecord, join.targetPath);
191
+ const sourceRoot = join.sourcePath.startsWith('data.')
192
+ ? syntheticSource
193
+ : syntheticSource;
194
+ const segments = join.sourcePath.split('.');
195
+ let cursor = sourceRoot;
196
+ for (let i = 0; i < segments.length - 1; i += 1) {
197
+ const seg = segments[i];
198
+ const next = cursor[seg];
199
+ if (!next || typeof next !== 'object') {
200
+ cursor[seg] = {};
201
+ }
202
+ cursor = cursor[seg];
203
+ }
204
+ cursor[segments[segments.length - 1]] = targetValue;
205
+ }
206
+ const query = buildTargetQueryFromLink(link, syntheticSource);
207
+ if (!query)
208
+ return 0;
209
+ return countObjectTypeDocuments(retrieval, sourceBinding, query);
210
+ }
211
+ //# sourceMappingURL=simulate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulate.js","sourceRoot":"","sources":["../src/simulate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { Collection } from 'mongodb';
2
+ import type { MemorixRetrievalClient } from '@x12i/memorix-retrieval';
3
+ import type { ContextLink, ContextLinkInput, IndexRecommendation, SimulationSummary } from './types.js';
4
+ type HippoxStoreOptions = {
5
+ retrieval: MemorixRetrievalClient;
6
+ processEnv?: NodeJS.ProcessEnv;
7
+ };
8
+ type StoredContextLinkDoc = ContextLink & {
9
+ _id: string;
10
+ };
11
+ export declare class HippoxStore {
12
+ private readonly retrieval;
13
+ private readonly processEnv;
14
+ private client;
15
+ private db;
16
+ private collection;
17
+ private approvedCache;
18
+ private approvedCacheLoadedAt;
19
+ private readonly cacheTtlMs;
20
+ constructor(options: HippoxStoreOptions);
21
+ private config;
22
+ connect(): Promise<Collection<StoredContextLinkDoc>>;
23
+ close(): Promise<void>;
24
+ private ensureIndexes;
25
+ private toLink;
26
+ createDraft(input: ContextLinkInput): Promise<ContextLink>;
27
+ getById(id: string): Promise<ContextLink | null>;
28
+ listBySourceObjectType(sourceObjectType: string): Promise<ContextLink[]>;
29
+ saveSimulationResult(id: string, summary: SimulationSummary, recommendations: IndexRecommendation[]): Promise<ContextLink>;
30
+ approve(id: string): Promise<ContextLink>;
31
+ getApprovedByIds(ids: string[]): Promise<ContextLink[]>;
32
+ recordUsage(ids: string[]): Promise<void>;
33
+ private invalidateApprovedCache;
34
+ getApprovedCached(id: string): Promise<ContextLink | null>;
35
+ private refreshApprovedCache;
36
+ }
37
+ export declare function createHippoxStore(options: HippoxStoreOptions): Promise<HippoxStore>;
38
+ export {};
39
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,SAAS,CAAC;AAE3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,sBAAsB,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAChC,CAAC;AAEF,KAAK,oBAAoB,GAAG,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,UAAU,CAAiD;IACnE,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;gBAEzB,OAAO,EAAE,kBAAkB;IAKvC,OAAO,CAAC,MAAM;IAIR,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAWpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAUd,aAAa;IAO3B,OAAO,CAAC,MAAM;IAKR,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAyB1D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMhD,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAqBxE,oBAAoB,CACxB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,iBAAiB,EAC1B,eAAe,EAAE,mBAAmB,EAAE,GACrC,OAAO,CAAC,WAAW,CAAC;IAqBjB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyBzC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAOvD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,OAAO,CAAC,uBAAuB;IAKzB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;YAKlD,oBAAoB;CAYnC;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAIzF"}
package/dist/store.js ADDED
@@ -0,0 +1,180 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { getMongoForRetrieval } from '@x12i/memorix-mongo';
3
+ import { loadHippoxConfig } from './config.js';
4
+ import { validateContextLinkInput } from './validation.js';
5
+ export class HippoxStore {
6
+ retrieval;
7
+ processEnv;
8
+ client = null;
9
+ db = null;
10
+ collection = null;
11
+ approvedCache = new Map();
12
+ approvedCacheLoadedAt = 0;
13
+ cacheTtlMs = 30_000;
14
+ constructor(options) {
15
+ this.retrieval = options.retrieval;
16
+ this.processEnv = options.processEnv ?? process.env;
17
+ }
18
+ config() {
19
+ return loadHippoxConfig(this.processEnv);
20
+ }
21
+ async connect() {
22
+ if (this.collection)
23
+ return this.collection;
24
+ const lease = await getMongoForRetrieval(this.retrieval);
25
+ this.client = lease.client;
26
+ const { dbName, collectionName } = this.config();
27
+ this.db = this.client.db(dbName);
28
+ this.collection = this.db.collection(collectionName);
29
+ await this.ensureIndexes();
30
+ return this.collection;
31
+ }
32
+ async close() {
33
+ this.collection = null;
34
+ this.db = null;
35
+ this.approvedCache.clear();
36
+ if (this.client) {
37
+ await this.client.close();
38
+ this.client = null;
39
+ }
40
+ }
41
+ async ensureIndexes() {
42
+ const coll = await this.connect();
43
+ await coll.createIndex({ sourceObjectType: 1, status: 1, updatedAt: -1 }, { name: 'idx_source_status_updated' });
44
+ await coll.createIndex({ targetObjectType: 1, status: 1 }, { name: 'idx_target_status' });
45
+ await coll.createIndex({ status: 1, approvedAt: -1 }, { name: 'idx_status_approved' });
46
+ }
47
+ toLink(doc) {
48
+ const { _id, ...rest } = doc;
49
+ return { ...rest, id: rest.id || _id };
50
+ }
51
+ async createDraft(input) {
52
+ const validated = validateContextLinkInput(input);
53
+ const coll = await this.connect();
54
+ const now = new Date().toISOString();
55
+ const id = validated.id?.trim() || randomUUID();
56
+ const link = {
57
+ id,
58
+ sourceObjectType: validated.sourceObjectType,
59
+ targetObjectType: validated.targetObjectType,
60
+ alias: validated.alias,
61
+ direction: validated.direction,
62
+ sourceContentType: validated.sourceContentType,
63
+ targetContentType: validated.targetContentType,
64
+ join: validated.join,
65
+ fixedFilters: validated.fixedFilters,
66
+ retrieval: validated.retrieval,
67
+ status: 'draft',
68
+ createdAt: now,
69
+ updatedAt: now,
70
+ usageCount: 0,
71
+ };
72
+ await coll.insertOne({ ...link, _id: id });
73
+ return link;
74
+ }
75
+ async getById(id) {
76
+ const coll = await this.connect();
77
+ const doc = await coll.findOne({ _id: id });
78
+ return doc ? this.toLink(doc) : null;
79
+ }
80
+ async listBySourceObjectType(sourceObjectType) {
81
+ const coll = await this.connect();
82
+ const docs = await coll
83
+ .find({
84
+ sourceObjectType,
85
+ status: { $in: ['approved', 'draft', 'simulated'] },
86
+ })
87
+ .sort({ status: 1, approvedAt: -1, updatedAt: -1 })
88
+ .toArray();
89
+ const statusOrder = (status) => {
90
+ if (status === 'approved')
91
+ return 0;
92
+ if (status === 'simulated')
93
+ return 1;
94
+ return 2;
95
+ };
96
+ return docs
97
+ .map((doc) => this.toLink(doc))
98
+ .sort((a, b) => statusOrder(a.status) - statusOrder(b.status));
99
+ }
100
+ async saveSimulationResult(id, summary, recommendations) {
101
+ const coll = await this.connect();
102
+ const now = new Date().toISOString();
103
+ const result = await coll.findOneAndUpdate({ _id: id }, {
104
+ $set: {
105
+ status: 'simulated',
106
+ lastSimulation: summary,
107
+ confidence: summary.overallMatchQuality,
108
+ indexRecommendations: recommendations,
109
+ updatedAt: now,
110
+ },
111
+ }, { returnDocument: 'after' });
112
+ if (!result)
113
+ throw new Error(`context link not found: ${id}`);
114
+ this.invalidateApprovedCache();
115
+ return this.toLink(result);
116
+ }
117
+ async approve(id) {
118
+ const coll = await this.connect();
119
+ const existing = await coll.findOne({ _id: id });
120
+ if (!existing)
121
+ throw new Error(`context link not found: ${id}`);
122
+ if (!existing.lastSimulation) {
123
+ throw new Error('link must be simulated before approval');
124
+ }
125
+ const now = new Date().toISOString();
126
+ const result = await coll.findOneAndUpdate({ _id: id }, {
127
+ $set: {
128
+ status: 'approved',
129
+ approvedAt: now,
130
+ updatedAt: now,
131
+ usageCount: existing.usageCount ?? 0,
132
+ },
133
+ }, { returnDocument: 'after' });
134
+ if (!result)
135
+ throw new Error(`context link not found: ${id}`);
136
+ this.invalidateApprovedCache();
137
+ return this.toLink(result);
138
+ }
139
+ async getApprovedByIds(ids) {
140
+ if (ids.length === 0)
141
+ return [];
142
+ const coll = await this.connect();
143
+ const docs = await coll.find({ _id: { $in: ids }, status: 'approved' }).toArray();
144
+ return docs.map((doc) => this.toLink(doc));
145
+ }
146
+ async recordUsage(ids) {
147
+ if (ids.length === 0)
148
+ return;
149
+ const coll = await this.connect();
150
+ const now = new Date().toISOString();
151
+ await coll.updateMany({ _id: { $in: ids }, status: 'approved' }, { $inc: { usageCount: 1 }, $set: { lastUsedAt: now, updatedAt: now } });
152
+ }
153
+ invalidateApprovedCache() {
154
+ this.approvedCache.clear();
155
+ this.approvedCacheLoadedAt = 0;
156
+ }
157
+ async getApprovedCached(id) {
158
+ await this.refreshApprovedCache();
159
+ return this.approvedCache.get(id) ?? null;
160
+ }
161
+ async refreshApprovedCache() {
162
+ const now = Date.now();
163
+ if (now - this.approvedCacheLoadedAt < this.cacheTtlMs && this.approvedCache.size > 0)
164
+ return;
165
+ const coll = await this.connect();
166
+ const docs = await coll.find({ status: 'approved' }).toArray();
167
+ this.approvedCache.clear();
168
+ for (const doc of docs) {
169
+ const link = this.toLink(doc);
170
+ this.approvedCache.set(link.id, link);
171
+ }
172
+ this.approvedCacheLoadedAt = now;
173
+ }
174
+ }
175
+ export async function createHippoxStore(options) {
176
+ const store = new HippoxStore(options);
177
+ await store.connect();
178
+ return store;
179
+ }
180
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ export type LinkDirection = 'downstream' | 'upstream';
2
+ export type LinkStatus = 'draft' | 'simulated' | 'approved' | 'disabled';
3
+ export type JoinOperator = 'eq' | 'ne' | 'in' | 'nin';
4
+ export type FilterOperator = 'eq' | 'ne' | 'in' | 'nin' | 'exists' | 'gt' | 'gte' | 'lt' | 'lte';
5
+ export type OutputMode = 'data' | 'record' | 'dataWithRecordId';
6
+ export type RetrievalType = 'record' | 'list' | 'aggregate';
7
+ export type JoinMapping = {
8
+ sourcePath: string;
9
+ targetPath: string;
10
+ operator?: JoinOperator;
11
+ };
12
+ export type FixedFilter = {
13
+ targetPath: string;
14
+ operator: FilterOperator;
15
+ value?: unknown;
16
+ };
17
+ export type SortSpec = {
18
+ path: string;
19
+ direction: 'asc' | 'desc';
20
+ };
21
+ export type RecordRetrieval = {
22
+ type: 'record';
23
+ dateField?: string;
24
+ sort?: SortSpec[];
25
+ condition?: string;
26
+ outputMode?: OutputMode;
27
+ };
28
+ export type ListRetrieval = {
29
+ type: 'list';
30
+ sort?: SortSpec[];
31
+ limit?: number;
32
+ outputMode?: OutputMode;
33
+ };
34
+ export type AggregateRetrieval = {
35
+ type: 'aggregate';
36
+ properties: string[];
37
+ };
38
+ export type ContextLinkRetrieval = RecordRetrieval | ListRetrieval | AggregateRetrieval;
39
+ export type ContextLink = {
40
+ id: string;
41
+ sourceObjectType: string;
42
+ targetObjectType: string;
43
+ alias?: string;
44
+ direction: LinkDirection;
45
+ sourceContentType?: string;
46
+ targetContentType?: string;
47
+ join: JoinMapping[];
48
+ fixedFilters?: FixedFilter[];
49
+ retrieval: ContextLinkRetrieval;
50
+ status: LinkStatus;
51
+ createdAt: string;
52
+ updatedAt: string;
53
+ approvedAt?: string;
54
+ lastSimulation?: SimulationSummary;
55
+ confidence?: number;
56
+ indexRecommendations?: IndexRecommendation[];
57
+ usageCount?: number;
58
+ lastUsedAt?: string;
59
+ };
60
+ export type ContextLinkInput = Omit<ContextLink, 'id' | 'status' | 'createdAt' | 'updatedAt' | 'approvedAt' | 'lastSimulation' | 'confidence' | 'indexRecommendations' | 'usageCount' | 'lastUsedAt'> & {
61
+ id?: string;
62
+ status?: LinkStatus;
63
+ };
64
+ export type IndexRecommendation = {
65
+ field: string;
66
+ reason: string;
67
+ suggestedIndex?: Record<string, 1 | -1>;
68
+ };
69
+ export type SimulationWarning = {
70
+ code: string;
71
+ message: string;
72
+ severity: 'info' | 'warn' | 'error';
73
+ };
74
+ export type PropertyMatchQuality = {
75
+ sourcePath: string;
76
+ targetPath: string;
77
+ matchedCount: number;
78
+ missingSourceFieldCount: number;
79
+ sampleCoverage: number;
80
+ };
81
+ export type SimulationExampleMatch = {
82
+ sourceRecordId: string;
83
+ targetRecordIds: string[];
84
+ joinValues: Record<string, unknown>;
85
+ };
86
+ export type SimulationExampleMiss = {
87
+ sourceRecordId: string;
88
+ reason: string;
89
+ joinValues?: Record<string, unknown>;
90
+ };
91
+ export type SimulationSummary = {
92
+ mode: 'exhaustive' | 'sampled';
93
+ sampleLimit: number;
94
+ sourceRecordCount: number;
95
+ targetRecordCount: number;
96
+ sampledSourceCount: number;
97
+ queriedTargetCount: number;
98
+ matchedSourceCount: number;
99
+ unmatchedSourceCount: number;
100
+ multipleMatchSourceCount: number;
101
+ overallMatchQuality: number;
102
+ propertyQuality: PropertyMatchQuality[];
103
+ examples: SimulationExampleMatch[];
104
+ misses: SimulationExampleMiss[];
105
+ warnings: SimulationWarning[];
106
+ indexRecommendations: IndexRecommendation[];
107
+ simulatedAt: string;
108
+ };
109
+ export type ResolveContextInput = {
110
+ sourceRecordId?: string;
111
+ sourceRecord?: Record<string, unknown>;
112
+ sourceObjectType?: string;
113
+ linkIds?: string[];
114
+ links?: ContextLink[];
115
+ outputMode?: OutputMode;
116
+ };
117
+ export type ResolveContextResult = {
118
+ jobMemory: {
119
+ context: Record<string, unknown>;
120
+ };
121
+ };
122
+ export type HippoxConfig = {
123
+ dbName: string;
124
+ collectionName: string;
125
+ simulationLimit: number;
126
+ simulationExamplesLimit: number;
127
+ contextListLimit: number;
128
+ };
129
+ export type ObjectTypeCollectionBinding = {
130
+ objectType: string;
131
+ contentType: string;
132
+ collectionName: string;
133
+ target: 'entity' | 'event' | 'knowledge';
134
+ };
135
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { ContextLinkInput, ContextLinkRetrieval } from './types.js';
2
+ export declare class HippoxValidationError extends Error {
3
+ readonly statusCode = 400;
4
+ constructor(message: string);
5
+ }
6
+ export declare function validateContextLinkInput(input: ContextLinkInput): ContextLinkInput;
7
+ export declare function defaultRecordRetrieval(): ContextLinkRetrieval;
8
+ export declare function defaultListRetrieval(limit?: number): ContextLinkRetrieval;
9
+ export declare function contextKeyForLink(link: {
10
+ targetObjectType: string;
11
+ alias?: string;
12
+ }): string;
13
+ export declare function detectContextKeyCollisions(links: Array<{
14
+ targetObjectType: string;
15
+ alias?: string;
16
+ id?: string;
17
+ }>): string | null;
18
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAQzE,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,UAAU,OAAO;gBACd,OAAO,EAAE,MAAM;CAI5B;AAwCD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAoClF;AAED,wBAAgB,sBAAsB,IAAI,oBAAoB,CAE7D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAEzE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE5F;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,KAAK,CAAC;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACtE,MAAM,GAAG,IAAI,CAWf"}