@moltzap/identity 2026.902.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 (81) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +19 -0
  3. package/README.md +31 -0
  4. package/bin/moltzap-registry +9 -0
  5. package/dist/agent-card.d.ts +69 -0
  6. package/dist/agent-card.d.ts.map +1 -0
  7. package/dist/agent-card.js +257 -0
  8. package/dist/agent-card.js.map +1 -0
  9. package/dist/agent-key.d.ts +77 -0
  10. package/dist/agent-key.d.ts.map +1 -0
  11. package/dist/agent-key.js +251 -0
  12. package/dist/agent-key.js.map +1 -0
  13. package/dist/authenticated-http.d.ts +44 -0
  14. package/dist/authenticated-http.d.ts.map +1 -0
  15. package/dist/authenticated-http.js +226 -0
  16. package/dist/authenticated-http.js.map +1 -0
  17. package/dist/canonical-json.d.ts +40 -0
  18. package/dist/canonical-json.d.ts.map +1 -0
  19. package/dist/canonical-json.js +399 -0
  20. package/dist/canonical-json.js.map +1 -0
  21. package/dist/http-errors.d.ts +115 -0
  22. package/dist/http-errors.d.ts.map +1 -0
  23. package/dist/http-errors.js +55 -0
  24. package/dist/http-errors.js.map +1 -0
  25. package/dist/http-signature.d.ts +60 -0
  26. package/dist/http-signature.d.ts.map +1 -0
  27. package/dist/http-signature.js +337 -0
  28. package/dist/http-signature.js.map +1 -0
  29. package/dist/identifiers.d.ts +32 -0
  30. package/dist/identifiers.d.ts.map +1 -0
  31. package/dist/identifiers.js +55 -0
  32. package/dist/identifiers.js.map +1 -0
  33. package/dist/index.d.ts +33 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +34 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/registry/admission.d.ts +27 -0
  38. package/dist/registry/admission.d.ts.map +1 -0
  39. package/dist/registry/admission.js +107 -0
  40. package/dist/registry/admission.js.map +1 -0
  41. package/dist/registry/client.d.ts +20 -0
  42. package/dist/registry/client.d.ts.map +1 -0
  43. package/dist/registry/client.js +250 -0
  44. package/dist/registry/client.js.map +1 -0
  45. package/dist/registry/contract.d.ts +213 -0
  46. package/dist/registry/contract.d.ts.map +1 -0
  47. package/dist/registry/contract.js +132 -0
  48. package/dist/registry/contract.js.map +1 -0
  49. package/dist/registry/http.d.ts +27 -0
  50. package/dist/registry/http.d.ts.map +1 -0
  51. package/dist/registry/http.js +258 -0
  52. package/dist/registry/http.js.map +1 -0
  53. package/dist/registry/migrations/0001_registry.d.ts +6 -0
  54. package/dist/registry/migrations/0001_registry.d.ts.map +1 -0
  55. package/dist/registry/migrations/0001_registry.js +36 -0
  56. package/dist/registry/migrations/0001_registry.js.map +1 -0
  57. package/dist/registry/rpc.d.ts +138 -0
  58. package/dist/registry/rpc.d.ts.map +1 -0
  59. package/dist/registry/rpc.js +85 -0
  60. package/dist/registry/rpc.js.map +1 -0
  61. package/dist/registry/server.d.ts +52 -0
  62. package/dist/registry/server.d.ts.map +1 -0
  63. package/dist/registry/server.js +157 -0
  64. package/dist/registry/server.js.map +1 -0
  65. package/dist/registry/storage.d.ts +62 -0
  66. package/dist/registry/storage.d.ts.map +1 -0
  67. package/dist/registry/storage.js +341 -0
  68. package/dist/registry/storage.js.map +1 -0
  69. package/dist/registry.d.ts +34 -0
  70. package/dist/registry.d.ts.map +1 -0
  71. package/dist/registry.js +13 -0
  72. package/dist/registry.js.map +1 -0
  73. package/dist/signed-message.d.ts +54 -0
  74. package/dist/signed-message.d.ts.map +1 -0
  75. package/dist/signed-message.js +289 -0
  76. package/dist/signed-message.js.map +1 -0
  77. package/dist/version.d.ts +4 -0
  78. package/dist/version.d.ts.map +1 -0
  79. package/dist/version.js +4 -0
  80. package/dist/version.js.map +1 -0
  81. package/package.json +139 -0
