@holochain/client 0.10.4 → 0.11.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 CHANGED
@@ -17,34 +17,39 @@ To install from NPM, run
17
17
  npm install --save-exact @holochain/client
18
18
  ```
19
19
 
20
- > This code is still under alpha development and npm releases are pre-releases with `dev` tags meaning they will not use full semantic versioning, and you may wish to lock to an exact version of the library for that reason, as shown in the above command.
20
+ > This code is under beta development and you may wish to lock to an exact version of the library for that reason, as shown in the above command.
21
21
 
22
22
  ## Sample usage
23
23
 
24
24
  ### Use AdminWebsocket
25
25
  ```typescript
26
- const admin = await AdminWebsocket.connect(`ws://localhost:8000`, TIMEOUT)
27
- await admin.generateAgentPubKey()
26
+ const admin = await AdminWebsocket.connect(`ws://127.0.0.1:8000`, TIMEOUT)
27
+ const agentPubKey = await admin.generateAgentPubKey()
28
28
  ```
29
29
 
30
- ### Use AppWebsocket
30
+ ### Use AppWebsocket with implicit zome call signing
31
31
  ```typescript
32
32
  const signalCb = (signal: AppSignal) => {
33
33
  // impl...
34
34
  resolve()
35
35
  }
36
36
 
37
+ // generate and authorize new key pair for signing zome calls,
38
+ // specifying zomes and functions to be authorized
39
+ await authorizeNewSigningKeyPair(admin, cell_id, [
40
+ ["test_zome", "test_emitter_fn"],
41
+ ]);
42
+
37
43
  const TIMEOUT = 12000
38
44
  // default timeout is set to 12000
39
- const client = await AppWebsocket.connect(`ws://localhost:${appPort}`, 12000, signalCb)
45
+ const client = await AppWebsocket.connect(`ws://127.0.0.1:${appPort}`, TIMEOUT, signalCb)
40
46
 
41
47
  // default timeout set here (30000) will overwrite the defaultTimeout(12000) set above
42
48
  await client.callZome({
43
- cap: null,
44
49
  cell_id,
45
50
  zome_name: "test_zome",
46
51
  fn_name: 'test_emitter_fn',
47
- provenance: fakeAgentPubKey('TODO'),
52
+ provenance: agentPubKey,
48
53
  payload: null,
49
54
  }, 30000)
50
55
  ```
@@ -56,19 +61,24 @@ npm install --save-exact @holochain/client
56
61
  resolve()
57
62
  }
58
63
 
64
+ // generate and authorize new key pair for signing zome calls,
65
+ // specifying zomes and functions to be authorized
66
+ await authorizeNewSigningKeyPair(admin, cell_id, [
67
+ ["test_zome", "test_emitter_fn"],
68
+ ]);
69
+
59
70
  const TIMEOUT = 12000
60
71
  // default timeout is set to 12000
61
- const appWs = await AppWebsocket.connect(`ws://localhost:${appPort}`, 12000, signalCb)
72
+ const appWs = await AppWebsocket.connect(`ws://127.0.0.1:${appPort}`, 12000, signalCb)
62
73
 
63
74
  const client = new AppAgentWebsocket(appWs, 'installed_app_id')
64
75
 
65
76
  // default timeout set here (30000) will overwrite the defaultTimeout(12000) set above
66
77
  await client.callZome({
67
- cap: null,
68
- role_name: 'dnas_role_name', // role_name is unique per app, so you can unambiguously identify your dna with role_name in this client,
78
+ role_name: 'dnas_role_name', // role_name is unique per app, so you can unambiguously identify your dna with role_name in this client
69
79
  zome_name: "test_zome",
70
80
  fn_name: 'test_emitter_fn',
71
- provenance: fakeAgentPubKey('TODO'),
81
+ provenance: agentPubKey,
72
82
  payload: null,
73
83
  }, 30000)
