@holochain/client 0.11.9 → 0.11.10
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 +40 -10
- package/lib/api/admin/types.d.ts +14 -13
- package/lib/api/admin/types.js.map +1 -1
- package/lib/api/admin/websocket.js +1 -1
- package/lib/api/admin/websocket.js.map +1 -1
- package/lib/api/app/types.d.ts +15 -11
- package/lib/api/app/types.js +4 -1
- package/lib/api/app/types.js.map +1 -1
- package/lib/api/app/websocket.d.ts +2 -2
- package/lib/api/app/websocket.js +4 -7
- package/lib/api/app/websocket.js.map +1 -1
- package/lib/api/app-agent/types.d.ts +3 -3
- package/lib/api/app-agent/websocket.d.ts +7 -6
- package/lib/api/app-agent/websocket.js +35 -7
- package/lib/api/app-agent/websocket.js.map +1 -1
- package/lib/api/client.d.ts +12 -8
- package/lib/api/client.js +69 -48
- package/lib/api/client.js.map +1 -1
- package/lib/api/common.d.ts +1 -1
- package/lib/api/common.js.map +1 -1
- package/lib/api/zome-call-signing.d.ts +1 -2
- package/lib/environments/launcher.d.ts +3 -3
- package/lib/types.d.ts +4 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -27,28 +27,30 @@ npm install --save-exact @holochain/client
|
|
|
27
27
|
const agentPubKey = await admin.generateAgentPubKey()
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
### Use
|
|
30
|
+
### Use AppAgentWebsocket with implicit zome call signing
|
|
31
31
|
```typescript
|
|
32
32
|
const signalCb = (signal: AppSignal) => {
|
|
33
|
-
//
|
|
33
|
+
// implementation of signal handler
|
|
34
34
|
resolve()
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
const TIMEOUT = 12000
|
|
38
38
|
// default timeout is set to 12000
|
|
39
|
-
const
|
|
39
|
+
const appWs = await AppWebsocket.connect(`ws://127.0.0.1:${appPort}`, 12000)
|
|
40
|
+
|
|
41
|
+
const client = new AppAgentWebsocket(appWs, 'installed_app_id');
|
|
42
|
+
client.on("signal", signalCb);
|
|
40
43
|
|
|
41
44
|
// default timeout set here (30000) will overwrite the defaultTimeout(12000) set above
|
|
42
45
|
await client.callZome({
|
|
43
|
-
|
|
46
|
+
role_name: 'dnas_role_name', // role_name is unique per app, so you can unambiguously identify your dna with role_name in this client
|
|
44
47
|
zome_name: "test_zome",
|
|
45
48
|
fn_name: 'test_emitter_fn',
|
|
46
|
-
provenance: agentPubKey,
|
|
47
49
|
payload: null,
|
|
48
50
|
}, 30000)
|
|
49
51
|
```
|
|
50
52
|
|
|
51
|
-
### Use
|
|
53
|
+
### Use AppWebsocket with implicit zome call signing
|
|
52
54
|
```typescript
|
|
53
55
|
const signalCb = (signal: AppSignal) => {
|
|
54
56
|
// impl...
|
|
@@ -57,19 +59,47 @@ npm install --save-exact @holochain/client
|
|
|
57
59
|
|
|
58
60
|
const TIMEOUT = 12000
|
|
59
61
|
// default timeout is set to 12000
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
const client = new AppAgentWebsocket(appWs, 'installed_app_id')
|
|
62
|
+
const client = await AppWebsocket.connect(`ws://127.0.0.1:${appPort}`, TIMEOUT, signalCb)
|
|
63
63
|
|
|
64
64
|
// default timeout set here (30000) will overwrite the defaultTimeout(12000) set above
|
|
65
65
|
await client.callZome({
|
|
66
|
-
|
|
66
|
+
cell_id,
|
|
67
67
|
zome_name: "test_zome",
|
|
68
68
|
fn_name: 'test_emitter_fn',
|
|
69
|
+
provenance: agentPubKey,
|
|
69
70
|
payload: null,
|
|
70
71
|
}, 30000)
|
|
71
72
|
```
|
|
72
73
|
|
|
74
|
+
### Managing zome call signing credentials in a pure JavaScript browser application
|
|
75
|
+
|
|
76
|
+
Here is a pattern to manage signing keys for signing zome calls when running pure JavaScript web hApps in a web browser:
|
|
77
|
+
```typescript
|
|
78
|
+
const cellIdB64 =
|
|
79
|
+
encodeHashToBase64(cell_id[0]) + encodeHashToBase64(cell_id[1]);
|
|
80
|
+
// in case the zome call signing credentials are stored locally in the browser
|
|
81
|
+
const signingCredentialsJson = localStorage.getItem(cellIdB64);
|
|
82
|
+
let signingCredentials: SigningCredentials | null =
|
|
83
|
+
signingCredentialsJson && JSON.parse(signingCredentialsJson);
|
|
84
|
+
|
|
85
|
+
if (!signingCredentials) {
|
|
86
|
+
const [keyPair, signingKey] = generateSigningKeyPair();
|
|
87
|
+
const capSecret = await admin.grantSigningKey(
|
|
88
|
+
cell_id,
|
|
89
|
+
{ [GrantedFunctionsType.All]: null },
|
|
90
|
+
signingKey
|
|
91
|
+
);
|
|
92
|
+
signingCredentials = {
|
|
93
|
+
capSecret,
|
|
94
|
+
keyPair,
|
|
95
|
+
signingKey,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
setSigningCredentials(cell_id, signingCredentials);
|
|
99
|
+
// possibly store the zome call signing credentials locally in the browser
|
|
100
|
+
localStorage.setItem(cellIdB64, JSON.stringify(signingCredentials));
|
|
101
|
+
```
|
|
102
|
+
|
|
73
103
|
## API Reference
|
|
74
104
|
|
|
75
105
|
See [docs/API.md](docs/API.md)
|
package/lib/api/admin/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Action, DhtOp, Entry, ZomeCallCapGrant } from "../../hdk/index.js";
|
|
3
|
-
import { ActionHash, AgentPubKey, CellId, DnaHash, DnaProperties, HoloHash, HoloHashB64, InstalledAppId, KitsuneAgent, KitsuneSpace, RoleName, Signature, Timestamp, WasmHash } from "../../types.js";
|
|
3
|
+
import { ActionHash, AgentPubKey, CellId, DnaHash, DnaProperties, Duration, HoloHash, HoloHashB64, InstalledAppId, KitsuneAgent, KitsuneSpace, RoleName, Signature, Timestamp, WasmHash } from "../../types.js";
|
|
4
4
|
import { Requester } from "../common.js";
|
|
5
5
|
import { DisableCloneCellRequest } from "../index.js";
|
|
6
6
|
export declare type AttachAppInterfaceRequest = {
|
|
@@ -106,6 +106,7 @@ export declare type DnaModifiers = {
|
|
|
106
106
|
network_seed: NetworkSeed;
|
|
107
107
|
properties: DnaProperties;
|
|
108
108
|
origin_time: Timestamp;
|
|
109
|
+
quantum_time: Duration;
|
|
109
110
|
};
|
|
110
111
|
export declare type FunctionName = string;
|
|
111
112
|
export declare type ZomeName = string;
|
|
@@ -130,7 +131,7 @@ export declare type UninstallAppRequest = {
|
|
|
130
131
|
installed_app_id: InstalledAppId;
|
|
131
132
|
};
|
|
132
133
|
export declare type UninstallAppResponse = null;
|
|
133
|
-
export declare type ResourceBytes =
|
|
134
|
+
export declare type ResourceBytes = number[];
|
|
134
135
|
export declare type ResourceMap = {
|
|
135
136
|
[key: string]: ResourceBytes;
|
|
136
137
|
};
|
|
@@ -153,6 +154,13 @@ export declare type CellProvisioning = {
|
|
|
153
154
|
} | {
|
|
154
155
|
disabled: Record<string, never>;
|
|
155
156
|
};
|
|
157
|
+
export declare type Location = {
|
|
158
|
+
bundled: string;
|
|
159
|
+
} | {
|
|
160
|
+
path: string;
|
|
161
|
+
} | {
|
|
162
|
+
url: string;
|
|
163
|
+
};
|
|
156
164
|
export declare type DnaVersionSpec = Array<HoloHashB64>;
|
|
157
165
|
export declare type DnaVersionFlexible = {
|
|
158
166
|
singleton: HoloHashB64;
|
|
@@ -160,11 +168,10 @@ export declare type DnaVersionFlexible = {
|
|
|
160
168
|
multiple: DnaVersionSpec;
|
|
161
169
|
};
|
|
162
170
|
export declare type AppRoleDnaManifest = {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
network_seed?: NetworkSeed;
|
|
171
|
+
clone_limit?: number;
|
|
172
|
+
modifiers?: Partial<DnaModifiers>;
|
|
166
173
|
version?: DnaVersionFlexible;
|
|
167
|
-
};
|
|
174
|
+
} & Location;
|
|
168
175
|
export declare type AppRoleManifest = {
|
|
169
176
|
name: RoleName;
|
|
170
177
|
provisioning?: CellProvisioning;
|
|
@@ -256,13 +263,7 @@ export declare type InstallAppDnaPayload = {
|
|
|
256
263
|
role_name: RoleName;
|
|
257
264
|
membrane_proof?: MembraneProof;
|
|
258
265
|
};
|
|
259
|
-
export declare type ZomeLocation =
|
|
260
|
-
bundled: string;
|
|
261
|
-
} | {
|
|
262
|
-
path: string;
|
|
263
|
-
} | {
|
|
264
|
-
url: string;
|
|
265
|
-
};
|
|
266
|
+
export declare type ZomeLocation = Location;
|
|
266
267
|
export declare type ZomeManifest = {
|
|
267
268
|
name: string;
|
|
268
269
|
hash?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/admin/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/admin/types.ts"],"names":[],"mappings":"AAyEA,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,uCAA2B,CAAA;IAC3B,6BAAiB,CAAA;IACjB,yBAAa,CAAA;AACf,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAoLD,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,oCAAiB,CAAA;AACnB,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B"}
|
|
@@ -15,7 +15,7 @@ export class AdminWebsocket {
|
|
|
15
15
|
static async connect(url, defaultTimeout) {
|
|
16
16
|
// Check if we are in the launcher's environment, and if so, redirect the url to connect to
|
|
17
17
|
const env = getLauncherEnvironment();
|
|
18
|
-
if (env) {
|
|
18
|
+
if (env?.ADMIN_INTERFACE_PORT) {
|
|
19
19
|
url = `ws://127.0.0.1:${env.ADMIN_INTERFACE_PORT}`;
|
|
20
20
|
}
|
|
21
21
|
const wsClient = await WsClient.connect(url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/admin/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAGL,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,UAAU,EACV,eAAe,EACf,cAAc,EAEd,oBAAoB,GAErB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAML,eAAe,GAmChB,MAAM,YAAY,CAAC;AAEpB,MAAM,OAAO,cAAc;IAChB,MAAM,CAAW;IAC1B,cAAc,CAAS;IAEvB,YAAoB,MAAgB,EAAE,cAAuB;QAC3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc;YACjB,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,GAAW,EACX,cAAuB;QAEvB,2FAA2F;QAC3F,MAAM,GAAG,GAAG,sBAAsB,EAAE,CAAC;QAErC,IAAI,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/admin/websocket.ts"],"names":[],"mappings":"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"}
|
package/lib/api/app/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AgentPubKey, CellId, DnaProperties, InstalledAppId, InstalledCell, RoleName, Timestamp
|
|
1
|
+
import { AgentPubKey, CellId, DnaHash, DnaProperties, InstalledAppId, InstalledCell, NetworkInfo, RoleName, Timestamp } from "../../types.js";
|
|
2
|
+
import { AppInfo, FunctionName, MembraneProof, NetworkSeed, ZomeName } from "../admin/index.js";
|
|
2
3
|
import { Requester } from "../common.js";
|
|
3
|
-
import { FunctionName, AppInfo, MembraneProof, NetworkSeed, ZomeName } from "../admin/index.js";
|
|
4
4
|
export declare type CallZomeRequestGeneric<Payload> = {
|
|
5
5
|
cell_id: CellId;
|
|
6
6
|
zome_name: ZomeName;
|
|
@@ -67,20 +67,24 @@ export interface DisableCloneCellRequest {
|
|
|
67
67
|
export declare type DisableCloneCellResponse = void;
|
|
68
68
|
export declare type EnableCloneCellRequest = DisableCloneCellRequest;
|
|
69
69
|
export declare type EnableCloneCellResponse = CreateCloneCellResponse;
|
|
70
|
-
export declare type AppSignal = {
|
|
71
|
-
type: string;
|
|
72
|
-
data: {
|
|
73
|
-
cellId: CellId;
|
|
74
|
-
payload: any;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
70
|
export interface NetworkInfoRequest {
|
|
78
71
|
/** The DNAs for which to get network info */
|
|
79
72
|
dnas: DnaHash[];
|
|
80
73
|
}
|
|
81
|
-
export declare
|
|
74
|
+
export declare const SignalType: {
|
|
75
|
+
readonly App: "App";
|
|
76
|
+
readonly System: "System";
|
|
77
|
+
};
|
|
78
|
+
export declare type Signal = {
|
|
79
|
+
[SignalType.App]: [CellId, any];
|
|
80
|
+
[SignalType.System]: unknown;
|
|
81
|
+
};
|
|
82
|
+
export declare type AppSignal = {
|
|
83
|
+
cell_id: CellId;
|
|
84
|
+
payload: any;
|
|
85
|
+
};
|
|
82
86
|
export declare type AppSignalCb = (signal: AppSignal) => void;
|
|
83
|
-
export declare type
|
|
87
|
+
export declare type NetworkInfoResponse = NetworkInfo[];
|
|
84
88
|
export interface AppApi {
|
|
85
89
|
appInfo: Requester<AppInfoRequest, AppInfoResponse>;
|
|
86
90
|
callZome: Requester<CallZomeRequest, CallZomeResponse>;
|
package/lib/api/app/types.js
CHANGED
package/lib/api/app/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/app/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/app/types.ts"],"names":[],"mappings":"AAkGA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;CACR,CAAC"}
|
|
@@ -4,13 +4,13 @@ import { InstalledAppId } from "../../types.js";
|
|
|
4
4
|
import { WsClient } from "../client.js";
|
|
5
5
|
import { Requester, Transformer } from "../common.js";
|
|
6
6
|
import { Nonce256Bit } from "../zome-call-signing.js";
|
|
7
|
-
import { AppApi, AppInfoRequest, AppInfoResponse,
|
|
7
|
+
import { AppApi, AppInfoRequest, AppInfoResponse, CallZomeRequest, CallZomeResponse, CreateCloneCellRequest, CreateCloneCellResponse, DisableCloneCellRequest, DisableCloneCellResponse, EnableCloneCellRequest, EnableCloneCellResponse, NetworkInfoRequest, NetworkInfoResponse } from "./types.js";
|
|
8
8
|
export declare class AppWebsocket extends Emittery implements AppApi {
|
|
9
9
|
readonly client: WsClient;
|
|
10
10
|
defaultTimeout: number;
|
|
11
11
|
overrideInstalledAppId?: InstalledAppId;
|
|
12
12
|
private constructor();
|
|
13
|
-
static connect(url: string, defaultTimeout?: number
|
|
13
|
+
static connect(url: string, defaultTimeout?: number): Promise<AppWebsocket>;
|
|
14
14
|
_requester: <ReqI, ReqO, ResI, ResO>(tag: string, transformer?: Transformer<ReqI, ReqO, ResI, ResO> | undefined) => (req: ReqI, timeout?: number | undefined) => Promise<ResO>;
|
|
15
15
|
appInfo: Requester<AppInfoRequest, AppInfoResponse>;
|
|
16
16
|
callZome: Requester<CallZomeRequest | CallZomeRequestSigned, CallZomeResponse>;
|
package/lib/api/app/websocket.js
CHANGED
|
@@ -17,17 +17,14 @@ export class AppWebsocket extends Emittery {
|
|
|
17
17
|
defaultTimeout === undefined ? DEFAULT_TIMEOUT : defaultTimeout;
|
|
18
18
|
this.overrideInstalledAppId = overrideInstalledAppId;
|
|
19
19
|
}
|
|
20
|
-
static async connect(url, defaultTimeout
|
|
20
|
+
static async connect(url, defaultTimeout) {
|
|
21
21
|
// Check if we are in the launcher's environment, and if so, redirect the url to connect to
|
|
22
22
|
const env = getLauncherEnvironment();
|
|
23
|
-
if (env) {
|
|
23
|
+
if (env?.APP_INTERFACE_PORT) {
|
|
24
24
|
url = `ws://127.0.0.1:${env.APP_INTERFACE_PORT}`;
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
const wsClient = await WsClient.connect(url, signalCb);
|
|
30
|
-
const appWebsocket = new AppWebsocket(wsClient, defaultTimeout, env ? env.INSTALLED_APP_ID : undefined);
|
|
26
|
+
const wsClient = await WsClient.connect(url);
|
|
27
|
+
const appWebsocket = new AppWebsocket(wsClient, defaultTimeout, env?.INSTALLED_APP_ID);
|
|
31
28
|
wsClient.on("signal", (signal) => appWebsocket.emit("signal", signal));
|
|
32
29
|
return appWebsocket;
|
|
33
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,UAAU,EACV,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,UAAU,EACV,eAAe,EACf,cAAc,EAEd,oBAAoB,GAErB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EAErB,WAAW,GACZ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { UnsubscribeFunction } from "emittery";
|
|
2
|
-
import { DisableCloneCellResponse, CreateCloneCellRequest, CreateCloneCellResponse } from "../index.js";
|
|
3
2
|
import { AgentPubKey, RoleName } from "../../index.js";
|
|
4
|
-
import { AppInfoResponse, AppSignal,
|
|
3
|
+
import { AppInfoResponse, AppSignal, AppSignalCb, CallZomeRequest, CallZomeRequestSigned, DisableCloneCellRequest, EnableCloneCellRequest, EnableCloneCellResponse } from "../app/index.js";
|
|
4
|
+
import { CreateCloneCellRequest, CreateCloneCellResponse, DisableCloneCellResponse } from "../index.js";
|
|
5
5
|
export declare type NonProvenanceCallZomeRequest = Omit<CallZomeRequest, "provenance">;
|
|
6
6
|
export declare type RoleNameCallZomeRequest = Omit<NonProvenanceCallZomeRequest, "cell_id"> & {
|
|
7
7
|
role_name: RoleName;
|
|
@@ -18,7 +18,7 @@ export interface AppAgentEvents {
|
|
|
18
18
|
}
|
|
19
19
|
export interface AppAgentClient {
|
|
20
20
|
callZome(args: AppAgentCallZomeRequest, timeout?: number): Promise<any>;
|
|
21
|
-
on<Name extends keyof AppAgentEvents>(eventName: Name | readonly Name[], listener:
|
|
21
|
+
on<Name extends keyof AppAgentEvents>(eventName: Name | readonly Name[], listener: AppSignalCb): UnsubscribeFunction;
|
|
22
22
|
appInfo(): Promise<AppInfoResponse>;
|
|
23
23
|
myPubKey: AgentPubKey;
|
|
24
24
|
createCloneCell(args: AppCreateCloneCellRequest): Promise<CreateCloneCellResponse>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Emittery, { UnsubscribeFunction } from "emittery";
|
|
2
|
-
import { AgentPubKey, InstalledAppId, RoleName } from "../../types.js";
|
|
3
|
-
import { AppInfo,
|
|
2
|
+
import { AgentPubKey, CellId, InstalledAppId, RoleName } from "../../types.js";
|
|
3
|
+
import { AppInfo, AppSignalCb, AppWebsocket, CallZomeResponse, CreateCloneCellResponse, DisableCloneCellResponse, EnableCloneCellResponse } from "../index.js";
|
|
4
4
|
import { AppAgentCallZomeRequest, AppAgentClient, AppAgentEvents, AppCreateCloneCellRequest, AppDisableCloneCellRequest, AppEnableCloneCellRequest } from "./types.js";
|
|
5
5
|
export declare class AppAgentWebsocket implements AppAgentClient {
|
|
6
6
|
myPubKey: AgentPubKey;
|
|
@@ -9,12 +9,13 @@ export declare class AppAgentWebsocket implements AppAgentClient {
|
|
|
9
9
|
cachedAppInfo?: AppInfo;
|
|
10
10
|
readonly emitter: Emittery<AppAgentEvents>;
|
|
11
11
|
private constructor();
|
|
12
|
-
appInfo(): Promise<
|
|
13
|
-
static connect(
|
|
14
|
-
getCellIdFromRoleName(roleName: RoleName, appInfo: AppInfo):
|
|
12
|
+
appInfo(): Promise<AppInfo>;
|
|
13
|
+
static connect(url: string, installed_app_id: InstalledAppId, defaultTimeout?: number): Promise<AppAgentWebsocket>;
|
|
14
|
+
getCellIdFromRoleName(roleName: RoleName, appInfo: AppInfo): CellId;
|
|
15
15
|
callZome(request: AppAgentCallZomeRequest, timeout?: number): Promise<CallZomeResponse>;
|
|
16
16
|
createCloneCell(args: AppCreateCloneCellRequest): Promise<CreateCloneCellResponse>;
|
|
17
17
|
enableCloneCell(args: AppEnableCloneCellRequest): Promise<EnableCloneCellResponse>;
|
|
18
18
|
disableCloneCell(args: AppDisableCloneCellRequest): Promise<DisableCloneCellResponse>;
|
|
19
|
-
on<Name extends keyof AppAgentEvents>(eventName: Name | readonly Name[], listener:
|
|
19
|
+
on<Name extends keyof AppAgentEvents>(eventName: Name | readonly Name[], listener: AppSignalCb): UnsubscribeFunction;
|
|
20
|
+
private containsCell;
|
|
20
21
|
}
|
|
@@ -2,7 +2,7 @@ import Emittery from "emittery";
|
|
|
2
2
|
import { omit } from "lodash-es";
|
|
3
3
|
import { getLauncherEnvironment } from "../../environments/launcher.js";
|
|
4
4
|
import { getBaseRoleNameFromCloneId, isCloneId } from "../common.js";
|
|
5
|
-
import { CellType, } from "../index.js";
|
|
5
|
+
import { AppWebsocket, CellType, } from "../index.js";
|
|
6
6
|
function getPubKey(appInfo) {
|
|
7
7
|
// This is fine for now cause `UseExisting` as a provisioning strategy doesn't work yet.
|
|
8
8
|
// TODO: change this when AppInfo contains the `AgentPubKey` for this app, like `return appInfo.my_pub_key`
|
|
@@ -30,7 +30,11 @@ export class AppAgentWebsocket {
|
|
|
30
30
|
this.emitter = new Emittery();
|
|
31
31
|
const env = getLauncherEnvironment();
|
|
32
32
|
this.installedAppId = env?.INSTALLED_APP_ID || installedAppId;
|
|
33
|
-
this.appWebsocket.on("signal", (signal) =>
|
|
33
|
+
this.appWebsocket.on("signal", (signal) => {
|
|
34
|
+
if (this.containsCell(signal.cell_id)) {
|
|
35
|
+
this.emitter.emit("signal", signal);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
34
38
|
}
|
|
35
39
|
async appInfo() {
|
|
36
40
|
const appInfo = await this.appWebsocket.appInfo({
|
|
@@ -39,12 +43,15 @@ export class AppAgentWebsocket {
|
|
|
39
43
|
this.cachedAppInfo = appInfo;
|
|
40
44
|
return appInfo;
|
|
41
45
|
}
|
|
42
|
-
static async connect(
|
|
46
|
+
static async connect(url, installed_app_id, defaultTimeout) {
|
|
47
|
+
const appWebsocket = await AppWebsocket.connect(url, defaultTimeout);
|
|
43
48
|
const appInfo = await appWebsocket.appInfo({
|
|
44
|
-
installed_app_id:
|
|
49
|
+
installed_app_id: installed_app_id,
|
|
45
50
|
});
|
|
46
51
|
const myPubKey = getPubKey(appInfo);
|
|
47
|
-
|
|
52
|
+
const appAgentWs = new AppAgentWebsocket(appWebsocket, installed_app_id, myPubKey);
|
|
53
|
+
appAgentWs.cachedAppInfo = appInfo;
|
|
54
|
+
return appAgentWs;
|
|
48
55
|
}
|
|
49
56
|
getCellIdFromRoleName(roleName, appInfo) {
|
|
50
57
|
if (isCloneId(roleName)) {
|
|
@@ -52,8 +59,8 @@ export class AppAgentWebsocket {
|
|
|
52
59
|
if (!(baseRoleName in appInfo.cell_info)) {
|
|
53
60
|
throw new Error(`No cell found with role_name ${roleName}`);
|
|
54
61
|
}
|
|
55
|
-
const cloneCell = appInfo.cell_info[baseRoleName].find((c) =>
|
|
56
|
-
if (!cloneCell || !(
|
|
62
|
+
const cloneCell = appInfo.cell_info[baseRoleName].find((c) => CellType.Cloned in c && c.Cloned.clone_id === roleName);
|
|
63
|
+
if (!cloneCell || !(CellType.Cloned in cloneCell)) {
|
|
57
64
|
throw new Error(`No clone cell found with clone id ${roleName}`);
|
|
58
65
|
}
|
|
59
66
|
return cloneCell.Cloned.cell_id;
|
|
@@ -114,5 +121,26 @@ export class AppAgentWebsocket {
|
|
|
114
121
|
on(eventName, listener) {
|
|
115
122
|
return this.emitter.on(eventName, listener);
|
|
116
123
|
}
|
|
124
|
+
containsCell(cellId) {
|
|
125
|
+
const appInfo = this.cachedAppInfo;
|
|
126
|
+
if (!appInfo) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
for (const roleName of Object.keys(appInfo.cell_info)) {
|
|
130
|
+
for (const cellInfo of appInfo.cell_info[roleName]) {
|
|
131
|
+
const currentCellId = CellType.Provisioned in cellInfo
|
|
132
|
+
? cellInfo[CellType.Provisioned].cell_id
|
|
133
|
+
: CellType.Cloned in cellInfo
|
|
134
|
+
? cellInfo[CellType.Cloned].cell_id
|
|
135
|
+
: undefined;
|
|
136
|
+
if (currentCellId && isSameCell(currentCellId, cellId)) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
117
143
|
}
|
|
144
|
+
const isSameCell = (cellId1, cellId2) => cellId1[0].every((byte, index) => byte === cellId2[0][index]) &&
|
|
145
|
+
cellId1[1].every((byte, index) => byte === cellId2[1][index]);
|
|
118
146
|
//# sourceMappingURL=websocket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app-agent/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,QAAiC,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app-agent/websocket.ts"],"names":[],"mappings":"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"}
|
package/lib/api/client.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/// <reference types="ws" />
|
|
2
2
|
import { decode } from "@msgpack/msgpack";
|
|
3
|
-
import Websocket from "isomorphic-ws";
|
|
4
3
|
import Emittery from "emittery";
|
|
5
|
-
import
|
|
4
|
+
import Websocket from "isomorphic-ws";
|
|
5
|
+
interface HolochainMessage {
|
|
6
|
+
id: number;
|
|
7
|
+
type: "response" | "signal";
|
|
8
|
+
data: ArrayLike<number> | null;
|
|
9
|
+
}
|
|
6
10
|
/**
|
|
7
11
|
* A Websocket client which can make requests and receive responses,
|
|
8
12
|
* as well as send and receive signals
|
|
@@ -12,15 +16,15 @@ import { AppSignalCb } from "./app/types.js";
|
|
|
12
16
|
export declare class WsClient extends Emittery {
|
|
13
17
|
socket: Websocket;
|
|
14
18
|
pendingRequests: Record<number, {
|
|
15
|
-
|
|
19
|
+
resolve: (msg: unknown) => ReturnType<typeof decode>;
|
|
16
20
|
reject: (error: Error) => void;
|
|
17
21
|
}>;
|
|
18
22
|
index: number;
|
|
19
|
-
constructor(socket:
|
|
20
|
-
|
|
23
|
+
constructor(socket: Websocket);
|
|
24
|
+
static connect(url: string): Promise<WsClient>;
|
|
25
|
+
emitSignal(data: unknown): void;
|
|
21
26
|
request<Req, Res>(data: Req): Promise<Res>;
|
|
22
|
-
handleResponse(msg:
|
|
27
|
+
handleResponse(msg: HolochainMessage): void;
|
|
23
28
|
close(): Promise<void>;
|
|
24
|
-
awaitClose(): Promise<void>;
|
|
25
|
-
static connect(url: string, signalCb?: AppSignalCb): Promise<WsClient>;
|
|
26
29
|
}
|
|
30
|
+
export {};
|
package/lib/api/client.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { decode, encode } from "@msgpack/msgpack";
|
|
2
|
-
import Websocket from "isomorphic-ws";
|
|
3
2
|
import Emittery from "emittery";
|
|
3
|
+
import Websocket from "isomorphic-ws";
|
|
4
|
+
import { SignalType } from "./app/types.js";
|
|
4
5
|
/**
|
|
5
6
|
* A Websocket client which can make requests and receive responses,
|
|
6
7
|
* as well as send and receive signals
|
|
@@ -11,48 +12,70 @@ export class WsClient extends Emittery {
|
|
|
11
12
|
socket;
|
|
12
13
|
pendingRequests;
|
|
13
14
|
index;
|
|
14
|
-
constructor(socket
|
|
15
|
+
constructor(socket) {
|
|
15
16
|
super();
|
|
16
17
|
this.socket = socket;
|
|
17
18
|
this.pendingRequests = {};
|
|
18
19
|
this.index = 0;
|
|
19
|
-
|
|
20
|
-
console.log("Providing a signal callback on client initialization is deprecated. Instead add an event handler using `.on('signal', signalCb)`.");
|
|
21
|
-
this.on("signal", signalCb);
|
|
22
|
-
}
|
|
23
|
-
socket.onmessage = async (encodedMsg) => {
|
|
24
|
-
let data = encodedMsg.data;
|
|
20
|
+
socket.onmessage = async (serializedMessage) => {
|
|
25
21
|
// If data is not a buffer (nodejs), it will be a blob (browser)
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
let deserializedData;
|
|
23
|
+
if (serializedMessage.data instanceof Blob) {
|
|
24
|
+
deserializedData = await serializedMessage.data.arrayBuffer();
|
|
28
25
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
else {
|
|
27
|
+
if (typeof Buffer !== "undefined" &&
|
|
28
|
+
Buffer.isBuffer(serializedMessage.data)) {
|
|
29
|
+
deserializedData = serializedMessage.data;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new Error("websocket client: unknown message format");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const message = decode(deserializedData);
|
|
36
|
+
assertHolochainMessage(message);
|
|
37
|
+
if (message.type === "signal") {
|
|
38
|
+
if (message.data === null) {
|
|
39
|
+
throw new Error("received a signal without data");
|
|
40
|
+
}
|
|
41
|
+
const derializedSignal = decode(message.data);
|
|
42
|
+
assertHolochainSignal(derializedSignal);
|
|
43
|
+
if (!(SignalType.App in derializedSignal)) {
|
|
33
44
|
// We have received a system signal, do nothing
|
|
34
45
|
return;
|
|
35
46
|
}
|
|
36
|
-
//
|
|
47
|
+
// Holochain currently returns signals as an array of two values: cellId and the serialized signal payload
|
|
37
48
|
// and this array is nested within the App key within the returned message.
|
|
38
|
-
const
|
|
39
|
-
//
|
|
40
|
-
const
|
|
49
|
+
const cell_id = derializedSignal.App[0];
|
|
50
|
+
// In order to return readible content to the UI, the signal payload must also be deserialized.
|
|
51
|
+
const payload = decode(derializedSignal.App[1]);
|
|
41
52
|
// 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
|
-
};
|
|
53
|
+
const signal = { cell_id, payload };
|
|
46
54
|
this.emit("signal", signal);
|
|
47
55
|
}
|
|
48
|
-
else if (
|
|
49
|
-
this.handleResponse(
|
|
56
|
+
else if (message.type === "response") {
|
|
57
|
+
this.handleResponse(message);
|
|
50
58
|
}
|
|
51
59
|
else {
|
|
52
|
-
console.error(`Got unrecognized Websocket message type: ${
|
|
60
|
+
console.error(`Got unrecognized Websocket message type: ${message.type}`);
|
|
53
61
|
}
|
|
54
62
|
};
|
|
55
63
|
}
|
|
64
|
+
static connect(url) {
|
|
65
|
+
return new Promise((resolve, reject) => {
|
|
66
|
+
const socket = new Websocket(url);
|
|
67
|
+
// make sure that there are no uncaught connection
|
|
68
|
+
// errors because that causes nodejs thread to crash
|
|
69
|
+
// with uncaught exception
|
|
70
|
+
socket.onerror = () => {
|
|
71
|
+
reject(new Error(`could not connect to holochain conductor, please check that a conductor service is running and available at ${url}`));
|
|
72
|
+
};
|
|
73
|
+
socket.onopen = () => {
|
|
74
|
+
const client = new WsClient(socket);
|
|
75
|
+
resolve(client);
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
}
|
|
56
79
|
emitSignal(data) {
|
|
57
80
|
const encodedMsg = encode({
|
|
58
81
|
type: "signal",
|
|
@@ -68,8 +91,8 @@ export class WsClient extends Emittery {
|
|
|
68
91
|
type: "request",
|
|
69
92
|
data: encode(data),
|
|
70
93
|
});
|
|
71
|
-
const promise = new Promise((
|
|
72
|
-
this.pendingRequests[id] = {
|
|
94
|
+
const promise = new Promise((resolve, reject) => {
|
|
95
|
+
this.pendingRequests[id] = { resolve, reject };
|
|
73
96
|
});
|
|
74
97
|
if (this.socket.readyState === this.socket.OPEN) {
|
|
75
98
|
this.socket.send(encodedMsg);
|
|
@@ -82,41 +105,39 @@ export class WsClient extends Emittery {
|
|
|
82
105
|
handleResponse(msg) {
|
|
83
106
|
const id = msg.id;
|
|
84
107
|
if (this.pendingRequests[id]) {
|
|
85
|
-
// resolve response
|
|
86
108
|
if (msg.data === null || msg.data === undefined) {
|
|
87
109
|
this.pendingRequests[id].reject(new Error("Response canceled by responder"));
|
|
88
110
|
}
|
|
89
111
|
else {
|
|
90
|
-
this.pendingRequests[id].
|
|
112
|
+
this.pendingRequests[id].resolve(decode(msg.data));
|
|
91
113
|
}
|
|
114
|
+
delete this.pendingRequests[id];
|
|
92
115
|
}
|
|
93
116
|
else {
|
|
94
117
|
console.error(`Got response with no matching request. id=${id}`);
|
|
95
118
|
}
|
|
96
119
|
}
|
|
97
120
|
close() {
|
|
121
|
+
const closedPromise = new Promise((resolve) => this.socket.on("close", resolve));
|
|
98
122
|
this.socket.close();
|
|
99
|
-
return
|
|
123
|
+
return closedPromise;
|
|
100
124
|
}
|
|
101
|
-
|
|
102
|
-
|
|
125
|
+
}
|
|
126
|
+
function assertHolochainMessage(message) {
|
|
127
|
+
if (typeof message === "object" &&
|
|
128
|
+
message !== null &&
|
|
129
|
+
"type" in message &&
|
|
130
|
+
"data" in message) {
|
|
131
|
+
return;
|
|
103
132
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
reject(new Error(`could not connect to holochain conductor, please check that a conductor service is running and available at ${url}`));
|
|
112
|
-
};
|
|
113
|
-
socket.onopen = () => {
|
|
114
|
-
resolve(new WsClient(socket, signalCb));
|
|
115
|
-
};
|
|
116
|
-
});
|
|
133
|
+
throw new Error(`unknown message format ${JSON.stringify(message, null, 4)}`);
|
|
134
|
+
}
|
|
135
|
+
function assertHolochainSignal(signal) {
|
|
136
|
+
if (typeof signal === "object" &&
|
|
137
|
+
signal !== null &&
|
|
138
|
+
Object.values(SignalType).some((type) => type in signal)) {
|
|
139
|
+
return;
|
|
117
140
|
}
|
|
141
|
+
throw new Error(`unknown signal format ${JSON.stringify(signal, null, 4)}`);
|
|
118
142
|
}
|
|
119
|
-
const signalTransform = (res) => {
|
|
120
|
-
return decode(res);
|
|
121
|
-
};
|
|
122
143
|
//# sourceMappingURL=client.js.map
|
package/lib/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/lib/api/common.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare type Tagged<T> = {
|
|
|
17
17
|
*/
|
|
18
18
|
export declare const requesterTransformer: <ReqI, ReqO, ResI, ResO>(requester: Requester<Tagged<ReqO>, Tagged<ResI>>, tag: string, transform?: Transformer<ReqI, ReqO, ResI, ResO>) => (req: ReqI, timeout?: number) => Promise<ResO>;
|
|
19
19
|
export declare const catchError: (res: any) => Promise<any>;
|
|
20
|
-
export declare const promiseTimeout: (promise: Promise<
|
|
20
|
+
export declare const promiseTimeout: (promise: Promise<unknown>, tag: string, ms: number) => Promise<unknown>;
|
|
21
21
|
export declare const isCloneId: (roleName: RoleName) => boolean;
|
|
22
22
|
export declare const getBaseRoleNameFromCloneId: (roleName: RoleName) => string;
|
|
23
23
|
/**
|
package/lib/api/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,OAAO,CAAC;AAC3B,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAWrC;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,CACE,SAAgD,EAChD,GAAW,EACX,YAAiD,mBAAmB,EACpE,EAAE,CACJ,KAAK,EAAE,GAAS,EAAE,OAAgB,EAAE,EAAE;IACpC,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACJ,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/B,MAAM,mBAAmB,GAAG;IAC1B,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE;IACrC,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import nacl from "tweetnacl";
|
|
|
2
2
|
import { CapSecret } from "../hdk/capabilities.js";
|
|
3
3
|
import { AgentPubKey, CellId } from "../types.js";
|
|
4
4
|
export declare type Nonce256Bit = Uint8Array;
|
|
5
|
-
interface SigningCredentials {
|
|
5
|
+
export interface SigningCredentials {
|
|
6
6
|
capSecret: CapSecret;
|
|
7
7
|
keyPair: nacl.SignKeyPair;
|
|
8
8
|
signingKey: AgentPubKey;
|
|
@@ -34,4 +34,3 @@ export declare const randomCapSecret: () => CapSecret;
|
|
|
34
34
|
export declare const randomNonce: () => Nonce256Bit;
|
|
35
35
|
export declare const randomByteArray: (length: number) => Uint8Array;
|
|
36
36
|
export declare const getNonceExpiration: () => number;
|
|
37
|
-
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { InstalledAppId } from "../types.js";
|
|
2
2
|
import { CallZomeRequest, CallZomeRequestSigned } from "../api/index.js";
|
|
3
3
|
export interface LauncherEnvironment {
|
|
4
|
-
APP_INTERFACE_PORT
|
|
5
|
-
ADMIN_INTERFACE_PORT
|
|
6
|
-
INSTALLED_APP_ID
|
|
4
|
+
APP_INTERFACE_PORT?: number;
|
|
5
|
+
ADMIN_INTERFACE_PORT?: number;
|
|
6
|
+
INSTALLED_APP_ID?: InstalledAppId;
|
|
7
7
|
}
|
|
8
8
|
declare const __HC_LAUNCHER_ENV__ = "__HC_LAUNCHER_ENV__";
|
|
9
9
|
export declare const isLauncher: boolean;
|
package/lib/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@holochain/client",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.10",
|
|
4
4
|
"description": "A JavaScript client for the Holochain Conductor API",
|
|
5
5
|
"author": "Holochain Foundation <info@holochain.org> (http://holochain.org)",
|
|
6
6
|
"license": "CAL-1.0",
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|
|
37
37
|
"lint": "eslint --fix --ext .ts src test .eslintrc.cjs",
|
|
38
|
-
"test": "RUST_LOG=error RUST_BACKTRACE=1 node --
|
|
38
|
+
"test:app-agent": "RUST_LOG=error RUST_BACKTRACE=1 node --loader ts-node/esm test/e2e/app-agent-websocket.ts",
|
|
39
|
+
"test": "RUST_LOG=error RUST_BACKTRACE=1 node --loader ts-node/esm test/index.ts",
|
|
39
40
|
"build": "rimraf ./lib && tsc -p tsconfig.build.json"
|
|
40
41
|
},
|
|
41
42
|
"dependencies": {
|