@@ -0,0 +1,341 @@
1
+ /** @file Durable Registry persistence for admission, immutable cards, and idempotent operations. */
2
+ import * as Migrator from "@effect/sql/Migrator";
3
+ import { SqlClient } from "@effect/sql/SqlClient";
4
+ import { Clock, Data, Effect, Either, Encoding, Schema } from "effect";
5
+ import { randomBytes } from "node:crypto";
6
+ import { AgentCard, AgentCardIssuedAt, encodeAgentCard, issueAgentCard, } from "../agent-card.js";
7
+ import { ed25519PublicKeyThumbprintUri, } from "../agent-key.js";
8
+ import { decodeCanonicalJson, encodeCanonicalJson } from "../canonical-json.js";
9
+ import { InternalServerError, UnavailableError } from "../http-errors.js";
10
+ import { AgentId } from "../identifiers.js";
11
+ import { MOLTZAP_VERSION } from "../version.js";
12
+ import { registerResponseSchema, } from "./contract.js";
13
+ import { registryMigration } from "./migrations/0001_registry.js";
14
+ /** Storage initialization failed before the Registry became ready. */
15
+ export class RegistryStorageInitializationError extends Data.TaggedError("RegistryStorageInitializationError") {
16
+ }
17
+ /**
18
+ * Runs migrations and binds the configured signer and version to storage.
19
+ *
20
+ * @param input Initialization dependencies.
21
+ * @param input.sql Exclusive SQL capability for this Registry process.
22
+ * @param input.registrySignerPublicKey Pinned Registry verification key.
23
+ * @returns An effect that completes only after storage is ready.
24
+ */
25
+ export function initializeRegistryStorage(input) {
26
+ return runStorageInitialization(input).pipe(
27
+ // eslint-disable-next-line agent-code-guard/no-effect-error-coalescing -- Startup exposes one empty storage phase error and never leaks database or key details.
28
+ Effect.mapError(() => new RegistryStorageInitializationError()), Effect.catchAllDefect(() => Effect.fail(new RegistryStorageInitializationError())), Effect.withSpan("initializeRegistryStorage"));
29
+ }
30
+ /**
31
+ * Creates durable Registry operations over one initialized SQL client.
32
+ *
33
+ * @param input Storage dependencies and operation bounds.
34
+ * @param input.sql Initialized SQL capability.
35
+ * @param input.registrySignerPublicKey Pinned Registry verification key.
36
+ * @param input.listPageSize Maximum complete cards in one list response.
37
+ * @param input.operationTimeoutMilliseconds Complete SQL operation deadline.
38
+ * @returns Durable Registry operations.
39
+ */
40
+ export function makeRegistryStorage(input) {
41
+ return Object.freeze({
42
+ checkReadiness: makeCheckReadiness(input),
43
+ claimRegistrationNonce: makeClaimRegistrationNonce(input),
44
+ register: makeRegister(input),
45
+ lookup: makeLookup(input),
46
+ list: makeList(input),
47
+ });
48
+ }
49
+ const AGENT_ID_MINT_ATTEMPTS = 8;
50
+ const migrations = Migrator.fromRecord({
51
+ "0001_registry": registryMigration,
52
+ });
53
+ const exactStruct = (fields) => Schema.Struct(fields).annotations({
54
+ parseOptions: { exact: true, onExcessProperty: "error" },
55
+ });
56
+ const metadataRow = exactStruct({
57
+ moltzapVersion: Schema.String,
58
+ signerThumbprint: Schema.String,
59
+ });
60
+ const cardRow = exactStruct({
61
+ agentCardBytes: Schema.Uint8ArrayFromSelf,
62
+ });
63
+ const operationRow = exactStruct({
64
+ requestBytes: Schema.Uint8ArrayFromSelf,
65
+ resultBytes: Schema.Uint8ArrayFromSelf,
66
+ });
67
+ const countRow = exactStruct({
68
+ retained: Schema.Union(Schema.String, Schema.Number),
69
+ });
70
+ const readinessRow = exactStruct({
71
+ ready: Schema.Literal(1),
72
+ });
73
+ const internalFailure = (effect) => effect.pipe(
74
+ // eslint-disable-next-line agent-code-guard/no-effect-error-coalescing -- Stored bytes and internal cryptographic failures cross one closed, non-diagnostic storage boundary.
75
+ Effect.mapError(() => new InternalServerError()));
76
+ const exactRows = (schema, rows) => internalFailure(Schema.decodeUnknown(Schema.Array(schema))(rows, {
77
+ exact: true,
78
+ onExcessProperty: "error",
79
+ })).pipe(Effect.map((decoded) => Object.freeze([...decoded])));
80
+ const withStorageDeadline = (effect, timeoutMilliseconds) => effect.pipe(Effect.catchTag("SqlError", () => Effect.fail(new UnavailableError())), Effect.timeoutFail({
81
+ duration: timeoutMilliseconds,
82
+ onTimeout: () => new UnavailableError(),
83
+ }));
84
+ const decodeStoredCard = (bytes, registrySignerPublicKey) => internalFailure(decodeCanonicalJson(AgentCard, bytes).pipe(Effect.flatMap((agentCard) => AgentCard.verify({ agentCard, registrySignerPublicKey }))));
85
+ const encodeResult = (result) => internalFailure(Schema.encode(registerResponseSchema)(result).pipe(Effect.flatMap(encodeCanonicalJson)));
86
+ const decodeResult = (bytes, registrySignerPublicKey) => internalFailure(Effect.gen(function* () {
87
+ const result = yield* decodeCanonicalJson(registerResponseSchema, bytes);
88
+ if (result.kind !== "registered") {
89
+ return Object.freeze({ kind: result.kind });
90
+ }
91
+ const agentCard = yield* AgentCard.verify({
92
+ agentCard: result.agentCard,
93
+ registrySignerPublicKey,
94
+ });
95
+ return Object.freeze({ kind: "registered", agentCard });
96
+ }));
97
+ const sameBytes = (left, right) => left.byteLength === right.byteLength &&
98
+ left.every((value, index) => value === right[index]);
99
+ const mintAgentId = () => internalFailure(Effect.try({
100
+ try: () => `agt_${randomBytes(16).toString("base64url")}`,
101
+ catch: () => new InternalServerError(),
102
+ }).pipe(Effect.flatMap(Schema.decodeUnknown(AgentId))));
103
+ const retainedCount = (rows) => exactRows(countRow, rows).pipe(Effect.map((decoded) => Number(decoded[0]?.retained ?? 0)));
104
+ const mintUnusedAgentId = (sql) => Effect.gen(function* () {
105
+ for (let attempt = 0; attempt < AGENT_ID_MINT_ATTEMPTS; attempt += 1) {
106
+ const candidate = yield* mintAgentId();
107
+ const rows = yield* sql `
108
+ SELECT COUNT(*)::text AS retained
109
+ FROM moltzap_registry_agents
110
+ WHERE agent_id = ${candidate}
111
+ `;
112
+ if ((yield* retainedCount(rows)) === 0) {
113
+ return candidate;
114
+ }
115
+ }
116
+ return yield* new InternalServerError();
117
+ });
118
+ const issueTime = () => internalFailure(Clock.currentTimeMillis.pipe(Effect.map((milliseconds) => new Date(Math.floor(milliseconds / 1_000) * 1_000)
119
+ .toISOString()
120
+ .replace(".000Z", "Z")), Effect.flatMap(Schema.decodeUnknown(AgentCardIssuedAt))));
121
+ const decodeAgentIdBytes = (agentId) => Either.match(Encoding.decodeBase64Url(agentId.slice(4)), {
122
+ onLeft: () => Effect.fail(new InternalServerError()),
123
+ onRight: Effect.succeed,
124
+ });
125
+ function makeCheckReadiness(input) {
126
+ return () => withStorageDeadline(input.sql `SELECT 1 AS ready`.pipe(Effect.flatMap((rows) => exactRows(readinessRow, rows)), Effect.flatMap((rows) => rows.length === 1
127
+ ? Effect.void
128
+ : Effect.fail(new InternalServerError()))), input.operationTimeoutMilliseconds);
129
+ }
130
+ const ensureMigrationTable = (sql) => sql.unsafe(`
131
+ CREATE TABLE IF NOT EXISTS moltzap_registry_migrations (
132
+ migration_id integer PRIMARY KEY,
133
+ created_at timestamp with time zone NOT NULL DEFAULT now(),
134
+ name text NOT NULL
135
+ )
136
+ `);
137
+ const bindStorageMetadata = (input) => input.sql.withTransaction(Effect.gen(function* () {
138
+ yield* input.sql `
139
+ INSERT INTO moltzap_registry_metadata
140
+ (singleton, moltzap_version, signer_thumbprint)
141
+ VALUES (true, ${MOLTZAP_VERSION}, ${input.signerThumbprint})
142
+ ON CONFLICT (singleton) DO NOTHING
143
+ `;
144
+ const rows = yield* input.sql `
145
+ SELECT
146
+ moltzap_version AS "moltzapVersion",
147
+ signer_thumbprint AS "signerThumbprint"
148
+ FROM moltzap_registry_metadata
149
+ WHERE singleton = true
150
+ FOR UPDATE
151
+ `;
152
+ const metadata = yield* Schema.decodeUnknown(Schema.Tuple(metadataRow))(rows, { exact: true, onExcessProperty: "error" });
153
+ if (metadata[0].moltzapVersion !== MOLTZAP_VERSION ||
154
+ metadata[0].signerThumbprint !== input.signerThumbprint) {
155
+ return yield* Effect.die("Registry metadata mismatch");
156
+ }
157
+ }));
158
+ function runStorageInitialization(input) {
159
+ return Effect.gen(function* () {
160
+ // The PGlite socket closes after Migrator's missing-table probe. Creating
161
+ // Migrator's own table first keeps every supported database on one path.
162
+ yield* ensureMigrationTable(input.sql);
163
+ yield* Migrator.make({})({
164
+ loader: migrations,
165
+ table: "moltzap_registry_migrations",
166
+ }).pipe(Effect.provideService(SqlClient, input.sql));
167
+ const signerThumbprint = yield* ed25519PublicKeyThumbprintUri(input.registrySignerPublicKey);
168
+ yield* bindStorageMetadata({ sql: input.sql, signerThumbprint });
169
+ });
170
+ }
171
+ const claimNonceTransaction = (sql, claim) => sql.withTransaction(Effect.gen(function* () {
172
+ yield* sql `
173
+ SELECT singleton FROM moltzap_registry_metadata
174
+ WHERE singleton = true FOR UPDATE
175
+ `;
176
+ yield* sql `
177
+ DELETE FROM moltzap_registry_nonces
178
+ WHERE expires_at < ${claim.now}
179
+ `;
180
+ const existing = yield* sql `
181
+ SELECT COUNT(*)::text AS retained
182
+ FROM moltzap_registry_nonces WHERE nonce = ${claim.nonce}
183
+ `;
184
+ if ((yield* retainedCount(existing)) !== 0) {
185
+ return "replayed";
186
+ }
187
+ const retained = yield* sql `
188
+ SELECT COUNT(*)::text AS retained FROM moltzap_registry_nonces
189
+ `;
190
+ if ((yield* retainedCount(retained)) >= claim.capacity) {
191
+ return "full";
192
+ }
193
+ yield* sql `
194
+ INSERT INTO moltzap_registry_nonces (nonce, expires_at)
195
+ VALUES (${claim.nonce}, ${claim.expires})
196
+ `;
197
+ return "claimed";
198
+ }));
199
+ function makeClaimRegistrationNonce(input) {
200
+ return (claim) => withStorageDeadline(claimNonceTransaction(input.sql, claim), input.operationTimeoutMilliseconds);
201
+ }
202
+ const findStoredOperation = (sql, keyThumbprint, operationId) => sql `
203
+ SELECT
204
+ request_bytes AS "requestBytes",
205
+ result_bytes AS "resultBytes"
206
+ FROM moltzap_registry_operations
207
+ WHERE public_key_thumbprint = ${keyThumbprint}
208
+ AND operation_id = ${operationId}
209
+ `.pipe(Effect.flatMap((rows) => exactRows(operationRow, rows)), Effect.map((rows) => rows[0]));
210
+ const keyIsRegistered = (sql, thumbprint) => sql `
211
+ SELECT COUNT(*)::text AS retained
212
+ FROM moltzap_registry_agents
213
+ WHERE public_key_thumbprint = ${thumbprint}
214
+ `.pipe(Effect.flatMap(retainedCount), Effect.map((retained) => retained > 0));
215
+ const nameIsRegistered = (sql, agentName) => sql `
216
+ SELECT COUNT(*)::text AS retained
217
+ FROM moltzap_registry_agents
218
+ WHERE agent_name = ${agentName}
219
+ `.pipe(Effect.flatMap(retainedCount), Effect.map((retained) => retained > 0));
220
+ const insertNewAgent = (input, call, keyThumbprint) => Effect.gen(function* () {
221
+ const agentId = yield* mintUnusedAgentId(input.sql);
222
+ const issuedAt = yield* issueTime();
223
+ const agentCard = yield* internalFailure(issueAgentCard({
224
+ agentId,
225
+ principalId: call.request.principalId,
226
+ agentName: call.request.agentName,
227
+ publicKey: call.request.publicKey,
228
+ issuedAt,
229
+ registrySigningAuthority: call.registrySigningAuthority,
230
+ }));
231
+ const agentCardBytes = yield* internalFailure(encodeAgentCard(agentCard));
232
+ const agentIdBytes = yield* decodeAgentIdBytes(agentId);
233
+ yield* input.sql `
234
+ INSERT INTO moltzap_registry_agents
235
+ (agent_id, agent_id_bytes, principal_id, agent_name,
236
+ public_key_thumbprint, agent_card_bytes)
237
+ VALUES
238
+ (${agentId}, ${agentIdBytes}, ${call.request.principalId},
239
+ ${call.request.agentName}, ${keyThumbprint}, ${agentCardBytes})
240
+ `;
241
+ return Object.freeze({ kind: "registered", agentCard });
242
+ });
243
+ const decideRegistration = (input, call, keyThumbprint) => Effect.gen(function* () {
244
+ if (yield* keyIsRegistered(input.sql, keyThumbprint)) {
245
+ return Object.freeze({ kind: "key_already_registered" });
246
+ }
247
+ if (yield* nameIsRegistered(input.sql, call.request.agentName)) {
248
+ return Object.freeze({ kind: "name_taken" });
249
+ }
250
+ return yield* insertNewAgent(input, call, keyThumbprint);
251
+ });
252
+ const recordOperation = (input) => input.sql `
253
+ INSERT INTO moltzap_registry_operations
254
+ (public_key_thumbprint, operation_id, request_bytes, result_bytes)
255
+ VALUES
256
+ (${input.keyThumbprint}, ${input.operationId},
257
+ ${input.requestBytes}, ${input.resultBytes})
258
+ `;
259
+ const registerTransaction = (input, call, keyThumbprint) => input.sql.withTransaction(Effect.gen(function* () {
260
+ yield* input.sql `
261
+ SELECT singleton FROM moltzap_registry_metadata
262
+ WHERE singleton = true FOR UPDATE
263
+ `;
264
+ const previous = yield* findStoredOperation(input.sql, keyThumbprint, call.request.operationId);
265
+ if (previous !== undefined) {
266
+ return sameBytes(previous.requestBytes, call.requestBytes)
267
+ ? yield* decodeResult(previous.resultBytes, input.registrySignerPublicKey)
268
+ : Object.freeze({ kind: "idempotency_conflict" });
269
+ }
270
+ const result = yield* decideRegistration(input, call, keyThumbprint);
271
+ const resultBytes = yield* encodeResult(result);
272
+ yield* recordOperation({
273
+ sql: input.sql,
274
+ keyThumbprint,
275
+ operationId: call.request.operationId,
276
+ requestBytes: call.requestBytes,
277
+ resultBytes,
278
+ });
279
+ return result;
280
+ }));
281
+ function makeRegister(input) {
282
+ return (call) => withStorageDeadline(internalFailure(ed25519PublicKeyThumbprintUri(call.request.publicKey)).pipe(Effect.flatMap((thumbprint) => registerTransaction(input, call, thumbprint))), input.operationTimeoutMilliseconds);
283
+ }
284
+ const findCardRows = (sql, request) => "agentId" in request
285
+ ? sql `
286
+ SELECT agent_card_bytes AS "agentCardBytes"
287
+ FROM moltzap_registry_agents
288
+ WHERE agent_id = ${request.agentId}
289
+ `
290
+ : sql `
291
+ SELECT agent_card_bytes AS "agentCardBytes"
292
+ FROM moltzap_registry_agents
293
+ WHERE agent_name = ${request.agentName}
294
+ `;
295
+ function makeLookup(input) {
296
+ return (request) => withStorageDeadline(Effect.gen(function* () {
297
+ const cards = yield* findCardRows(input.sql, request).pipe(Effect.flatMap((rows) => exactRows(cardRow, rows)));
298
+ const card = cards[0];
299
+ if (card === undefined) {
300
+ return Object.freeze({ kind: "not_found" });
301
+ }
302
+ if (cards.length !== 1) {
303
+ return yield* new InternalServerError();
304
+ }
305
+ const agentCard = yield* decodeStoredCard(card.agentCardBytes, input.registrySignerPublicKey);
306
+ return Object.freeze({ kind: "found", agentCard });
307
+ }), input.operationTimeoutMilliseconds);
308
+ }
309
+ const readListRows = (input, afterBytes) => {
310
+ const maximumRows = input.listPageSize + 1;
311
+ return afterBytes === undefined
312
+ ? input.sql `
313
+ SELECT agent_card_bytes AS "agentCardBytes"
314
+ FROM moltzap_registry_agents
315
+ ORDER BY agent_id_bytes ASC
316
+ LIMIT ${maximumRows}
317
+ `
318
+ : input.sql `
319
+ SELECT agent_card_bytes AS "agentCardBytes"
320
+ FROM moltzap_registry_agents
321
+ WHERE agent_id_bytes > ${afterBytes}
322
+ ORDER BY agent_id_bytes ASC
323
+ LIMIT ${maximumRows}
324
+ `;
325
+ };
326
+ function makeList(input) {
327
+ return (request) => withStorageDeadline(Effect.gen(function* () {
328
+ const afterBytes = request.afterAgentId === undefined
329
+ ? undefined
330
+ : yield* decodeAgentIdBytes(request.afterAgentId);
331
+ const cardRows = yield* readListRows(input, afterBytes).pipe(Effect.flatMap((rows) => exactRows(cardRow, rows)));
332
+ const hasMore = cardRows.length > input.listPageSize;
333
+ const agentCards = yield* Effect.forEach(cardRows.slice(0, input.listPageSize), (row) => decodeStoredCard(row.agentCardBytes, input.registrySignerPublicKey), { concurrency: 1 });
334
+ return Object.freeze({
335
+ kind: "page",
336
+ agentCards: Object.freeze(agentCards),
337
+ hasMore,
338
+ });
339
+ }), input.operationTimeoutMilliseconds);
340
+ }
341
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/registry/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /** @file Public Registry capability and its package-owned contract exports. */
2
+ import type { HttpClient } from "@effect/platform";
3
+ import { Context, type Duration, Effect, Layer } from "effect";
4
+ import type { Ed25519PublicKey } from "./agent-key.js";
5
+ import type { RegistryClientService } from "./registry/contract.js";
6
+ /** Closed Registry requests, verified results, and client failures. */
7
+ export { OperationId, RegistryConnectionError, RegistryInvalidResponseError, RegistryListRequest, type RegistryListResult, RegistryLookupRequest, type RegistryLookupResult, RegistryRegisterRequest, type RegistryRegisterResult, RegistryRequestTimeoutError, } from "./registry/contract.js";
8
+ declare const Registry_base: Context.TagClass<Registry, "@moltzap/identity/Registry", RegistryClientService>;
9
+ /** Bootstrap registration and immutable identity resolution. */
10
+ export declare class Registry extends Registry_base {
11
+ static readonly register: (input: Readonly<{
12
+ request: import("./registry.js").RegistryRegisterRequest;
13
+ admissionCredential: import("effect/Redacted").Redacted;
14
+ signingAuthority: import("./agent-key.js").AgentSigningAuthority;
15
+ }>) => Effect.Effect<import("./registry.js").RegistryRegisterResult, import("./http-signature.js").AgentSigningError | import("./http-errors.js").HttpEnvelopeError | (import("./registry.js").RegistryConnectionError | import("./registry.js").RegistryInvalidResponseError | import("./registry.js").RegistryRequestTimeoutError), Registry>;
16
+ static readonly lookup: (request: {
17
+ readonly agentId: string & import("effect/Brand").Brand<"AgentId">;
18
+ } | {
19
+ readonly agentName: string & import("effect/Brand").Brand<"AgentName">;
20
+ }) => Effect.Effect<import("./registry.js").RegistryLookupResult, (import("./registry.js").RegistryConnectionError | import("./registry.js").RegistryInvalidResponseError | import("./registry.js").RegistryRequestTimeoutError) | import("./registry/contract.js").RegistryPublicReadError, Registry>;
21
+ static readonly list: (request: {
22
+ readonly afterAgentId?: (string & import("effect/Brand").Brand<"AgentId">) | undefined;
23
+ }) => Effect.Effect<Readonly<{
24
+ kind: "page";
25
+ agentCards: readonly import("./agent-card.js").VerifiedAgentCard[];
26
+ hasMore: boolean;
27
+ }>, (import("./registry.js").RegistryConnectionError | import("./registry.js").RegistryInvalidResponseError | import("./registry.js").RegistryRequestTimeoutError) | import("./registry/contract.js").RegistryPublicReadError, Registry>;
28
+ static readonly layer: (input: {
29
+ readonly origin: URL;
30
+ readonly registrySignerPublicKey: Ed25519PublicKey;
31
+ readonly requestTimeout: Duration.Duration;
32
+ }) => Layer.Layer<Registry, never, HttpClient.HttpClient>;
33
+ }
34
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGpE,uEAAuE;AACvE,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,4BAA4B,EAC5B,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;;AAEhC,gEAAgE;AAChE,qBAAa,QAAS,SAAQ,aAG3B;IACD,MAAM,CAAC,QAAQ,CAAC,QAAQ;;;;oVAGtB;IAEF,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;2SAGpB;IAEF,MAAM,CAAC,QAAQ,CAAC,IAAI;;;;;;6OAGlB;IAEF,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAW;QAC9B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;QACrB,QAAQ,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;QACnD,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC;KAC5C,KAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CACF;CACtD"}
@@ -0,0 +1,13 @@
1
+ /** @file Public Registry capability and its package-owned contract exports. */
2
+ import { Context, Effect, Layer } from "effect";
3
+ import { makeRegistryService } from "./registry/client.js";
4
+ /** Closed Registry requests, verified results, and client failures. */
5
+ export { OperationId, RegistryConnectionError, RegistryInvalidResponseError, RegistryListRequest, RegistryLookupRequest, RegistryRegisterRequest, RegistryRequestTimeoutError, } from "./registry/contract.js";
6
+ /** Bootstrap registration and immutable identity resolution. */
7
+ export class Registry extends Context.Tag("@moltzap/identity/Registry")() {
8
+ static register = Effect.serviceFunctionEffect(Registry, (service) => service.register);
9
+ static lookup = Effect.serviceFunctionEffect(Registry, (service) => service.lookup);
10
+ static list = Effect.serviceFunctionEffect(Registry, (service) => service.list);
11
+ static layer = (input) => Layer.effect(Registry, makeRegistryService(input));
12
+ }
13
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAG/E,OAAO,EAAE,OAAO,EAAiB,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,uEAAuE;AACvE,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,4BAA4B,EAC5B,mBAAmB,EAEnB,qBAAqB,EAErB,uBAAuB,EAEvB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAEhC,gEAAgE;AAChE,MAAM,OAAO,QAAS,SAAQ,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAGpE;IACD,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CACrD,QAAQ,EACR,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAC9B,CAAC;IAEF,MAAM,CAAU,MAAM,GAAG,MAAM,CAAC,qBAAqB,CACnD,QAAQ,EACR,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAC5B,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG,MAAM,CAAC,qBAAqB,CACjD,QAAQ,EACR,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAC1B,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG,CAAC,KAIxB,EAAuD,EAAE,CACxD,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;CACtD"}
@@ -0,0 +1,54 @@
1
+ /** @file Canonical end-to-end signed message representation, signing, and verification. */
2
+ import { Brand, Effect, Schema } from "effect";
3
+ import { type AgentCardDigest as AgentCardDigestValue, type VerifiedAgentCard } from "./agent-card.js";
4
+ import { type AgentSigningAuthority as AgentSigningAuthorityValue } from "./agent-key.js";
5
+ import { type AgentId as AgentIdValue } from "./identifiers.js";
6
+ /** Sender-scoped identity of one attributed message. */
7
+ export declare const MessageId: Schema.brand<Schema.filter<typeof Schema.String>, "MessageId">;
8
+ /** Validated nominal value decoded by MessageId. */
9
+ export type MessageId = typeof MessageId.Type;
10
+ /** Immutable attributed-message fields exposed to Router consumers. */
11
+ export interface SignedMessage {
12
+ readonly senderAgentId: AgentIdValue;
13
+ readonly agentCardDigest: AgentCardDigestValue;
14
+ readonly recipientAgentIds: readonly AgentIdValue[];
15
+ readonly messageId: MessageId;
16
+ readonly body: Uint8Array;
17
+ }
18
+ /** SignedMessage whose sender attribution and signature are verified. */
19
+ export type VerifiedSignedMessage = SignedMessage & Brand.Brand<"VerifiedSignedMessage">;
20
+ declare const SignedMessageSigningError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
21
+ readonly _tag: "SignedMessageSigningError";
22
+ } & Readonly<A>;
23
+ /** A message cannot be signed under the supplied immutable identity. */
24
+ export declare class SignedMessageSigningError extends SignedMessageSigningError_base {
25
+ }
26
+ declare const SignedMessageVerificationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
27
+ readonly _tag: "SignedMessageVerificationError";
28
+ } & Readonly<A>;
29
+ /** A SignedMessage does not bind to the supplied verified AgentCard. */
30
+ export declare class SignedMessageVerificationError extends SignedMessageVerificationError_base {
31
+ }
32
+ interface SignInput {
33
+ readonly agentCard: VerifiedAgentCard;
34
+ readonly signingAuthority: AgentSigningAuthorityValue;
35
+ readonly recipientAgentIds: ReadonlySet<AgentIdValue>;
36
+ readonly messageId: MessageId;
37
+ readonly body: Uint8Array;
38
+ }
39
+ declare const sign: (input: SignInput) => Effect.Effect<VerifiedSignedMessage, SignedMessageSigningError>;
40
+ interface VerifyInput {
41
+ readonly signedMessage: SignedMessage;
42
+ readonly agentCard: VerifiedAgentCard;
43
+ }
44
+ declare const verify: (input: VerifyInput) => Effect.Effect<VerifiedSignedMessage, SignedMessageVerificationError>;
45
+ declare const encodedByteLength: (signedMessage: SignedMessage) => number;
46
+ /** Opaque attributed message operations and exact representation Schema. */
47
+ export declare const SignedMessage: Schema.Schema<SignedMessage, unknown> & Readonly<{
48
+ readonly sign: typeof sign;
49
+ readonly verify: typeof verify;
50
+ readonly encodedByteLength: typeof encodedByteLength;
51
+ readonly maximumEncodedByteLength: number;
52
+ }>;
53
+ export {};
54
+ //# sourceMappingURL=signed-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signed-message.d.ts","sourceRoot":"","sources":["../src/signed-message.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAE3F,OAAO,EACL,KAAK,EAEL,MAAM,EAIN,MAAM,EAEP,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAEL,KAAK,eAAe,IAAI,oBAAoB,EAE5C,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,qBAAqB,IAAI,0BAA0B,EAIzD,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAEL,KAAK,OAAO,IAAI,YAAY,EAE7B,MAAM,kBAAkB,CAAC;AAG1B,wDAAwD;AAExD,eAAO,MAAM,SAAS,gEAA+C,CAAC;AACtE,oDAAoD;AAEpD,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAiH9C,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,CAAC;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,SAAS,YAAY,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAmID,yEAAyE;AACzE,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAC/C,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;;;;AAIvC,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,8BAE9C;CAAG;;;;AAEJ,wEAAwE;AACxE,qBAAa,8BAA+B,SAAQ,mCAEnD;CAAG;AAgBJ,UAAU,SAAS;IACjB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;IACtD,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACtD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AA2DD,QAAA,MAAM,IAAI,UACD,SAAS,KACf,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAiB7D,CAAC;AAEL,UAAU,WAAW;IACnB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;CACvC;AAED,QAAA,MAAM,MAAM,UACH,WAAW,KACjB,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CA8ClE,CAAC;AAEL,QAAA,MAAM,iBAAiB,kBAAmB,aAAa,KAAG,MACD,CAAC;AAK1D,4EAA4E;AAC5E,eAAO,MAAM,aAAa,EAKpB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,GACzC,QAAQ,CAAC;IACP,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IACrD,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;CAC3C,CAAC,CAAC"}