@private.me/xbind 3.0.0 → 3.0.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/README.md +55 -7
- package/dist-standalone/_deps/mldsa-wasm/dist/mldsa.js +1920 -1
- package/dist-standalone/_deps/shared/cjs/errors.js +729 -1
- package/dist-standalone/_deps/shared/cjs/index.js +463 -1
- package/dist-standalone/_deps/shared/cjs/types.js +315 -1
- package/dist-standalone/_deps/shared/errors.js +244 -1
- package/dist-standalone/_deps/shared/index.js +72 -1
- package/dist-standalone/_deps/shared/types.js +86 -1
- package/dist-standalone/_deps/ux-helpers/cjs/errors.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/index.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/pagination.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/progress.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/search.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/types.js +1 -1
- package/dist-standalone/_deps/ux-helpers/errors.js +1 -1
- package/dist-standalone/_deps/ux-helpers/index.js +1 -1
- package/dist-standalone/_deps/ux-helpers/pagination.js +1 -1
- package/dist-standalone/_deps/ux-helpers/progress.js +1 -1
- package/dist-standalone/_deps/ux-helpers/search.js +1 -1
- package/dist-standalone/_deps/xchange/auto-accept.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/auto-accept.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/errors.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/index.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/invite-client.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/lazy-init.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/trust-integration.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/xchange.js +1 -1
- package/dist-standalone/_deps/xchange/errors.js +1 -1
- package/dist-standalone/_deps/xchange/index.js +1 -1
- package/dist-standalone/_deps/xchange/invite-client.js +1 -1
- package/dist-standalone/_deps/xchange/lazy-init.js +1 -1
- package/dist-standalone/_deps/xchange/trust-integration.js +1 -1
- package/dist-standalone/_deps/xchange/xchange.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/discovery.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/errors.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/index.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/registry.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/schema.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/types.js +1 -1
- package/dist-standalone/_deps/xregistry/discovery.js +1 -1
- package/dist-standalone/_deps/xregistry/errors.js +1 -1
- package/dist-standalone/_deps/xregistry/index.js +1 -1
- package/dist-standalone/_deps/xregistry/registry.js +1 -1
- package/dist-standalone/_deps/xregistry/schema.js +1 -1
- package/dist-standalone/_deps/xregistry/types.js +1 -1
- package/dist-standalone/agent-call.js +659 -1
- package/dist-standalone/agent-sdk.js +328 -1
- package/dist-standalone/agent.js +1800 -1
- package/dist-standalone/approval.js +193 -1
- package/dist-standalone/async-iterators.js +382 -1
- package/dist-standalone/auth.js +219 -1
- package/dist-standalone/auto-accept.js +229 -1
- package/dist-standalone/backup-config.js +201 -1
- package/dist-standalone/backup.js +326 -1
- package/dist-standalone/batch-operations.js +388 -1
- package/dist-standalone/cancellation.js +477 -1
- package/dist-standalone/checkpoint.js +186 -1
- package/dist-standalone/circuit-breaker.js +468 -1
- package/dist-standalone/cjs/agent-call.js +701 -1
- package/dist-standalone/cjs/agent-sdk.js +332 -1
- package/dist-standalone/cjs/agent.js +1837 -1
- package/dist-standalone/cjs/approval.js +199 -1
- package/dist-standalone/cjs/async-iterators.js +392 -1
- package/dist-standalone/cjs/auth.js +225 -1
- package/dist-standalone/cjs/auto-accept.js +233 -1
- package/dist-standalone/cjs/backup-config.js +207 -1
- package/dist-standalone/cjs/backup.js +330 -1
- package/dist-standalone/cjs/batch-operations.js +397 -1
- package/dist-standalone/cjs/cancellation.js +490 -1
- package/dist-standalone/cjs/checkpoint.js +193 -1
- package/dist-standalone/cjs/circuit-breaker.js +476 -1
- package/dist-standalone/cjs/cli/init.js +492 -1
- package/dist-standalone/cjs/config-validation.js +522 -1
- package/dist-standalone/cjs/connect.js +312 -1
- package/dist-standalone/cjs/connection-pool.js +506 -1
- package/dist-standalone/cjs/correlation-id.js +339 -1
- package/dist-standalone/cjs/crypto-utils.js +176 -1
- package/dist-standalone/cjs/debug-mode.js +534 -1
- package/dist-standalone/cjs/did-document.js +101 -1
- package/dist-standalone/cjs/did-privateme.js +130 -1
- package/dist-standalone/cjs/did-web.js +201 -1
- package/dist-standalone/cjs/discovery.js +462 -1
- package/dist-standalone/cjs/dual-mode.js +251 -1
- package/dist-standalone/cjs/email-templates.js +313 -1
- package/dist-standalone/cjs/email-transport.js +239 -1
- package/dist-standalone/cjs/envelope.js +538 -1
- package/dist-standalone/cjs/errors.js +913 -1
- package/dist-standalone/cjs/event-emitter.js +461 -1
- package/dist-standalone/cjs/gateway-state.js +55 -1
- package/dist-standalone/cjs/gateway-transport.js +120 -1
- package/dist-standalone/cjs/graceful-degradation.js +403 -1
- package/dist-standalone/cjs/guardrails.js +223 -1
- package/dist-standalone/cjs/health-check.js +336 -1
- package/dist-standalone/cjs/http-compat.js +272 -1
- package/dist-standalone/cjs/http-status-map.js +571 -1
- package/dist-standalone/cjs/identity.js +645 -1
- package/dist-standalone/cjs/index.js +406 -1
- package/dist-standalone/cjs/invitation.js +421 -1
- package/dist-standalone/cjs/invite.js +328 -1
- package/dist-standalone/cjs/key-agreement.js +335 -1
- package/dist-standalone/cjs/lazy-init.js +300 -1
- package/dist-standalone/cjs/logger.js +291 -1
- package/dist-standalone/cjs/mdns-discovery.js +202 -1
- package/dist-standalone/cjs/nonce-store.js +80 -1
- package/dist-standalone/cjs/pairing-manager.js +223 -1
- package/dist-standalone/cjs/plugin-system.js +264 -1
- package/dist-standalone/cjs/plugins/logging.js +168 -1
- package/dist-standalone/cjs/plugins/metrics.js +181 -1
- package/dist-standalone/cjs/plugins/validation.js +302 -1
- package/dist-standalone/cjs/policy.js +320 -1
- package/dist-standalone/cjs/progress-callbacks.js +583 -1
- package/dist-standalone/cjs/redis-nonce-store.js +76 -1
- package/dist-standalone/cjs/registry-middleware.js +50 -1
- package/dist-standalone/cjs/retry-strategies.js +544 -1
- package/dist-standalone/cjs/retry-transport.js +102 -1
- package/dist-standalone/cjs/runtime/browser.js +533 -1
- package/dist-standalone/cjs/runtime/edge.js +526 -1
- package/dist-standalone/cjs/runtime/react-native.js +394 -1
- package/dist-standalone/cjs/security-policy.js +245 -1
- package/dist-standalone/cjs/serialization.js +1040 -1
- package/dist-standalone/cjs/split-channel.js +225 -1
- package/dist-standalone/cjs/subscription-proof.js +230 -1
- package/dist-standalone/cjs/succession.js +148 -1
- package/dist-standalone/cjs/timeouts.js +412 -1
- package/dist-standalone/cjs/trace-context.js +424 -1
- package/dist-standalone/cjs/trace-spans.js +495 -1
- package/dist-standalone/cjs/transport.js +63 -1
- package/dist-standalone/cjs/trust-registry.js +991 -1
- package/dist-standalone/cjs/types/error-response.js +56 -1
- package/dist-standalone/cjs/vault-auth.js +178 -1
- package/dist-standalone/cjs/vault-store-loader.js +194 -1
- package/dist-standalone/cjs/verify.js +25 -1
- package/dist-standalone/cjs/version-info.js +543 -1
- package/dist-standalone/cjs/xfetch.js +340 -1
- package/dist-standalone/cli/init.js +455 -1
- package/dist-standalone/cli/setup.js +514 -1
- package/dist-standalone/cli/types.js +27 -1
- package/dist-standalone/cli/xbind.js +148 -1
- package/dist-standalone/config-validation.js +513 -1
- package/dist-standalone/connect.js +274 -1
- package/dist-standalone/connection-pool.js +500 -1
- package/dist-standalone/correlation-id.js +326 -1
- package/dist-standalone/crypto-utils.js +157 -1
- package/dist-standalone/debug-mode.js +510 -1
- package/dist-standalone/did-document.js +96 -1
- package/dist-standalone/did-privateme.js +121 -1
- package/dist-standalone/did-web.js +196 -1
- package/dist-standalone/discovery.js +458 -1
- package/dist-standalone/dual-mode.js +247 -1
- package/dist-standalone/email-templates.js +309 -1
- package/dist-standalone/email-transport.js +232 -1
- package/dist-standalone/envelope.js +525 -1
- package/dist-standalone/errors.js +896 -1
- package/dist-standalone/event-emitter.js +456 -1
- package/dist-standalone/gateway-state.js +51 -1
- package/dist-standalone/gateway-transport.js +116 -1
- package/dist-standalone/graceful-degradation.js +396 -1
- package/dist-standalone/guardrails.js +216 -1
- package/dist-standalone/health-check.js +332 -1
- package/dist-standalone/http-compat.js +267 -1
- package/dist-standalone/http-status-map.js +561 -1
- package/dist-standalone/identity.js +619 -1
- package/dist-standalone/index.js +78 -1
- package/dist-standalone/invitation.js +415 -1
- package/dist-standalone/invite.js +324 -1
- package/dist-standalone/key-agreement.js +325 -1
- package/dist-standalone/lazy-init.js +295 -1
- package/dist-standalone/logger.js +285 -1
- package/dist-standalone/mdns-discovery.js +195 -1
- package/dist-standalone/nonce-store.js +76 -1
- package/dist-standalone/pairing-manager.js +219 -1
- package/dist-standalone/plugin-system.js +257 -1
- package/dist-standalone/plugins/logging.d.ts +84 -0
- package/dist-standalone/plugins/logging.js +163 -0
- package/dist-standalone/plugins/metrics.d.ts +111 -0
- package/dist-standalone/plugins/metrics.js +176 -0
- package/dist-standalone/plugins/validation.d.ts +104 -0
- package/dist-standalone/plugins/validation.js +297 -0
- package/dist-standalone/policy.js +315 -1
- package/dist-standalone/progress-callbacks.js +576 -1
- package/dist-standalone/redis-nonce-store.js +72 -1
- package/dist-standalone/registry-middleware.js +47 -1
- package/dist-standalone/retry-strategies.js +534 -1
- package/dist-standalone/retry-transport.js +98 -1
- package/dist-standalone/runtime/browser.d.ts +311 -0
- package/dist-standalone/runtime/browser.js +516 -0
- package/dist-standalone/runtime/edge.d.ts +282 -0
- package/dist-standalone/runtime/edge.js +511 -0
- package/dist-standalone/runtime/react-native.d.ts +157 -0
- package/dist-standalone/runtime/react-native.js +383 -0
- package/dist-standalone/security-policy.js +239 -1
- package/dist-standalone/serialization.js +1031 -1
- package/dist-standalone/split-channel.js +219 -1
- package/dist-standalone/subscription-proof.js +224 -1
- package/dist-standalone/succession.js +142 -1
- package/dist-standalone/timeouts.js +398 -1
- package/dist-standalone/trace-context.js +414 -1
- package/dist-standalone/trace-spans.js +488 -1
- package/dist-standalone/transport.js +59 -1
- package/dist-standalone/trust-registry.js +950 -1
- package/dist-standalone/types/error-response.d.ts +209 -0
- package/dist-standalone/types/error-response.js +52 -0
- package/dist-standalone/vault-auth.js +174 -1
- package/dist-standalone/vault-store-loader.js +187 -1
- package/dist-standalone/verify.js +16 -1
- package/dist-standalone/version-info.js +530 -1
- package/dist-standalone/xfetch.js +335 -1
- package/package.json +4 -10
- package/share1.dat +0 -0
- package/dist-standalone/_deps/mldsa-wasm/LICENSE +0 -24
- package/dist-standalone/_deps/mldsa-wasm/package.json +0 -46
- package/dist-standalone/_deps/shared/cjs/package.json +0 -1
- package/dist-standalone/_deps/ux-helpers/cjs/package.json +0 -1
- package/dist-standalone/_deps/xchange/cjs/package.json +0 -1
- package/dist-standalone/_deps/xregistry/cjs/package.json +0 -1
- package/dist-standalone/cjs/package.json +0 -3
- package/dist-standalone/package.json +0 -10
|
@@ -1 +1,274 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @module connect
|
|
3
|
+
* High-level connect() API for zero-config XBind connections.
|
|
4
|
+
*
|
|
5
|
+
* Enables: `const service = await connect('payments-service')`
|
|
6
|
+
*
|
|
7
|
+
* Combines:
|
|
8
|
+
* - Service discovery
|
|
9
|
+
* - Trust verification
|
|
10
|
+
* - Agent creation
|
|
11
|
+
* - Connection establishment
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { connect } from '@private.me/xbind';
|
|
16
|
+
*
|
|
17
|
+
* // Connect by name (uses registry):
|
|
18
|
+
* const payments = await connect('payments-service');
|
|
19
|
+
*
|
|
20
|
+
* // Connect by domain (uses .well-known):
|
|
21
|
+
* const payments = await connect('payments.example.com');
|
|
22
|
+
*
|
|
23
|
+
* // Connect by URL (direct):
|
|
24
|
+
* const payments = await connect('https://api.payments.com/xbind');
|
|
25
|
+
*
|
|
26
|
+
* // Use the connection:
|
|
27
|
+
* await payments.send({
|
|
28
|
+
* to: payments.did,
|
|
29
|
+
* payload: { action: 'createCharge', amount: 100 },
|
|
30
|
+
* scope: 'payments',
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
import { ok, err } from"./_deps/shared/index.js";
|
|
35
|
+
import { fromBase64, toBase64 } from './crypto-utils.js';
|
|
36
|
+
import { Agent } from './agent.js';
|
|
37
|
+
import { ServiceDiscovery } from './discovery.js';
|
|
38
|
+
import { HttpsTransportAdapter } from './transport.js';
|
|
39
|
+
import { MemoryTrustRegistry } from './trust-registry.js';
|
|
40
|
+
import { importPublicKey } from './identity.js';
|
|
41
|
+
/**
|
|
42
|
+
* Connect error codes.
|
|
43
|
+
*/
|
|
44
|
+
export var ConnectErrorCode;
|
|
45
|
+
(function (ConnectErrorCode) {
|
|
46
|
+
ConnectErrorCode["DISCOVERY_FAILED"] = "CONNECT_DISCOVERY_FAILED";
|
|
47
|
+
ConnectErrorCode["AGENT_CREATION_FAILED"] = "CONNECT_AGENT_CREATION_FAILED";
|
|
48
|
+
ConnectErrorCode["TRUST_VERIFICATION_FAILED"] = "CONNECT_TRUST_VERIFICATION_FAILED";
|
|
49
|
+
ConnectErrorCode["INVALID_SERVICE_INFO"] = "CONNECT_INVALID_SERVICE_INFO";
|
|
50
|
+
})(ConnectErrorCode || (ConnectErrorCode = {}));
|
|
51
|
+
/**
|
|
52
|
+
* Connect to a service with zero configuration.
|
|
53
|
+
*
|
|
54
|
+
* @param nameOrUrl - Service name, domain, or URL
|
|
55
|
+
* @param options - Connection options
|
|
56
|
+
* @returns Connection or error
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* // Minimal:
|
|
61
|
+
* const connection = await connect('payments-service');
|
|
62
|
+
* if (connection.ok) {
|
|
63
|
+
* await connection.value.agent.send({
|
|
64
|
+
* to: connection.value.did,
|
|
65
|
+
* payload: { action: 'test' },
|
|
66
|
+
* scope: 'test',
|
|
67
|
+
* });
|
|
68
|
+
* }
|
|
69
|
+
*
|
|
70
|
+
* // With options:
|
|
71
|
+
* const connection = await connect('payments-service', {
|
|
72
|
+
* name: 'billing-service',
|
|
73
|
+
* xchange: true, // Use faster Xchange mode
|
|
74
|
+
* splitChannel: true, // Use split-channel by default
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export async function connect(nameOrUrl, options = {}) {
|
|
79
|
+
// Step 1: Discover service
|
|
80
|
+
const discovery = options.discovery || new ServiceDiscovery();
|
|
81
|
+
const serviceResult = await discovery.discover(nameOrUrl);
|
|
82
|
+
if (!serviceResult.ok) {
|
|
83
|
+
return err({
|
|
84
|
+
code: ConnectErrorCode.DISCOVERY_FAILED,
|
|
85
|
+
message: `Failed to discover service: ${serviceResult.error.message}`,
|
|
86
|
+
hint: serviceResult.error.hint,
|
|
87
|
+
cause: serviceResult.error,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const service = serviceResult.value;
|
|
91
|
+
// Step 2: Validate service info
|
|
92
|
+
if (!service.did || !service.endpoint || !service.publicKey) {
|
|
93
|
+
return err({
|
|
94
|
+
code: ConnectErrorCode.INVALID_SERVICE_INFO,
|
|
95
|
+
message: 'Service info missing required fields (did, endpoint, publicKey)',
|
|
96
|
+
hint: 'Service must provide complete metadata',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// Step 3: Create trust registry and add service
|
|
100
|
+
const registry = options.registry || new MemoryTrustRegistry();
|
|
101
|
+
try {
|
|
102
|
+
// Import public key (convert from base64 string)
|
|
103
|
+
const publicKeyBytes = fromBase64(service.publicKey);
|
|
104
|
+
const publicKeyResult = await importPublicKey(publicKeyBytes);
|
|
105
|
+
if (!publicKeyResult.ok) {
|
|
106
|
+
return err({
|
|
107
|
+
code: ConnectErrorCode.TRUST_VERIFICATION_FAILED,
|
|
108
|
+
message: 'Invalid service public key',
|
|
109
|
+
cause: publicKeyResult.error,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Add to trust registry
|
|
113
|
+
await registry.add({
|
|
114
|
+
did: service.did,
|
|
115
|
+
publicKey: publicKeyResult.value,
|
|
116
|
+
x25519PublicKey: service.x25519PublicKey
|
|
117
|
+
? await importPublicKey(fromBase64(service.x25519PublicKey)).then(r => r.ok ? r.value : undefined)
|
|
118
|
+
: undefined,
|
|
119
|
+
mlKemPublicKey: service.mlKemPublicKey
|
|
120
|
+
? fromBase64(service.mlKemPublicKey)
|
|
121
|
+
: undefined,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
return err({
|
|
126
|
+
code: ConnectErrorCode.TRUST_VERIFICATION_FAILED,
|
|
127
|
+
message: 'Failed to verify service public key',
|
|
128
|
+
cause: error,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
// Step 4: Create transport
|
|
132
|
+
const transport = options.transport || new HttpsTransportAdapter({
|
|
133
|
+
baseUrl: service.endpoint,
|
|
134
|
+
});
|
|
135
|
+
// Step 5: Create agent
|
|
136
|
+
const agentName = options.name || `client-${Date.now()}`;
|
|
137
|
+
const agentOptions = {
|
|
138
|
+
name: agentName,
|
|
139
|
+
registry,
|
|
140
|
+
transport,
|
|
141
|
+
xchange: options.xchange,
|
|
142
|
+
postQuantumSig: options.postQuantumSig,
|
|
143
|
+
};
|
|
144
|
+
const agentResult = await Agent.create(agentOptions);
|
|
145
|
+
if (!agentResult.ok) {
|
|
146
|
+
return err({
|
|
147
|
+
code: ConnectErrorCode.AGENT_CREATION_FAILED,
|
|
148
|
+
message: 'Failed to create agent',
|
|
149
|
+
cause: agentResult.error,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
// Step 6: Return connection
|
|
153
|
+
return ok({
|
|
154
|
+
agent: agentResult.value,
|
|
155
|
+
service,
|
|
156
|
+
did: service.did,
|
|
157
|
+
endpoint: service.endpoint,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Accept an invite and establish connection.
|
|
162
|
+
*
|
|
163
|
+
* @param inviteUrl - Invite URL
|
|
164
|
+
* @param options - Connection options
|
|
165
|
+
* @returns Connection or error
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```ts
|
|
169
|
+
* const connection = await acceptInvite('https://xbind.to/invite/abc123', {
|
|
170
|
+
* name: 'my-service',
|
|
171
|
+
* });
|
|
172
|
+
*
|
|
173
|
+
* if (connection.ok) {
|
|
174
|
+
* console.log('Connected to:', connection.value.service.name);
|
|
175
|
+
* }
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
export async function acceptInvite(inviteUrl, options = {}) {
|
|
179
|
+
const { InviteService } = await import('./invite.js');
|
|
180
|
+
const inviteService = new InviteService();
|
|
181
|
+
// Get invite details
|
|
182
|
+
const inviteResult = await inviteService.get(inviteUrl);
|
|
183
|
+
if (!inviteResult.ok) {
|
|
184
|
+
return err({
|
|
185
|
+
code: ConnectErrorCode.DISCOVERY_FAILED,
|
|
186
|
+
message: `Failed to get invite: ${inviteResult.error.message}`,
|
|
187
|
+
cause: inviteResult.error,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
const invite = inviteResult.value;
|
|
191
|
+
// Convert invite.from to ServiceInfo
|
|
192
|
+
const service = {
|
|
193
|
+
name: invite.from.name,
|
|
194
|
+
did: invite.from.did,
|
|
195
|
+
endpoint: invite.from.endpoint,
|
|
196
|
+
publicKey: invite.from.publicKey,
|
|
197
|
+
x25519PublicKey: invite.from.x25519PublicKey,
|
|
198
|
+
mlKemPublicKey: invite.from.mlKemPublicKey,
|
|
199
|
+
};
|
|
200
|
+
// Connect to service (same as connect())
|
|
201
|
+
// Create trust registry and add service
|
|
202
|
+
const registry = options.registry || new MemoryTrustRegistry();
|
|
203
|
+
try {
|
|
204
|
+
// Import public key (convert from base64 string)
|
|
205
|
+
const publicKeyBytes = fromBase64(service.publicKey);
|
|
206
|
+
const publicKeyResult = await importPublicKey(publicKeyBytes);
|
|
207
|
+
if (!publicKeyResult.ok) {
|
|
208
|
+
return err({
|
|
209
|
+
code: ConnectErrorCode.TRUST_VERIFICATION_FAILED,
|
|
210
|
+
message: 'Invalid service public key',
|
|
211
|
+
cause: publicKeyResult.error,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
await registry.add({
|
|
215
|
+
did: service.did,
|
|
216
|
+
publicKey: publicKeyResult.value,
|
|
217
|
+
x25519PublicKey: service.x25519PublicKey
|
|
218
|
+
? await importPublicKey(fromBase64(service.x25519PublicKey)).then(r => r.ok ? r.value : undefined)
|
|
219
|
+
: undefined,
|
|
220
|
+
mlKemPublicKey: service.mlKemPublicKey
|
|
221
|
+
? fromBase64(service.mlKemPublicKey)
|
|
222
|
+
: undefined,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
return err({
|
|
227
|
+
code: ConnectErrorCode.TRUST_VERIFICATION_FAILED,
|
|
228
|
+
message: 'Failed to verify service public key',
|
|
229
|
+
cause: error,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
const transport = options.transport || new HttpsTransportAdapter({
|
|
233
|
+
baseUrl: service.endpoint,
|
|
234
|
+
});
|
|
235
|
+
const agentName = options.name || `client-${Date.now()}`;
|
|
236
|
+
const agentOptions = {
|
|
237
|
+
name: agentName,
|
|
238
|
+
registry,
|
|
239
|
+
transport,
|
|
240
|
+
xchange: options.xchange,
|
|
241
|
+
postQuantumSig: options.postQuantumSig,
|
|
242
|
+
};
|
|
243
|
+
const agentResult = await Agent.create(agentOptions);
|
|
244
|
+
if (!agentResult.ok) {
|
|
245
|
+
return err({
|
|
246
|
+
code: ConnectErrorCode.AGENT_CREATION_FAILED,
|
|
247
|
+
message: 'Failed to create agent',
|
|
248
|
+
cause: agentResult.error,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
// Accept the invite
|
|
252
|
+
const acceptResult = await inviteService.accept({
|
|
253
|
+
inviteUrl,
|
|
254
|
+
acceptor: {
|
|
255
|
+
name: agentOptions.name,
|
|
256
|
+
did: agentResult.value.did,
|
|
257
|
+
endpoint: options.endpoint || '', // Agent's endpoint (where it can be reached), empty for client-only agents
|
|
258
|
+
publicKey: toBase64(agentResult.value.identity.rawPublicKey),
|
|
259
|
+
x25519PublicKey: agentResult.value.identity.rawX25519PublicKey
|
|
260
|
+
? toBase64(agentResult.value.identity.rawX25519PublicKey)
|
|
261
|
+
: undefined,
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
if (!acceptResult.ok) {
|
|
265
|
+
// Connection created but invite acceptance failed - still return connection
|
|
266
|
+
// (invite acceptance is for tracking/notification, not required for connectivity)
|
|
267
|
+
}
|
|
268
|
+
return ok({
|
|
269
|
+
agent: agentResult.value,
|
|
270
|
+
service,
|
|
271
|
+
did: service.did,
|
|
272
|
+
endpoint: service.endpoint,
|
|
273
|
+
});
|
|
274
|
+
}
|