@holochain/client 0.10.4 → 0.11.1

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.
Files changed (46) hide show
  1. package/README.md +21 -12
  2. package/lib/api/admin/types.d.ts +36 -31
  3. package/lib/api/admin/types.js.map +1 -1
  4. package/lib/api/admin/websocket.d.ts +4 -6
  5. package/lib/api/admin/websocket.js +6 -8
  6. package/lib/api/admin/websocket.js.map +1 -1
  7. package/lib/api/app/index.js +1 -0
  8. package/lib/api/app/index.js.map +1 -1
  9. package/lib/api/app/types.d.ts +14 -12
  10. package/lib/api/app/util.d.ts +19 -0
  11. package/lib/api/app/util.js +74 -0
  12. package/lib/api/app/util.js.map +1 -0
  13. package/lib/api/app/websocket.d.ts +16 -5
  14. package/lib/api/app/websocket.js +73 -21
  15. package/lib/api/app/websocket.js.map +1 -1
  16. package/lib/api/app-agent/types.d.ts +14 -7
  17. package/lib/api/app-agent/websocket.d.ts +9 -6
  18. package/lib/api/app-agent/websocket.js +62 -14
  19. package/lib/api/app-agent/websocket.js.map +1 -1
  20. package/lib/api/client.js +5 -5
  21. package/lib/api/client.js.map +1 -1
  22. package/lib/api/common.d.ts +5 -4
  23. package/lib/api/common.js +12 -4
  24. package/lib/api/common.js.map +1 -1
  25. package/lib/api/index.d.ts +1 -0
  26. package/lib/api/index.js +1 -0
  27. package/lib/api/index.js.map +1 -1
  28. package/lib/api/zome-call-signing.d.ts +25 -0
  29. package/lib/api/zome-call-signing.js +28 -0
  30. package/lib/api/zome-call-signing.js.map +1 -0
  31. package/lib/hdk/capabilities.d.ts +2 -2
  32. package/lib/hdk/countersigning.d.ts +2 -2
  33. package/lib/index.d.ts +1 -0
  34. package/lib/index.js +1 -0
  35. package/lib/index.js.map +1 -1
  36. package/lib/types.d.ts +15 -13
  37. package/lib/utils/base64.d.ts +3 -0
  38. package/lib/utils/base64.js +8 -0
  39. package/lib/utils/base64.js.map +1 -0
  40. package/lib/utils/fake-hash.d.ts +5 -0
  41. package/lib/utils/fake-hash.js +12 -0
  42. package/lib/utils/fake-hash.js.map +1 -0
  43. package/lib/utils/index.d.ts +2 -0
  44. package/lib/utils/index.js +3 -0
  45. package/lib/utils/index.js.map +1 -0
  46. package/package.json +7 -1
@@ -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,69 @@ 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 ("signature" in req) {
61
+ return req;
62
+ }
63
+ if (isLauncher) {
64
+ const zomeCallUnsigned = {
65
+ provenance: Array.from(req.provenance),
66
+ cell_id: [Array.from(req.cell_id[0]), Array.from(req.cell_id[1])],
67
+ zome_name: req.zome_name,
68
+ fn_name: req.fn_name,
69
+ payload: Array.from(encode(req.payload)),
70
+ nonce: Array.from(randomNonce()),
71
+ expires_at: getNonceExpiration(),
72
+ };
73
+ const signedZomeCallTauri = await invoke("sign_zome_call", { zomeCallUnsigned });
74
+ const signedZomeCall = {
75
+ provenance: Uint8Array.from(signedZomeCallTauri.provenance),
76
+ cap_secret: null,
77
+ cell_id: [
78
+ Uint8Array.from(signedZomeCallTauri.cell_id[0]),
79
+ Uint8Array.from(signedZomeCallTauri.cell_id[1]),
80
+ ],
81
+ zome_name: signedZomeCallTauri.zome_name,
82
+ fn_name: signedZomeCallTauri.fn_name,
83
+ payload: Uint8Array.from(signedZomeCallTauri.payload),
84
+ signature: Uint8Array.from(signedZomeCallTauri.signature),
85
+ expires_at: signedZomeCallTauri.expires_at,
86
+ nonce: Uint8Array.from(signedZomeCallTauri.nonce),
87
+ };
88
+ return signedZomeCall;
89
+ }
90
+ else {
91
+ const signingPropsForCell = getSigningPropsForCell(req.cell_id);
92
+ if (!signingPropsForCell) {
93
+ throw new Error("cannot sign zome call: signing properties have not been set");
94
+ }
95
+ const unsignedZomeCall = {
96
+ ...req,
97
+ cap_secret: signingPropsForCell.capSecret,
98
+ provenance: signingPropsForCell.signingKey,
99
+ payload: encode(req.payload),
100
+ nonce: randomNonce(),
101
+ expires_at: getNonceExpiration(),
102
+ };
103
+ const hashedZomeCall = await hashZomeCall(unsignedZomeCall);
104
+ const signature = nacl
105
+ .sign(hashedZomeCall, signingPropsForCell.keyPair.secretKey)
106
+ .subarray(0, nacl.sign.signatureLength);
107
+ const signedZomeCall = {
108
+ ...unsignedZomeCall,
109
+ signature,
110
+ };
111
+ return signedZomeCall;
112
+ }
60
113
  },