74
84
  ```
@@ -107,7 +117,7 @@ Holochain is an open source project. We welcome all sorts of participation and
107
117
 
108
118
  [![License: CAL 1.0](https://img.shields.io/badge/License-CAL%201.0-blue.svg)](https://github.com/holochain/cryptographic-autonomy-license)
109
119
 
110
- Copyright (C) 2020-2022, Holochain Foundation
120
+ Copyright (C) 2020-2023, Holochain Foundation
111
121
 
112
122
  This program is free software: you can redistribute it and/or modify it under the terms of the license
113
123
  provided in the LICENSE file (CAL-1.0). This program is distributed in the hope that it will be useful,
@@ -1,8 +1,8 @@
1
1
  /// <reference types="node" />
2
- import { AgentPubKey, CellId, DnaHash, DnaProperties, ActionHash, HoloHash, InstalledAppId, InstalledCell, KitsuneAgent, KitsuneSpace, RoleName as RoleName, Signature, Timestamp, WasmHash } from "../../types.js";
3
- import { DhtOp, Entry, Action, ZomeCallCapGrant } from "../../hdk/index.js";
2
+ import { Action, DhtOp, Entry, ZomeCallCapGrant } from "../../hdk/index.js";
3
+ import { ActionHash, AgentPubKey, CellId, DnaHash, DnaProperties, HoloHash, InstalledAppId, KitsuneAgent, KitsuneSpace, RoleName, Signature, Timestamp, WasmHash } from "../../types.js";
4
4
  import { Requester } from "../common.js";
5
- import { ArchiveCloneCellRequest, CreateCloneCellResponse } from "../app/types.js";
5
+ import { DisableCloneCellRequest } from "../index.js";
6
6
  export declare type AttachAppInterfaceRequest = {
7
7
  port: number;
8
8
  };
@@ -19,7 +19,7 @@ export declare type EnableAppRequest = {
19
19
  installed_app_id: InstalledAppId;
20
20
  };
21
21
  export declare type EnableAppResponse = {
22
- app: InstalledAppInfo;
22
+ app: AppInfo;
23
23
  errors: Array<[CellId, string]>;
24
24
  };
25
25
  export declare type DeactivationReason = {
@@ -52,9 +52,28 @@ export declare type InstalledAppInfoStatus = {
52
52
  } | {
53
53
  running: null;
54
54
  };
55
- export declare type InstalledAppInfo = {
55
+ export interface StemCell {
56
+ dna: DnaHash;
57
+ name?: string;
58
+ dna_modifiers: DnaModifiers;
59
+ }
60
+ export interface Cell {
61
+ cell_id: CellId;
62
+ clone_id?: RoleName;
63
+ dna_modifiers: DnaModifiers;
64
+ name: string;
65
+ enabled: boolean;
66
+ }
67
+ export declare type CellInfo = {
68
+ Provisioned: Cell;
69
+ } | {
70
+ Cloned: Cell;
71
+ } | {
72
+ Stem: StemCell;
73
+ };
74
+ export declare type AppInfo = {
56
75
  installed_app_id: InstalledAppId;
57
- cell_data: Array<InstalledCell>;
76
+ cell_info: Record<RoleName, Array<CellInfo>>;
58
77
  status: InstalledAppInfoStatus;
59
78
  };
60
79
  export declare type MembraneProof = Buffer;
@@ -89,7 +108,7 @@ export declare type DnaModifiers = {
89
108
  properties: DnaProperties;
90
109
  origin_time: Timestamp;
91
110
  };
92
- export declare type FnName = string;
111
+ export declare type FunctionName = string;
93
112
  export declare type ZomeName = string;
94
113
  export declare type ZomeDefinition = [
95
114
  ZomeName,
@@ -108,12 +127,6 @@ export declare type DnaDefinition = {
108
127
  };
109
128
  export declare type GetDnaDefinitionRequest = DnaHash;
110
129
  export declare type GetDnaDefinitionResponse = DnaDefinition;
111
- export declare type InstallAppRequest = {
112
- installed_app_id: InstalledAppId;
113
- agent_key: AgentPubKey;
114
- dnas: Array<InstallAppDnaPayload>;
115
- };
116
- export declare type InstallAppResponse = InstalledAppInfo;
117
130
  export declare type UninstallAppRequest = {
118
131
  installed_app_id: InstalledAppId;
119
132
  };
@@ -175,7 +188,7 @@ export declare type AppBundleSource = {
175
188
  path: string;
176
189
  };
177
190
  export declare type NetworkSeed = string;
178
- export declare type InstallAppBundleRequest = {
191
+ export declare type InstallAppRequest = {
179
192
  agent_key: AgentPubKey;
180
193
  installed_app_id?: InstalledAppId;
181
194
  membrane_proofs: {
@@ -183,7 +196,7 @@ export declare type InstallAppBundleRequest = {
183
196
  };
184
197
  network_seed?: NetworkSeed;
185
198
  } & AppBundleSource;
186
- export declare type InstallAppBundleResponse = InstalledAppInfo;
199
+ export declare type InstallAppResponse = AppInfo;
187
200
  export declare type ListDnasRequest = void;
188
201
  export declare type ListDnasResponse = Array<string>;
189
202
  export declare type ListCellIdsRequest = void;
@@ -200,25 +213,20 @@ export declare enum AppStatusFilter {
200
213
  export declare type ListAppsRequest = {
201
214
  status_filter?: AppStatusFilter;
202
215
  };
203
- export declare type ListAppsResponse = Array<InstalledAppInfo>;
216
+ export declare type ListAppsResponse = Array<AppInfo>;
204
217
  export declare type ListAppInterfacesRequest = void;
205
218
  export declare type ListAppInterfacesResponse = Array<number>;
206
219
  export declare type AgentInfoSigned = any;
207
- export declare type RequestAgentInfoRequest = {
220
+ export declare type AgentInfoRequest = {
208
221
  cell_id: CellId | null;
209
222
  };
210
- export declare type RequestAgentInfoResponse = Array<AgentInfoSigned>;
223
+ export declare type AgentInfoResponse = Array<AgentInfoSigned>;
211
224
  export declare type AddAgentInfoRequest = {
212
225
  agent_infos: Array<AgentInfoSigned>;
213
226
  };
214
227
  export declare type AddAgentInfoResponse = any;
215
- export declare type RestoreCloneCellRequest = ArchiveCloneCellRequest;
216
- export declare type RestoreCloneCellResponse = CreateCloneCellResponse;
217
- export interface DeleteArchivedCloneCellsRequest {
218
- app_id: InstalledAppId;
219
- role_name: RoleName;
220
- }
221
- export declare type DeleteArchivedCloneCellsResponse = void;
228
+ export declare type DeleteCloneCellRequest = DisableCloneCellRequest;
229
+ export declare type DeleteCloneCellResponse = void;
222
230
  export interface GrantZomeCallCapabilityRequest {
223
231
  cell_id: CellId;
224
232
  cap_grant: ZomeCallCapGrant;
@@ -236,18 +244,16 @@ export interface AdminApi {
236
244
  generateAgentPubKey: Requester<GenerateAgentPubKeyRequest, GenerateAgentPubKeyResponse>;
237
245
  registerDna: Requester<RegisterDnaRequest, RegisterDnaResponse>;
238
246
  getDnaDefinition: Requester<GetDnaDefinitionRequest, GetDnaDefinitionResponse>;
239
- installApp: Requester<InstallAppRequest, InstallAppResponse>;
240
247
  uninstallApp: Requester<UninstallAppRequest, UninstallAppResponse>;
241
- installAppBundle: Requester<InstallAppBundleRequest, InstallAppBundleResponse>;
248
+ installApp: Requester<InstallAppRequest, InstallAppResponse>;
242
249
  listDnas: Requester<ListDnasRequest, ListDnasResponse>;
243
250
  listCellIds: Requester<ListCellIdsRequest, ListCellIdsResponse>;
244
251
  listActiveApps: Requester<ListActiveAppsRequest, ListActiveAppsResponse>;
245
252
  listApps: Requester<ListAppsRequest, ListAppsResponse>;
246
253
  listAppInterfaces: Requester<ListAppInterfacesRequest, ListAppInterfacesResponse>;
247
- requestAgentInfo: Requester<RequestAgentInfoRequest, RequestAgentInfoResponse>;
254
+ agentInfo: Requester<AgentInfoRequest, AgentInfoResponse>;
248
255
  addAgentInfo: Requester<AddAgentInfoRequest, AddAgentInfoResponse>;
249
- restoreCloneCell: Requester<RestoreCloneCellRequest, RestoreCloneCellResponse>;
250
- deleteArchivedCloneCells: Requester<DeleteArchivedCloneCellsRequest, DeleteArchivedCloneCellsResponse>;
256
+ deleteCloneCell: Requester<DeleteCloneCellRequest, DeleteCloneCellResponse>;
251
257
  grantZomeCallCapability: Requester<GrantZomeCallCapabilityRequest, GrantZomeCallCapabilityResponse>;
252
258
  }
253
259
  export declare type InstallAppDnaPayload = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/admin/types.ts"],"names":[],"mappings":"AA8OA,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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/admin/types.ts"],"names":[],"mappings":"AAwPA,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"}
@@ -3,7 +3,7 @@
3
3
  * Conductor Admin API
4
4
  *
5
5
  * const client = AdminWebsocket.connect(
6
- * 'ws://localhost:9000'
6
+ * 'ws://127.0.0.1:9000'
7
7
  * )
8
8
  *
9
9
  * client.generateAgentPubKey()
@@ -34,17 +34,15 @@ export declare class AdminWebsocket implements Api.AdminApi {
34
34
  generateAgentPubKey: Requester<Api.GenerateAgentPubKeyRequest, Api.GenerateAgentPubKeyResponse>;
35
35
  registerDna: Requester<Api.RegisterDnaRequest, Api.RegisterDnaResponse>;
36
36
  getDnaDefinition: Requester<Api.GetDnaDefinitionRequest, Api.GetDnaDefinitionResponse>;
37
- installApp: Requester<Api.InstallAppRequest, Api.InstallAppResponse>;
38
37
  uninstallApp: Requester<Api.UninstallAppRequest, Api.UninstallAppResponse>;
39
- installAppBundle: Requester<Api.InstallAppBundleRequest, Api.InstallAppBundleResponse>;
38
+ installApp: Requester<Api.InstallAppRequest, Api.InstallAppResponse>;
40
39
  listDnas: Requester<Api.ListDnasRequest, Api.ListDnasResponse>;
41
40
  listCellIds: Requester<Api.ListCellIdsRequest, Api.ListCellIdsResponse>;
42
41
  listActiveApps: Requester<Api.ListActiveAppsRequest, Api.ListActiveAppsResponse>;
43
42
  listApps: Requester<Api.ListAppsRequest, Api.ListAppsResponse>;
44
43
  listAppInterfaces: Requester<Api.ListAppInterfacesRequest, Api.ListAppInterfacesResponse>;
45
- requestAgentInfo: Requester<Api.RequestAgentInfoRequest, Api.RequestAgentInfoResponse>;
44
+ agentInfo: Requester<Api.AgentInfoRequest, Api.AgentInfoResponse>;
46
45
  addAgentInfo: Requester<Api.AddAgentInfoRequest, Api.AddAgentInfoResponse>;
47
- restoreCloneCell: Requester<Api.RestoreCloneCellRequest, Api.RestoreCloneCellResponse>;
48
- deleteArchivedCloneCells: Requester<Api.DeleteArchivedCloneCellsRequest, Api.DeleteArchivedCloneCellsResponse>;
46
+ deleteCloneCell: Requester<Api.DeleteCloneCellRequest, Api.DeleteCloneCellResponse>;
49
47
  grantZomeCallCapability: Requester<Api.GrantZomeCallCapabilityRequest, Api.GrantZomeCallCapabilityResponse>;
50
48
  }
@@ -3,7 +3,7 @@
3
3
  * Conductor Admin API
4
4
  *
5
5
  * const client = AdminWebsocket.connect(
6
- * 'ws://localhost:9000'
6
+ * 'ws://127.0.0.1:9000'
7
7
  * )
8
8
  *
9
9
  * client.generateAgentPubKey()
@@ -29,9 +29,9 @@ export class AdminWebsocket {
29
29
  }
30
30
  static async connect(url, defaultTimeout) {
31
31
  // Check if we are in the launcher's environment, and if so, redirect the url to connect to
32
- const env = await getLauncherEnvironment();
32
+ const env = getLauncherEnvironment();
33
33
  if (env) {
34
- url = `ws://localhost:${env.ADMIN_INTERFACE_PORT}`;
34
+ url = `ws://127.0.0.1:${env.ADMIN_INTERFACE_PORT}`;
35
35
  }
