@holochain/client 0.3.0
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 +92 -0
- package/lib/api/admin.d.ts +224 -0
- package/lib/api/admin.js +12 -0
- package/lib/api/admin.js.map +1 -0
- package/lib/api/app.d.ts +32 -0
- package/lib/api/app.js +3 -0
- package/lib/api/app.js.map +1 -0
- package/lib/api/common.d.ts +16 -0
- package/lib/api/common.js +21 -0
- package/lib/api/common.js.map +1 -0
- package/lib/api/state-dump.d.ts +36 -0
- package/lib/api/state-dump.js +3 -0
- package/lib/api/state-dump.js.map +1 -0
- package/lib/api/types.d.ts +39 -0
- package/lib/api/types.js +8 -0
- package/lib/api/types.js.map +1 -0
- package/lib/environments/launcher.d.ts +8 -0
- package/lib/environments/launcher.js +42 -0
- package/lib/environments/launcher.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/types/capabilities.d.ts +30 -0
- package/lib/types/capabilities.js +3 -0
- package/lib/types/capabilities.js.map +1 -0
- package/lib/types/common.d.ts +22 -0
- package/lib/types/common.js +3 -0
- package/lib/types/common.js.map +1 -0
- package/lib/types/dht-ops.d.ts +45 -0
- package/lib/types/dht-ops.js +42 -0
- package/lib/types/dht-ops.js.map +1 -0
- package/lib/types/entry.d.ts +16 -0
- package/lib/types/entry.js +3 -0
- package/lib/types/entry.js.map +1 -0
- package/lib/types/header.d.ts +108 -0
- package/lib/types/header.js +17 -0
- package/lib/types/header.js.map +1 -0
- package/lib/types/index.d.ts +5 -0
- package/lib/types/index.js +18 -0
- package/lib/types/index.js.map +1 -0
- package/lib/websocket/admin.d.ts +47 -0
- package/lib/websocket/admin.js +127 -0
- package/lib/websocket/admin.js.map +1 -0
- package/lib/websocket/app.d.ts +13 -0
- package/lib/websocket/app.js +70 -0
- package/lib/websocket/app.js.map +1 -0
- package/lib/websocket/client.d.ts +25 -0
- package/lib/websocket/client.js +129 -0
- package/lib/websocket/client.js.map +1 -0
- package/lib/websocket/common.d.ts +3 -0
- package/lib/websocket/common.js +34 -0
- package/lib/websocket/common.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WsClient = void 0;
|
|
7
|
+
const isomorphic_ws_1 = __importDefault(require("isomorphic-ws"));
|
|
8
|
+
const msgpack_1 = require("@msgpack/msgpack");
|
|
9
|
+
/**
|
|
10
|
+
* A Websocket client which can make requests and receive responses,
|
|
11
|
+
* as well as send and receive signals
|
|
12
|
+
*
|
|
13
|
+
* Uses Holochain's websocket WireMessage for communication.
|
|
14
|
+
*/
|
|
15
|
+
class WsClient {
|
|
16
|
+
constructor(socket, signalCb) {
|
|
17
|
+
this.socket = socket;
|
|
18
|
+
this.pendingRequests = {};
|
|
19
|
+
this.index = 0;
|
|
20
|
+
// TODO: allow adding signal handlers later
|
|
21
|
+
this.alreadyWarnedNoSignalCb = false;
|
|
22
|
+
socket.onmessage = async (encodedMsg) => {
|
|
23
|
+
let data = encodedMsg.data;
|
|
24
|
+
// If data is not a buffer (nodejs), it will be a blob (browser)
|
|
25
|
+
if (typeof Buffer === "undefined" || !Buffer.isBuffer(data)) {
|
|
26
|
+
data = await data.arrayBuffer();
|
|
27
|
+
}
|
|
28
|
+
const msg = (0, msgpack_1.decode)(data);
|
|
29
|
+
if (msg.type === "Signal") {
|
|
30
|
+
if (signalCb) {
|
|
31
|
+
const decodedMessage = (0, msgpack_1.decode)(msg.data);
|
|
32
|
+
if (!decodedMessage.App) {
|
|
33
|
+
// We have received a system signal, do nothing
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Note: holochain currently returns signals as an array of two values: cellId and the serialized signal payload
|
|
37
|
+
// and this array is nested within the App key within the returned message.
|
|
38
|
+
const decodedCellId = decodedMessage.App[0];
|
|
39
|
+
// Note:In order to return readible content to the UI, the signal payload must also be decoded.
|
|
40
|
+
const decodedPayload = signalTransform(decodedMessage.App[1]);
|
|
41
|
+
// Return a uniform format to UI (ie: { type, data } - the same format as with callZome and appInfo...)
|
|
42
|
+
const signal = {
|
|
43
|
+
type: msg.type,
|
|
44
|
+
data: { cellId: decodedCellId, payload: decodedPayload },
|
|
45
|
+
};
|
|
46
|
+
signalCb(signal);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
if (!this.alreadyWarnedNoSignalCb)
|
|
50
|
+
console.log('Received signal but no signal callback was set in constructor');
|
|
51
|
+
this.alreadyWarnedNoSignalCb = true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (msg.type === 'Response') {
|
|
55
|
+
this.handleResponse(msg);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.error(`Got unrecognized Websocket message type: ${msg.type}`);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
emitSignal(data) {
|
|
63
|
+
const encodedMsg = (0, msgpack_1.encode)({
|
|
64
|
+
type: 'Signal',
|
|
65
|
+
data: (0, msgpack_1.encode)(data),
|
|
66
|
+
});
|
|
67
|
+
this.socket.send(encodedMsg);
|
|
68
|
+
}
|
|
69
|
+
request(data) {
|
|
70
|
+
const id = this.index;
|
|
71
|
+
this.index += 1;
|
|
72
|
+
const encodedMsg = (0, msgpack_1.encode)({
|
|
73
|
+
id,
|
|
74
|
+
type: 'Request',
|
|
75
|
+
data: (0, msgpack_1.encode)(data),
|
|
76
|
+
});
|
|
77
|
+
const promise = new Promise((fulfill, reject) => {
|
|
78
|
+
this.pendingRequests[id] = { fulfill, reject };
|
|
79
|
+
});
|
|
80
|
+
if (this.socket.readyState === this.socket.OPEN) {
|
|
81
|
+
this.socket.send(encodedMsg);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return Promise.reject(new Error('Socket is not open'));
|
|
85
|
+
}
|
|
86
|
+
return promise;
|
|
87
|
+
}
|
|
88
|
+
handleResponse(msg) {
|
|
89
|
+
const id = msg.id;
|
|
90
|
+
if (this.pendingRequests[id]) {
|
|
91
|
+
// resolve response
|
|
92
|
+
if (msg.data === null || msg.data === undefined) {
|
|
93
|
+
this.pendingRequests[id].reject(new Error('Response canceled by responder'));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.pendingRequests[id].fulfill((0, msgpack_1.decode)(msg.data));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.error(`Got response with no matching request. id=${id}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
close() {
|
|
104
|
+
this.socket.close();
|
|
105
|
+
return this.awaitClose();
|
|
106
|
+
}
|
|
107
|
+
awaitClose() {
|
|
108
|
+
return new Promise((resolve) => this.socket.on('close', resolve));
|
|
109
|
+
}
|
|
110
|
+
static connect(url, signalCb) {
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
const socket = new isomorphic_ws_1.default(url);
|
|
113
|
+
// make sure that there are no uncaught connection
|
|
114
|
+
// errors because that causes nodejs thread to crash
|
|
115
|
+
// with uncaught exception
|
|
116
|
+
socket.onerror = () => {
|
|
117
|
+
reject(new Error(`could not connect to holochain conductor, please check that a conductor service is running and available at ${url}`));
|
|
118
|
+
};
|
|
119
|
+
socket.onopen = () => {
|
|
120
|
+
resolve(new WsClient(socket, signalCb));
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.WsClient = WsClient;
|
|
126
|
+
const signalTransform = (res) => {
|
|
127
|
+
return (0, msgpack_1.decode)(res);
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/websocket/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.promiseTimeout = exports.catchError = exports.DEFAULT_TIMEOUT = void 0;
|
|
4
|
+
const ERROR_TYPE = 'error';
|
|
5
|
+
exports.DEFAULT_TIMEOUT = 15000;
|
|
6
|
+
const catchError = (res) => {
|
|
7
|
+
return res.type === ERROR_TYPE
|
|
8
|
+
? Promise.reject(res)
|
|
9
|
+
: Promise.resolve(res);
|
|
10
|
+
};
|
|
11
|
+
exports.catchError = catchError;
|
|
12
|
+
const promiseTimeout = (promise, tag, ms) => {
|
|
13
|
+
let id;
|
|
14
|
+
const timeout = new Promise((_, reject) => {
|
|
15
|
+
id = setTimeout(() => {
|
|
16
|
+
clearTimeout(id);
|
|
17
|
+
reject(new Error(`Timed out in ${ms}ms: ${tag}`));
|
|
18
|
+
}, ms);
|
|
19
|
+
});
|
|
20
|
+
return new Promise((res, rej) => {
|
|
21
|
+
Promise.race([
|
|
22
|
+
promise,
|
|
23
|
+
timeout
|
|
24
|
+
]).then((a) => {
|
|
25
|
+
clearTimeout(id);
|
|
26
|
+
return res(a);
|
|
27
|
+
})
|
|
28
|
+
.catch(e => {
|
|
29
|
+
return rej(e);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
exports.promiseTimeout = promiseTimeout;
|
|
34
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/websocket/common.ts"],"names":[],"mappings":";;;AAAA,MAAM,UAAU,GAAG,OAAO,CAAA;AACb,QAAA,eAAe,GAAG,KAAK,CAAA;AAE7B,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE;IACrC,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;QAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QACrB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC,CAAA;AAJY,QAAA,UAAU,cAItB;AAEM,MAAM,cAAc,GAAG,CAAC,OAAqB,EAAE,GAAW,EAAE,EAAU,EAAE,EAAE;IAC/E,IAAI,EAAkB,CAAA;IAEtB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACxC,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;YACnB,YAAY,CAAC,EAAE,CAAC,CAAA;YAChB,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC,CAAA;QACnD,CAAC,EAAE,EAAE,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9B,OAAO,CAAC,IAAI,CAAC;YACX,OAAO;YACP,OAAO;SACR,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACZ,YAAY,CAAC,EAAE,CAAC,CAAA;YAChB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;QACf,CAAC,CAAC;aACC,KAAK,CAAC,CAAC,CAAC,EAAE;YACT,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAtBY,QAAA,cAAc,kBAsB1B"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@holochain/client",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "A Nodejs client for the Holochain conductor API",
|
|
5
|
+
"author": "Holochain Foundation <info@holochain.org> (http://holochain.org)",
|
|
6
|
+
"license": "CAL 1.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/holochain/holochain-client-js.git"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"holochain",
|
|
13
|
+
"client",
|
|
14
|
+
"conductor api"
|
|
15
|
+
],
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/holochain/holochain-client-js/issues"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/holochain/holochain-client-js#readme",
|
|
20
|
+
|
|
21
|
+
"files": [
|
|
22
|
+
"lib"
|
|
23
|
+
],
|
|
24
|
+
"main": "lib/index.js",
|
|
25
|
+
"types": "lib/index.d.ts",
|
|
26
|
+
|
|
27
|
+
"scripts": {
|
|
28
|
+
"lint": "eslint src/**/*.ts test/**/*.ts --fix",
|
|
29
|
+
"test": "RUST_LOG=error RUST_BACKTRACE=1 ts-node test",
|
|
30
|
+
"build": "tsc -b"
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@msgpack/msgpack": "^2.7.1",
|
|
35
|
+
"cross-fetch": "^3.1.4",
|
|
36
|
+
"isomorphic-ws": "^4.0.1"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/js-yaml": "^3.12.7",
|
|
40
|
+
"@types/tape": "^4.13.2",
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^5.9.0",
|
|
42
|
+
"@typescript-eslint/parser": "^5.9.0",
|
|
43
|
+
"eslint": "^8.6.0",
|
|
44
|
+
"js-yaml": "^3.14.1",
|
|
45
|
+
"tape": "^5.4.0",
|
|
46
|
+
"ts-node": "^10.4.0",
|
|
47
|
+
"typescript": "^4.5.4"
|
|
48
|
+
}
|
|
49
|
+
}
|