@fintekkers/ledger-models 0.4.9 → 0.4.11

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 (75) hide show
  1. package/node/wrappers/models/hydrate.test.d.ts +1 -0
  2. package/node/wrappers/models/hydrate.test.js +204 -0
  3. package/node/wrappers/models/hydrate.test.js.map +1 -0
  4. package/node/wrappers/models/hydrate.test.ts +214 -0
  5. package/node/wrappers/models/lazy-hydrate-race.test.d.ts +1 -0
  6. package/node/wrappers/models/lazy-hydrate-race.test.js +153 -0
  7. package/node/wrappers/models/lazy-hydrate-race.test.js.map +1 -0
  8. package/node/wrappers/models/lazy-hydrate-race.test.ts +144 -0
  9. package/node/wrappers/models/lazy-hydrate.bench.test.d.ts +1 -0
  10. package/node/wrappers/models/lazy-hydrate.bench.test.js +121 -0
  11. package/node/wrappers/models/lazy-hydrate.bench.test.js.map +1 -0
  12. package/node/wrappers/models/lazy-hydrate.bench.test.ts +103 -0
  13. package/node/wrappers/models/portfolio/portfolio.d.ts +18 -0
  14. package/node/wrappers/models/portfolio/portfolio.js +93 -1
  15. package/node/wrappers/models/portfolio/portfolio.js.map +1 -1
  16. package/node/wrappers/models/portfolio/portfolio.ts +58 -1
  17. package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.d.ts +1 -0
  18. package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.js +158 -0
  19. package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.js.map +1 -0
  20. package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.ts +153 -0
  21. package/node/wrappers/models/price/Price.d.ts +5 -0
  22. package/node/wrappers/models/price/Price.js +48 -0
  23. package/node/wrappers/models/price/Price.js.map +1 -1
  24. package/node/wrappers/models/price/Price.ts +26 -0
  25. package/node/wrappers/models/security/identifier-validation.test.d.ts +1 -0
  26. package/node/wrappers/models/security/identifier-validation.test.js +104 -0
  27. package/node/wrappers/models/security/identifier-validation.test.js.map +1 -0
  28. package/node/wrappers/models/security/identifier-validation.test.ts +133 -0
  29. package/node/wrappers/models/security/identifier.d.ts +26 -0
  30. package/node/wrappers/models/security/identifier.js +54 -1
  31. package/node/wrappers/models/security/identifier.js.map +1 -1
  32. package/node/wrappers/models/security/identifier.test.js +6 -9
  33. package/node/wrappers/models/security/identifier.test.js.map +1 -1
  34. package/node/wrappers/models/security/identifier.test.ts +6 -9
  35. package/node/wrappers/models/security/identifier.ts +58 -0
  36. package/node/wrappers/models/security/security.d.ts +23 -5
  37. package/node/wrappers/models/security/security.js +53 -6
  38. package/node/wrappers/models/security/security.js.map +1 -1
  39. package/node/wrappers/models/security/security.ts +38 -6
  40. package/node/wrappers/models/transaction/transaction.d.ts +18 -0
  41. package/node/wrappers/models/transaction/transaction.js +98 -0
  42. package/node/wrappers/models/transaction/transaction.js.map +1 -1
  43. package/node/wrappers/models/transaction/transaction.ts +65 -0
  44. package/node/wrappers/services/portfolio-service/PortfolioService.js +35 -0
  45. package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
  46. package/node/wrappers/services/portfolio-service/PortfolioService.ts +14 -2
  47. package/node/wrappers/services/price-service/PriceService.js +10 -0
  48. package/node/wrappers/services/price-service/PriceService.js.map +1 -1
  49. package/node/wrappers/services/price-service/PriceService.ts +12 -2
  50. package/node/wrappers/services/security-service/SecurityService.js +23 -0
  51. package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
  52. package/node/wrappers/services/security-service/SecurityService.ts +27 -2
  53. package/node/wrappers/services/security.identifier-guard.test.d.ts +1 -0
  54. package/node/wrappers/services/security.identifier-guard.test.js +63 -0
  55. package/node/wrappers/services/security.identifier-guard.test.js.map +1 -0
  56. package/node/wrappers/services/security.identifier-guard.test.ts +70 -0
  57. package/node/wrappers/services/service-client-writethrough.test.d.ts +1 -0
  58. package/node/wrappers/services/service-client-writethrough.test.js +147 -0
  59. package/node/wrappers/services/service-client-writethrough.test.js.map +1 -0
  60. package/node/wrappers/services/service-client-writethrough.test.ts +141 -0
  61. package/node/wrappers/services/transaction-service/TransactionService.js +36 -0
  62. package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
  63. package/node/wrappers/services/transaction-service/TransactionService.ts +13 -0
  64. package/node/wrappers/util/link-cache.d.ts +13 -6
  65. package/node/wrappers/util/link-cache.js +51 -15
  66. package/node/wrappers/util/link-cache.js.map +1 -1
  67. package/node/wrappers/util/link-cache.ts +51 -17
  68. package/node/wrappers/util/link-resolver.d.ts +39 -31
  69. package/node/wrappers/util/link-resolver.js +157 -97
  70. package/node/wrappers/util/link-resolver.js.map +1 -1
  71. package/node/wrappers/util/link-resolver.test.js +88 -2
  72. package/node/wrappers/util/link-resolver.test.js.map +1 -1
  73. package/node/wrappers/util/link-resolver.test.ts +76 -2
  74. package/node/wrappers/util/link-resolver.ts +143 -124
  75. package/package.json +1 -1
