@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,312 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module connect
|
|
4
|
+
* High-level connect() API for zero-config XBind connections.
|
|
5
|
+
*
|
|
6
|
+
* Enables: `const service = await connect('payments-service')`
|
|
7
|
+
*
|
|
8
|
+
* Combines:
|
|
9
|
+
* - Service discovery
|
|
10
|
+
* - Trust verification
|
|
11
|
+
* - Agent creation
|
|
12
|
+
* - Connection establishment
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { connect } from '@private.me/xbind';
|
|
17
|
+
*
|
|
18
|
+
* // Connect by name (uses registry):
|
|
19
|
+
* const payments = await connect('payments-service');
|
|
20
|
+
*
|
|
21
|
+
* // Connect by domain (uses .well-known):
|
|
22
|
+
* const payments = await connect('payments.example.com');
|
|
23
|
+
*
|
|
24
|
+
* // Connect by URL (direct):
|
|
25
|
+
* const payments = await connect('https://api.payments.com/xbind');
|
|
26
|
+
*
|
|
27
|
+
* // Use the connection:
|
|
28
|
+
* await payments.send({
|
|
29
|
+
* to: payments.did,
|
|
30
|
+
* payload: { action: 'createCharge', amount: 100 },
|
|
31
|
+
* scope: 'payments',
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
38
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
39
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
40
|
+
}
|
|
41
|
+
Object.defineProperty(o, k2, desc);
|
|
42
|
+
}) : (function(o, m, k, k2) {
|
|
43
|
+
if (k2 === undefined) k2 = k;
|
|
44
|
+
o[k2] = m[k];
|
|
45
|
+
}));
|
|
46
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
47
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
48
|
+
}) : function(o, v) {
|
|
49
|
+
o["default"] = v;
|
|
50
|
+
});
|
|
51
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
52
|
+
var ownKeys = function(o) {
|
|
53
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
54
|
+
var ar = [];
|
|
55
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
56
|
+
return ar;
|
|
57
|
+
};
|
|
58
|
+
return ownKeys(o);
|
|
59
|
+
};
|
|
60
|
+
return function (mod) {
|
|
61
|
+
if (mod && mod.__esModule) return mod;
|
|
62
|
+
var result = {};
|
|
63
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
64
|
+
__setModuleDefault(result, mod);
|
|
65
|
+
return result;
|
|
66
|
+
};
|
|
67
|
+
})();
|
|
68
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
69
|
+
exports.ConnectErrorCode = void 0;
|
|
70
|
+
exports.connect = connect;
|
|
71
|
+
exports.acceptInvite = acceptInvite;
|
|
72
|
+
const shared_1 = require("../_deps/shared/index.js");
|
|
73
|
+
const crypto_utils_js_1 = require("./crypto-utils.js");
|
|
74
|
+
const agent_js_1 = require("./agent.js");
|
|
75
|
+
const discovery_js_1 = require("./discovery.js");
|
|
76
|
+
const transport_js_1 = require("./transport.js");
|
|
77
|
+
const trust_registry_js_1 = require("./trust-registry.js");
|
|
78
|
+
const identity_js_1 = require("./identity.js");
|
|
79
|
+
/**
|
|
80
|
+
* Connect error codes.
|
|
81
|
+
*/
|
|
82
|
+
var ConnectErrorCode;
|
|
83
|
+
(function (ConnectErrorCode) {
|
|
84
|
+
ConnectErrorCode["DISCOVERY_FAILED"] = "CONNECT_DISCOVERY_FAILED";
|
|
85
|
+
ConnectErrorCode["AGENT_CREATION_FAILED"] = "CONNECT_AGENT_CREATION_FAILED";
|
|
86
|
+
ConnectErrorCode["TRUST_VERIFICATION_FAILED"] = "CONNECT_TRUST_VERIFICATION_FAILED";
|
|
87
|
+
ConnectErrorCode["INVALID_SERVICE_INFO"] = "CONNECT_INVALID_SERVICE_INFO";
|
|
88
|
+
})(ConnectErrorCode || (exports.ConnectErrorCode = ConnectErrorCode = {}));
|
|
89
|
+
/**
|
|
90
|
+
* Connect to a service with zero configuration.
|
|
91
|
+
*
|
|
92
|
+
* @param nameOrUrl - Service name, domain, or URL
|
|
93
|
+
* @param options - Connection options
|
|
94
|
+
* @returns Connection or error
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* // Minimal:
|
|
99
|
+
* const connection = await connect('payments-service');
|
|
100
|
+
* if (connection.ok) {
|
|
101
|
+
* await connection.value.agent.send({
|
|
102
|
+
* to: connection.value.did,
|
|
103
|
+
* payload: { action: 'test' },
|
|
104
|
+
* scope: 'test',
|
|
105
|
+
* });
|
|
106
|
+
* }
|
|
107
|
+
*
|
|
108
|
+
* // With options:
|
|
109
|
+
* const connection = await connect('payments-service', {
|
|
110
|
+
* name: 'billing-service',
|
|
111
|
+
* xchange: true, // Use faster Xchange mode
|
|
112
|
+
* splitChannel: true, // Use split-channel by default
|
|
113
|
+
* });
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
async function connect(nameOrUrl, options = {}) {
|
|
117
|
+
// Step 1: Discover service
|
|
118
|
+
const discovery = options.discovery || new discovery_js_1.ServiceDiscovery();
|
|
119
|
+
const serviceResult = await discovery.discover(nameOrUrl);
|
|
120
|
+
if (!serviceResult.ok) {
|
|
121
|
+
return (0, shared_1.err)({
|
|
122
|
+
code: ConnectErrorCode.DISCOVERY_FAILED,
|
|
123
|
+
message: `Failed to discover service: ${serviceResult.error.message}`,
|
|
124
|
+
hint: serviceResult.error.hint,
|
|
125
|
+
cause: serviceResult.error,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const service = serviceResult.value;
|
|
129
|
+
// Step 2: Validate service info
|
|
130
|
+
if (!service.did || !service.endpoint || !service.publicKey) {
|
|
131
|
+
return (0, shared_1.err)({
|
|
132
|
+
code: ConnectErrorCode.INVALID_SERVICE_INFO,
|
|
133
|
+
message: 'Service info missing required fields (did, endpoint, publicKey)',
|
|
134
|
+
hint: 'Service must provide complete metadata',
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Step 3: Create trust registry and add service
|
|
138
|
+
const registry = options.registry || new trust_registry_js_1.MemoryTrustRegistry();
|
|
139
|
+
try {
|
|
140
|
+
// Import public key (convert from base64 string)
|
|
141
|
+
const publicKeyBytes = (0, crypto_utils_js_1.fromBase64)(service.publicKey);
|
|
142
|
+
const publicKeyResult = await (0, identity_js_1.importPublicKey)(publicKeyBytes);
|
|
143
|
+
if (!publicKeyResult.ok) {
|
|
144
|
+
return (0, shared_1.err)({
|
|
145
|
+
code: ConnectErrorCode.TRUST_VERIFICATION_FAILED,
|
|
146
|
+
message: 'Invalid service public key',
|
|
147
|
+
cause: publicKeyResult.error,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Add to trust registry
|
|
151
|
+
await registry.add({
|
|
152
|
+
did: service.did,
|
|
153
|
+
publicKey: publicKeyResult.value,
|
|
154
|
+
x25519PublicKey: service.x25519PublicKey
|
|
155
|
+
? await (0, identity_js_1.importPublicKey)((0, crypto_utils_js_1.fromBase64)(service.x25519PublicKey)).then(r => r.ok ? r.value : undefined)
|
|
156
|
+
: undefined,
|
|
157
|
+
mlKemPublicKey: service.mlKemPublicKey
|
|
158
|
+
? (0, crypto_utils_js_1.fromBase64)(service.mlKemPublicKey)
|
|
159
|
+
: undefined,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return (0, shared_1.err)({
|
|
164
|
+
code: ConnectErrorCode.TRUST_VERIFICATION_FAILED,
|
|
165
|
+
message: 'Failed to verify service public key',
|
|
166
|
+
cause: error,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// Step 4: Create transport
|
|
170
|
+
const transport = options.transport || new transport_js_1.HttpsTransportAdapter({
|
|
171
|
+
baseUrl: service.endpoint,
|
|
172
|
+
});
|
|
173
|
+
// Step 5: Create agent
|
|
174
|
+
const agentName = options.name || `client-${Date.now()}`;
|
|
175
|
+
const agentOptions = {
|
|
176
|
+
name: agentName,
|
|
177
|
+
registry,
|
|
178
|
+
transport,
|
|
179
|
+
xchange: options.xchange,
|
|
180
|
+
postQuantumSig: options.postQuantumSig,
|
|
181
|
+
};
|
|
182
|
+
const agentResult = await agent_js_1.Agent.create(agentOptions);
|
|
183
|
+
if (!agentResult.ok) {
|
|
184
|
+
return (0, shared_1.err)({
|
|
185
|
+
code: ConnectErrorCode.AGENT_CREATION_FAILED,
|
|
186
|
+
message: 'Failed to create agent',
|
|
187
|
+
cause: agentResult.error,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
// Step 6: Return connection
|
|
191
|
+
return (0, shared_1.ok)({
|
|
192
|
+
agent: agentResult.value,
|
|
193
|
+
service,
|
|
194
|
+
did: service.did,
|
|
195
|
+
endpoint: service.endpoint,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Accept an invite and establish connection.
|
|
200
|
+
*
|
|
201
|
+
* @param inviteUrl - Invite URL
|
|
202
|
+
* @param options - Connection options
|
|
203
|
+
* @returns Connection or error
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```ts
|
|
207
|
+
* const connection = await acceptInvite('https://xbind.to/invite/abc123', {
|
|
208
|
+
* name: 'my-service',
|
|
209
|
+
* });
|
|
210
|
+
*
|
|
211
|
+
* if (connection.ok) {
|
|
212
|
+
* console.log('Connected to:', connection.value.service.name);
|
|
213
|
+
* }
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
async function acceptInvite(inviteUrl, options = {}) {
|
|
217
|
+
const { InviteService } = await Promise.resolve().then(() => __importStar(require('./invite.js')));
|
|
218
|
+
const inviteService = new InviteService();
|
|
219
|
+
// Get invite details
|
|
220
|
+
const inviteResult = await inviteService.get(inviteUrl);
|
|
221
|
+
if (!inviteResult.ok) {
|
|
222
|
+
return (0, shared_1.err)({
|
|
223
|
+
code: ConnectErrorCode.DISCOVERY_FAILED,
|
|
224
|
+
message: `Failed to get invite: ${inviteResult.error.message}`,
|
|
225
|
+
cause: inviteResult.error,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
const invite = inviteResult.value;
|
|
229
|
+
// Convert invite.from to ServiceInfo
|
|
230
|
+
const service = {
|
|
231
|
+
name: invite.from.name,
|
|
232
|
+
did: invite.from.did,
|
|
233
|
+
endpoint: invite.from.endpoint,
|
|
234
|
+
publicKey: invite.from.publicKey,
|
|
235
|
+
x25519PublicKey: invite.from.x25519PublicKey,
|
|
236
|
+
mlKemPublicKey: invite.from.mlKemPublicKey,
|
|
237
|
+
};
|
|
238
|
+
// Connect to service (same as connect())
|
|
239
|
+
// Create trust registry and add service
|
|
240
|
+
const registry = options.registry || new trust_registry_js_1.MemoryTrustRegistry();
|
|
241
|
+
try {
|
|
242
|
+
// Import public key (convert from base64 string)
|
|
243
|
+
const publicKeyBytes = (0, crypto_utils_js_1.fromBase64)(service.publicKey);
|
|
244
|
+
const publicKeyResult = await (0, identity_js_1.importPublicKey)(publicKeyBytes);
|
|
245
|
+
if (!publicKeyResult.ok) {
|
|
246
|
+
return (0, shared_1.err)({
|
|
247
|
+
code: ConnectErrorCode.TRUST_VERIFICATION_FAILED,
|
|
248
|
+
message: 'Invalid service public key',
|
|
249
|
+
cause: publicKeyResult.error,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
await registry.add({
|
|
253
|
+
did: service.did,
|
|
254
|
+
publicKey: publicKeyResult.value,
|
|
255
|
+
x25519PublicKey: service.x25519PublicKey
|
|
256
|
+
? await (0, identity_js_1.importPublicKey)((0, crypto_utils_js_1.fromBase64)(service.x25519PublicKey)).then(r => r.ok ? r.value : undefined)
|
|
257
|
+
: undefined,
|
|
258
|
+
mlKemPublicKey: service.mlKemPublicKey
|
|
259
|
+
? (0, crypto_utils_js_1.fromBase64)(service.mlKemPublicKey)
|
|
260
|
+
: undefined,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
return (0, shared_1.err)({
|
|
265
|
+
code: ConnectErrorCode.TRUST_VERIFICATION_FAILED,
|
|
266
|
+
message: 'Failed to verify service public key',
|
|
267
|
+
cause: error,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
const transport = options.transport || new transport_js_1.HttpsTransportAdapter({
|
|
271
|
+
baseUrl: service.endpoint,
|
|
272
|
+
});
|
|
273
|
+
const agentName = options.name || `client-${Date.now()}`;
|
|
274
|
+
const agentOptions = {
|
|
275
|
+
name: agentName,
|
|
276
|
+
registry,
|
|
277
|
+
transport,
|
|
278
|
+
xchange: options.xchange,
|
|
279
|
+
postQuantumSig: options.postQuantumSig,
|
|
280
|
+
};
|
|
281
|
+
const agentResult = await agent_js_1.Agent.create(agentOptions);
|
|
282
|
+
if (!agentResult.ok) {
|
|
283
|
+
return (0, shared_1.err)({
|
|
284
|
+
code: ConnectErrorCode.AGENT_CREATION_FAILED,
|
|
285
|
+
message: 'Failed to create agent',
|
|
286
|
+
cause: agentResult.error,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
// Accept the invite
|
|
290
|
+
const acceptResult = await inviteService.accept({
|
|
291
|
+
inviteUrl,
|
|
292
|
+
acceptor: {
|
|
293
|
+
name: agentOptions.name,
|
|
294
|
+
did: agentResult.value.did,
|
|
295
|
+
endpoint: options.endpoint || '', // Agent's endpoint (where it can be reached), empty for client-only agents
|
|
296
|
+
publicKey: (0, crypto_utils_js_1.toBase64)(agentResult.value.identity.rawPublicKey),
|
|
297
|
+
x25519PublicKey: agentResult.value.identity.rawX25519PublicKey
|
|
298
|
+
? (0, crypto_utils_js_1.toBase64)(agentResult.value.identity.rawX25519PublicKey)
|
|
299
|
+
: undefined,
|
|
300
|
+
},
|
|
301
|
+
});
|
|
302
|
+
if (!acceptResult.ok) {
|
|
303
|
+
// Connection created but invite acceptance failed - still return connection
|
|
304
|
+
// (invite acceptance is for tracking/notification, not required for connectivity)
|
|
305
|
+
}
|
|
306
|
+
return (0, shared_1.ok)({
|
|
307
|
+
agent: agentResult.value,
|
|
308
|
+
service,
|
|
309
|
+
did: service.did,
|
|
310
|
+
endpoint: service.endpoint,
|
|
311
|
+
});
|
|
312
|
+
}
|