36
36
  const wsClient = await WsClient.connect(url);
37
37
  return new AdminWebsocket(wsClient, defaultTimeout);
@@ -52,19 +52,17 @@ export class AdminWebsocket {
52
52
  generateAgentPubKey = this._requester("generate_agent_pub_key");
53
53
  registerDna = this._requester("register_dna");
54
54
  getDnaDefinition = this._requester("get_dna_definition");
55
- installApp = this._requester("install_app");
56
55
  uninstallApp = this._requester("uninstall_app");
57
- installAppBundle = this._requester("install_app_bundle");
56
+ installApp = this._requester("install_app");
58
57
  listDnas = this._requester("list_dnas");
59
58
  listCellIds = this._requester("list_cell_ids");
60
59
  // Deprecated
61
60
  listActiveApps = this._requester("list_active_apps");
62
61
  listApps = this._requester("list_apps", listAppsTransform);
63
62
  listAppInterfaces = this._requester("list_app_interfaces");
64
- requestAgentInfo = this._requester("request_agent_info");
63
+ agentInfo = this._requester("agent_info");
65
64
  addAgentInfo = this._requester("add_agent_info");
66
- restoreCloneCell = this._requester("restore_clone_cell");
67
- deleteArchivedCloneCells = this._requester("delete_archived_clone_cells");
65
+ deleteCloneCell = this._requester("delete_clone_cell");
68
66
  grantZomeCallCapability = this._requester("grant_zome_call_capability");
69
67
  }