@@ -1,4 +1,27 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -15,88 +38,67 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
38
  const util_1 = require("util");
16
39
  const security_service_grpc_pb_1 = require("../../fintekkers/services/security-service/security_service_grpc_pb");
17
40
  const portfolio_service_grpc_pb_1 = require("../../fintekkers/services/portfolio-service/portfolio_service_grpc_pb");
41
+ const transaction_service_grpc_pb_1 = require("../../fintekkers/services/transaction-service/transaction_service_grpc_pb");
18
42
  const query_security_request_pb_1 = require("../../fintekkers/requests/security/query_security_request_pb");
19
43
  const query_portfolio_request_pb_1 = require("../../fintekkers/requests/portfolio/query_portfolio_request_pb");
44
+ const query_transaction_request_pb_1 = require("../../fintekkers/requests/transaction/query_transaction_request_pb");
20
45
  const security_1 = __importDefault(require("../models/security/security"));
21
46
  const portfolio_1 = __importDefault(require("../models/portfolio/portfolio"));
47
+ const transaction_1 = __importDefault(require("../models/transaction/transaction"));
22
48
  const uuid_1 = require("../models/utils/uuid");
23
49
  const requestcontext_1 = __importDefault(require("../models/utils/requestcontext"));
50
+ const datetime_1 = require("../models/utils/datetime");
51
+ const LinkCacheModule = __importStar(require("./link-cache"));
24
52
  /**
25
- * Tiny LRU. Map keeps insertion order; on get-hit we delete + re-insert
26
- * to bump to the end (most recently used). On overflow we drop the
27
- * oldest entry (first key in the Map). Avoids pulling in lru-cache as a
28
- * dependency for ~30 lines of logic.
29
- */
30
- class TinyLRU {
31
- constructor(maxSize, ttlMs) {
32
- this.maxSize = maxSize;
33
- this.ttlMs = ttlMs;
34
- this.map = new Map();
35
- }
36
- get(key) {
37
- if (this.maxSize === 0)
38
- return undefined;
39
- const entry = this.map.get(key);
40
- if (!entry)
41
- return undefined;
42
- if (this.ttlMs !== undefined && Date.now() - entry.insertedAt > this.ttlMs) {
43
- this.map.delete(key);
44
- return undefined;
45
- }
46
- // Bump to most-recently-used.
47
- this.map.delete(key);
48
- this.map.set(key, entry);
49
- return entry.value;
50
- }
51
- set(key, value) {
52
- if (this.maxSize === 0)
53
- return;
54
- if (this.map.has(key))
55
- this.map.delete(key);
56
- this.map.set(key, { value, insertedAt: Date.now() });
57
- while (this.map.size > this.maxSize) {
58
- const oldest = this.map.keys().next().value;
59
- if (oldest === undefined)
60
- break;
61
- this.map.delete(oldest);
62
- }
63
- }
64
- size() {
65
- return this.map.size;
66
- }
67
- clear() {
68
- this.map.clear();
69
- }
70
- }
71
- /**
72
- * Stable serialization of a LocalTimestampProto for use in cache keys
73
- * and as_of-bucket grouping. Uses the proto's binary form (Uint8Array
53
+ * Stable serialization of a LocalTimestampProto for use in in-flight dedup
54
+ * keys and as_of-bucket grouping. Uses the proto's binary form (Uint8Array
74
55
  * → base64). Returns the literal "latest" when as_of is undefined so
75
56
  * unset and explicit-undefined collapse to the same bucket.
76
- *
77
- * Two LocalTimestampProto instances representing the same moment will
78
- * produce the same key as long as the underlying nanos/seconds match —
79
- * proto3 binary encoding is canonical for unset fields.
80
57
  */