114
+ output: (res) => decode(res),
61
115
  };
62
116
  const appInfoTransform = (appWs) => ({
63
117
  input: (req) => {
@@ -68,8 +122,6 @@ const appInfoTransform = (appWs) => ({
68
122
  }
69
123
  return req;
70
124
  },
71
- output: (res) => {
72
- return res;
73
- },
125
+ output: (res) => res,
74
126
  });
75
127
  //# 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,18 @@
1
1
  import { UnsubscribeFunction } from "emittery";
2
- import { ArchiveCloneCellResponse, CreateCloneCellRequest, CreateCloneCellResponse } from "..";
3
- import { RoleName } from "../..";
4
- import { CallZomeRequest, AppInfoResponse, ArchiveCloneCellRequest, AppSignal } from "../app";
5
- export declare type RoleNameCallZomeRequest = Omit<CallZomeRequest, "cell_id"> & {
2
+ import { DisableCloneCellResponse, CreateCloneCellRequest, CreateCloneCellResponse } from "../index.js";
3
+ import { AgentPubKey, RoleName } from "../../index.js";
4
+ import { AppInfoResponse, AppSignal, DisableCloneCellRequest, CallZomeRequest, EnableCloneCellRequest, EnableCloneCellResponse, CallZomeRequestSigned } from "../app/index.js";
5
+ export declare type NonProvenanceCallZomeRequest = Omit<CallZomeRequest, "provenance">;
6
+ export declare type RoleNameCallZomeRequest = Omit<NonProvenanceCallZomeRequest, "cell_id"> & {
6
7
  role_name: RoleName;
7
8
  };
8
- export declare type AppAgentCallZomeRequest = CallZomeRequest | RoleNameCallZomeRequest;
9
+ export declare type RoleNameCallZomeRequestSigned = Omit<CallZomeRequestSigned, "cell_id"> & {
10
+ role_name: RoleName;
11
+ };
12
+ export declare type AppAgentCallZomeRequest = NonProvenanceCallZomeRequest | RoleNameCallZomeRequest | CallZomeRequestSigned | RoleNameCallZomeRequestSigned;
9
13
  export declare type AppCreateCloneCellRequest = Omit<CreateCloneCellRequest, "app_id">;
10
- export declare type AppArchiveCloneCellRequest = Omit<ArchiveCloneCellRequest, "app_id">;
14
+ export declare type AppEnableCloneCellRequest = Omit<EnableCloneCellRequest, "app_id">;
15
+ export declare type AppDisableCloneCellRequest = Omit<DisableCloneCellRequest, "app_id">;
11
16
  export interface AppAgentEvents {
12
17
  signal: AppSignal;
13
18
  }
@@ -15,6 +20,8 @@ export interface AppAgentClient {
15
20
  callZome(args: AppAgentCallZomeRequest, timeout?: number): Promise<any>;
16
21
  on<Name extends keyof AppAgentEvents>(eventName: Name | readonly Name[], listener: (eventData: AppAgentEvents[Name]) => void | Promise<void>): UnsubscribeFunction;
17
22
  appInfo(): Promise<AppInfoResponse>;
23
+ myPubKey(): Promise<AgentPubKey>;
18
24
  createCloneCell(args: AppCreateCloneCellRequest): Promise<CreateCloneCellResponse>;
19
- archiveCloneCell(args: AppArchiveCloneCellRequest): Promise<ArchiveCloneCellResponse>;
25
+ enableCloneCell(args: AppEnableCloneCellRequest): Promise<EnableCloneCellResponse>;
26
+ disableCloneCell(args: AppDisableCloneCellRequest): Promise<DisableCloneCellResponse>;
20
27
  }
@@ -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,21 @@
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 { AgentPubKey, 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
+ myPubKey(): Promise<AgentPubKey>;
34
+ getCellIdFromRoleName(roleName: RoleName, appInfo: AppInfo): import("../../types.js").CellId;
33
35
  callZome(request: AppAgentCallZomeRequest, timeout?: number): Promise<CallZomeResponse>;
34
36
  createCloneCell(args: AppCreateCloneCellRequest): Promise<CreateCloneCellResponse>;
35
- archiveCloneCell(args: AppArchiveCloneCellRequest): Promise<ArchiveCloneCellResponse>;
37
+ enableCloneCell(args: AppEnableCloneCellRequest): Promise<EnableCloneCellResponse>;
38
+ disableCloneCell(args: AppDisableCloneCellRequest): Promise<DisableCloneCellResponse>;
36
39
  on<Name extends keyof AppAgentEvents>(eventName: Name | readonly Name[], listener: (eventData: AppAgentEvents[Name]) => void | Promise<void>): UnsubscribeFunction;
37
40
  }
@@ -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,61 @@ export class AppAgentWebsocket {
38
41
  this.cachedAppInfo = appInfo;
39
42
  return appInfo;
40
43
  }
44
+ async myPubKey() {
45
+ const appInfo = this.cachedAppInfo || (await this.appInfo());
46
+ // This is fine for now cause `UseExisting` as a provisioning strategy doesn't work yet.
47
+ // TODO: change this when AppInfo contains the `AgentPubKey` for this app, like `return appInfo.my_pub_key`
48
+ for (const cells of Object.values(appInfo.cell_info)) {
49
+ for (const cell of cells) {
50
+ if ("Provisioned" in cell) {
51
+ return cell.Provisioned.cell_id[1];
52
+ }
53
+ else if ("Cloned" in cell) {
54
+ return cell.Cloned.cell_id[1];
55
+ }
56
+ }
57
+ }
58
+ throw new Error(`This app doesn't have any cells, so we can't return the agent public key for it. This is a known issue, and is going to be fixed in the near future.`);
59
+ }
60
+ getCellIdFromRoleName(roleName, appInfo) {
61
+ if (isCloneId(roleName)) {
62
+ const baseRoleName = getBaseRoleNameFromCloneId(roleName);
63
+ if (!(baseRoleName in appInfo.cell_info)) {
64
+ throw new Error(`No cell found with role_name ${roleName}`);
65
+ }
66
+ const cloneCell = appInfo.cell_info[baseRoleName].find((c) => "Cloned" in c && c.Cloned.clone_id === roleName);
67
+ if (!cloneCell || !("Cloned" in cloneCell)) {
68
+ throw new Error(`No clone cell found with clone id ${roleName}`);
69
+ }
70
+ return cloneCell.Cloned.cell_id;
71
+ }
72
+ if (!(roleName in appInfo.cell_info)) {
73
+ throw new Error(`No cell found with role_name ${roleName}`);
74
+ }
75
+ const cell = appInfo.cell_info[roleName].find((c) => "Provisioned" in c);
76
+ if (!cell || !("Provisioned" in cell)) {
77
+ throw new Error(`No provisioned cell found with role_name ${roleName}`);
78
+ }
79
+ return cell.Provisioned.cell_id;
80
+ }
41
81
  async callZome(request, timeout) {
42
- const role_name = request
43
- .role_name;
44
- if (role_name) {
82
+ if (!("provenance" in request)) {
83
+ request = {
84
+ ...request,
85
+ provenance: await this.myPubKey(),
86
+ };
87
+ }
88
+ if ("role_name" in request && request.role_name) {
45
89
  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 = {
90
+ const cell_id = this.getCellIdFromRoleName(request.role_name, appInfo);
91
+ const zomeCallPayload = {
51
92
  ...omit(request, "role_name"),
93
+ provenance: await this.myPubKey(),
52
94
  cell_id,
53
95
  };
54
- return this.appWebsocket.callZome(callZomeRequest, timeout);
96
+ return this.appWebsocket.callZome(zomeCallPayload, timeout);
55
97
  }
56
- else if (request.cell_id) {
98
+ else if ("cell_id" in request && request.cell_id) {
57
99
  return this.appWebsocket.callZome(request, timeout);
58
100
  }
59
101
  else {
@@ -68,8 +110,14 @@ export class AppAgentWebsocket {
68
110
  this.cachedAppInfo = undefined;
69
111
  return clonedCell;
70
112
  }
71
- async archiveCloneCell(args) {
72
- return this.appWebsocket.archiveCloneCell({
113
+ async enableCloneCell(args) {
114
+ return this.appWebsocket.enableCloneCell({
115
+ app_id: this.installedAppId,
116
+ ...args,
117
+ });
118
+ }
119
+ async disableCloneCell(args) {
120
+ return this.appWebsocket.disableCloneCell({
73
121
  app_id: this.installedAppId,
74
122
  ...args,
75
123
  });
@@ -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 { encodeHashToBase64 } from "../utils/base64.js";
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 cellIdBase64 = encodeHashToBase64(cellId[0]).concat(encodeHashToBase64(cellId[1]));
16
+ signingProps.set(cellIdBase64, { 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 = encodeHashToBase64(cellId[0]).concat(encodeHashToBase64(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":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,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,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CACvD,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;IACF,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,EAAE;IACvD,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CACpD,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;IACF,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/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from "./api/index.js";
2
2
  export * from "./hdk/index.js";
3
3
  export * from "./types.js";
4
+ export * from "./utils/index.js";