70
68
  const listAppsTransform = {
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/admin/websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/admin/websocket.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from "./types.js";
2
2
  export * from "./websocket.js";
3
+ // export * from "@holochain/serialization/holochain_serialization_js.js";
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/app/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/app/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAE/B,0EAA0E"}
@@ -1,12 +1,10 @@
1
- import { CapSecret } from "../../hdk/capabilities.js";
2
- import { AgentPubKey, CellId, DnaProperties, InstalledAppId, InstalledCell, RoleName, Timestamp, DnaHash, DnaGossipInfo } from "../../types.js";
1
+ import { AgentPubKey, CellId, DnaProperties, InstalledAppId, InstalledCell, RoleName, Timestamp, DnaHash, NetworkInfo } from "../../types.js";
3
2
  import { Requester } from "../common.js";
4
- import { InstalledAppInfo, MembraneProof, NetworkSeed } from "../admin/index.js";
3
+ import { FunctionName, AppInfo, MembraneProof, NetworkSeed, ZomeName } from "../admin/index.js";
5
4
  export declare type CallZomeRequestGeneric<Payload> = {
6
- cap_secret: CapSecret | null;
7
5
  cell_id: CellId;
8
- zome_name: string;
9
- fn_name: string;
6
+ zome_name: ZomeName;
7
+ fn_name: FunctionName;
10
8
  payload: Payload;
11
9
  provenance: AgentPubKey;
12
10
  };
@@ -16,7 +14,7 @@ export declare type CallZomeResponse = CallZomeResponseGeneric<any>;
16
14
  export declare type AppInfoRequest = {
17
15
  installed_app_id: InstalledAppId;
18
16
  };
19
- export declare type AppInfoResponse = InstalledAppInfo;
17
+ export declare type AppInfoResponse = AppInfo;
20
18
  export interface CreateCloneCellRequest {
21
19
  /**
22
20
  * The app id that the DNA to clone belongs to
@@ -62,11 +60,13 @@ export interface CreateCloneCellRequest {
62
60
  name?: string;
63
61
  }
64
62
  export declare type CreateCloneCellResponse = InstalledCell;
65
- export interface ArchiveCloneCellRequest {
63
+ export interface DisableCloneCellRequest {
66
64
  app_id: InstalledAppId;
67
65
  clone_cell_id: RoleName | CellId;
68
66
  }
69
- export declare type ArchiveCloneCellResponse = void;
67
+ export declare type DisableCloneCellResponse = void;
68
+ export declare type EnableCloneCellRequest = DisableCloneCellRequest;
69
+ export declare type EnableCloneCellResponse = CreateCloneCellResponse;
70
70
  export declare type AppSignal = {
71
71
  type: string;
72
72
  data: {
@@ -74,14 +74,16 @@ export declare type AppSignal = {
74
74
  payload: any;
75
75
  };
76
76
  };
77
- export interface GossipInfoRequest {
78
- /** The DNAs for which to get gossip info */
77
+ export interface NetworkInfoRequest {
78
+ /** The DNAs for which to get network info */
79
79
  dnas: DnaHash[];
80
80
  }
81
- export declare type GossipInfoResponse = DnaGossipInfo[];
81
+ export declare type NetworkInfoResponse = NetworkInfo[];
82
82
  export declare type AppSignalCb = (signal: AppSignal) => void;
83
83
  export declare type SignalResponseGeneric<Payload> = Payload;
84
84
  export interface AppApi {
85
85
  appInfo: Requester<AppInfoRequest, AppInfoResponse>;
86
86
  callZome: Requester<CallZomeRequest, CallZomeResponse>;
87
+ enableCloneCell: Requester<EnableCloneCellRequest, EnableCloneCellResponse>;
88
+ disableCloneCell: Requester<DisableCloneCellRequest, DisableCloneCellResponse>;
87
89
  }
@@ -0,0 +1,18 @@
1
+ import nacl from "tweetnacl";
2
+ import { CapSecret } from "../../hdk/capabilities.js";
3
+ import { AgentPubKey, CellId } from "../../types.js";
4
+ import { FunctionName, ZomeName } from "../admin/types.js";
5
+ import { AdminWebsocket } from "../admin/websocket.js";
6
+ import { CallZomeRequestSigned, Nonce256Bit } from "./websocket.js";
7
+ /**
8
+ * Generates a key pair for signing zome calls.
9
+ *
10
+ * @returns The signing key pair and an agent pub key based on the public key.
11
+ */
12
+ export declare const generateSigningKeyPair: () => [nacl.SignKeyPair, Uint8Array];
13
+ export declare const randomCapSecret: () => CapSecret;
14
+ export declare const randomNonce: () => Nonce256Bit;
15
+ export declare const getNonceExpiration: () => number;
16
+ export declare const grantSigningKey: (admin: AdminWebsocket, cellId: CellId, functions: Array<[ZomeName, FunctionName]>, signingKey: AgentPubKey) => Promise<CapSecret>;
17
+ export declare const signZomeCall: (capSecret: CapSecret, signingKey: AgentPubKey, keyPair: nacl.SignKeyPair, payload: any) => Promise<CallZomeRequestSigned>;
18
+ export declare const grantSigningKeyAndSignZomeCall: (admin: AdminWebsocket, payload: any) => Promise<CallZomeRequestSigned>;
@@ -0,0 +1,74 @@
1
+ import { hashZomeCall } from "@holochain/serialization";
2
+ import { encode } from "@msgpack/msgpack";
3
+ import crypto from "crypto";
4
+ import nacl from "tweetnacl";
5
+ /**
6
+ * Generates a key pair for signing zome calls.
7
+ *
8
+ * @returns The signing key pair and an agent pub key based on the public key.
9
+ */
10
+ export const generateSigningKeyPair = () => {
11
+ const keyPair = nacl.sign.keyPair();
12
+ const signingKey = new Uint8Array([132, 32, 36].concat(...keyPair.publicKey).concat(...[0, 0, 0, 0]));
13
+ const keys = [keyPair, signingKey];
14
+ return keys;
15
+ };
16
+ export const randomCapSecret = () => randomByteArray(64);
17
+ export const randomNonce = () => randomByteArray(32);
18
+ const randomByteArray = (length) => {
19
+ if (typeof window !== "undefined" &&
20
+ "crypto" in window &&
21
+ "getRandomValues" in window.crypto) {
22
+ return window.crypto.getRandomValues(new Uint8Array(length));
23
+ }
24
+ else {
25
+ return new Uint8Array(crypto.randomBytes(length));
26
+ }
27
+ };
28
+ export const getNonceExpiration = () => (Date.now() + 5 * 60 * 1000) * 1000; // 5 mins from now in microseconds
29
+ export const grantSigningKey = async (admin, cellId, functions, signingKey) => {
30
+ const capSecret = randomCapSecret();
31
+ await admin.grantZomeCallCapability({
32
+ cell_id: cellId,
33
+ cap_grant: {
34
+ tag: "zome-call-signing-key",
35
+ functions,
36
+ access: {
37
+ Assigned: {
38
+ secret: capSecret,
39
+ assignees: [signingKey],
40
+ },
41
+ },
42
+ },
43
+ });
44
+ return capSecret;
45
+ };
46
+ export const signZomeCall = async (capSecret, signingKey, keyPair, payload) => {
47
+ const unsignedZomeCallPayload = {
48
+ cap_secret: capSecret,
49
+ cell_id: payload.cell_id,
50
+ zome_name: payload.zome_name,
51
+ fn_name: payload.fn_name,
52
+ provenance: signingKey,
53
+ payload: encode(payload.payload),
54
+ nonce: randomNonce(),
55
+ expires_at: getNonceExpiration(),
56
+ };
57
+ const hashedZomeCall = await hashZomeCall(unsignedZomeCallPayload);
58
+ const signature = nacl
59
+ .sign(hashedZomeCall, keyPair.secretKey)
60
+ .subarray(0, nacl.sign.signatureLength);
61
+ const signedZomeCall = {
62
+ ...unsignedZomeCallPayload,
63
+ signature,
64
+ };
65
+ return signedZomeCall;
66
+ };
67
+ export const grantSigningKeyAndSignZomeCall = async (admin, payload) => {
68
+ const [keyPair, signingKey] = generateSigningKeyPair();
69
+ const capSecret = await grantSigningKey(admin, payload.cell_id, [[payload.zome_name, payload.fn_name]], signingKey);
70
+ payload = { ...payload, cap_secret: capSecret };
71
+ const signedZomeCall = signZomeCall(capSecret, signingKey, keyPair, payload);
72
+ return signedZomeCall;
73
+ };
74
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/api/app/util.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,29 @@
1
1
  import Emittery from "emittery";
2
+ import { CapSecret } from "../../hdk/capabilities.js";
2
3
  import { InstalledAppId } from "../../types.js";
3
4
  import { WsClient } from "../client.js";
4
5
  import { Requester, Transformer } from "../common.js";
5
- import { AppApi, AppInfoRequest, AppInfoResponse, AppSignalCb, CallZomeRequestGeneric, CallZomeResponseGeneric, ArchiveCloneCellRequest, CreateCloneCellRequest, CreateCloneCellResponse, ArchiveCloneCellResponse, GossipInfoRequest, GossipInfoResponse } from "./types.js";
6
+ import { AppApi, AppInfoRequest, AppInfoResponse, AppSignalCb, CallZomeRequest, CallZomeResponse, CreateCloneCellRequest, CreateCloneCellResponse, DisableCloneCellRequest, DisableCloneCellResponse, EnableCloneCellRequest, EnableCloneCellResponse, NetworkInfoRequest, NetworkInfoResponse } from "./types.js";
6
7
  export declare class AppWebsocket extends Emittery implements AppApi {
7
8
  client: WsClient;
8
9
  defaultTimeout: number;
9
10
  overrideInstalledAppId?: InstalledAppId;
10
11
  constructor(client: WsClient, defaultTimeout?: number, overrideInstalledAppId?: InstalledAppId);
11
12
  static connect(url: string, defaultTimeout?: number, signalCb?: AppSignalCb): Promise<AppWebsocket>;
12
- _requester: <ReqO, ReqI, ResI, ResO>(tag: string, transformer?: Transformer<ReqO, ReqI, ResI, ResO> | undefined) => (req: ReqO, timeout?: number | undefined) => Promise<ResO>;
13
+ _requester: <ReqI, ReqO, ResI, ResO>(tag: string, transformer?: Transformer<ReqI, ReqO, ResI, ResO> | undefined) => (req: ReqI, timeout?: number | undefined) => Promise<ResO>;
13
14
  appInfo: Requester<AppInfoRequest, AppInfoResponse>;
14
- callZome: Requester<CallZomeRequestGeneric<any>, CallZomeResponseGeneric<any>>;
15
+ callZome: Requester<CallZomeRequest | CallZomeRequestSigned, CallZomeResponse>;
15
16
  createCloneCell: Requester<CreateCloneCellRequest, CreateCloneCellResponse>;
16
- archiveCloneCell: Requester<ArchiveCloneCellRequest, ArchiveCloneCellResponse>;
17
- gossipInfo: Requester<GossipInfoRequest, GossipInfoResponse>;
17
+ enableCloneCell: Requester<EnableCloneCellRequest, EnableCloneCellResponse>;
18
+ disableCloneCell: Requester<DisableCloneCellRequest, DisableCloneCellResponse>;
19
+ networkInfo: Requester<NetworkInfoRequest, NetworkInfoResponse>;
20
+ }
21
+ export declare type Nonce256Bit = Uint8Array;
22
+ export interface CallZomeRequestUnsigned extends CallZomeRequest {
23
+ cap_secret: CapSecret | null;
24
+ nonce: Nonce256Bit;
25
+ expires_at: number;
26
+ }
27
+ export interface CallZomeRequestSigned extends CallZomeRequestUnsigned {
28
+ signature: Uint8Array;
18
29
  }
@@ -2,7 +2,7 @@
2
2
  * Defines AppWebsocket, an easy-to-use websocket implementation of the
3
3
  * Conductor API for apps
4
4
  *
5
- * const client = AppWebsocket.connect('ws://localhost:9000');
5
+ * const client = AppWebsocket.connect('ws://127.0.0.1:9000');
6
6
  *
7
7
  * client.callZome({...})
8
8
  * .then(() => {
@@ -12,11 +12,16 @@
12
12
  * console.error('problem installing DNA:', err)
13
13
  * });
14
14
  */
15
+ import { hashZomeCall } from "@holochain/serialization";
15
16
  import { decode, encode } from "@msgpack/msgpack";
17
+ import { invoke } from "@tauri-apps/api/tauri";
16
18
  import Emittery from "emittery";
17
- import { getLauncherEnvironment } from "../../environments/launcher.js";
19
+ import nacl from "tweetnacl";
20
+ import { getLauncherEnvironment, isLauncher, } from "../../environments/launcher.js";
18
21
  import { WsClient } from "../client.js";
19
22
  import { catchError, DEFAULT_TIMEOUT, promiseTimeout, requesterTransformer, } from "../common.js";
23
+ import { getSigningPropsForCell } from "../zome-call-signing.js";
24
+ import { getNonceExpiration, randomNonce } from "./util.js";
20
25
  export class AppWebsocket extends Emittery {
21
26
  client;
22
27
  defaultTimeout;
@@ -28,13 +33,14 @@ export class AppWebsocket extends Emittery {
28
33
  defaultTimeout === undefined ? DEFAULT_TIMEOUT : defaultTimeout;
29
34
  this.overrideInstalledAppId = overrideInstalledAppId;
30
35
  }
31
- static async connect(url, defaultTimeout,
32
- //** @deprecated */
33
- signalCb) {
36
+ static async connect(url, defaultTimeout, signalCb) {
34
37
  // Check if we are in the launcher's environment, and if so, redirect the url to connect to
35
- const env = await getLauncherEnvironment();
38
+ const env = getLauncherEnvironment();
36
39
  if (env) {
37
- url = `ws://localhost:${env.APP_INTERFACE_PORT}`;
40
+ url = `ws://127.0.0.1:${env.APP_INTERFACE_PORT}`;
41
+ }
42
+ if (signalCb) {
43
+ console.warn("Providing a signal callback on client initialization is deprecated. Instead add an event handler using `.on('signal', signalCb)`.");
38
44
  }
39
45
  const wsClient = await WsClient.connect(url, signalCb);
40
46
  const appWebsocket = new AppWebsocket(wsClient, defaultTimeout, env ? env.INSTALLED_APP_ID : undefined);
@@ -43,21 +49,71 @@ export class AppWebsocket extends Emittery {
43
49
  }
44
50
  _requester = (tag, transformer) => requesterTransformer((req, timeout) => promiseTimeout(this.client.request(req), tag, timeout || this.defaultTimeout).then(catchError), tag, transformer);
45
51
  appInfo = this._requester("app_info", appInfoTransform(this));
46
- callZome = this._requester("zome_call", callZomeTransform);
52
+ callZome = this._requester("call_zome", callZomeTransform);
47
53
  createCloneCell = this._requester("create_clone_cell");
48
- archiveCloneCell = this._requester("archive_clone_cell");
49
- gossipInfo = this._requester("gossip_info");
54
+ enableCloneCell = this._requester("enable_clone_cell");
55
+ disableCloneCell = this._requester("disable_clone_cell");
56
+ networkInfo = this._requester("network_info");
50
57
  }
51
58
  const callZomeTransform = {
52
- input: (req) => {
53
- return {
54
- ...req,
55
- payload: encode(req.payload),
56
- };
57
- },
58
- output: (res) => {
59
- return decode(res);
59
+ input: async (req) => {
60
+ if (isLauncher) {
61
+ const zomeCallUnsigned = {
62
+ provenance: Array.from(req.provenance),
63
+ cell_id: [Array.from(req.cell_id[0]), Array.from(req.cell_id[1])],
64
+ zome_name: req.zome_name,
65
+ fn_name: req.fn_name,
66
+ payload: Array.from(encode(req.payload)),
67
+ nonce: Array.from(randomNonce()),
68
+ expires_at: getNonceExpiration(),
69
+ };
70
+ const signedZomeCallTauri = await invoke("sign_zome_call", { zomeCallUnsigned });
71
+ const signedZomeCall = {
72
+ provenance: Uint8Array.from(signedZomeCallTauri.provenance),
73
+ cap_secret: null,
74
+ cell_id: [
75
+ Uint8Array.from(signedZomeCallTauri.cell_id[0]),
76
+ Uint8Array.from(signedZomeCallTauri.cell_id[1]),
77
+ ],
78
+ zome_name: signedZomeCallTauri.zome_name,
79
+ fn_name: signedZomeCallTauri.fn_name,
80
+ payload: Uint8Array.from(signedZomeCallTauri.payload),
81
+ signature: Uint8Array.from(signedZomeCallTauri.signature),
82
+ expires_at: signedZomeCallTauri.expires_at,
83
+ nonce: Uint8Array.from(signedZomeCallTauri.nonce),
84
+ };
85
+ return signedZomeCall;
86
+ }
87
+ else {
88
+ if ("signature" in req) {
89
+ return req;
90
+ }
91
+ else {
92
+ const signingPropsForCell = getSigningPropsForCell(req.cell_id);
93
+ if (!signingPropsForCell) {
94
+ throw new Error("cannot sign zome call: signing properties have not been set");
95
+ }
96
+ const unsignedZomeCall = {
97
+ ...req,
98
+ cap_secret: signingPropsForCell.capSecret,
99
+ provenance: signingPropsForCell.signingKey,
100
+ payload: encode(req.payload),
101
+ nonce: randomNonce(),
102
+ expires_at: getNonceExpiration(),
103
+ };
104
+ const hashedZomeCall = await hashZomeCall(unsignedZomeCall);
105
+ const signature = nacl
106
+ .sign(hashedZomeCall, signingPropsForCell.keyPair.secretKey)
107
+ .subarray(0, nacl.sign.signatureLength);
108
+ const signedZomeCall = {
109
+ ...unsignedZomeCall,
110
+ signature,
111
+ };
112
+ return signedZomeCall;
113
+ }
114
+ }
60
115
  },
116
+ output: (res) => decode(res),
61
117
  };
62
118
  const appInfoTransform = (appWs) => ({
63
119
  input: (req) => {
@@ -68,8 +124,6 @@ const appInfoTransform = (appWs) => ({
68
124
  }
69
125
  return req;
70
126
  },
71
- output: (res) => {
72
- return res;
73
- },
127
+ output: (res) => res,
74
128
  });
75
129
  //# sourceMappingURL=websocket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app/websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app/websocket.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,17 @@
1
1
  import { UnsubscribeFunction } from "emittery";
2
- import { ArchiveCloneCellResponse, CreateCloneCellRequest, CreateCloneCellResponse } from "..";
3
- import { RoleName } from "../..";
4
- import { CallZomeRequest, AppInfoResponse, ArchiveCloneCellRequest, AppSignal } from "../app";
2
+ import { DisableCloneCellResponse, CreateCloneCellRequest, CreateCloneCellResponse } from "../index.js";
3
+ import { RoleName } from "../../index.js";
4
+ import { AppInfoResponse, AppSignal, DisableCloneCellRequest, CallZomeRequest, EnableCloneCellRequest, EnableCloneCellResponse, CallZomeRequestSigned } from "../app/index.js";
5
5
  export declare type RoleNameCallZomeRequest = Omit<CallZomeRequest, "cell_id"> & {
6
6
  role_name: RoleName;
7
7
  };
8
- export declare type AppAgentCallZomeRequest = CallZomeRequest | RoleNameCallZomeRequest;
8
+ export declare type RoleNameCallZomeRequestSigned = Omit<CallZomeRequestSigned, "cell_id"> & {
9
+ role_name: RoleName;
10
+ };
11
+ export declare type AppAgentCallZomeRequest = CallZomeRequest | RoleNameCallZomeRequest | CallZomeRequestSigned | RoleNameCallZomeRequestSigned;
9
12
  export declare type AppCreateCloneCellRequest = Omit<CreateCloneCellRequest, "app_id">;
10
- export declare type AppArchiveCloneCellRequest = Omit<ArchiveCloneCellRequest, "app_id">;
13
+ export declare type AppEnableCloneCellRequest = Omit<EnableCloneCellRequest, "app_id">;
14
+ export declare type AppDisableCloneCellRequest = Omit<DisableCloneCellRequest, "app_id">;
11
15
  export interface AppAgentEvents {
12
16
  signal: AppSignal;
13
17
  }
@@ -16,5 +20,6 @@ export interface AppAgentClient {
16
20
  on<Name extends keyof AppAgentEvents>(eventName: Name | readonly Name[], listener: (eventData: AppAgentEvents[Name]) => void | Promise<void>): UnsubscribeFunction;
17
21
  appInfo(): Promise<AppInfoResponse>;
18
22
  createCloneCell(args: AppCreateCloneCellRequest): Promise<CreateCloneCellResponse>;
19
- archiveCloneCell(args: AppArchiveCloneCellRequest): Promise<ArchiveCloneCellResponse>;
23
+ enableCloneCell(args: AppEnableCloneCellRequest): Promise<EnableCloneCellResponse>;
24
+ disableCloneCell(args: AppDisableCloneCellRequest): Promise<DisableCloneCellResponse>;
20
25
  }
@@ -2,7 +2,7 @@
2
2
  * Defines AppAgentWebsocket, an easy-to-use websocket implementation of the
3
3
  * Conductor API for apps, restricted to a single app provided on initialization
4
4
  *
5
- * const appWs = AppWebsocket.connect('ws://localhost:9000')
5
+ * const appWs = AppWebsocket.connect('ws://127.0.0.1:9000')
6
6
  *
7
7
  * const client = new AppAgentWebsocket(appWs, 'my_installed_app_id')
8
8
  *
@@ -20,18 +20,20 @@
20
20
  * })
21
21
  */
22
22
  import Emittery, { UnsubscribeFunction } from "emittery";
23
- import { InstalledAppId } from "../../types.js";
24
- import { AppInfoResponse, AppWebsocket, ArchiveCloneCellResponse, CallZomeResponse, CreateCloneCellResponse, InstalledAppInfo } from "../index.js";
25
- import { AppAgentCallZomeRequest, AppAgentClient, AppAgentEvents, AppArchiveCloneCellRequest, AppCreateCloneCellRequest } from "./types.js";
23
+ import { InstalledAppId, RoleName } from "../../types.js";
24
+ import { AppInfo, AppInfoResponse, AppWebsocket, CallZomeResponse, CreateCloneCellResponse, DisableCloneCellResponse, EnableCloneCellResponse } from "../index.js";
25
+ import { AppAgentCallZomeRequest, AppAgentClient, AppAgentEvents, AppCreateCloneCellRequest, AppDisableCloneCellRequest, AppEnableCloneCellRequest } from "./types.js";
26
26
  export declare class AppAgentWebsocket implements AppAgentClient {
27
27
  appWebsocket: AppWebsocket;
28
28
  installedAppId: InstalledAppId;
29
- cachedAppInfo?: InstalledAppInfo;
29
+ cachedAppInfo?: AppInfo;
30
30
  emitter: Emittery<AppAgentEvents, AppAgentEvents & import("emittery").OmnipresentEventData, never>;
31
31
  constructor(appWebsocket: AppWebsocket, installedAppId: InstalledAppId);
32
32
  appInfo(): Promise<AppInfoResponse>;
33
+ getCellIdFromRoleName(roleName: RoleName, appInfo: AppInfo): import("../../types.js").CellId;
33
34
  callZome(request: AppAgentCallZomeRequest, timeout?: number): Promise<CallZomeResponse>;
34
35
  createCloneCell(args: AppCreateCloneCellRequest): Promise<CreateCloneCellResponse>;
35
- archiveCloneCell(args: AppArchiveCloneCellRequest): Promise<ArchiveCloneCellResponse>;
36
+ enableCloneCell(args: AppEnableCloneCellRequest): Promise<EnableCloneCellResponse>;
37
+ disableCloneCell(args: AppDisableCloneCellRequest): Promise<DisableCloneCellResponse>;
36
38
  on<Name extends keyof AppAgentEvents>(eventName: Name | readonly Name[], listener: (eventData: AppAgentEvents[Name]) => void | Promise<void>): UnsubscribeFunction;
37
39
  }
@@ -2,7 +2,7 @@
2
2
  * Defines AppAgentWebsocket, an easy-to-use websocket implementation of the
3
3
  * Conductor API for apps, restricted to a single app provided on initialization
4
4
  *
5
- * const appWs = AppWebsocket.connect('ws://localhost:9000')
5
+ * const appWs = AppWebsocket.connect('ws://127.0.0.1:9000')
6
6
  *
7
7
  * const client = new AppAgentWebsocket(appWs, 'my_installed_app_id')
8
8
  *
@@ -21,6 +21,8 @@
21
21
  */
22
22
  import Emittery from "emittery";
23
23
  import { omit } from "lodash-es";
24
+ import { getLauncherEnvironment } from "../../environments/launcher.js";
25
+ import { getBaseRoleNameFromCloneId, isCloneId } from "../common.js";
24
26
  export class AppAgentWebsocket {
25
27
  appWebsocket;
26
28
  installedAppId;
@@ -28,7 +30,8 @@ export class AppAgentWebsocket {
28
30
  emitter = new Emittery();
29
31
  constructor(appWebsocket, installedAppId) {
30
32
  this.appWebsocket = appWebsocket;
31
- this.installedAppId = installedAppId;
33
+ const env = getLauncherEnvironment();
34
+ this.installedAppId = env?.INSTALLED_APP_ID || installedAppId;
32
35
  this.appWebsocket.on("signal", (signal) => this.emitter.emit("signal", signal));
33
36
  }
34
37
  async appInfo() {
@@ -38,22 +41,38 @@ export class AppAgentWebsocket {
38
41
  this.cachedAppInfo = appInfo;
39
42
  return appInfo;
40
43
  }
44
+ getCellIdFromRoleName(roleName, appInfo) {
45
+ if (isCloneId(roleName)) {
46
+ const baseRoleName = getBaseRoleNameFromCloneId(roleName);
47
+ if (!(baseRoleName in appInfo.cell_info)) {
48
+ throw new Error(`No cell found with role_name ${roleName}`);
49
+ }
50
+ const cloneCell = appInfo.cell_info[baseRoleName].find((c) => "Cloned" in c && c.Cloned.clone_id === roleName);
51
+ if (!cloneCell || !("Cloned" in cloneCell)) {
52
+ throw new Error(`No clone cell found with clone id ${roleName}`);
53
+ }
54
+ return cloneCell.Cloned.cell_id;
55
+ }
56
+ if (!(roleName in appInfo.cell_info)) {
57
+ throw new Error(`No cell found with role_name ${roleName}`);
58
+ }
59
+ const cell = appInfo.cell_info[roleName].find((c) => "Provisioned" in c);
60
+ if (!cell || !("Provisioned" in cell)) {
61
+ throw new Error(`No provisioned cell found with role_name ${roleName}`);
62
+ }
63
+ return cell.Provisioned.cell_id;
64
+ }
41
65
  async callZome(request, timeout) {
42
- const role_name = request
43
- .role_name;
44
- if (role_name) {
66
+ if ("role_name" in request && request.role_name) {
45
67
  const appInfo = this.cachedAppInfo || (await this.appInfo());
46
- const cell_id = appInfo.cell_data.find((c) => c.role_name === role_name)?.cell_id;
47
- if (!cell_id) {
48
- throw new Error(`No cell found with role_name ${role_name}`);
49
- }
50
- const callZomeRequest = {
68
+ const cell_id = this.getCellIdFromRoleName(request.role_name, appInfo);
69
+ const zomeCallPayload = {
51
70
  ...omit(request, "role_name"),
52
71
  cell_id,
53
72
  };
54
- return this.appWebsocket.callZome(callZomeRequest, timeout);
73
+ return this.appWebsocket.callZome(zomeCallPayload, timeout);
55
74
  }
56
- else if (request.cell_id) {
75
+ else if ("cell_id" in request && request.cell_id) {
57
76
  return this.appWebsocket.callZome(request, timeout);
58
77
  }
59
78
  else {
@@ -68,8 +87,14 @@ export class AppAgentWebsocket {
68
87
  this.cachedAppInfo = undefined;
69
88
  return clonedCell;
70
89
  }
71
- async archiveCloneCell(args) {
72
- return this.appWebsocket.archiveCloneCell({
90
+ async enableCloneCell(args) {
91
+ return this.appWebsocket.enableCloneCell({
92
+ app_id: this.installedAppId,
93
+ ...args,
94
+ });
95
+ }
96
+ async disableCloneCell(args) {
97
+ return this.appWebsocket.disableCloneCell({
73
98
  app_id: this.installedAppId,
74
99
  ...args,
75
100
  });
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app-agent/websocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,QAAiC,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAqBjC,MAAM,OAAO,iBAAiB;IAC5B,YAAY,CAAe;IAC3B,cAAc,CAAiB;IAC/B,aAAa,CAAoB;IAEjC,OAAO,GAAG,IAAI,QAAQ,EAAkB,CAAC;IAEzC,YAAY,YAA0B,EAAE,cAA8B;QACpE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QAErC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC9C,gBAAgB,EAAE,IAAI,CAAC,cAAc;SACtC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAgC,EAChC,OAAgB;QAEhB,MAAM,SAAS,GAAwB,OAAmC;aACvE,SAAS,CAAC;QACb,IAAI,SAAS,EAAE;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CACjC,EAAE,OAAO,CAAC;YAEX,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;aAC9D;YAED,MAAM,eAAe,GAAG;gBACtB,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;gBAC7B,OAAO;aACR,CAAC;YACF,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;SAC7D;aAAM,IAAK,OAA2B,CAAC,OAAO,EAAE;YAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAA0B,EAAE,OAAO,CAAC,CAAC;SACxE;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;SACjE;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,IAA+B;QAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;YACnD,MAAM,EAAE,IAAI,CAAC,cAAc;YAC3B,GAAG,IAAI;SACR,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAE/B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,IAAgC;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,cAAc;YAC3B,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CACA,SAAiC,EACjC,QAAmE;QAEnE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;CACF"}
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app-agent/websocket.ts"],"names":[],"mappings":"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"}
package/lib/api/client.js CHANGED
@@ -17,7 +17,7 @@ export class WsClient extends Emittery {
17
17
  this.pendingRequests = {};
18
18
  this.index = 0;
19
19
  if (signalCb) {
20
- console.log("Providing a signal callback on client initialization is deprecated. Instead, add an event handler using `.on('signal', signalCb)`.");
20
+ console.log("Providing a signal callback on client initialization is deprecated. Instead add an event handler using `.on('signal', signalCb)`.");
21
21
  this.on("signal", signalCb);
22
22
  }
23
23
  socket.onmessage = async (encodedMsg) => {
@@ -27,7 +27,7 @@ export class WsClient extends Emittery {
27
27
  data = await data.arrayBuffer();
28
28
  }
29
29
  const msg = decode(data);
30
- if (msg.type === "Signal") {
30
+ if (msg.type === "signal") {
31
31
  const decodedMessage = decode(msg.data);
32
32
  if (!decodedMessage.App) {
33
33
  // We have received a system signal, do nothing
@@ -45,7 +45,7 @@ export class WsClient extends Emittery {
45
45
  };
46
46
  this.emit("signal", signal);
47
47
  }
48
- else if (msg.type === "Response") {
48
+ else if (msg.type === "response") {
49
49
  this.handleResponse(msg);
50
50
  }
51
51
  else {
@@ -55,7 +55,7 @@ export class WsClient extends Emittery {
55
55
  }
56
56
  emitSignal(data) {
57
57
  const encodedMsg = encode({
58
- type: "Signal",
58
+ type: "signal",
59
59
  data: encode(data),
60
60
  });
61
61
  this.socket.send(encodedMsg);
@@ -65,7 +65,7 @@ export class WsClient extends Emittery {
65
65
  this.index += 1;
66
66
  const encodedMsg = encode({
67
67
  id,
68
- type: "Request",
68
+ type: "request",
69
69
  data: encode(data),
70
70
  });
71
71
  const promise = new Promise((fulfill, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { RoleName } from "../types.js";
2
2
  export declare const DEFAULT_TIMEOUT = 15000;
3
- export declare type Transformer<ReqO, ReqI, ResI, ResO> = {
4
- input: (req: ReqO) => ReqI;
3
+ export declare type Transformer<ReqI, ReqO, ResI, ResO> = {
4
+ input: (req: ReqI) => ReqO;
5
5
  output: (res: ResI) => ResO;
6
6
  };
7
7
  export declare type Requester<Req, Res> = (req: Req, timeout?: number) => Promise<Res>;
@@ -15,9 +15,11 @@ export declare type Tagged<T> = {
15
15
  * and return a Requester which deals only with the inner data types, also
16
16
  * with the optional Transformer applied to further modify the input and output.
17
17
  */
18
- export declare const requesterTransformer: <ReqO, ReqI, ResI, ResO>(requester: Requester<Tagged<ReqI>, Tagged<ResI>>, tag: string, transform?: Transformer<ReqO, ReqI, ResI, ResO>) => (req: ReqO, timeout?: number) => Promise<ResO>;
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
20
  export declare const promiseTimeout: (promise: Promise<any>, tag: string, ms: number) => Promise<unknown>;
21
+ export declare const isCloneId: (roleName: RoleName) => boolean;
22
+ export declare const getBaseRoleNameFromCloneId: (roleName: RoleName) => string;
21
23
  /**
22
24
  * Identifier of a clone cell, composed of the DNA's role id and the index
23
25
  * of the clone, starting at 0.
@@ -25,7 +27,6 @@ export declare const promiseTimeout: (promise: Promise<any>, tag: string, ms: nu
25
27
  * Example: `profiles.0`
26
28
  */
27
29
  export declare class CloneId {
28
- private static readonly CLONE_ID_DELIMITER;
29
30
  private readonly roleName;
30
31
  private readonly index;
31
32
  constructor(roleName: RoleName, index: number);
package/lib/api/common.js CHANGED
@@ -6,7 +6,8 @@ export const DEFAULT_TIMEOUT = 15000;
6
6
  * with the optional Transformer applied to further modify the input and output.
7
7
  */
8
8
  export const requesterTransformer = (requester, tag, transform = identityTransformer) => async (req, timeout) => {
9
- const input = { type: tag, data: transform.input(req) };
9
+ const transformedInput = await transform.input(req);
10
+ const input = { type: tag, data: transformedInput };
10
11
  const response = await requester(input, timeout);
11
12
  const output = transform.output(response.data);
12
13
  return output;
@@ -38,6 +39,14 @@ export const promiseTimeout = (promise, tag, ms) => {
38
39
  });
39
40
  });
40
41
  };
42
+ const CLONE_ID_DELIMITER = ".";
43
+ export const isCloneId = (roleName) => roleName.includes(CLONE_ID_DELIMITER);
44
+ export const getBaseRoleNameFromCloneId = (roleName) => {
45
+ if (!isCloneId(roleName)) {
46
+ throw new Error("invalid clone id: no clone id delimiter found in role name");
47
+ }
48
+ return roleName.split(CLONE_ID_DELIMITER)[0];
49
+ };
41
50
  /**
42
51
  * Identifier of a clone cell, composed of the DNA's role id and the index
43
52
  * of the clone, starting at 0.
@@ -45,7 +54,6 @@ export const promiseTimeout = (promise, tag, ms) => {
45
54
  * Example: `profiles.0`
46
55
  */
47
56
  export class CloneId {
48
- static CLONE_ID_DELIMITER = ".";
49
57
  roleName;
50
58
  index;
51
59
  constructor(roleName, index) {
@@ -58,14 +66,14 @@ export class CloneId {
58
66
  * @returns A clone id instance.
59
67
  */
60
68
  static fromRoleName(roleName) {
61
- const parts = roleName.split(CloneId.CLONE_ID_DELIMITER);
69
+ const parts = roleName.split(CLONE_ID_DELIMITER);
62
70
  if (parts.length !== 2) {
63
71
  throw new Error("Malformed clone id: must consist of {role id.clone index}");
64
72
  }
65
73
  return new CloneId(parts[0], parseInt(parts[1]));
66
74
  }
67
75
  toString() {
68
- return `${this.roleName}${CloneId.CLONE_ID_DELIMITER}${this.index}`;
76
+ return `${this.roleName}${CLONE_ID_DELIMITER}${this.index}`;
69
77
  }
70
78
  getBaseRoleName() {
71
79
  return this.roleName;
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from "./admin/index.js";
2
2
  export * from "./app/index.js";
3
3
  export * from "./app-agent/index.js";
4
+ export { authorizeNewSigningKeyPair } from "./zome-call-signing.js";
4
5
  export { CloneId } from "./common.js";
package/lib/api/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./admin/index.js";
2
2
  export * from "./app/index.js";
3
3
  export * from "./app-agent/index.js";
4
+ export { authorizeNewSigningKeyPair } from "./zome-call-signing.js";
4
5
  export { CloneId } from "./common.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,25 @@
1
+ import nacl from "tweetnacl";
2
+ import { CapSecret } from "../hdk/capabilities.js";
3
+ import { AgentPubKey, CellId } from "../types.js";
4
+ import { FunctionName, ZomeName } from "./admin/types.js";
5
+ import { AdminWebsocket } from "./admin/websocket.js";
6
+ /**
7
+ * Generate and authorize a new key pair for signing zome calls.
8
+ *
9
+ * @param adminWs - An admin websocket connection to use for granting a
10
+ * capability for signing.
11
+ * @param cellId - The cell id to create the capability grant for.
12
+ * @param functions - Zomes and functions to authorize the signing key for.
13
+ */
14
+ export declare const authorizeNewSigningKeyPair: (adminWs: AdminWebsocket, cellId: CellId, functions: [[ZomeName, FunctionName]]) => Promise<void>;
15
+ /**
16
+ * Get properties for signing a zome call to a cell.
17
+ *
18
+ * @param cellId - Cell id to be called.
19
+ * @returns The keys and cap secret required for signing a zome call.
20
+ */
21
+ export declare const getSigningPropsForCell: (cellId: CellId) => {
22
+ capSecret: CapSecret;
23
+ keyPair: nacl.SignKeyPair;
24
+ signingKey: AgentPubKey;
25
+ } | undefined;
@@ -0,0 +1,28 @@
1
+ import { fromUint8Array } from "js-base64";
2
+ import { generateSigningKeyPair, grantSigningKey } from "./app/util.js";
3
+ const signingProps = new Map();
4
+ /**
5
+ * Generate and authorize a new key pair for signing zome calls.
6
+ *
7
+ * @param adminWs - An admin websocket connection to use for granting a
8
+ * capability for signing.
9
+ * @param cellId - The cell id to create the capability grant for.
10
+ * @param functions - Zomes and functions to authorize the signing key for.
11
+ */
12
+ export const authorizeNewSigningKeyPair = async (adminWs, cellId, functions) => {
13
+ const [keyPair, signingKey] = generateSigningKeyPair();
14
+ const capSecret = await grantSigningKey(adminWs, cellId, functions, signingKey);
15
+ const cellIdB64 = fromUint8Array(cellId[0]).concat(fromUint8Array(cellId[1]));
16
+ signingProps.set(cellIdB64, { capSecret, keyPair, signingKey });
17
+ };
18
+ /**
19
+ * Get properties for signing a zome call to a cell.
20
+ *
21
+ * @param cellId - Cell id to be called.
22
+ * @returns The keys and cap secret required for signing a zome call.
23
+ */
24
+ export const getSigningPropsForCell = (cellId) => {
25
+ const cellIdB64 = fromUint8Array(cellId[0]).concat(fromUint8Array(cellId[1]));
26
+ return signingProps.get(cellIdB64);
27
+ };
28
+ //# sourceMappingURL=zome-call-signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zome-call-signing.js","sourceRoot":"","sources":["../../src/api/zome-call-signing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAM3C,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,YAAY,GAOd,IAAI,GAAG,EAAE,CAAC;AAEd;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAC7C,OAAuB,EACvB,MAAc,EACd,SAAqC,EACrC,EAAE;IACF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,sBAAsB,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,CACX,CAAC;IACF,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,EAAE;IACvD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { FnName, ZomeName } from "../api/index.js";
1
+ import { FunctionName, ZomeName } from "../api/index.js";
2
2
  import { AgentPubKey } from "../types.js";
3
3
  export declare type CapSecret = Uint8Array;
4
4
  export interface CapClaim {
@@ -9,7 +9,7 @@ export interface CapClaim {
9
9
  export interface ZomeCallCapGrant {
10
10
  tag: string;
11
11
  access: CapAccess;
12
- functions: Array<[ZomeName, FnName]>;
12
+ functions: Array<[ZomeName, FunctionName]>;
13
13
  }
14
14
  export declare type CapAccess = "Unrestricted" | {
15
15
  Transferable: {
@@ -1,5 +1,5 @@
1
- import { ActionHash, AgentPubKey, EntryHash, Signature, Timestamp } from "../types";
2
- import { EntryType } from "./entry";
1
+ import { ActionHash, AgentPubKey, EntryHash, Signature, Timestamp } from "../types.js";
2
+ import { EntryType } from "./entry.js";
3
3
  export interface CounterSigningSessionData {
4
4
  preflight_request: PreflightRequest;
5
5
  responses: Array<[CountersigningAgentState, Signature]>;
package/lib/types.d.ts CHANGED
@@ -21,16 +21,10 @@ export interface HoloHashed<T> {
21
21
  hash: HoloHash;
22
22
  content: T;
23
23
  }
24
- export declare type DnaGossipInfo = {
25
- total_historical_gossip_throughput: HistoricalGossipThroughput;
26
- };
27
- export declare type HistoricalGossipThroughput = {
28
- expected_op_bytes: InOut;
29
- expected_op_count: InOut;
30
- op_bytes: InOut;
31
- op_count: InOut;
32
- };
33
- export declare type InOut = {
34
- incoming: number;
35
- outgoing: number;
36
- };
24
+ export interface NetworkInfo {
25
+ fetch_queue_info: FetchQueueInfo;
26
+ }
27
+ export interface FetchQueueInfo {
28
+ op_bytes_to_fetch: number;
29
+ num_ops_to_fetch: number;
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@holochain/client",
3
- "version": "0.10.4",
3
+ "version": "0.11.0",
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",
@@ -30,15 +30,21 @@
30
30
  "files": [
31
31
  "lib"
32
32
  ],
33
+ "browser": {
34
+ "crypto": false
35
+ },
33
36
  "scripts": {
34
37
  "lint": "eslint --fix --ext .ts src test .eslintrc.cjs",
35
38
  "test": "RUST_LOG=error RUST_BACKTRACE=1 node --experimental-wasm-modules --loader ts-node/esm test/index.ts",
36
39
  "build": "rimraf ./lib && tsc -p tsconfig.build.json"
37
40
  },
38
41
  "dependencies": {
42
+ "@holochain/serialization": "^0.1.0-beta-rc.0",
39
43
  "@msgpack/msgpack": "^2.7.2",
44
+ "@tauri-apps/api": "^1.2.0",
40
45
  "emittery": "^1.0.1",
41
46
  "isomorphic-ws": "^5.0.0",
47
+ "js-base64": "^3.7.3",
42
48
  "lodash-es": "^4.17.21",
43
49
  "tweetnacl": "^1.0.3"
44
50
  },