81
58
  function asOfKey(asOf) {
82
59
  if (!asOf)
83
60
  return 'latest';
84
- // serializeBinary returns Uint8Array.
85
61
  const bytes = asOf.serializeBinary();
86
62
  return Buffer.from(bytes).toString('base64');
87
63
  }
64
+ function asOfToZdt(asOf) {
65
+ return asOf ? new datetime_1.ZonedDateTime(asOf) : null;
66
+ }
67
+ // Process-wide default singleton — lazily constructed on first
68
+ // `LinkResolver.getDefault()` call. Used by the wrapper `hydrate()`
69
+ // methods so callers don't have to thread a resolver instance through
70
+ // their code. Override the default by calling `LinkResolver.setDefault(...)`
71
+ // at process start (tests with mocked clients, alternate endpoints, etc.).
72
+ let defaultLinkResolver;
88
73
  class LinkResolver {
74
+ /**
75
+ * Process-wide singleton — lazily constructed with default options
76
+ * (env-derived endpoint via `EnvConfig`). The wrapper `hydrate()`
77
+ * methods reach for this when no resolver is passed explicitly, so
78
+ * users get auto-resolve on link-mode wrappers without threading a
79
+ * resolver through every call site.
80
+ */
81
+ static getDefault() {
82
+ if (!defaultLinkResolver) {
83
+ defaultLinkResolver = new LinkResolver();
84
+ }
85
+ return defaultLinkResolver;
86
+ }
87
+ /**
88
+ * Replace the process-wide default. Call once at process start for
89
+ * tests with mocked clients or to point at a non-default endpoint.
90
+ * Pass `undefined` to clear (next `getDefault()` call rebuilds).
91
+ */
92
+ static setDefault(resolver) {
93
+ defaultLinkResolver = resolver;
94
+ }
89
95
  constructor(opts = {}) {
90
- var _a;
91
96
  // Concurrent-call dedupe: a UUID currently being fetched maps to the
92
97
  // promise the *first* caller is awaiting. Subsequent callers for the
93
98
  // same UUID receive that same promise.
94
99
  this.securityInFlight = new Map();
95
100
  this.portfolioInFlight = new Map();
96
- const cacheSize = (_a = opts.cacheSize) !== null && _a !== void 0 ? _a : 1000;
97
- const ttlMs = opts.ttlMs;
98
- this.securityCache = new TinyLRU(cacheSize, ttlMs);
99
- this.portfolioCache = new TinyLRU(cacheSize, ttlMs);
101
+ this.transactionInFlight = new Map();
100
102
  if (opts.securityClient) {
101
103
  this.securityClient = opts.securityClient;
102
104
  }
@@ -117,6 +119,16 @@ class LinkResolver {
117
119
  else {
118
120
  this.portfolioClient = new portfolio_service_grpc_pb_1.PortfolioClient(requestcontext_1.default.apiURL, requestcontext_1.default.apiCredentials);
119
121
  }
122
+ if (opts.transactionClient) {
123
+ this.transactionClient = opts.transactionClient;
124
+ }
125
+ else if (opts.apiKey) {
126
+ const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(opts.apiKey);
127
+ this.transactionClient = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.apiURL, credentials, { interceptors });
128
+ }
129
+ else {
130
+ this.transactionClient = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.apiURL, requestcontext_1.default.apiCredentials);
131
+ }
120
132
  }
