@agent-network-protocol/dsh-anp-identity 0.1.2 → 0.1.3-rc.2
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.
- package/BOUNDARY.md +14 -2
- package/README.md +33 -4
- package/README.zh.md +10 -2
- package/V7-MANAGEMENT.md +90 -0
- package/cordis.patch.yml +4 -0
- package/lib/authorization-types.d.ts +150 -0
- package/lib/authorization-types.d.ts.map +1 -0
- package/lib/authorization-types.js +2 -0
- package/lib/authorization-types.js.map +1 -0
- package/lib/authorization.d.ts +45 -0
- package/lib/authorization.d.ts.map +1 -0
- package/lib/authorization.js +718 -0
- package/lib/authorization.js.map +1 -0
- package/lib/catalog.d.ts +7 -2
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +45 -23
- package/lib/catalog.js.map +1 -1
- package/lib/client/controller.d.ts +78 -0
- package/lib/client/controller.d.ts.map +1 -0
- package/lib/client/controller.js +365 -0
- package/lib/client/controller.js.map +1 -0
- package/lib/client/identity-icon.d.ts +3 -0
- package/lib/client/identity-icon.d.ts.map +1 -0
- package/lib/client/identity-icon.js +6 -0
- package/lib/client/identity-icon.js.map +1 -0
- package/lib/client/index.d.ts +7 -0
- package/lib/client/index.d.ts.map +1 -0
- package/lib/client/index.js +51 -0
- package/lib/client/index.js.map +1 -0
- package/lib/client/settings-icon-slot.d.ts +13 -0
- package/lib/client/settings-icon-slot.d.ts.map +1 -0
- package/lib/client/settings-icon-slot.js +2 -0
- package/lib/client/settings-icon-slot.js.map +1 -0
- package/lib/client/styles.d.ts +4 -0
- package/lib/client/styles.d.ts.map +1 -0
- package/lib/client/styles.js +39 -0
- package/lib/client/styles.js.map +1 -0
- package/lib/client/views.d.ts +11 -0
- package/lib/client/views.d.ts.map +1 -0
- package/lib/client/views.js +287 -0
- package/lib/client/views.js.map +1 -0
- package/lib/client.js +21008 -0
- package/lib/client.js.map +7 -0
- package/lib/index.d.ts +26 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +413 -58
- package/lib/index.js.map +1 -1
- package/lib/management-remote.d.ts +23 -0
- package/lib/management-remote.d.ts.map +1 -0
- package/lib/management-remote.js +126 -0
- package/lib/management-remote.js.map +1 -0
- package/lib/management-types.d.ts +50 -0
- package/lib/management-types.d.ts.map +1 -0
- package/lib/management-types.js +2 -0
- package/lib/management-types.js.map +1 -0
- package/lib/provider-api.d.ts +3 -0
- package/lib/provider-api.d.ts.map +1 -1
- package/lib/provider-api.js.map +1 -1
- package/lib/remote.d.ts +4 -0
- package/lib/remote.d.ts.map +1 -0
- package/lib/remote.js +86 -0
- package/lib/remote.js.map +1 -0
- package/lib/user-client.d.ts +41 -0
- package/lib/user-client.d.ts.map +1 -0
- package/lib/user-client.js +6 -0
- package/lib/user-client.js.map +1 -0
- package/lib/user-operation.d.ts +7 -0
- package/lib/user-operation.d.ts.map +1 -0
- package/lib/user-operation.js +87 -0
- package/lib/user-operation.js.map +1 -0
- package/lib/user-service.d.ts +26 -0
- package/lib/user-service.d.ts.map +1 -0
- package/lib/user-service.js +140 -0
- package/lib/user-service.js.map +1 -0
- package/package.json +113 -10
package/lib/remote.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** Explicit browser-safe Typert method contract for the optional manager. */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const reference = z
|
|
4
|
+
.object({
|
|
5
|
+
storeId: z.string().min(1),
|
|
6
|
+
identityId: z.string().min(1),
|
|
7
|
+
did: z.string().min(1),
|
|
8
|
+
})
|
|
9
|
+
.strict();
|
|
10
|
+
const version = z
|
|
11
|
+
.object({
|
|
12
|
+
requestId: z.string().min(1),
|
|
13
|
+
expectedVersion: z.number().int().positive(),
|
|
14
|
+
})
|
|
15
|
+
.strict();
|
|
16
|
+
const decision = version
|
|
17
|
+
.extend({
|
|
18
|
+
decision: z.enum(["approve", "deny"]),
|
|
19
|
+
identity: reference.optional(),
|
|
20
|
+
mode: z.enum(["once", "permanent"]).optional(),
|
|
21
|
+
reviewedSnapshot: z
|
|
22
|
+
.object({
|
|
23
|
+
version: z.string().min(1),
|
|
24
|
+
capabilities: z.array(z.enum(["identity:read", "identity:sign", "identity:http-auth"])),
|
|
25
|
+
signingPurposes: z.array(z.string()),
|
|
26
|
+
httpOrigins: z.array(z.string()),
|
|
27
|
+
})
|
|
28
|
+
.strict()
|
|
29
|
+
.optional(),
|
|
30
|
+
})
|
|
31
|
+
.strict();
|
|
32
|
+
const methods = [
|
|
33
|
+
["listIdentities", undefined],
|
|
34
|
+
["listRequests", z.boolean().optional()],
|
|
35
|
+
["getRequest", z.string().min(1)],
|
|
36
|
+
["decide", decision],
|
|
37
|
+
["grants", reference],
|
|
38
|
+
[
|
|
39
|
+
"revoke",
|
|
40
|
+
z
|
|
41
|
+
.object({
|
|
42
|
+
grantId: z.string().min(1),
|
|
43
|
+
expectedVersion: z.number().int().positive(),
|
|
44
|
+
})
|
|
45
|
+
.strict(),
|
|
46
|
+
],
|
|
47
|
+
["publicDocument", reference],
|
|
48
|
+
[
|
|
49
|
+
"deleteIdentity",
|
|
50
|
+
z.object({ reference, confirmationName: z.string().min(1) }).strict(),
|
|
51
|
+
],
|
|
52
|
+
["markPrompted", version],
|
|
53
|
+
["reauthorize", version],
|
|
54
|
+
];
|
|
55
|
+
const contribution = {
|
|
56
|
+
package: "@agent-network-protocol/dsh-anp-identity",
|
|
57
|
+
descriptors: methods.map(([method, schema]) => ({
|
|
58
|
+
id: `@agent-network-protocol/dsh-anp-identity#anpIdentityManager/${method}`,
|
|
59
|
+
service: "anpIdentityManager",
|
|
60
|
+
namespace: "anpIdentityManager",
|
|
61
|
+
method,
|
|
62
|
+
invocation: { kind: "direct" },
|
|
63
|
+
parameters: schema === undefined
|
|
64
|
+
? []
|
|
65
|
+
: [
|
|
66
|
+
{
|
|
67
|
+
name: "input",
|
|
68
|
+
wire: "input",
|
|
69
|
+
source: "json",
|
|
70
|
+
...(method === "listRequests" ? { acceptsUndefined: true } : {}),
|
|
71
|
+
codec: {
|
|
72
|
+
mode: "strict",
|
|
73
|
+
typeSymbol: `anp-identity/manager#${method}Input`,
|
|
74
|
+
schema,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
result: {
|
|
79
|
+
mode: "strict",
|
|
80
|
+
typeSymbol: `anp-identity/manager#${method}Result`,
|
|
81
|
+
schema: z.json().nullable(),
|
|
82
|
+
},
|
|
83
|
+
})),
|
|
84
|
+
};
|
|
85
|
+
export default contribution;
|
|
86
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { PublicIdentity, SignRequest, Signature, IdentityReference } from './types.js';
|
|
3
|
+
import type { AuthorizationRequest, AuthorizationExecution, RequestCreateInput } from './authorization-types.js';
|
|
4
|
+
/** Raw operation input. The Host computes the fingerprint; consumers cannot supply one. */
|
|
5
|
+
export type UserOperation = {
|
|
6
|
+
readonly action: 'read';
|
|
7
|
+
} | {
|
|
8
|
+
readonly action: 'sign';
|
|
9
|
+
readonly request: SignRequest;
|
|
10
|
+
} | {
|
|
11
|
+
readonly action: 'http';
|
|
12
|
+
readonly request: Request;
|
|
13
|
+
};
|
|
14
|
+
export interface UserAccessRequest {
|
|
15
|
+
readonly requestId: string;
|
|
16
|
+
readonly purpose: string;
|
|
17
|
+
readonly identity?: IdentityReference;
|
|
18
|
+
readonly operation?: UserOperation;
|
|
19
|
+
}
|
|
20
|
+
/** A caller- and identity-bound object with no management or Provider methods. */
|
|
21
|
+
export interface AuthorizedIdentity {
|
|
22
|
+
publicIdentity(executionId?: string): Promise<PublicIdentity>;
|
|
23
|
+
sign(request: SignRequest, executionId?: string): Promise<Signature>;
|
|
24
|
+
readonly authenticatedHttp: {
|
|
25
|
+
dispatch(request: Request, executionId?: string): Promise<Response>;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface UserIdentityClient {
|
|
29
|
+
requestCreateIdentity(input: RequestCreateInput): Promise<AuthorizationRequest>;
|
|
30
|
+
getCreateRequest(requestId: string): Promise<AuthorizationRequest>;
|
|
31
|
+
cancelCreateRequest(requestId: string, expectedVersion: number): Promise<AuthorizationRequest>;
|
|
32
|
+
requestAccess(input: UserAccessRequest): Promise<AuthorizationRequest>;
|
|
33
|
+
getAccessRequest(requestId: string): Promise<AuthorizationRequest>;
|
|
34
|
+
cancelAccessRequest(requestId: string, expectedVersion: number): Promise<AuthorizationRequest>;
|
|
35
|
+
openAuthorizedIdentity(grantId: string): Promise<AuthorizedIdentity>;
|
|
36
|
+
getExecution(executionId: string): Promise<AuthorizationExecution>;
|
|
37
|
+
subscribeRequestChanges(listener: () => void): () => void;
|
|
38
|
+
}
|
|
39
|
+
/** Bind using the installed Cordis context, never a consumer string from a request. */
|
|
40
|
+
export declare function bindIdentityClient(ctx: Context): UserIdentityClient;
|
|
41
|
+
//# sourceMappingURL=user-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-client.d.ts","sourceRoot":"","sources":["../src/user-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAEhH,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAE1D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAA;CACnC;AAED,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7D,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACpE,QAAQ,CAAC,iBAAiB,EAAE;QAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KACpE,CAAA;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC/E,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAClE,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC9F,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACtE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAClE,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC9F,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpE,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAClE,uBAAuB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC1D;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAGnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-client.js","sourceRoot":"","sources":["../src/user-client.ts"],"names":[],"mappings":"AAsCA,uFAAuF;AACvF,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,WAAoF,CAAA;IACxG,OAAO,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ControlledOperation } from './authorization-types.js';
|
|
2
|
+
import type { UserOperation } from './user-client.js';
|
|
3
|
+
export declare function normalizeOperation(operation: UserOperation): Promise<{
|
|
4
|
+
readonly frozen: ControlledOperation;
|
|
5
|
+
readonly input: UserOperation;
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=user-operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-operation.d.ts","sourceRoot":"","sources":["../src/user-operation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAIrD,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC;IAC1E,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;CAC9B,CAAC,CAwED"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { pluginError } from './errors.js';
|
|
3
|
+
import { ANP_IDENTITY_HTTP_MAX_BODY_BYTES } from './http-auth.js';
|
|
4
|
+
export async function normalizeOperation(operation) {
|
|
5
|
+
if (operation?.action === 'read')
|
|
6
|
+
return {
|
|
7
|
+
frozen: fingerprint('identity:read', 'Read public identity', { action: 'read' }),
|
|
8
|
+
input: { action: 'read' },
|
|
9
|
+
};
|
|
10
|
+
if (operation?.action === 'sign') {
|
|
11
|
+
const original = operation.request;
|
|
12
|
+
if (!original || !Buffer.isBuffer(original.payload)
|
|
13
|
+
|| original.payload.length > ANP_IDENTITY_HTTP_MAX_BODY_BYTES
|
|
14
|
+
|| !['authentication', 'application_assertion'].includes(original.purpose)
|
|
15
|
+
|| (original.kid !== undefined && typeof original.kid !== 'string')
|
|
16
|
+
|| (original.purpose === 'application_assertion' && (typeof original.domain !== 'string' || !original.domain))) {
|
|
17
|
+
throw pluginError('invalid_request');
|
|
18
|
+
}
|
|
19
|
+
const request = original.purpose === 'application_assertion'
|
|
20
|
+
? { purpose: original.purpose, domain: original.domain, payload: Buffer.from(original.payload), ...(original.kid === undefined ? {} : { kid: original.kid }) }
|
|
21
|
+
: { purpose: 'authentication', payload: Buffer.from(original.payload), ...(original.kid === undefined ? {} : { kid: original.kid }) };
|
|
22
|
+
return {
|
|
23
|
+
frozen: { ...fingerprint('identity:sign', `Sign: ${request.purpose}`, {
|
|
24
|
+
action: 'sign', purpose: request.purpose, kid: request.kid ?? null,
|
|
25
|
+
domain: request.purpose === 'application_assertion' ? request.domain : null,
|
|
26
|
+
payload: request.payload.toString('base64'),
|
|
27
|
+
}), signingPurpose: request.purpose },
|
|
28
|
+
input: { action: 'sign', request },
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (operation?.action !== 'http' || !(operation.request instanceof Request) || operation.request.bodyUsed) {
|
|
32
|
+
throw pluginError('invalid_request');
|
|
33
|
+
}
|
|
34
|
+
const original = operation.request;
|
|
35
|
+
const url = new URL(original.url);
|
|
36
|
+
if (url.protocol !== 'https:' || url.username || url.password || url.hash)
|
|
37
|
+
throw pluginError('http_origin_forbidden');
|
|
38
|
+
for (const header of ['authorization', 'signature', 'signature-input', 'content-digest']) {
|
|
39
|
+
if (original.headers.has(header))
|
|
40
|
+
throw pluginError('invalid_request');
|
|
41
|
+
}
|
|
42
|
+
const clone = original.clone();
|
|
43
|
+
const reader = clone.body?.getReader();
|
|
44
|
+
let body;
|
|
45
|
+
if (reader) {
|
|
46
|
+
const chunks = [];
|
|
47
|
+
let size = 0;
|
|
48
|
+
try {
|
|
49
|
+
for (;;) {
|
|
50
|
+
const result = await reader.read();
|
|
51
|
+
if (result.done)
|
|
52
|
+
break;
|
|
53
|
+
size += result.value.length;
|
|
54
|
+
if (size > ANP_IDENTITY_HTTP_MAX_BODY_BYTES) {
|
|
55
|
+
void reader.cancel().catch(() => { });
|
|
56
|
+
throw pluginError('http_body_too_large');
|
|
57
|
+
}
|
|
58
|
+
chunks.push(Uint8Array.from(result.value));
|
|
59
|
+
}
|
|
60
|
+
body = Buffer.concat(chunks);
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
reader.releaseLock();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const request = new Request(original.url, {
|
|
67
|
+
method: original.method, headers: new Headers(original.headers), redirect: 'manual',
|
|
68
|
+
signal: original.signal, credentials: original.credentials, cache: original.cache,
|
|
69
|
+
mode: original.mode, referrer: original.referrer, referrerPolicy: original.referrerPolicy,
|
|
70
|
+
integrity: original.integrity, keepalive: original.keepalive,
|
|
71
|
+
...(body === undefined ? {} : { body: Uint8Array.from(body) }),
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
frozen: { ...fingerprint('identity:http-auth', `${request.method} ${url.origin}${url.pathname}${url.href.includes('?') ? '(包含查询参数,内容未展示)' : ''}`, {
|
|
75
|
+
action: 'http', url: request.url, method: request.method, headers: [...request.headers],
|
|
76
|
+
body: body === undefined ? null : Buffer.from(body).toString('base64'),
|
|
77
|
+
credentials: request.credentials, cache: request.cache, mode: request.mode,
|
|
78
|
+
referrer: request.referrer, referrerPolicy: request.referrerPolicy,
|
|
79
|
+
integrity: request.integrity, keepalive: request.keepalive,
|
|
80
|
+
}), httpOrigin: url.origin },
|
|
81
|
+
input: { action: 'http', request },
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function fingerprint(capability, summary, payload) {
|
|
85
|
+
return { capability, summary, fingerprint: createHash('sha256').update(JSON.stringify(payload)).digest('hex') };
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=user-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-operation.js","sourceRoot":"","sources":["../src/user-operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { ProviderLease } from '@agent-network-protocol/anp-identity/provider';
|
|
3
|
+
import type { IdentityReference, PublicIdentity } from './types.js';
|
|
4
|
+
import { AuthorizationEngine } from './authorization.js';
|
|
5
|
+
import type { CapabilitySnapshot, CreateParameters, CreateResult, VerifiedCaller } from './authorization-types.js';
|
|
6
|
+
import type { UserIdentityClient } from './user-client.js';
|
|
7
|
+
export interface UserServiceHost {
|
|
8
|
+
ensureReady(): Promise<void>;
|
|
9
|
+
resolveCaller(context: Context): VerifiedCaller;
|
|
10
|
+
validateCaller(caller: VerifiedCaller): Promise<void>;
|
|
11
|
+
resolveSnapshot(caller: VerifiedCaller, identity: IdentityReference): Promise<CapabilitySnapshot>;
|
|
12
|
+
createIdentity(operationId: string, caller: VerifiedCaller, parameters: CreateParameters): Promise<CreateResult>;
|
|
13
|
+
reconcileCreation(operationId: string, caller: VerifiedCaller, parameters: CreateParameters): Promise<CreateResult | undefined>;
|
|
14
|
+
withNative<T>(operation: (lease: ProviderLease) => Promise<T>): Promise<T>;
|
|
15
|
+
}
|
|
16
|
+
/** Host boundary. The engine is never exposed on the ordinary client or management Remote. */
|
|
17
|
+
export declare class UserIdentityService {
|
|
18
|
+
readonly host: UserServiceHost;
|
|
19
|
+
readonly engine: AuthorizationEngine;
|
|
20
|
+
readonly ready: Promise<void>;
|
|
21
|
+
constructor(stateRoot: string, host: UserServiceHost);
|
|
22
|
+
bind(context: Context): UserIdentityClient;
|
|
23
|
+
private managed;
|
|
24
|
+
}
|
|
25
|
+
export declare function requestSigningKid(identity: PublicIdentity): string;
|
|
26
|
+
//# sourceMappingURL=user-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-service.d.ts","sourceRoot":"","sources":["../src/user-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAmB,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACnI,OAAO,KAAK,EAAsB,kBAAkB,EAAiB,MAAM,kBAAkB,CAAA;AAK7F,MAAM,WAAW,eAAe;IAC9B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAAA;IAC/C,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACjG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAChH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IAC/H,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAC3E;AAED,8FAA8F;AAC9F,qBAAa,mBAAmB;IAGC,QAAQ,CAAC,IAAI,EAAE,eAAe;IAF7D,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;gBACjB,SAAS,EAAE,MAAM,EAAW,IAAI,EAAE,eAAe;IAM7D,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB;IAuD1C,OAAO,CAAC,OAAO;CAwDhB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAKlE"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { AuthorizationEngine } from './authorization.js';
|
|
3
|
+
import { normalizeOperation } from './user-operation.js';
|
|
4
|
+
import { createAuthenticatedHttp } from './http-auth.js';
|
|
5
|
+
import { pluginError } from './errors.js';
|
|
6
|
+
/** Host boundary. The engine is never exposed on the ordinary client or management Remote. */
|
|
7
|
+
export class UserIdentityService {
|
|
8
|
+
host;
|
|
9
|
+
engine;
|
|
10
|
+
ready;
|
|
11
|
+
constructor(stateRoot, host) {
|
|
12
|
+
this.host = host;
|
|
13
|
+
this.engine = new AuthorizationEngine(stateRoot, host);
|
|
14
|
+
this.ready = this.engine.initialize();
|
|
15
|
+
void this.ready.catch(() => { });
|
|
16
|
+
}
|
|
17
|
+
bind(context) {
|
|
18
|
+
const source = this.host.resolveCaller(context);
|
|
19
|
+
const check = async () => {
|
|
20
|
+
await this.ready;
|
|
21
|
+
// Provider startup may need the ledger lock; never wait for it inside a transaction.
|
|
22
|
+
await this.host.ensureReady();
|
|
23
|
+
const current = this.host.resolveCaller(context);
|
|
24
|
+
if (current.consumer !== source.consumer)
|
|
25
|
+
throw pluginError('consumer_forbidden');
|
|
26
|
+
await this.host.validateCaller(current);
|
|
27
|
+
};
|
|
28
|
+
const get = async (id, kind) => {
|
|
29
|
+
await check();
|
|
30
|
+
let request = await this.engine.getRequest(source, id);
|
|
31
|
+
if (request.kind !== kind)
|
|
32
|
+
throw pluginError('invalid_request');
|
|
33
|
+
if (request.kind === 'create' && request.status === 'approved'
|
|
34
|
+
&& (request.executionStatus === 'running' || request.executionStatus === 'unknown')) {
|
|
35
|
+
request = await this.engine.reconcileCreation(id);
|
|
36
|
+
}
|
|
37
|
+
return request;
|
|
38
|
+
};
|
|
39
|
+
const cancel = async (id, version, kind) => {
|
|
40
|
+
await get(id, kind);
|
|
41
|
+
return this.engine.cancel(source, id, version);
|
|
42
|
+
};
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
requestCreateIdentity: async (input) => { await check(); return this.engine.requestCreate(source, input); },
|
|
45
|
+
getCreateRequest: (id) => get(id, 'create'),
|
|
46
|
+
cancelCreateRequest: (id, version) => cancel(id, version, 'create'),
|
|
47
|
+
requestAccess: async (input) => {
|
|
48
|
+
await check();
|
|
49
|
+
const normalized = input.operation === undefined ? undefined : await normalizeOperation(input.operation);
|
|
50
|
+
return this.engine.requestAccess(source, {
|
|
51
|
+
requestId: input.requestId, purpose: input.purpose,
|
|
52
|
+
...(input.identity === undefined ? {} : { identity: structuredClone(input.identity) }),
|
|
53
|
+
...(normalized === undefined ? {} : { operation: normalized.frozen }),
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
getAccessRequest: (id) => get(id, 'access'),
|
|
57
|
+
cancelAccessRequest: (id, version) => cancel(id, version, 'access'),
|
|
58
|
+
openAuthorizedIdentity: async (id) => {
|
|
59
|
+
await check();
|
|
60
|
+
return this.managed(source, await this.engine.open(source, id), check);
|
|
61
|
+
},
|
|
62
|
+
getExecution: async (id) => { await check(); return this.engine.getExecution(source, id); },
|
|
63
|
+
subscribeRequestChanges: (listener) => {
|
|
64
|
+
if (typeof listener !== 'function')
|
|
65
|
+
throw pluginError('invalid_request');
|
|
66
|
+
const dispose = this.engine.subscribeRequestChanges(() => {
|
|
67
|
+
void check().then(() => { listener(); }).catch(() => { });
|
|
68
|
+
});
|
|
69
|
+
context.effect(() => dispose, 'anp-identity: request notifications');
|
|
70
|
+
return dispose;
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
managed(source, lease, checkCaller) {
|
|
75
|
+
const run = async (raw, id, execute) => {
|
|
76
|
+
await checkCaller();
|
|
77
|
+
const { frozen, input } = await normalizeOperation(raw);
|
|
78
|
+
if (id !== undefined && (typeof id !== 'string' || !id || id.length > 256))
|
|
79
|
+
throw pluginError('invalid_request');
|
|
80
|
+
if (input.action === 'sign') {
|
|
81
|
+
await this.host.withNative(async (native) => {
|
|
82
|
+
const identity = await native.publicIdentity(lease.identity);
|
|
83
|
+
const keys = identity.activeKeys.filter(key => key.algorithm === 'ed25519'
|
|
84
|
+
&& key.purposes.includes(input.request.purpose)
|
|
85
|
+
&& (input.request.kid === undefined || key.kid === input.request.kid));
|
|
86
|
+
if (keys.length !== 1)
|
|
87
|
+
throw pluginError('invalid_request');
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const executionId = id ?? randomUUID();
|
|
91
|
+
await this.engine.admit(source, lease, frozen, executionId);
|
|
92
|
+
const assertActive = async () => {
|
|
93
|
+
await checkCaller();
|
|
94
|
+
await this.engine.assertExecutionActive(source, lease, executionId);
|
|
95
|
+
};
|
|
96
|
+
try {
|
|
97
|
+
const result = await this.host.withNative(async (native) => {
|
|
98
|
+
await assertActive();
|
|
99
|
+
return execute(native, input, assertActive);
|
|
100
|
+
});
|
|
101
|
+
await this.engine.recordExecution(source, executionId, 'succeeded');
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
// Once admission is durable; neither transport errors nor lost results refund it.
|
|
106
|
+
await this.engine.recordExecution(source, executionId, 'unknown').catch(() => { });
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
return Object.freeze({
|
|
111
|
+
publicIdentity: (executionId) => run({ action: 'read' }, executionId, native => native.publicIdentity(lease.identity)),
|
|
112
|
+
sign: (request, executionId) => run({ action: 'sign', request }, executionId, (native, operation) => {
|
|
113
|
+
if (operation.action !== 'sign')
|
|
114
|
+
throw pluginError('invalid_request');
|
|
115
|
+
return native.sign(lease.identity, operation.request);
|
|
116
|
+
}),
|
|
117
|
+
authenticatedHttp: Object.freeze({
|
|
118
|
+
dispatch: async (request, executionId) => {
|
|
119
|
+
return run({ action: 'http', request }, executionId, async (native, operation, assertActive) => {
|
|
120
|
+
if (operation.action !== 'http')
|
|
121
|
+
throw pluginError('invalid_request');
|
|
122
|
+
const origins = new Set([new URL(operation.request.url).origin]);
|
|
123
|
+
return createAuthenticatedHttp(lease.identity, native, origins, assertActive, async () => {
|
|
124
|
+
const identity = await native.publicIdentity(lease.identity);
|
|
125
|
+
return requestSigningKid(identity);
|
|
126
|
+
}).dispatch(operation.request, outgoing => fetch(outgoing));
|
|
127
|
+
});
|
|
128
|
+
},
|
|
129
|
+
}),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export function requestSigningKid(identity) {
|
|
134
|
+
const keys = identity.activeKeys.filter(key => key.algorithm === 'ed25519'
|
|
135
|
+
&& key.purposes.includes('authentication') && key.purposes.includes('application_assertion'));
|
|
136
|
+
if (keys.length !== 1)
|
|
137
|
+
throw pluginError('provider_incompatible');
|
|
138
|
+
return keys[0].kid;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=user-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-service.js","sourceRoot":"","sources":["../src/user-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-network-protocol/dsh-anp-identity",
|
|
3
|
-
"version": "0.1.2",
|
|
3
|
+
"version": "0.1.3-rc.2",
|
|
4
4
|
"description": "ANP Identity management plugin for DeepSeek Harness",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -18,6 +18,22 @@
|
|
|
18
18
|
"types": "./lib/provider-api.d.ts",
|
|
19
19
|
"default": "./lib/provider-api.js"
|
|
20
20
|
},
|
|
21
|
+
"./user-client": {
|
|
22
|
+
"types": "./lib/user-client.d.ts",
|
|
23
|
+
"default": "./lib/user-client.js"
|
|
24
|
+
},
|
|
25
|
+
"./client": {
|
|
26
|
+
"types": "./lib/client/index.d.ts",
|
|
27
|
+
"default": "./lib/client.js"
|
|
28
|
+
},
|
|
29
|
+
"./remote": {
|
|
30
|
+
"types": "./lib/remote.d.ts",
|
|
31
|
+
"default": "./lib/remote.js"
|
|
32
|
+
},
|
|
33
|
+
"./management-remote": {
|
|
34
|
+
"types": "./lib/management-remote.d.ts",
|
|
35
|
+
"default": "./lib/management-remote.js"
|
|
36
|
+
},
|
|
21
37
|
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
22
38
|
"./package.json": "./package.json"
|
|
23
39
|
},
|
|
@@ -27,19 +43,20 @@
|
|
|
27
43
|
"README.md",
|
|
28
44
|
"README.zh.md",
|
|
29
45
|
"BOUNDARY.md",
|
|
46
|
+
"V7-MANAGEMENT.md",
|
|
30
47
|
"examples/**",
|
|
31
48
|
"LICENSE"
|
|
32
49
|
],
|
|
33
50
|
"scripts": {
|
|
34
|
-
"build": "tsc -p tsconfig.json",
|
|
51
|
+
"build": "tsc -p tsconfig.json && node scripts/build-client.mjs",
|
|
35
52
|
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
|
|
36
53
|
"test": "npm run build && vitest run",
|
|
37
|
-
"test:functional": "node scripts/run-functional-e2e.mjs",
|
|
38
54
|
"update:public": "node scripts/public-snapshot.mjs --update",
|
|
39
55
|
"check:public": "npm run build && node scripts/public-snapshot.mjs",
|
|
40
56
|
"check:generated": "node scripts/check-generated.mjs",
|
|
41
|
-
"verify": "npm run
|
|
42
|
-
"prepack": "npm run verify"
|
|
57
|
+
"verify": "npm run check:public && npm run typecheck && npm run check:generated && npm test",
|
|
58
|
+
"prepack": "npm run verify",
|
|
59
|
+
"test:functional": "node scripts/run-functional-e2e.mjs"
|
|
43
60
|
},
|
|
44
61
|
"keywords": [
|
|
45
62
|
"anp",
|
|
@@ -61,23 +78,109 @@
|
|
|
61
78
|
"dsh": {
|
|
62
79
|
"bundle": {
|
|
63
80
|
"patch": "./cordis.patch.yml"
|
|
81
|
+
},
|
|
82
|
+
"client": {
|
|
83
|
+
"inject": [
|
|
84
|
+
"@deepseek-ai/dsh-client-ui-renderer",
|
|
85
|
+
"@deepseek-ai/dsh-api-remotes",
|
|
86
|
+
"@deepseek-ai/dsh-client-connection",
|
|
87
|
+
"@deepseek-ai/dsh-client-ui-layout",
|
|
88
|
+
"@deepseek-ai/dsh-client-ui-settings"
|
|
89
|
+
],
|
|
90
|
+
"platform": "web"
|
|
64
91
|
}
|
|
65
92
|
},
|
|
66
93
|
"peerDependencies": {
|
|
67
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
94
|
+
"@deepseek-ai/cordis": "^4.0.2",
|
|
95
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.5-rc.1",
|
|
96
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.5-rc.1",
|
|
97
|
+
"@deepseek-ai/dsh-client-ui-layout": "^0.1.5-rc.1",
|
|
98
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-rc.1",
|
|
99
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-rc.1",
|
|
100
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.5-rc.1",
|
|
101
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.5-rc.1",
|
|
102
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.5-rc.1",
|
|
103
|
+
"react": "^18.3.1"
|
|
104
|
+
},
|
|
105
|
+
"peerDependenciesMeta": {
|
|
106
|
+
"@deepseek-ai/dsh-typert-protocol": {
|
|
107
|
+
"optional": true
|
|
108
|
+
},
|
|
109
|
+
"@deepseek-ai/dsh-client-ui-renderer": {
|
|
110
|
+
"optional": true
|
|
111
|
+
},
|
|
112
|
+
"@deepseek-ai/dsh-api-remotes": {
|
|
113
|
+
"optional": true
|
|
114
|
+
},
|
|
115
|
+
"@deepseek-ai/dsh-client-connection": {
|
|
116
|
+
"optional": true
|
|
117
|
+
},
|
|
118
|
+
"@deepseek-ai/dsh-client-ui-layout": {
|
|
119
|
+
"optional": true
|
|
120
|
+
},
|
|
121
|
+
"@deepseek-ai/dsh-client-ui-settings": {
|
|
122
|
+
"optional": true
|
|
123
|
+
},
|
|
124
|
+
"@deepseek-ai/dsh-client-ui-slots": {
|
|
125
|
+
"optional": true
|
|
126
|
+
},
|
|
127
|
+
"@deepseek-ai/dsh-client-ui-primitives": {
|
|
128
|
+
"optional": true
|
|
129
|
+
},
|
|
130
|
+
"react": {
|
|
131
|
+
"optional": true
|
|
132
|
+
}
|
|
68
133
|
},
|
|
69
134
|
"dependencies": {
|
|
70
|
-
"@agent-network-protocol/anp-identity": "0.2.2",
|
|
71
135
|
"@deepseek-ai/schemastery": "^3.18.1",
|
|
72
|
-
"proper-lockfile": "^4.1.2"
|
|
136
|
+
"proper-lockfile": "^4.1.2",
|
|
137
|
+
"zod": "^4.6.2",
|
|
138
|
+
"@agent-network-protocol/anp-identity": "0.2.2"
|
|
73
139
|
},
|
|
74
140
|
"devDependencies": {
|
|
75
141
|
"@agent-network-protocol/anp-identity": "file:../../bindings/node",
|
|
76
|
-
"@deepseek-ai/cordis": "
|
|
142
|
+
"@deepseek-ai/cordis": "4.0.2",
|
|
143
|
+
"@deepseek-ai/cordis-plugin-loader": "1.0.3",
|
|
144
|
+
"@deepseek-ai/dsh-api-gateway": "0.1.5-rc.1",
|
|
145
|
+
"@deepseek-ai/dsh-api-remotes": "0.1.5-rc.1",
|
|
146
|
+
"@deepseek-ai/dsh-client-connection": "0.1.5-rc.1",
|
|
147
|
+
"@deepseek-ai/dsh-client-store": "0.1.5-rc.1",
|
|
148
|
+
"@deepseek-ai/dsh-client-ui-layout": "0.1.5-rc.1",
|
|
149
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.1.5-rc.1",
|
|
150
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.1",
|
|
151
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.1",
|
|
152
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.1",
|
|
153
|
+
"@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.1",
|
|
154
|
+
"@deepseek-ai/dsh-typert-registry": "0.1.5-rc.1",
|
|
155
|
+
"@shikijs/langs": "^4.3.1",
|
|
156
|
+
"@testing-library/dom": "^10.4.1",
|
|
157
|
+
"@testing-library/react": "^16.3.3",
|
|
77
158
|
"@types/node": "^24.0.0",
|
|
78
159
|
"@types/proper-lockfile": "^4.1.4",
|
|
160
|
+
"@types/react": "^18.3.31",
|
|
161
|
+
"@types/react-dom": "^18.3.7",
|
|
162
|
+
"anser": "^2.3.5",
|
|
163
|
+
"clsx": "^2.0.0",
|
|
164
|
+
"esbuild": "^0.25.12",
|
|
165
|
+
"jsdom": "^26.1.0",
|
|
166
|
+
"katex": "^0.16.47",
|
|
167
|
+
"mdast-util-from-markdown": "^2.0.3",
|
|
168
|
+
"mdast-util-gfm": "^3.1.0",
|
|
169
|
+
"mdast-util-math": "^3.0.0",
|
|
170
|
+
"micromark-core-commonmark": "^2.0.3",
|
|
171
|
+
"micromark-extension-gfm": "^3.0.0",
|
|
172
|
+
"micromark-extension-math": "^3.1.0",
|
|
173
|
+
"micromark-factory-space": "^2.0.1",
|
|
174
|
+
"micromark-util-character": "^2.1.1",
|
|
175
|
+
"micromark-util-classify-character": "^2.0.1",
|
|
176
|
+
"micromark-util-sanitize-uri": "^2.0.1",
|
|
177
|
+
"micromark-util-symbol": "^2.0.1",
|
|
178
|
+
"react": "^18.3.1",
|
|
179
|
+
"react-dom": "^18.3.1",
|
|
180
|
+
"shiki": "^4.3.1",
|
|
79
181
|
"typescript": "^6.0.3",
|
|
80
|
-
"vitest": "^4.1.10"
|
|
182
|
+
"vitest": "^4.1.10",
|
|
183
|
+
"zod": "^4.6.2"
|
|
81
184
|
},
|
|
82
185
|
"engines": {
|
|
83
186
|
"node": "^22.19.0 || >=24.0.0"
|