@haiai/haiai 0.1.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 +127 -0
- package/bin/haiai.cjs +70 -0
- package/dist/cjs/a2a.js +352 -0
- package/dist/cjs/a2a.js.map +1 -0
- package/dist/cjs/agent.js +236 -0
- package/dist/cjs/agent.js.map +1 -0
- package/dist/cjs/client.js +2168 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/config.js +176 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/cjs/errors.js +102 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/hash.js +52 -0
- package/dist/cjs/hash.js.map +1 -0
- package/dist/cjs/index.js +84 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/integrations.js +193 -0
- package/dist/cjs/integrations.js.map +1 -0
- package/dist/cjs/jacs.js +66 -0
- package/dist/cjs/jacs.js.map +1 -0
- package/dist/cjs/mime.js +100 -0
- package/dist/cjs/mime.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/signing.js +190 -0
- package/dist/cjs/signing.js.map +1 -0
- package/dist/cjs/sse.js +76 -0
- package/dist/cjs/sse.js.map +1 -0
- package/dist/cjs/types.js +6 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/verify.js +76 -0
- package/dist/cjs/verify.js.map +1 -0
- package/dist/cjs/ws.js +206 -0
- package/dist/cjs/ws.js.map +1 -0
- package/dist/esm/a2a.js +305 -0
- package/dist/esm/a2a.js.map +1 -0
- package/dist/esm/agent.js +231 -0
- package/dist/esm/agent.js.map +1 -0
- package/dist/esm/client.js +2131 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/config.js +171 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/errors.js +88 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/hash.js +49 -0
- package/dist/esm/hash.js.map +1 -0
- package/dist/esm/index.js +27 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/integrations.js +147 -0
- package/dist/esm/integrations.js.map +1 -0
- package/dist/esm/jacs.js +61 -0
- package/dist/esm/jacs.js.map +1 -0
- package/dist/esm/mime.js +97 -0
- package/dist/esm/mime.js.map +1 -0
- package/dist/esm/signing.js +183 -0
- package/dist/esm/signing.js.map +1 -0
- package/dist/esm/sse.js +73 -0
- package/dist/esm/sse.js.map +1 -0
- package/dist/esm/types.js +5 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/verify.js +72 -0
- package/dist/esm/verify.js.map +1 -0
- package/dist/esm/ws.js +168 -0
- package/dist/esm/ws.js.map +1 -0
- package/dist/types/a2a.d.ts +52 -0
- package/dist/types/a2a.d.ts.map +1 -0
- package/dist/types/agent.d.ts +202 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/client.d.ts +486 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/config.d.ts +31 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/errors.d.ts +50 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/hash.d.ts +32 -0
- package/dist/types/hash.d.ts.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/integrations.d.ts +25 -0
- package/dist/types/integrations.d.ts.map +1 -0
- package/dist/types/jacs.d.ts +26 -0
- package/dist/types/jacs.d.ts.map +1 -0
- package/dist/types/mime.d.ts +39 -0
- package/dist/types/mime.d.ts.map +1 -0
- package/dist/types/signing.d.ts +58 -0
- package/dist/types/signing.d.ts.map +1 -0
- package/dist/types/sse.d.ts +8 -0
- package/dist/types/sse.d.ts.map +1 -0
- package/dist/types/types.d.ts +652 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/verify.d.ts +20 -0
- package/dist/types/verify.d.ts.map +1 -0
- package/dist/types/ws.d.ts +30 -0
- package/dist/types/ws.d.ts.map +1 -0
- package/examples/a2a_quickstart.ts +138 -0
- package/examples/hai_quickstart.ts +111 -0
- package/examples/mcp_quickstart.ts +53 -0
- package/npm/@haiai/cli-darwin-arm64/package.json +16 -0
- package/npm/@haiai/cli-darwin-x64/package.json +16 -0
- package/npm/@haiai/cli-linux-arm64/package.json +16 -0
- package/npm/@haiai/cli-linux-x64/package.json +16 -0
- package/npm/@haiai/cli-win32-x64/package.json +16 -0
- package/package.json +68 -0
- package/scripts/build-platform-packages.js +132 -0
- package/scripts/smoke-package.cjs +114 -0
- package/scripts/write-cjs-package.cjs +9 -0
- package/src/a2a.ts +463 -0
- package/src/agent.ts +302 -0
- package/src/client.ts +2504 -0
- package/src/config.ts +204 -0
- package/src/errors.ts +99 -0
- package/src/hash.ts +66 -0
- package/src/index.ts +163 -0
- package/src/integrations.ts +210 -0
- package/src/jacs.ts +86 -0
- package/src/mime.ts +131 -0
- package/src/signing.ts +233 -0
- package/src/sse.ts +86 -0
- package/src/types.ts +773 -0
- package/src/verify.ts +89 -0
- package/src/ws.ts +198 -0
- package/tests/_debug_jacs.cjs +29 -0
- package/tests/a2a-contract.test.ts +271 -0
- package/tests/a2a-fixtures.test.ts +73 -0
- package/tests/a2a.test.ts +379 -0
- package/tests/binary.test.ts +90 -0
- package/tests/client-api-methods.test.ts +176 -0
- package/tests/client-path-escaping.test.ts +80 -0
- package/tests/client-register.test.ts +61 -0
- package/tests/config.test.ts +281 -0
- package/tests/contract.test.ts +360 -0
- package/tests/cross-lang-contract.test.ts +67 -0
- package/tests/email-conformance.test.ts +289 -0
- package/tests/email-integration.test.ts +217 -0
- package/tests/email.test.ts +767 -0
- package/tests/errors.test.ts +167 -0
- package/tests/init-contract.test.ts +129 -0
- package/tests/integrations.test.ts +132 -0
- package/tests/jacs-passthrough.test.ts +125 -0
- package/tests/key-cache.test.ts +201 -0
- package/tests/key-integration.test.ts +119 -0
- package/tests/key-lookups.test.ts +187 -0
- package/tests/key-rotation.test.ts +362 -0
- package/tests/mime.test.ts +127 -0
- package/tests/security.test.ts +109 -0
- package/tests/setup.ts +60 -0
- package/tests/signing.test.ts +142 -0
- package/tests/sse.test.ts +125 -0
- package/tests/types.test.ts +294 -0
- package/tests/verify-link.test.ts +81 -0
- package/tests/ws.test.ts +213 -0
- package/tsconfig.cjs.json +11 -0
- package/tsconfig.json +22 -0
- package/vitest.config.ts +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Core types
|
|
4
|
+
// =============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,aAAa;AACb,gFAAgF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Verify link generation
|
|
4
|
+
// =============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MAX_VERIFY_DOCUMENT_BYTES = exports.MAX_VERIFY_URL_LEN = void 0;
|
|
7
|
+
exports.generateVerifyLink = generateVerifyLink;
|
|
8
|
+
/** Maximum total URL length for verify links. */
|
|
9
|
+
exports.MAX_VERIFY_URL_LEN = 2048;
|
|
10
|
+
/** Maximum UTF-8 byte size of the document that can fit in a verify URL. */
|
|
11
|
+
exports.MAX_VERIFY_DOCUMENT_BYTES = 1515;
|
|
12
|
+
/**
|
|
13
|
+
* URL-safe base64 encoding for verification payloads.
|
|
14
|
+
*
|
|
15
|
+
* Delegates to JACS binding-core `encodeVerifyPayloadSync` when an agent
|
|
16
|
+
* is provided. Falls back to local base64url encoding.
|
|
17
|
+
*/
|
|
18
|
+
function encodeVerifyPayload(document, agent) {
|
|
19
|
+
if (agent && 'encodeVerifyPayloadSync' in agent && typeof agent.encodeVerifyPayloadSync === 'function') {
|
|
20
|
+
try {
|
|
21
|
+
return agent.encodeVerifyPayloadSync(document);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Fall through to local implementation
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return Buffer.from(document, 'utf8')
|
|
28
|
+
.toString('base64')
|
|
29
|
+
.replace(/\+/g, '-')
|
|
30
|
+
.replace(/\//g, '_')
|
|
31
|
+
.replace(/=+$/g, '');
|
|
32
|
+
}
|
|
33
|
+
function extractHostedDocumentId(document) {
|
|
34
|
+
let parsed;
|
|
35
|
+
try {
|
|
36
|
+
parsed = JSON.parse(document);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
throw new Error("Cannot generate hosted verify link: no document ID found in document. " +
|
|
40
|
+
"Document must contain 'jacsDocumentId', 'document_id', or 'id' field.");
|
|
41
|
+
}
|
|
42
|
+
const docId = (parsed.jacsDocumentId ?? parsed.document_id ?? parsed.id ?? '');
|
|
43
|
+
if (!docId) {
|
|
44
|
+
throw new Error("Cannot generate hosted verify link: no document ID found in document. " +
|
|
45
|
+
"Document must contain 'jacsDocumentId', 'document_id', or 'id' field.");
|
|
46
|
+
}
|
|
47
|
+
return docId;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generate a verification link that embeds a JACS document as a URL-safe
|
|
51
|
+
* base64 query parameter.
|
|
52
|
+
*
|
|
53
|
+
* Delegates base64url encoding to JACS binding-core when an agent is
|
|
54
|
+
* provided. Falls back to local encoding otherwise.
|
|
55
|
+
*
|
|
56
|
+
* @param document - The JACS document JSON string to embed
|
|
57
|
+
* @param baseUrl - Base URL for the verify page (default: https://hai.ai)
|
|
58
|
+
* @param hosted - If true, generate a hosted verify link using the document ID
|
|
59
|
+
* @param agent - Optional JACS agent for delegated encoding
|
|
60
|
+
* @returns Full verify URL
|
|
61
|
+
* @throws If the resulting URL would exceed MAX_VERIFY_URL_LEN
|
|
62
|
+
*/
|
|
63
|
+
function generateVerifyLink(document, baseUrl = 'https://hai.ai', hosted = false, agent) {
|
|
64
|
+
const base = baseUrl.replace(/\/+$/, '');
|
|
65
|
+
if (hosted) {
|
|
66
|
+
const docId = extractHostedDocumentId(document);
|
|
67
|
+
return `${base}/verify/${docId}`;
|
|
68
|
+
}
|
|
69
|
+
const encoded = encodeVerifyPayload(document, agent);
|
|
70
|
+
const fullUrl = `${base}/jacs/verify?s=${encoded}`;
|
|
71
|
+
if (fullUrl.length > exports.MAX_VERIFY_URL_LEN) {
|
|
72
|
+
throw new Error(`Verify URL would exceed max length (${exports.MAX_VERIFY_URL_LEN}). Document size must be at most ${exports.MAX_VERIFY_DOCUMENT_BYTES} UTF-8 bytes.`);
|
|
73
|
+
}
|
|
74
|
+
return fullUrl;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;;;AAkEhF,gDAoBC;AAlFD,iDAAiD;AACpC,QAAA,kBAAkB,GAAG,IAAI,CAAC;AAEvC,4EAA4E;AAC/D,QAAA,yBAAyB,GAAG,IAAI,CAAC;AAE9C;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,QAAgB,EAAE,KAAiB;IAC9D,IAAI,KAAK,IAAI,yBAAyB,IAAI,KAAK,IAAI,OAAQ,KAA4C,CAAC,uBAAuB,KAAK,UAAU,EAAE,CAAC;QAC/I,IAAI,CAAC;YACH,OAAQ,KAAiG,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC9I,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;SACjC,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAgB;IAC/C,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAA4B,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,wEAAwE;YACxE,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,CAAW,CAAC;IACzF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,wEAAwE;YACxE,uEAAuE,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,kBAAkB,CAChC,QAAgB,EAChB,UAAkB,gBAAgB,EAClC,SAAkB,KAAK,EACvB,KAAiB;IAEjB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,GAAG,IAAI,WAAW,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,GAAG,IAAI,kBAAkB,OAAO,EAAE,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,GAAG,0BAAkB,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,uCAAuC,0BAAkB,oCAAoC,iCAAyB,eAAe,CACtI,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/cjs/ws.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.openWebSocket = openWebSocket;
|
|
37
|
+
exports.wsRecv = wsRecv;
|
|
38
|
+
exports.wsEventStream = wsEventStream;
|
|
39
|
+
const errors_js_1 = require("./errors.js");
|
|
40
|
+
const WS_OPEN = 1;
|
|
41
|
+
/**
|
|
42
|
+
* Open a WebSocket connection using the `ws` package.
|
|
43
|
+
* Falls back to built-in WebSocket (Node 21+) if ws is not installed.
|
|
44
|
+
*/
|
|
45
|
+
function openWebSocket(url, headers, timeout) {
|
|
46
|
+
return (async () => {
|
|
47
|
+
// Try ws package first
|
|
48
|
+
try {
|
|
49
|
+
const wsModule = await Promise.resolve().then(() => __importStar(require('ws')));
|
|
50
|
+
const WS = (wsModule.default ?? wsModule);
|
|
51
|
+
return await new Promise((resolve, reject) => {
|
|
52
|
+
const ws = new WS(url, { headers, handshakeTimeout: timeout });
|
|
53
|
+
ws.on('open', () => resolve(ws));
|
|
54
|
+
ws.on('error', (err) => {
|
|
55
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
56
|
+
reject(new errors_js_1.HaiConnectionError(`WebSocket error: ${msg}`));
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// ws not installed, fall through
|
|
62
|
+
}
|
|
63
|
+
// Built-in WebSocket (Node 21+)
|
|
64
|
+
try {
|
|
65
|
+
return await new Promise((resolve, reject) => {
|
|
66
|
+
const ws = new WebSocket(url);
|
|
67
|
+
ws.addEventListener('open', () => resolve(ws));
|
|
68
|
+
ws.addEventListener('error', (e) => {
|
|
69
|
+
reject(new errors_js_1.HaiConnectionError(`WebSocket error: ${e}`));
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
throw new errors_js_1.WebSocketError('WebSocket support requires the "ws" package or Node 21+. Install with: npm install ws');
|
|
75
|
+
}
|
|
76
|
+
})();
|
|
77
|
+
}
|
|
78
|
+
/** Receive a single message from a WebSocket, parsing JSON if possible. */
|
|
79
|
+
function wsRecv(ws) {
|
|
80
|
+
return new Promise((resolve, reject) => {
|
|
81
|
+
const handler = (data) => {
|
|
82
|
+
const str = typeof data === 'string'
|
|
83
|
+
? data
|
|
84
|
+
: data instanceof Buffer
|
|
85
|
+
? data.toString('utf-8')
|
|
86
|
+
: String(data);
|
|
87
|
+
try {
|
|
88
|
+
resolve(JSON.parse(str));
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
resolve(str);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
// ws package uses .on()/.once()
|
|
95
|
+
if (typeof ws.once === 'function') {
|
|
96
|
+
ws.once('message', handler);
|
|
97
|
+
ws.once('close', () => reject(new errors_js_1.HaiConnectionError('WebSocket closed')));
|
|
98
|
+
ws.once('error', (err) => {
|
|
99
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
100
|
+
reject(new errors_js_1.WebSocketError(msg));
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Built-in WebSocket uses addEventListener
|
|
105
|
+
if (typeof ws.addEventListener === 'function') {
|
|
106
|
+
const onMessage = (e) => {
|
|
107
|
+
ws.removeEventListener('message', onMessage);
|
|
108
|
+
const event = e;
|
|
109
|
+
handler(event.data);
|
|
110
|
+
};
|
|
111
|
+
ws.addEventListener('message', onMessage);
|
|
112
|
+
ws.addEventListener('close', () => reject(new errors_js_1.HaiConnectionError('WebSocket closed')), { once: true });
|
|
113
|
+
ws.addEventListener('error', () => reject(new errors_js_1.WebSocketError('WebSocket error')), { once: true });
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Wrap a WebSocket into an async generator of HaiEvents.
|
|
119
|
+
*
|
|
120
|
+
* Messages are parsed as JSON when possible. The event type is extracted
|
|
121
|
+
* from the `type` or `event_type` field in the JSON payload.
|
|
122
|
+
*/
|
|
123
|
+
async function* wsEventStream(ws) {
|
|
124
|
+
const messageQueue = [];
|
|
125
|
+
let resolveWait = null;
|
|
126
|
+
let closed = false;
|
|
127
|
+
let error = null;
|
|
128
|
+
const onMessage = (raw) => {
|
|
129
|
+
const text = typeof raw === 'string'
|
|
130
|
+
? raw
|
|
131
|
+
: raw instanceof Buffer
|
|
132
|
+
? raw.toString('utf-8')
|
|
133
|
+
: String(raw);
|
|
134
|
+
try {
|
|
135
|
+
const parsed = JSON.parse(text);
|
|
136
|
+
const eventType = parsed.type || parsed.event_type || 'message';
|
|
137
|
+
const eventId = parsed.id || parsed.event_id || undefined;
|
|
138
|
+
messageQueue.push({
|
|
139
|
+
eventType,
|
|
140
|
+
data: parsed,
|
|
141
|
+
id: eventId,
|
|
142
|
+
raw: text,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
messageQueue.push({
|
|
147
|
+
eventType: 'message',
|
|
148
|
+
data: text,
|
|
149
|
+
raw: text,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
if (resolveWait) {
|
|
153
|
+
const r = resolveWait;
|
|
154
|
+
resolveWait = null;
|
|
155
|
+
r();
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const onClose = () => {
|
|
159
|
+
closed = true;
|
|
160
|
+
if (resolveWait) {
|
|
161
|
+
const r = resolveWait;
|
|
162
|
+
resolveWait = null;
|
|
163
|
+
r();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
const onError = (err) => {
|
|
167
|
+
error = err instanceof Error ? err : new Error(String(err));
|
|
168
|
+
closed = true;
|
|
169
|
+
if (resolveWait) {
|
|
170
|
+
const r = resolveWait;
|
|
171
|
+
resolveWait = null;
|
|
172
|
+
r();
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
// Attach listeners (ws package)
|
|
176
|
+
if (typeof ws.on === 'function') {
|
|
177
|
+
ws.on('message', onMessage);
|
|
178
|
+
ws.on('close', onClose);
|
|
179
|
+
ws.on('error', onError);
|
|
180
|
+
}
|
|
181
|
+
else if (typeof ws.addEventListener === 'function') {
|
|
182
|
+
ws.addEventListener('message', (e) => onMessage(e.data));
|
|
183
|
+
ws.addEventListener('close', onClose);
|
|
184
|
+
ws.addEventListener('error', onError);
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
while (!closed) {
|
|
188
|
+
while (messageQueue.length > 0) {
|
|
189
|
+
yield messageQueue.shift();
|
|
190
|
+
}
|
|
191
|
+
if (closed)
|
|
192
|
+
break;
|
|
193
|
+
await new Promise((r) => {
|
|
194
|
+
resolveWait = r;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
if (ws.readyState === WS_OPEN) {
|
|
200
|
+
ws.close();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (error)
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=ws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/ws.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/a2a.js
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { inspect } from 'node:util';
|
|
2
|
+
import { JacsModuleError } from './integrations.js';
|
|
3
|
+
function isMissingModuleError(error, moduleName) {
|
|
4
|
+
if (!error || typeof error !== 'object') {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
const code = error.code;
|
|
8
|
+
if (code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND') {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
const message = error.message ?? '';
|
|
12
|
+
if (message.includes(`Cannot find package '${moduleName}'`)) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
if (message.includes(`Cannot find module '${moduleName}'`)) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
if (message.includes(`Failed to load url ${moduleName}`)) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
async function loadOptionalModule(moduleName, feature, installHint) {
|
|
24
|
+
try {
|
|
25
|
+
return await import(moduleName);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (isMissingModuleError(error, moduleName)) {
|
|
29
|
+
throw new JacsModuleError(`Optional dependency '${moduleName}' is required for ${feature}. ${installHint}`);
|
|
30
|
+
}
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function getRequiredFunction(moduleName, moduleObj, name) {
|
|
35
|
+
const value = moduleObj[name];
|
|
36
|
+
if (typeof value !== 'function') {
|
|
37
|
+
throw new JacsModuleError(`Module '${moduleName}' does not export function '${name}'. ` +
|
|
38
|
+
`Received: ${inspect(value, { depth: 1 })}`);
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
function getRequiredClass(moduleName, moduleObj, name) {
|
|
43
|
+
const value = moduleObj[name];
|
|
44
|
+
if (typeof value !== 'function') {
|
|
45
|
+
throw new JacsModuleError(`Module '${moduleName}' does not export class '${name}'. ` +
|
|
46
|
+
`Received: ${inspect(value, { depth: 1 })}`);
|
|
47
|
+
}
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
const A2A_HINT = "Install with: npm install @hai.ai/jacs";
|
|
51
|
+
const A2A_MODULE = '@hai.ai/jacs/a2a';
|
|
52
|
+
async function callIntegrationMethod(integration, methodName, args) {
|
|
53
|
+
const method = integration[methodName];
|
|
54
|
+
if (typeof method !== 'function') {
|
|
55
|
+
throw new JacsModuleError(`A2A integration missing method '${methodName}'. Received: ${inspect(method, { depth: 1 })}`);
|
|
56
|
+
}
|
|
57
|
+
return method.apply(integration, args);
|
|
58
|
+
}
|
|
59
|
+
function asRecord(value, label) {
|
|
60
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
61
|
+
throw new JacsModuleError(`${label} must be an object`);
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
function stringifyAgentJson(agentJson) {
|
|
66
|
+
if (typeof agentJson === 'string') {
|
|
67
|
+
return agentJson;
|
|
68
|
+
}
|
|
69
|
+
return JSON.stringify(agentJson);
|
|
70
|
+
}
|
|
71
|
+
function resolveCardProfile(agentCard) {
|
|
72
|
+
const metadata = agentCard.metadata;
|
|
73
|
+
if (metadata && typeof metadata === 'object') {
|
|
74
|
+
const profile = metadata.a2aProfile;
|
|
75
|
+
if (typeof profile === 'string' && profile.trim() !== '') {
|
|
76
|
+
return profile;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const protocolVersions = agentCard.protocolVersions;
|
|
80
|
+
if (Array.isArray(protocolVersions) && typeof protocolVersions[0] === 'string' && protocolVersions[0].trim() !== '') {
|
|
81
|
+
return protocolVersions[0];
|
|
82
|
+
}
|
|
83
|
+
const supportedInterfaces = agentCard.supportedInterfaces;
|
|
84
|
+
if (Array.isArray(supportedInterfaces)) {
|
|
85
|
+
for (const entry of supportedInterfaces) {
|
|
86
|
+
if (!entry || typeof entry !== 'object')
|
|
87
|
+
continue;
|
|
88
|
+
const version = entry.protocolVersion;
|
|
89
|
+
if (typeof version === 'string' && version.trim() !== '') {
|
|
90
|
+
return version;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return '0.4.0';
|
|
95
|
+
}
|
|
96
|
+
function valueAsString(record, key) {
|
|
97
|
+
const value = record[key];
|
|
98
|
+
return typeof value === 'string' ? value : '';
|
|
99
|
+
}
|
|
100
|
+
function mergeOptions(value) {
|
|
101
|
+
const out = {};
|
|
102
|
+
for (const [k, v] of Object.entries(value)) {
|
|
103
|
+
if (v !== undefined) {
|
|
104
|
+
out[k] = v;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return out;
|
|
108
|
+
}
|
|
109
|
+
function assertRequiredIdentityField(value, fieldName) {
|
|
110
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
111
|
+
throw new JacsModuleError(`quickstartA2A requires non-empty '${fieldName}'`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Build a JACS A2A integration instance from a caller-provided JACS client.
|
|
116
|
+
*
|
|
117
|
+
* The JACS client is typically an instance of `JacsClient` from `@hai.ai/jacs/client`.
|
|
118
|
+
*/
|
|
119
|
+
export async function getA2AIntegration(jacsClient, options = {}) {
|
|
120
|
+
const mod = await loadOptionalModule(A2A_MODULE, 'A2A integration', A2A_HINT);
|
|
121
|
+
const IntegrationClass = getRequiredClass(A2A_MODULE, mod, 'JACSA2AIntegration');
|
|
122
|
+
return new IntegrationClass(jacsClient, options.trustPolicy);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Delegate to `JACSA2AIntegration.quickstart(...)` from `@hai.ai/jacs/a2a`.
|
|
126
|
+
*/
|
|
127
|
+
export async function quickstartA2A(options) {
|
|
128
|
+
assertRequiredIdentityField(options.name, 'name');
|
|
129
|
+
assertRequiredIdentityField(options.domain, 'domain');
|
|
130
|
+
assertRequiredIdentityField(options.description, 'description');
|
|
131
|
+
const mod = await loadOptionalModule(A2A_MODULE, 'A2A quickstart', A2A_HINT);
|
|
132
|
+
const IntegrationClass = getRequiredClass(A2A_MODULE, mod, 'JACSA2AIntegration');
|
|
133
|
+
const quickstart = getRequiredFunction(A2A_MODULE, IntegrationClass, 'quickstart');
|
|
134
|
+
return quickstart(mergeOptions({
|
|
135
|
+
...options,
|
|
136
|
+
algorithm: options.algorithm ?? 'pq2025',
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
export async function exportAgentCard(jacsClient, agentData, options = {}) {
|
|
140
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
141
|
+
return callIntegrationMethod(integration, 'exportAgentCard', [agentData]);
|
|
142
|
+
}
|
|
143
|
+
export async function signArtifact(jacsClient, artifact, artifactType, parentSignatures = null, options = {}) {
|
|
144
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
145
|
+
return callIntegrationMethod(integration, 'signArtifact', [artifact, artifactType, parentSignatures]);
|
|
146
|
+
}
|
|
147
|
+
export async function verifyArtifact(jacsClient, wrappedArtifact, options = {}) {
|
|
148
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
149
|
+
return callIntegrationMethod(integration, 'verifyWrappedArtifact', [wrappedArtifact]);
|
|
150
|
+
}
|
|
151
|
+
export async function createChainOfCustody(jacsClient, artifacts, options = {}) {
|
|
152
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
153
|
+
return callIntegrationMethod(integration, 'createChainOfCustody', [artifacts]);
|
|
154
|
+
}
|
|
155
|
+
export async function generateWellKnownDocuments(jacsClient, agentCard, jwsSignature, publicKeyB64, agentData, options = {}) {
|
|
156
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
157
|
+
return callIntegrationMethod(integration, 'generateWellKnownDocuments', [agentCard, jwsSignature, publicKeyB64, agentData]);
|
|
158
|
+
}
|
|
159
|
+
export async function assessRemoteAgent(jacsClient, agentCardJson, options = {}) {
|
|
160
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
161
|
+
return callIntegrationMethod(integration, 'assessRemoteAgent', [agentCardJson]);
|
|
162
|
+
}
|
|
163
|
+
export async function trustA2AAgent(jacsClient, agentCardJson, options = {}) {
|
|
164
|
+
const integration = await getA2AIntegration(jacsClient, options);
|
|
165
|
+
return callIntegrationMethod(integration, 'trustA2AAgent', [agentCardJson]);
|
|
166
|
+
}
|
|
167
|
+
export function mergeAgentJsonWithAgentCard(agentJson, agentCard) {
|
|
168
|
+
const base = typeof agentJson === 'string'
|
|
169
|
+
? JSON.parse(agentJson)
|
|
170
|
+
: { ...agentJson };
|
|
171
|
+
const card = asRecord(agentCard, 'agentCard');
|
|
172
|
+
base.a2aAgentCard = card;
|
|
173
|
+
if (base.skills === undefined && Array.isArray(card.skills)) {
|
|
174
|
+
base.skills = card.skills;
|
|
175
|
+
}
|
|
176
|
+
if (base.capabilities === undefined && card.capabilities && typeof card.capabilities === 'object') {
|
|
177
|
+
base.capabilities = card.capabilities;
|
|
178
|
+
}
|
|
179
|
+
const metadata = (base.metadata && typeof base.metadata === 'object')
|
|
180
|
+
? { ...base.metadata }
|
|
181
|
+
: {};
|
|
182
|
+
metadata.a2aProfile = resolveCardProfile(card);
|
|
183
|
+
metadata.a2aSkillsCount = Array.isArray(card.skills) ? card.skills.length : 0;
|
|
184
|
+
base.metadata = metadata;
|
|
185
|
+
return JSON.stringify(base);
|
|
186
|
+
}
|
|
187
|
+
export async function registerWithAgentCard(haiClient, jacsClient, agentData, options = {}) {
|
|
188
|
+
const clientRecord = asRecord(haiClient, 'haiClient');
|
|
189
|
+
const register = getRequiredFunction('HaiClient', clientRecord, 'register');
|
|
190
|
+
const exportKeys = clientRecord.exportKeys;
|
|
191
|
+
const cardRaw = await exportAgentCard(jacsClient, agentData, options);
|
|
192
|
+
const agentCard = asRecord(cardRaw, 'agentCard');
|
|
193
|
+
let baseAgentJson;
|
|
194
|
+
if (options.agentJson !== undefined) {
|
|
195
|
+
baseAgentJson = options.agentJson;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
baseAgentJson = {
|
|
199
|
+
jacsId: valueAsString(agentData, 'jacsId') || valueAsString(clientRecord, 'jacsId'),
|
|
200
|
+
name: valueAsString(agentData, 'jacsName') || valueAsString(clientRecord, 'agentName'),
|
|
201
|
+
jacsVersion: valueAsString(agentData, 'jacsVersion') || '1.0.0',
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
const mergedAgentJson = mergeAgentJsonWithAgentCard(baseAgentJson, agentCard);
|
|
205
|
+
let publicKeyPem = options.publicKeyPem;
|
|
206
|
+
if (!publicKeyPem && typeof exportKeys === 'function') {
|
|
207
|
+
const exported = exportKeys.apply(clientRecord);
|
|
208
|
+
if (exported && typeof exported === 'object') {
|
|
209
|
+
const candidate = exported.publicKeyPem;
|
|
210
|
+
if (typeof candidate === 'string' && candidate.length > 0) {
|
|
211
|
+
publicKeyPem = candidate;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const registration = await register.apply(clientRecord, [mergeOptions({
|
|
216
|
+
ownerEmail: options.ownerEmail,
|
|
217
|
+
domain: options.domain,
|
|
218
|
+
description: options.description,
|
|
219
|
+
agentJson: mergedAgentJson,
|
|
220
|
+
publicKeyPem,
|
|
221
|
+
})]);
|
|
222
|
+
return {
|
|
223
|
+
registration,
|
|
224
|
+
agentCard,
|
|
225
|
+
agentJson: mergedAgentJson,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
export async function onMediatedBenchmarkJob(haiClient, jacsClient, handler, options = {}) {
|
|
229
|
+
const clientRecord = asRecord(haiClient, 'haiClient');
|
|
230
|
+
const onBenchmarkJob = getRequiredFunction('HaiClient', clientRecord, 'onBenchmarkJob');
|
|
231
|
+
const submitResponse = getRequiredFunction('HaiClient', clientRecord, 'submitResponse');
|
|
232
|
+
const sendEmail = clientRecord.sendEmail;
|
|
233
|
+
const verifyInboundArtifact = options.verifyInboundArtifact ?? false;
|
|
234
|
+
const enforceTrustPolicy = options.enforceTrustPolicy ?? false;
|
|
235
|
+
const maxReconnectAttempts = options.maxReconnectAttempts ?? 0;
|
|
236
|
+
const transport = options.transport ?? 'sse';
|
|
237
|
+
let attempts = 0;
|
|
238
|
+
while (true) {
|
|
239
|
+
try {
|
|
240
|
+
await onBenchmarkJob.apply(clientRecord, [async (job) => {
|
|
241
|
+
const data = asRecord(job.data ?? {}, 'benchmark job data');
|
|
242
|
+
const jobId = valueAsString(data, 'job_id') || valueAsString(data, 'run_id') || valueAsString(job, 'runId');
|
|
243
|
+
if (!jobId) {
|
|
244
|
+
throw new JacsModuleError('benchmark job missing job_id/run_id');
|
|
245
|
+
}
|
|
246
|
+
if (enforceTrustPolicy) {
|
|
247
|
+
const remoteCard = data.remoteAgentCard ?? data.remote_agent_card ?? data.agentCard;
|
|
248
|
+
if (!remoteCard) {
|
|
249
|
+
throw new JacsModuleError('remote agent card required when trust enforcement is enabled');
|
|
250
|
+
}
|
|
251
|
+
const trust = await assessRemoteAgent(jacsClient, remoteCard, options);
|
|
252
|
+
if (trust.allowed !== true) {
|
|
253
|
+
const reason = typeof trust.reason === 'string' ? trust.reason : 'unknown reason';
|
|
254
|
+
throw new JacsModuleError(`trust policy rejected remote agent: ${reason}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (verifyInboundArtifact) {
|
|
258
|
+
const inbound = data.a2aTask ?? data.a2a_task;
|
|
259
|
+
if (!inbound) {
|
|
260
|
+
throw new JacsModuleError('inbound a2a task required when signature verification is enabled');
|
|
261
|
+
}
|
|
262
|
+
const verification = await verifyArtifact(jacsClient, inbound, options);
|
|
263
|
+
if (verification.valid !== true) {
|
|
264
|
+
const err = typeof verification.error === 'string' ? verification.error : 'unknown verification failure';
|
|
265
|
+
throw new JacsModuleError(`inbound a2a task signature invalid: ${err}`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const taskPayload = {
|
|
269
|
+
type: 'benchmark_job',
|
|
270
|
+
jobId,
|
|
271
|
+
scenarioId: data.scenario_id ?? data.scenarioId ?? null,
|
|
272
|
+
config: data.config ?? null,
|
|
273
|
+
};
|
|
274
|
+
const taskArtifact = await signArtifact(jacsClient, taskPayload, 'task', null, options);
|
|
275
|
+
const resultPayload = await handler(taskArtifact);
|
|
276
|
+
const resultArtifact = await signArtifact(jacsClient, resultPayload, 'task-result', [taskArtifact], options);
|
|
277
|
+
const messageValue = resultPayload.message;
|
|
278
|
+
const message = typeof messageValue === 'string' ? messageValue : JSON.stringify(resultPayload);
|
|
279
|
+
await submitResponse.apply(clientRecord, [jobId, message, {
|
|
280
|
+
metadata: {
|
|
281
|
+
a2aTask: taskArtifact,
|
|
282
|
+
a2aResult: resultArtifact,
|
|
283
|
+
},
|
|
284
|
+
processingTimeMs: 0,
|
|
285
|
+
}]);
|
|
286
|
+
if (options.notifyEmail && typeof sendEmail === 'function') {
|
|
287
|
+
const subject = options.emailSubject ?? `A2A mediated result for job ${jobId}`;
|
|
288
|
+
await sendEmail.apply(clientRecord, [{
|
|
289
|
+
to: options.notifyEmail,
|
|
290
|
+
subject,
|
|
291
|
+
body: `Signed A2A artifact:\n\n${JSON.stringify(resultArtifact, null, 2)}`,
|
|
292
|
+
}]);
|
|
293
|
+
}
|
|
294
|
+
}, { transport }]);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
if (attempts >= maxReconnectAttempts) {
|
|
299
|
+
throw error;
|
|
300
|
+
}
|
|
301
|
+
attempts += 1;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=a2a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a.js","sourceRoot":"","sources":["../../src/a2a.ts"],"names":[],"mappings":"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"}
|