@agent-network-protocol/dsh-anp-identity 0.1.0-dsh-test.20260831.1

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.
@@ -0,0 +1,67 @@
1
+ import type { IdentityReference } from '@agent-network-protocol/anp-identity';
2
+ export declare const CATALOG_SCHEMA: "anp-identity-catalog/1";
3
+ export declare const CREATE_INTENT_SCHEMA: "anp-identity-create-intent/1";
4
+ export type CatalogEntryState = 'active' | 'deleting' | 'unclaimed';
5
+ export interface CatalogEntry {
6
+ readonly identityId: string;
7
+ readonly did: string;
8
+ readonly storeId: string;
9
+ readonly label?: string;
10
+ readonly handle?: string;
11
+ readonly createdByConsumer?: string;
12
+ readonly grantedConsumers: string[];
13
+ readonly createdAt: string;
14
+ readonly lastUsedAt: string;
15
+ readonly state: CatalogEntryState;
16
+ }
17
+ export interface IdentityCatalog {
18
+ readonly schema: typeof CATALOG_SCHEMA;
19
+ readonly catalogGeneration: number;
20
+ readonly entries: CatalogEntry[];
21
+ }
22
+ export interface CreateIntent {
23
+ readonly schema: typeof CREATE_INTENT_SCHEMA;
24
+ readonly requestId: string;
25
+ readonly consumer: string;
26
+ readonly label?: string;
27
+ readonly handle?: string;
28
+ readonly createdAt: string;
29
+ readonly baselineIdentityIds: string[];
30
+ readonly reference?: IdentityReference;
31
+ }
32
+ export type CatalogFaultPoint = 'before_catalog_temp_write' | 'after_catalog_temp_sync' | 'after_catalog_rename' | 'before_intent_temp_write' | 'after_intent_temp_sync' | 'after_intent_rename';
33
+ export interface CatalogOptions {
34
+ readonly fault?: (point: CatalogFaultPoint) => void;
35
+ readonly lockTimeoutMs?: number;
36
+ }
37
+ /** Non-secret DSH metadata with atomic writes and a cross-process lock. */
38
+ export declare class CatalogStore {
39
+ #private;
40
+ readonly stateRoot: string;
41
+ readonly catalogPath: string;
42
+ readonly intentsRoot: string;
43
+ readonly lockPath: string;
44
+ readonly nativeCreateLockPath: string;
45
+ constructor(stateRoot: string, options?: CatalogOptions);
46
+ initialize(): Promise<void>;
47
+ load(): Promise<IdentityCatalog>;
48
+ mutate(operation: (catalog: IdentityCatalog) => IdentityCatalog, expectedGeneration?: number): Promise<IdentityCatalog>;
49
+ replace(catalog: IdentityCatalog): Promise<IdentityCatalog>;
50
+ writeIntent(intent: CreateIntent): Promise<void>;
51
+ reserveIntent(intent: CreateIntent): Promise<void>;
52
+ commitIntent(requestId: string): Promise<CatalogEntry>;
53
+ updateIntent(requestId: string, operation: (intent: CreateIntent) => CreateIntent): Promise<CreateIntent>;
54
+ readIntent(requestId: string): Promise<CreateIntent>;
55
+ listIntents(): Promise<CreateIntent[]>;
56
+ deleteIntent(requestId: string): Promise<void>;
57
+ withNativeCreateLock<T>(operation: () => Promise<T>): Promise<T>;
58
+ private withCatalogLock;
59
+ private intentPath;
60
+ private writeCatalog;
61
+ private writeJsonAtomic;
62
+ }
63
+ export declare function emptyCatalog(): IdentityCatalog;
64
+ export declare function entryReference(entry: CatalogEntry): IdentityReference;
65
+ export declare function findEntry(catalog: IdentityCatalog, reference: IdentityReference): CatalogEntry | undefined;
66
+ export declare function normalizeHandle(value: string): string;
67
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
package/lib/catalog.js ADDED
@@ -0,0 +1,429 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, open, readFile, readdir, rename, rm, unlink, } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import lockfile from 'proper-lockfile';
5
+ import { pluginError } from './errors.js';
6
+ export const CATALOG_SCHEMA = 'anp-identity-catalog/1';
7
+ export const CREATE_INTENT_SCHEMA = 'anp-identity-create-intent/1';
8
+ const MAX_CATALOG_BYTES = 4 * 1024 * 1024;
9
+ const LOCK_TIMEOUT_MS = 10_000;
10
+ const LOCK_RETRY_MS = 20;
11
+ /** Non-secret DSH metadata with atomic writes and a cross-process lock. */
12
+ export class CatalogStore {
13
+ stateRoot;
14
+ catalogPath;
15
+ intentsRoot;
16
+ lockPath;
17
+ nativeCreateLockPath;
18
+ #fault;
19
+ #lockTimeoutMs;
20
+ constructor(stateRoot, options = {}) {
21
+ this.stateRoot = stateRoot;
22
+ this.catalogPath = join(stateRoot, 'catalog-v1.json');
23
+ this.intentsRoot = join(stateRoot, 'journal', 'create');
24
+ this.lockPath = join(stateRoot, 'catalog-v1.lock');
25
+ this.nativeCreateLockPath = join(stateRoot, 'native-create.lock');
26
+ this.#fault = options.fault ?? (() => { });
27
+ this.#lockTimeoutMs = options.lockTimeoutMs ?? LOCK_TIMEOUT_MS;
28
+ }
29
+ async initialize() {
30
+ await mkdir(this.intentsRoot, { recursive: true, mode: 0o700 });
31
+ try {
32
+ await this.load();
33
+ }
34
+ catch (error) {
35
+ if (!isMissing(error))
36
+ throw error;
37
+ await this.withCatalogLock(async () => {
38
+ try {
39
+ await this.load();
40
+ }
41
+ catch (nested) {
42
+ if (!isMissing(nested))
43
+ throw nested;
44
+ await this.writeCatalog(emptyCatalog());
45
+ }
46
+ });
47
+ }
48
+ }
49
+ async load() {
50
+ let bytes;
51
+ try {
52
+ bytes = await readFile(this.catalogPath);
53
+ }
54
+ catch (error) {
55
+ if (isMissing(error))
56
+ throw error;
57
+ throw pluginError('catalog_corrupt');
58
+ }
59
+ if (bytes.byteLength > MAX_CATALOG_BYTES)
60
+ throw pluginError('catalog_corrupt');
61
+ try {
62
+ return parseCatalog(JSON.parse(bytes.toString('utf8')));
63
+ }
64
+ catch (error) {
65
+ if (isPluginCatalogError(error))
66
+ throw error;
67
+ throw pluginError('catalog_corrupt');
68
+ }
69
+ }
70
+ async mutate(operation, expectedGeneration) {
71
+ return this.withCatalogLock(async () => {
72
+ const current = await this.load();
73
+ if (expectedGeneration !== undefined && current.catalogGeneration !== expectedGeneration) {
74
+ throw pluginError('catalog_conflict');
75
+ }
76
+ const candidate = operation(cloneCatalog(current));
77
+ const next = parseCatalog({
78
+ ...candidate,
79
+ catalogGeneration: current.catalogGeneration + 1,
80
+ });
81
+ await this.writeCatalog(next);
82
+ return next;
83
+ });
84
+ }
85
+ async replace(catalog) {
86
+ return this.withCatalogLock(async () => {
87
+ let generation = 0;
88
+ try {
89
+ generation = (await this.load()).catalogGeneration;
90
+ }
91
+ catch (error) {
92
+ if (!isPluginCatalogError(error) && !isMissing(error))
93
+ throw error;
94
+ }
95
+ const next = parseCatalog({ ...catalog, catalogGeneration: generation + 1 });
96
+ await this.writeCatalog(next);
97
+ return next;
98
+ });
99
+ }
100
+ async writeIntent(intent) {
101
+ await this.withCatalogLock(async () => {
102
+ await this.writeJsonAtomic(this.intentPath(intent.requestId), parseIntent(intent), 'intent');
103
+ });
104
+ }
105
+ async reserveIntent(intent) {
106
+ await this.withCatalogLock(async () => {
107
+ const normalized = parseIntent(intent);
108
+ const catalog = await this.load();
109
+ const intents = await this.listIntents();
110
+ if (intents.some(value => value.requestId === normalized.requestId)) {
111
+ throw pluginError('catalog_conflict');
112
+ }
113
+ if (normalized.handle !== undefined
114
+ && (catalog.entries.some(value => value.handle === normalized.handle)
115
+ || intents.some(value => value.handle === normalized.handle))) {
116
+ throw pluginError('handle_conflict');
117
+ }
118
+ await this.writeJsonAtomic(this.intentPath(normalized.requestId), normalized, 'intent');
119
+ });
120
+ }
121
+ async commitIntent(requestId) {
122
+ return this.withCatalogLock(async () => {
123
+ const intent = await this.readIntent(requestId);
124
+ if (intent.reference === undefined)
125
+ throw pluginError('catalog_conflict');
126
+ const catalog = await this.load();
127
+ const existing = findEntry(catalog, intent.reference);
128
+ if (existing !== undefined)
129
+ return existing;
130
+ if (intent.handle !== undefined && catalog.entries.some(value => value.handle === intent.handle)) {
131
+ throw pluginError('handle_conflict');
132
+ }
133
+ const entry = {
134
+ identityId: intent.reference.identityId,
135
+ did: intent.reference.did,
136
+ storeId: intent.reference.storeId,
137
+ ...(intent.label === undefined ? {} : { label: intent.label }),
138
+ ...(intent.handle === undefined ? {} : { handle: intent.handle }),
139
+ createdByConsumer: intent.consumer,
140
+ grantedConsumers: [intent.consumer],
141
+ createdAt: intent.createdAt,
142
+ lastUsedAt: intent.createdAt,
143
+ state: 'active',
144
+ };
145
+ await this.writeCatalog(parseCatalog({
146
+ ...catalog,
147
+ catalogGeneration: catalog.catalogGeneration + 1,
148
+ entries: [...catalog.entries, entry],
149
+ }));
150
+ return entry;
151
+ });
152
+ }
153
+ async updateIntent(requestId, operation) {
154
+ return this.withCatalogLock(async () => {
155
+ const current = await this.readIntent(requestId);
156
+ const next = parseIntent(operation(current));
157
+ if (next.requestId !== requestId)
158
+ throw pluginError('invalid_request');
159
+ await this.writeJsonAtomic(this.intentPath(requestId), next, 'intent');
160
+ return next;
161
+ });
162
+ }
163
+ async readIntent(requestId) {
164
+ assertId(requestId);
165
+ try {
166
+ const bytes = await readFile(this.intentPath(requestId));
167
+ if (bytes.byteLength > MAX_CATALOG_BYTES)
168
+ throw pluginError('catalog_corrupt');
169
+ return parseIntent(JSON.parse(bytes.toString('utf8')));
170
+ }
171
+ catch (error) {
172
+ if (isPluginCatalogError(error) || isMissing(error))
173
+ throw error;
174
+ throw pluginError('catalog_corrupt');
175
+ }
176
+ }
177
+ async listIntents() {
178
+ let names;
179
+ try {
180
+ names = await readdir(this.intentsRoot);
181
+ }
182
+ catch (error) {
183
+ if (isMissing(error))
184
+ return [];
185
+ throw error;
186
+ }
187
+ const output = [];
188
+ for (const name of names.sort()) {
189
+ if (!name.endsWith('.json'))
190
+ continue;
191
+ const requestId = name.slice(0, -5);
192
+ output.push(await this.readIntent(requestId));
193
+ }
194
+ return output;
195
+ }
196
+ async deleteIntent(requestId) {
197
+ assertId(requestId);
198
+ await this.withCatalogLock(async () => {
199
+ await unlink(this.intentPath(requestId)).catch((error) => {
200
+ if (!isMissing(error))
201
+ throw error;
202
+ });
203
+ });
204
+ }
205
+ async withNativeCreateLock(operation) {
206
+ const release = await acquireFileLock(this.nativeCreateLockPath, this.#lockTimeoutMs);
207
+ try {
208
+ return await operation();
209
+ }
210
+ finally {
211
+ await release();
212
+ }
213
+ }
214
+ async withCatalogLock(operation) {
215
+ const release = await acquireFileLock(this.lockPath, this.#lockTimeoutMs);
216
+ try {
217
+ return await operation();
218
+ }
219
+ finally {
220
+ await release();
221
+ }
222
+ }
223
+ intentPath(requestId) {
224
+ assertId(requestId);
225
+ return join(this.intentsRoot, `${requestId}.json`);
226
+ }
227
+ async writeCatalog(catalog) {
228
+ await this.writeJsonAtomic(this.catalogPath, catalog, 'catalog');
229
+ }
230
+ async writeJsonAtomic(path, value, kind) {
231
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
232
+ const temp = `${path}.${process.pid}.${randomUUID()}.tmp`;
233
+ let handle;
234
+ try {
235
+ this.#fault(kind === 'catalog' ? 'before_catalog_temp_write' : 'before_intent_temp_write');
236
+ handle = await open(temp, 'wx', 0o600);
237
+ await handle.writeFile(`${JSON.stringify(value, null, 2)}\n`, 'utf8');
238
+ await handle.sync();
239
+ this.#fault(kind === 'catalog' ? 'after_catalog_temp_sync' : 'after_intent_temp_sync');
240
+ await handle.close();
241
+ handle = undefined;
242
+ await rename(temp, path);
243
+ this.#fault(kind === 'catalog' ? 'after_catalog_rename' : 'after_intent_rename');
244
+ const directory = await open(dirname(path), 'r');
245
+ try {
246
+ await directory.sync();
247
+ }
248
+ finally {
249
+ await directory.close();
250
+ }
251
+ }
252
+ finally {
253
+ await handle?.close().catch(() => { });
254
+ await rm(temp, { force: true }).catch(() => { });
255
+ }
256
+ }
257
+ }
258
+ export function emptyCatalog() {
259
+ return { schema: CATALOG_SCHEMA, catalogGeneration: 0, entries: [] };
260
+ }
261
+ export function entryReference(entry) {
262
+ return { storeId: entry.storeId, identityId: entry.identityId, did: entry.did };
263
+ }
264
+ export function findEntry(catalog, reference) {
265
+ return catalog.entries.find((entry) => entry.storeId === reference.storeId
266
+ && entry.identityId === reference.identityId
267
+ && entry.did === reference.did);
268
+ }
269
+ async function acquireFileLock(path, timeoutMs) {
270
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
271
+ try {
272
+ return await lockfile.lock(path, {
273
+ lockfilePath: path,
274
+ realpath: false,
275
+ stale: Math.max(5_000, timeoutMs * 2),
276
+ update: Math.max(1_000, timeoutMs),
277
+ retries: {
278
+ retries: Math.max(1, Math.ceil(timeoutMs / LOCK_RETRY_MS)),
279
+ factor: 1,
280
+ minTimeout: LOCK_RETRY_MS,
281
+ maxTimeout: LOCK_RETRY_MS,
282
+ randomize: true,
283
+ },
284
+ });
285
+ }
286
+ catch {
287
+ throw pluginError('catalog_conflict');
288
+ }
289
+ }
290
+ function parseCatalog(value) {
291
+ if (!isRecord(value)
292
+ || value.schema !== CATALOG_SCHEMA
293
+ || !isNonNegativeInteger(value.catalogGeneration)
294
+ || !Array.isArray(value.entries)) {
295
+ throw pluginError('catalog_corrupt');
296
+ }
297
+ const entries = value.entries.map(parseEntry);
298
+ const identities = new Set();
299
+ const dids = new Set();
300
+ const handles = new Set();
301
+ for (const entry of entries) {
302
+ if (identities.has(entry.identityId) || dids.has(entry.did))
303
+ throw pluginError('catalog_corrupt');
304
+ identities.add(entry.identityId);
305
+ dids.add(entry.did);
306
+ if (entry.handle !== undefined) {
307
+ const normalized = normalizeHandle(entry.handle);
308
+ if (handles.has(normalized))
309
+ throw pluginError('catalog_corrupt');
310
+ handles.add(normalized);
311
+ }
312
+ }
313
+ return {
314
+ schema: CATALOG_SCHEMA,
315
+ catalogGeneration: value.catalogGeneration,
316
+ entries,
317
+ };
318
+ }
319
+ function parseEntry(value) {
320
+ if (!isRecord(value)
321
+ || !isString(value.identityId)
322
+ || !isString(value.did)
323
+ || !isString(value.storeId)
324
+ || !isOptionalString(value.label)
325
+ || !isOptionalString(value.handle)
326
+ || !isOptionalString(value.createdByConsumer)
327
+ || !Array.isArray(value.grantedConsumers)
328
+ || !value.grantedConsumers.every(isString)
329
+ || !isString(value.createdAt)
330
+ || !isString(value.lastUsedAt)
331
+ || !['active', 'deleting', 'unclaimed'].includes(String(value.state))) {
332
+ throw pluginError('catalog_corrupt');
333
+ }
334
+ const grantedConsumers = [...new Set(value.grantedConsumers)].sort();
335
+ if (grantedConsumers.length !== value.grantedConsumers.length)
336
+ throw pluginError('catalog_corrupt');
337
+ if (value.state === 'unclaimed' && grantedConsumers.length !== 0)
338
+ throw pluginError('catalog_corrupt');
339
+ return {
340
+ identityId: value.identityId,
341
+ did: value.did,
342
+ storeId: value.storeId,
343
+ ...(value.label === undefined ? {} : { label: value.label }),
344
+ ...(value.handle === undefined ? {} : { handle: normalizeHandle(value.handle) }),
345
+ ...(value.createdByConsumer === undefined ? {} : { createdByConsumer: value.createdByConsumer }),
346
+ grantedConsumers,
347
+ createdAt: value.createdAt,
348
+ lastUsedAt: value.lastUsedAt,
349
+ state: value.state,
350
+ };
351
+ }
352
+ function parseIntent(value) {
353
+ if (!isRecord(value)
354
+ || value.schema !== CREATE_INTENT_SCHEMA
355
+ || !isString(value.requestId)
356
+ || !isString(value.consumer)
357
+ || !isOptionalString(value.label)
358
+ || !isOptionalString(value.handle)
359
+ || !isString(value.createdAt)
360
+ || !Array.isArray(value.baselineIdentityIds)
361
+ || !value.baselineIdentityIds.every(isString)
362
+ || !isOptionalReference(value.reference)) {
363
+ throw pluginError('catalog_corrupt');
364
+ }
365
+ assertId(value.requestId);
366
+ return {
367
+ schema: CREATE_INTENT_SCHEMA,
368
+ requestId: value.requestId,
369
+ consumer: value.consumer,
370
+ ...(value.label === undefined ? {} : { label: value.label }),
371
+ ...(value.handle === undefined ? {} : { handle: normalizeHandle(value.handle) }),
372
+ createdAt: value.createdAt,
373
+ baselineIdentityIds: [...new Set(value.baselineIdentityIds)].sort(),
374
+ ...(value.reference === undefined ? {} : { reference: value.reference }),
375
+ };
376
+ }
377
+ export function normalizeHandle(value) {
378
+ if (value !== value.trim() || value.length < 1 || value.length > 128
379
+ || !/^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/u.test(value.toLowerCase())) {
380
+ throw pluginError('invalid_request');
381
+ }
382
+ return value.toLowerCase();
383
+ }
384
+ function cloneCatalog(catalog) {
385
+ return {
386
+ ...catalog,
387
+ entries: catalog.entries.map((entry) => ({
388
+ ...entry,
389
+ grantedConsumers: [...entry.grantedConsumers],
390
+ })),
391
+ };
392
+ }
393
+ function assertId(value) {
394
+ if (!/^[A-Za-z0-9_-]{1,128}$/u.test(value))
395
+ throw pluginError('invalid_request');
396
+ }
397
+ function isRecord(value) {
398
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
399
+ }
400
+ function isString(value) {
401
+ return typeof value === 'string' && value.length > 0 && value.length <= 4096;
402
+ }
403
+ function isOptionalString(value) {
404
+ return value === undefined || isString(value);
405
+ }
406
+ function isNonNegativeInteger(value) {
407
+ return Number.isSafeInteger(value) && Number(value) >= 0;
408
+ }
409
+ function isOptionalReference(value) {
410
+ return value === undefined || (isRecord(value)
411
+ && isString(value.storeId)
412
+ && isString(value.identityId)
413
+ && isString(value.did));
414
+ }
415
+ function isMissing(error) {
416
+ return isNodeError(error, 'ENOENT');
417
+ }
418
+ function isNodeError(error, code) {
419
+ return typeof error === 'object' && error !== null && 'code' in error && error.code === code;
420
+ }
421
+ function isPluginCatalogError(error) {
422
+ return typeof error === 'object'
423
+ && error !== null
424
+ && 'name' in error
425
+ && error.name === 'AnpIdentityPluginError'
426
+ && 'code' in error
427
+ && error.code === 'catalog_corrupt';
428
+ }
429
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** Stable DSH plugin error without identity, path, payload, or provider detail. */
2
+ export declare class AnpIdentityPluginError extends Error {
3
+ readonly code: AnpIdentityPluginErrorCode;
4
+ readonly name = "AnpIdentityPluginError";
5
+ constructor(code: AnpIdentityPluginErrorCode, message?: string);
6
+ }
7
+ export type AnpIdentityPluginErrorCode = 'invalid_request' | 'provider_unavailable' | 'provider_incompatible' | 'provider_disposed' | 'consumer_forbidden' | 'capability_forbidden' | 'identity_not_found' | 'identity_unclaimed' | 'identity_deleting' | 'identity_in_use' | 'handle_conflict' | 'catalog_conflict' | 'catalog_corrupt' | 'http_origin_forbidden' | 'http_body_too_large' | 'http_body_unsupported';
8
+ export declare function pluginError(code: AnpIdentityPluginErrorCode): AnpIdentityPluginError;
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,qBAAa,sBAAuB,SAAQ,KAAK;aAI7B,IAAI,EAAE,0BAA0B;IAHlD,SAAgB,IAAI,4BAA2B;gBAG7B,IAAI,EAAE,0BAA0B,EAChD,OAAO,SAAuB;CAIjC;AAED,MAAM,MAAM,0BAA0B,GAClC,iBAAiB,GACjB,sBAAsB,GACtB,uBAAuB,GACvB,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,GACpB,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,uBAAuB,GACvB,qBAAqB,GACrB,uBAAuB,CAAA;AAqB3B,wBAAgB,WAAW,CAAC,IAAI,EAAE,0BAA0B,GAAG,sBAAsB,CAEpF"}
package/lib/errors.js ADDED
@@ -0,0 +1,31 @@
1
+ /** Stable DSH plugin error without identity, path, payload, or provider detail. */
2
+ export class AnpIdentityPluginError extends Error {
3
+ code;
4
+ name = 'AnpIdentityPluginError';
5
+ constructor(code, message = ERROR_MESSAGES[code]) {
6
+ super(message);
7
+ this.code = code;
8
+ }
9
+ }
10
+ const ERROR_MESSAGES = {
11
+ invalid_request: 'The ANP Identity request is invalid.',
12
+ provider_unavailable: 'The ANP Identity provider is unavailable.',
13
+ provider_incompatible: 'The ANP Identity provider is incompatible.',
14
+ provider_disposed: 'The ANP Identity lease has been disposed.',
15
+ consumer_forbidden: 'The DSH consumer is not allowed to use ANP Identity.',
16
+ capability_forbidden: 'The ANP Identity capability is not authorized.',
17
+ identity_not_found: 'The requested ANP identity was not found.',
18
+ identity_unclaimed: 'The requested ANP identity has no consumer grant.',
19
+ identity_deleting: 'The requested ANP identity is being deleted.',
20
+ identity_in_use: 'The requested ANP identity is still granted to another consumer.',
21
+ handle_conflict: 'The requested ANP identity handle is already in use.',
22
+ catalog_conflict: 'The ANP Identity catalog changed concurrently.',
23
+ catalog_corrupt: 'The ANP Identity catalog is corrupt.',
24
+ http_origin_forbidden: 'The HTTP request origin is not authorized.',
25
+ http_body_too_large: 'The HTTP request body exceeds 4 MiB.',
26
+ http_body_unsupported: 'The HTTP request body cannot be replayed safely.',
27
+ };
28
+ export function pluginError(code) {
29
+ return new AnpIdentityPluginError(code);
30
+ }
31
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAI7B;IAHF,IAAI,GAAG,wBAAwB,CAAA;IAE/C,YACkB,IAAgC,EAChD,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAA4B;IAIlD,CAAC;CACF;AAoBD,MAAM,cAAc,GAAyD;IAC3E,eAAe,EAAE,sCAAsC;IACvD,oBAAoB,EAAE,2CAA2C;IACjE,qBAAqB,EAAE,4CAA4C;IACnE,iBAAiB,EAAE,2CAA2C;IAC9D,kBAAkB,EAAE,sDAAsD;IAC1E,oBAAoB,EAAE,gDAAgD;IACtE,kBAAkB,EAAE,2CAA2C;IAC/D,kBAAkB,EAAE,mDAAmD;IACvE,iBAAiB,EAAE,8CAA8C;IACjE,eAAe,EAAE,kEAAkE;IACnF,eAAe,EAAE,sDAAsD;IACvE,gBAAgB,EAAE,gDAAgD;IAClE,eAAe,EAAE,sCAAsC;IACvD,qBAAqB,EAAE,4CAA4C;IACnE,mBAAmB,EAAE,sCAAsC;IAC3D,qBAAqB,EAAE,kDAAkD;CAC1E,CAAA;AAED,MAAM,UAAU,WAAW,CAAC,IAAgC;IAC1D,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { IdentityReference } from '@agent-network-protocol/anp-identity';
2
+ import type { ProviderLease } from '@agent-network-protocol/anp-identity/provider';
3
+ import type { AuthenticatedHttp } from './types.js';
4
+ export declare const ANP_IDENTITY_HTTP_MAX_BODY_BYTES: number;
5
+ export declare function createAuthenticatedHttp(reference: IdentityReference, lease: ProviderLease, allowedOrigins: ReadonlySet<string>, assertActive: () => Promise<void>, requestSigningKid: () => Promise<string>): AuthenticatedHttp;
6
+ //# sourceMappingURL=http-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-auth.d.ts","sourceRoot":"","sources":["../src/http-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAA;AAElF,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAA;AAElE,eAAO,MAAM,gCAAgC,QAAkB,CAAA;AAS/D,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,aAAa,EACpB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACjC,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GACvC,iBAAiB,CAqBnB"}