121
133
  /**
122
134
  * Resolve a single SecurityProto by UUID. If `asOf` is supplied, fetch
@@ -140,6 +152,16 @@ class LinkResolver {
140
152
  return new portfolio_1.default(proto);
141
153
  });
142
154
  }
155
+ /**
156
+ * Resolve a single TransactionProto by UUID, optionally as of `asOf`.
157
+ * Cached + concurrent-deduped on (uuid, asOf).
158
+ */
159
+ getTransaction(uuid, asOf) {
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ const proto = yield this.fetchTransactionProto(uuid, asOf);
162
+ return new transaction_1.default(proto);
163
+ });
164
+ }
143
165
  /**
144
166
  * Walk `items`, find the ones whose embedded security is `is_link=true`,
145
167
  * batch-fetch the unique (uuid, as_of) pairs (grouped by as_of so each
@@ -147,10 +169,6 @@ class LinkResolver {
147
169
  * place so subsequent `item.getSecurity()` calls return the full entity.
148
170
  * Returns the same array for chaining.
149
171
  *
150
- * Honors per-link `as_of`: if the embedded sub-message has `as_of` set,
151
- * the resolver fetches the version of the entity at that timestamp,
152
- * not the latest.
153
- *
154
172
  * `T` is structural: anything with a `proto` field that exposes
155
173
  * `getSecurity()` / `setSecurity()` works (Price, Transaction, etc).
156
174
  */
