diff --git a/src/broker-nats.ts b/src/broker-nats.ts index 767f7d8..b6bf0d7 100644 --- a/src/broker-nats.ts +++ b/src/broker-nats.ts @@ -161,8 +161,11 @@ export async function connectNats( const subjectOfMine = node ? membershipSubject(node, self) : ""; if (subjectOfMine) { try { - const got = await conn.request(`$JS.API.DIRECT.GET.${ASSIGNMENTS_STREAM}`, - sc.encode(JSON.stringify({ last_by_subj: subjectOfMine })), { timeout: 5_000 }); + // The subject-addressed form of a direct get — the stream, then the subject, nothing in + // the body — because that is the one address the mesh grants this account on the + // stream's API; the body form asks the stream's root, which it may not. + const got = await conn.request(`$JS.API.DIRECT.GET.${ASSIGNMENTS_STREAM}.${subjectOfMine}`, + new Uint8Array(0), { timeout: 5_000 }); const status = got.headers?.code ?? 0; if (status === 0 && got.data.length > 0) { issued = JSON.parse(sc.decode(got.data)) as Membership;