Skip to content

Commit 07274a5

Browse files
committed
Fix direct read adapter review findings
1 parent 8d79c09 commit 07274a5

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

src/demo/tokenhost-wrapper.mjs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,13 +285,14 @@ export function createTokenHostRegistryDirectReadAdapter({
285285

286286
async function readDatasetPage({ offset = 0n, limit = maxLimit } = {}) {
287287
const normalizedLimit = normalizePageLimit(limit, maxLimit);
288-
const keys = Array.from(
288+
const rawKeys = Array.from(
289289
await readContract(
290290
registryDatasetKeysPageRead(registryAddress, { offset, limit: normalizedLimit }),
291291
),
292292
);
293+
const keys = rawKeys.map(registryDatasetKeyId);
293294
const datasets = await mapWithConcurrency(
294-
keys,
295+
rawKeys,
295296
maxDetailConcurrency,
296297
async (key) => {
297298
const dataset = normalizeRegistryDatasetRecord(
@@ -306,7 +307,7 @@ export function createTokenHostRegistryDirectReadAdapter({
306307

307308
return {
308309
sourceOfTruth: DIRECT_READ_SOURCE,
309-
pagination: offsetPagination({ offset, limit: normalizedLimit, rows: keys }),
310+
pagination: offsetPagination({ offset, limit: normalizedLimit, rows: rawKeys }),
310311
keys,
311312
datasets,
312313
};
@@ -478,7 +479,7 @@ export function createTokenHostRegistryDirectReadAdapter({
478479
{ model },
479480
{
480481
...options,
481-
now: options.now ?? now,
482+
now: options.now ?? now ?? currentUnixSeconds(),
482483
},
483484
);
484485
}
@@ -758,6 +759,10 @@ function normalizeConcurrency(concurrency) {
758759
return value;
759760
}
760761

762+
function currentUnixSeconds() {
763+
return Math.floor(Date.now() / 1000);
764+
}
765+
761766
function decimalString(value) {
762767
return BigInt(value).toString();
763768
}

test/tokenhost-direct-reads.test.mjs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ test("Token Host direct read adapter builds admin surfaces from registry list vi
5252
assert.equal(accountPage.accounts[0].objectPagination.mode, "objectIdCursor");
5353
assert.deepEqual((await adapter.readAccountObjectPage(ACCOUNT_A, { limit: 2n })).ids, ["1"]);
5454

55+
const datasetPage = await adapter.readDatasetPage({ limit: 2n });
56+
assert.deepEqual(datasetPage.keys, [`${ACCOUNT_A}:111:222`]);
57+
assert.doesNotThrow(() => JSON.stringify(datasetPage));
58+
5559
const surfaces = await adapter.readAdminSurfaces({ limit: 2n });
5660
assert.equal(
5761
surfaces.sourceOfTruth.platformState,
@@ -158,6 +162,17 @@ test("Token Host direct read adapter honors admin route hints", async () => {
158162
]);
159163
});
160164

165+
test("Token Host direct read adapter defaults admin time for coordinator expiry checks", async () => {
166+
const adapter = createTokenHostRegistryDirectReadAdapter({
167+
publicClient: createRegistryFixtureClient(),
168+
registryAddress: REGISTRY_ADDRESS,
169+
maxPageSize: 2,
170+
});
171+
const surfaces = await adapter.readAdminSurfaces({ route: { name: "coordinators" } });
172+
173+
assert.equal(surfaces.coordinators[0].sessionStatus, "expired");
174+
});
175+
161176
test("Token Host direct read adapter restarts active cursor pages from the registry head", async () => {
162177
const adapter = createTokenHostRegistryDirectReadAdapter({
163178
publicClient: createRegistryFixtureClient({ staleActiveCursor: 99n }),

0 commit comments

Comments
 (0)