@@ -158,7 +176,7 @@ class LinkResolver {
158
176
  return __awaiter(this, void 0, void 0, function* () {
159
177
  if (items.length === 0)
160
178
  return items;
161
- // Group: as_of bucket → (cacheKey → UUID) for items not yet cached.
179
+ // Group: as_of bucket → (uuid string → UUID) for items not yet cached.
162
180
  const buckets = new Map();
163
181
  for (const item of items) {
164
182
  const sec = item.proto.getSecurity();
@@ -169,32 +187,29 @@ class LinkResolver {
169
187
  continue;
170
188
  const uuid = uuid_1.UUID.fromU8Array(uuidProto.getRawUuid_asU8());
171
189
  const asOf = sec.getAsOf();
172
- const bucketKey = asOfKey(asOf);
173
- const cacheKey = `${uuid.toString()}@${bucketKey}`;
174
- // Skip if already cached for this exact (uuid, as_of).
175
- if (this.securityCache.get(cacheKey))
190
+ const uuidStr = uuid.toString();
191
+ if (LinkCacheModule.SECURITY.get(uuidStr, asOfToZdt(asOf)))
176
192
  continue;
193
+ const bucketKey = asOfKey(asOf);
177
194
  let bucket = buckets.get(bucketKey);
178
195
  if (!bucket) {
179
196
  bucket = new Map();
180
197
  buckets.set(bucketKey, bucket);
181
198
  }
182
- if (!bucket.has(cacheKey))
183
- bucket.set(cacheKey, uuid);
199
+ if (!bucket.has(uuidStr))
200
+ bucket.set(uuidStr, uuid);
184
201
  }
185
202
  // One GetByIds RPC per as_of bucket. Fire in parallel.
186
203
  yield Promise.all(Array.from(buckets.entries()).map(([bucketKey, uuidMap]) => __awaiter(this, void 0, void 0, function* () {
187
- // Recover the LocalTimestampProto for this bucket from the first
188
- // item whose serialized as_of matches. We could store it alongside
189
- // but it's cheap to re-find.
190
- const asOf = bucketKey === 'latest' ? undefined : findAsOfForBucket(items, (sec) => sec.getSecurity(), bucketKey);
204
+ const asOf = bucketKey === 'latest' ? undefined : findAsOfForBucket(items, (proto) => proto.getSecurity(), bucketKey);
205
+ const asOfZdt = asOfToZdt(asOf);
191
206
  const fetched = yield this.batchFetchSecurities(Array.from(uuidMap.values()), asOf);
192
207
  for (const proto of fetched) {
193
208
  const uuidProto = proto.getUuid();
194
209
  if (!uuidProto)
195
210
  continue;
196
211
  const uuidStr = uuid_1.UUID.fromU8Array(uuidProto.getRawUuid_asU8()).toString();
197
- this.securityCache.set(`${uuidStr}@${bucketKey}`, proto);
212
+ LinkCacheModule.SECURITY.put(uuidStr, proto, asOfZdt);
198
213
  }
199
214
  })));
200
215
  // Mutate each item's embedded security in place.
@@ -206,8 +221,7 @@ class LinkResolver {
206
221
  if (!uuidProto)
207
222
  continue;
208
223
  const uuidStr = uuid_1.UUID.fromU8Array(uuidProto.getRawUuid_asU8()).toString();
209
- const bucketKey = asOfKey(sec.getAsOf());
210
- const resolved = this.securityCache.get(`${uuidStr}@${bucketKey}`);
224
+ const resolved = LinkCacheModule.SECURITY.get(uuidStr, asOfToZdt(sec.getAsOf()));
211
225
  if (resolved)
212
226
  item.proto.setSecurity(resolved);
213
227
  }
@@ -232,27 +246,28 @@ class LinkResolver {
232
246
  continue;
233
247
  const uuid = uuid_1.UUID.fromU8Array(uuidProto.getRawUuid_asU8());
234
248
  const asOf = port.getAsOf();
235
- const bucketKey = asOfKey(asOf);
236
- const cacheKey = `${uuid.toString()}@${bucketKey}`;
237
- if (this.portfolioCache.get(cacheKey))
249
+ const uuidStr = uuid.toString();
250
+ if (LinkCacheModule.PORTFOLIO.get(uuidStr, asOfToZdt(asOf)))
238
251
  continue;
252
+ const bucketKey = asOfKey(asOf);
239
253
  let bucket = buckets.get(bucketKey);
240
254
  if (!bucket) {
241
255
  bucket = new Map();
242
256
  buckets.set(bucketKey, bucket);
243
257
  }
244
- if (!bucket.has(cacheKey))
245
- bucket.set(cacheKey, uuid);
258
+ if (!bucket.has(uuidStr))
259
+ bucket.set(uuidStr, uuid);
246
260
  }
247
261
  yield Promise.all(Array.from(buckets.entries()).map(([bucketKey, uuidMap]) => __awaiter(this, void 0, void 0, function* () {
248
- const asOf = bucketKey === 'latest' ? undefined : findAsOfForBucket(items, (it) => it.getPortfolio(), bucketKey);
262
+ const asOf = bucketKey === 'latest' ? undefined : findAsOfForBucket(items, (proto) => proto.getPortfolio(), bucketKey);
263
+ const asOfZdt = asOfToZdt(asOf);
249
264
  const fetched = yield this.batchFetchPortfolios(Array.from(uuidMap.values()), asOf);
250
265
  for (const proto of fetched) {
251
266
  const uuidProto = proto.getUuid();
252
267
  if (!uuidProto)
253
268
  continue;
254
269
  const uuidStr = uuid_1.UUID.fromU8Array(uuidProto.getRawUuid_asU8()).toString();
255
- this.portfolioCache.set(`${uuidStr}@${bucketKey}`, proto);
270
+ LinkCacheModule.PORTFOLIO.put(uuidStr, proto, asOfZdt);
256
271
  }
257
272
  })));
258
273
  for (const item of items) {
@@ -263,37 +278,39 @@ class LinkResolver {
263
278
  if (!uuidProto)
264
279
  continue;
265
280
  const uuidStr = uuid_1.UUID.fromU8Array(uuidProto.getRawUuid_asU8()).toString();
266
- const bucketKey = asOfKey(port.getAsOf());
267
- const resolved = this.portfolioCache.get(`${uuidStr}@${bucketKey}`);
281
+ const resolved = LinkCacheModule.PORTFOLIO.get(uuidStr, asOfToZdt(port.getAsOf()));
268
282
  if (resolved)
269
283
  item.proto.setPortfolio(resolved);
270
284
  }
271
285
  return items;
272
286
  });
273
287
  }
274
- /** Test/debug helper. Not part of the stable API. */
288
+ /** Test/debug helper. Clears in-flight maps; the process-wide LinkCache
289
+ * is left alone (tests that need to drop a specific cached entry call
290
+ * `LinkCache.SECURITY.evict(uuid)` directly). */
275
291
  clearCache() {
276
- this.securityCache.clear();
277
- this.portfolioCache.clear();
278
292
  this.securityInFlight.clear();
279
293
  this.portfolioInFlight.clear();
294
+ this.transactionInFlight.clear();
280
295
  }
281
296
  // ---------- internals ----------
282
297
  fetchSecurityProto(uuid, asOf) {
283
298
  return __awaiter(this, void 0, void 0, function* () {
284
- const key = `${uuid.toString()}@${asOfKey(asOf)}`;
285
- const cached = this.securityCache.get(key);
299
+ const uuidStr = uuid.toString();
300
+ const asOfZdt = asOfToZdt(asOf);
301
+ const cached = LinkCacheModule.SECURITY.get(uuidStr, asOfZdt);
286
302
  if (cached)
287
303
  return cached;
304
+ const key = `${uuidStr}@${asOfKey(asOf)}`;
288
305
  const inFlight = this.securityInFlight.get(key);
289
306
  if (inFlight)
290
307
  return inFlight;
291
308
  const promise = this.batchFetchSecurities([uuid], asOf).then((protos) => {
292
309
  if (protos.length === 0) {
293
- throw new Error(`Security not found: ${uuid.toString()}@${asOfKey(asOf)}`);
310
+ throw new Error(`Security not found: ${key}`);
294
311
  }
295
312
  const proto = protos[0];
296
- this.securityCache.set(key, proto);
313
+ LinkCacheModule.SECURITY.put(uuidStr, proto, asOfZdt);
297
314
  return proto;
298
315
  }).finally(() => {
299
316
  this.securityInFlight.delete(key);
@@ -304,19 +321,21 @@ class LinkResolver {
304
321
  }
305
322
  fetchPortfolioProto(uuid, asOf) {
306
323
  return __awaiter(this, void 0, void 0, function* () {
307
- const key = `${uuid.toString()}@${asOfKey(asOf)}`;
308
- const cached = this.portfolioCache.get(key);
324
+ const uuidStr = uuid.toString();
325
+ const asOfZdt = asOfToZdt(asOf);
326
+ const cached = LinkCacheModule.PORTFOLIO.get(uuidStr, asOfZdt);
309
327
  if (cached)
310
328
  return cached;
329
+ const key = `${uuidStr}@${asOfKey(asOf)}`;
311
330
  const inFlight = this.portfolioInFlight.get(key);
312
331
  if (inFlight)
313
332
  return inFlight;
314
333
  const promise = this.batchFetchPortfolios([uuid], asOf).then((protos) => {
315
334
  if (protos.length === 0) {
316
- throw new Error(`Portfolio not found: ${uuid.toString()}@${asOfKey(asOf)}`);
335
+ throw new Error(`Portfolio not found: ${key}`);
317
336
  }
318
337
  const proto = protos[0];
319
- this.portfolioCache.set(key, proto);
338
+ LinkCacheModule.PORTFOLIO.put(uuidStr, proto, asOfZdt);
320
339
  return proto;
321
340
  }).finally(() => {
322
341
  this.portfolioInFlight.delete(key);
@@ -325,6 +344,31 @@ class LinkResolver {
325
344
  return promise;
326
345
  });
327
346
  }
347
+ fetchTransactionProto(uuid, asOf) {
348
+ return __awaiter(this, void 0, void 0, function* () {
349
+ const uuidStr = uuid.toString();
350
+ const asOfZdt = asOfToZdt(asOf);
351
+ const cached = LinkCacheModule.TRANSACTION.get(uuidStr, asOfZdt);
352
+ if (cached)
353
+ return cached;
354
+ const key = `${uuidStr}@${asOfKey(asOf)}`;
355
+ const inFlight = this.transactionInFlight.get(key);
356
+ if (inFlight)
357
+ return inFlight;
358
+ const promise = this.batchFetchTransactions([uuid], asOf).then((protos) => {
359
+ if (protos.length === 0) {
360
+ throw new Error(`Transaction not found: ${key}`);
361
+ }
362
+ const proto = protos[0];
363
+ LinkCacheModule.TRANSACTION.put(uuidStr, proto, asOfZdt);
364
+ return proto;
365
+ }).finally(() => {
366
+ this.transactionInFlight.delete(key);
367
+ });
368
+ this.transactionInFlight.set(key, promise);
369
+ return promise;
370
+ });
371
+ }
328
372
  batchFetchSecurities(uuids, asOf) {
329
373
  return __awaiter(this, void 0, void 0, function* () {
330
374
  if (uuids.length === 0)
@@ -341,6 +385,22 @@ class LinkResolver {
341
385
  return response.getSecurityResponseList();
342
386
  });
343
387
  }
388
+ batchFetchTransactions(uuids, asOf) {
389
+ return __awaiter(this, void 0, void 0, function* () {
390
+ if (uuids.length === 0)
391
+ return [];
392
+ const request = new query_transaction_request_pb_1.QueryTransactionRequestProto();
393
+ request.setObjectClass('TransactionRequest');
394
+ request.setVersion('0.0.1');
395
+ const uuidProtos = uuids.map((u) => u.toUUIDProto());
396
+ request.setUuidsList(uuidProtos);
397
+ if (asOf)
398
+ request.setAsOf(asOf);
399
+ const getByIdsAsync = (0, util_1.promisify)(this.transactionClient.getByIds.bind(this.transactionClient));
400
+ const response = (yield getByIdsAsync(request));
401
+ return response.getTransactionResponseList();
402
+ });
403
+ }
344
404
  batchFetchPortfolios(uuids, asOf) {
345
405
  return __awaiter(this, void 0, void 0, function* () {
346
406
  if (uuids.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"link-resolver.js","sourceRoot":"","sources":["link-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link-resolver.js","sourceRoot":"","sources":["link-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,27 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -15,6 +38,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
38
  const link_resolver_1 = __importDefault(require("./link-resolver"));
16
39
  const Price_1 = __importDefault(require("../models/price/Price"));
17
40
  const uuid_1 = require("../models/utils/uuid");
41
+ const LinkCacheModuleTop = __importStar(require("./link-cache"));
18
42
  const security_pb_1 = require("../../fintekkers/models/security/security_pb");
19
43
  const price_pb_1 = require("../../fintekkers/models/price/price_pb");
20
44
  const decimal_value_pb_1 = require("../../fintekkers/models/util/decimal_value_pb");
@@ -114,6 +138,13 @@ function linkPrice(securityUuid, priceValue, asOf) {
114
138
  return new Price_1.default(priceProto);
115
139
  }
116
140
  describe('LinkResolver', () => {
141
+ // Process-wide LinkCache singletons survive across tests, so clear them
142
+ // between cases to keep tests independent (post-W4 the resolver no longer
143
+ // owns its own cache).
144
+ beforeEach(() => {
145
+ LinkCacheModuleTop.SECURITY.clear();
146
+ LinkCacheModuleTop.PORTFOLIO.clear();
147
+ });
117
148
  test('bulk resolveSecurities dedupes UUIDs (5 prices, 3 unique → 1 RPC, 3 UUIDs)', () => __awaiter(void 0, void 0, void 0, function* () {
118
149
  const uuidA = uuid_1.UUID.random();
119
150
  const uuidB = uuid_1.UUID.random();
@@ -182,18 +213,21 @@ describe('LinkResolver', () => {
182
213
  for (const r of results)
183
214
  expect(r.getIssuerName()).toBe('AAPL');
184
215
  }));
185
- test('caching disabled (cacheSize=0) re-RPCs every call', () => __awaiter(void 0, void 0, void 0, function* () {
216
+ test('LinkCache evict between calls forces refetch', () => __awaiter(void 0, void 0, void 0, function* () {
217
+ // Post-W4 the resolver no longer owns its cache. Evict the entry from
218
+ // LinkCache.SECURITY between calls to force a refetch — the equivalent
219
+ // of the old `cacheSize=0` semantic.
186
220
  const uuid = uuid_1.UUID.random();
187
221
  const store = new Map([
188
222
  [uuid.toString(), fullSecurity(uuid, 'AAPL')],
189
223
  ]);
190
224
  const callLog = newCallLog();
191
225
  const resolver = new link_resolver_1.default({
192
- cacheSize: 0,
193
226
  securityClient: mockSecurityClient(store, callLog),
194
227
  portfolioClient: mockPortfolioClient(new Map(), newCallLog()),
195
228
  });
196
229
  yield resolver.getSecurity(uuid);
230
+ LinkCacheModuleTop.SECURITY.evict(uuid.toString());
197
231
  yield resolver.getSecurity(uuid);
198
232
  expect(callLog.count).toBe(2);
199
233
  }));
@@ -346,4 +380,56 @@ describe('LinkResolver', () => {
346
380
  expect(callLog.count).toBe(2);
347
381
  }));
348
382
  });
383
+ const LinkCacheModule = __importStar(require("./link-cache"));
384
+ const datetime_1 = require("../models/utils/datetime");
385
+ describe('LinkResolver write-through to LinkCache', () => {
386
+ beforeEach(() => {
387
+ LinkCacheModule.SECURITY.clear();
388
+ LinkCacheModule.PORTFOLIO.clear();
389
+ });
390
+ function fullSecurityWithAsOf(uuid, issuer, asOf) {
391
+ const proto = fullSecurity(uuid, issuer);
392
+ proto.setAsOf(asOf);
393
+ return proto;
394
+ }
395
+ test('getSecurity populates LinkCache.SECURITY', () => __awaiter(void 0, void 0, void 0, function* () {
396
+ const uuid = uuid_1.UUID.random();
397
+ const asOf = makeAsOf(1700000010);
398
+ const store = new Map([
399
+ [uuid.toString(), fullSecurityWithAsOf(uuid, 'ACME', asOf)],
400
+ ]);
401
+ const resolver = new link_resolver_1.default({
402
+ securityClient: mockSecurityClient(store, newCallLog()),
403
+ portfolioClient: mockPortfolioClient(new Map(), newCallLog()),
404
+ });
405
+ const out = yield resolver.getSecurity(uuid, asOf);
406
+ expect(out.getIssuerName()).toBe('ACME');
407
+ const cached = LinkCacheModule.SECURITY.get(uuid.toString(), new datetime_1.ZonedDateTime(asOf));
408
+ expect(cached).toBeDefined();
409
+ expect(cached.getIssuerName()).toBe('ACME');
410
+ }));
411
+ test('resolveSecurities populates LinkCache.SECURITY', () => __awaiter(void 0, void 0, void 0, function* () {
412
+ const uuid = uuid_1.UUID.random();
413
+ const asOf = makeAsOf(1700000011);
414
+ const store = new Map([
415
+ [uuid.toString(), fullSecurityWithAsOf(uuid, 'BULK', asOf)],
416
+ ]);
417
+ const resolver = new link_resolver_1.default({
418
+ securityClient: mockSecurityClient(store, newCallLog()),
419
+ portfolioClient: mockPortfolioClient(new Map(), newCallLog()),
420
+ });
421
+ const linkSec = new security_pb_1.SecurityProto();
422
+ linkSec.setUuid(uuid.toUUIDProto());
423
+ linkSec.setIsLink(true);
424
+ linkSec.setAsOf(asOf);
425
+ const priceProto = new price_pb_1.PriceProto();
426
+ priceProto.setUuid(uuid_1.UUID.random().toUUIDProto());
427
+ priceProto.setSecurity(linkSec);
428
+ const price = new Price_1.default(priceProto);
429
+ yield resolver.resolveSecurities([price]);
430
+ const cached = LinkCacheModule.SECURITY.get(uuid.toString(), new datetime_1.ZonedDateTime(asOf));
431
+ expect(cached).toBeDefined();
432
+ expect(cached.getIssuerName()).toBe('BULK');
433
+ }));
434
+ });
349
435
  //# sourceMappingURL=link-resolver.test.js.map