@holochain/client 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +5 -5
  2. package/lib/types/dht-ops.js.map +1 -1
  3. package/lib.es/api/admin.d.ts +224 -0
  4. package/lib.es/api/admin.js +9 -0
  5. package/lib.es/api/admin.js.map +1 -0
  6. package/lib.es/api/app.d.ts +32 -0
  7. package/lib.es/api/app.js +2 -0
  8. package/lib.es/api/app.js.map +1 -0
  9. package/lib.es/api/common.d.ts +16 -0
  10. package/lib.es/api/common.js +17 -0
  11. package/lib.es/api/common.js.map +1 -0
  12. package/lib.es/api/state-dump.d.ts +36 -0
  13. package/lib.es/api/state-dump.js +2 -0
  14. package/lib.es/api/state-dump.js.map +1 -0
  15. package/lib.es/api/types.d.ts +39 -0
  16. package/lib.es/api/types.js +4 -0
  17. package/lib.es/api/types.js.map +1 -0
  18. package/lib.es/environments/launcher.d.ts +8 -0
  19. package/lib.es/environments/launcher.js +35 -0
  20. package/lib.es/environments/launcher.js.map +1 -0
  21. package/lib.es/index.d.ts +6 -0
  22. package/lib.es/index.js +7 -0
  23. package/lib.es/index.js.map +1 -0
  24. package/lib.es/types/capabilities.d.ts +30 -0
  25. package/lib.es/types/capabilities.js +2 -0
  26. package/lib.es/types/capabilities.js.map +1 -0
  27. package/lib.es/types/common.d.ts +22 -0
  28. package/lib.es/types/common.js +2 -0
  29. package/lib.es/types/common.js.map +1 -0
  30. package/lib.es/types/dht-ops.d.ts +45 -0
  31. package/lib.es/types/dht-ops.js +35 -0
  32. package/lib.es/types/dht-ops.js.map +1 -0
  33. package/lib.es/types/entry.d.ts +16 -0
  34. package/lib.es/types/entry.js +2 -0
  35. package/lib.es/types/entry.js.map +1 -0
  36. package/lib.es/types/header.d.ts +108 -0
  37. package/lib.es/types/header.js +14 -0
  38. package/lib.es/types/header.js.map +1 -0
  39. package/lib.es/types/index.d.ts +5 -0
  40. package/lib.es/types/index.js +6 -0
  41. package/lib.es/types/index.js.map +1 -0
  42. package/lib.es/websocket/admin.d.ts +47 -0
  43. package/lib.es/websocket/admin.js +104 -0
  44. package/lib.es/websocket/admin.js.map +1 -0
  45. package/lib.es/websocket/app.d.ts +13 -0
  46. package/lib.es/websocket/app.js +66 -0
  47. package/lib.es/websocket/app.js.map +1 -0
  48. package/lib.es/websocket/client.d.ts +25 -0
  49. package/lib.es/websocket/client.js +122 -0
  50. package/lib.es/websocket/client.js.map +1 -0
  51. package/lib.es/websocket/common.d.ts +3 -0
  52. package/lib.es/websocket/common.js +29 -0
  53. package/lib.es/websocket/common.js.map +1 -0
  54. package/package.json +6 -3
@@ -0,0 +1,35 @@
1
+ // https://github.com/holochain/holochain/blob/develop/crates/types/src/dht_op.rs
2
+ export var DhtOpType;
3
+ (function (DhtOpType) {
4
+ DhtOpType["StoreElement"] = "StoreElement";
5
+ DhtOpType["StoreEntry"] = "StoreEntry";
6
+ DhtOpType["RegisterAgentActivity"] = "RegisterAgentActivity";
7
+ DhtOpType["RegisterUpdatedContent"] = "RegisterUpdatedContent";
8
+ DhtOpType["RegisterUpdatedElement"] = "RegisterUpdatedElement";
9
+ DhtOpType["RegisterDeletedBy"] = "RegisterDeletedBy";
10
+ DhtOpType["RegisterDeletedEntryHeader"] = "RegisterDeletedEntryHeader";
11
+ DhtOpType["RegisterAddLink"] = "RegisterAddLink";
12
+ DhtOpType["RegisterRemoveLink"] = "RegisterRemoveLink";
13
+ })(DhtOpType || (DhtOpType = {}));
14
+ export function getDhtOpType(op) {
15
+ return Object.keys(op)[0];
16
+ }
17
+ export function getDhtOpHeader(op) {
18
+ const header = Object.values(op)[0][1];
19
+ if (header.author)
20
+ return header;
21
+ else {
22
+ const headerType = Object.keys(header)[0];
23
+ return {
24
+ type: headerType,
25
+ ...header[headerType],
26
+ };
27
+ }
28
+ }
29
+ export function getDhtOpEntry(op) {
30
+ return Object.values(op)[0][2];
31
+ }
32
+ export function getDhtOpSignature(op) {
33
+ return Object.values(op)[0][1];
34
+ }
35
+ //# sourceMappingURL=dht-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dht-ops.js","sourceRoot":"","sources":["../../src/types/dht-ops.ts"],"names":[],"mappings":"AAWA,iFAAiF;AAEjF,MAAM,CAAN,IAAY,SAUX;AAVD,WAAY,SAAS;IACnB,0CAA6B,CAAA;IAC7B,sCAAyB,CAAA;IACzB,4DAA+C,CAAA;IAC/C,8DAAiD,CAAA;IACjD,8DAAiD,CAAA;IACjD,oDAAuC,CAAA;IACvC,sEAAyD,CAAA;IACzD,gDAAmC,CAAA;IACnC,sDAAyC,CAAA;AAC3C,CAAC,EAVW,SAAS,KAAT,SAAS,QAUpB;AAyBD,MAAM,UAAU,YAAY,CAAC,EAAS;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAc,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAS;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtC,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,MAAM,CAAA;SAC3B;QACH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACzC,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,GAAG,MAAM,CAAC,UAAU,CAAC;SACtB,CAAA;KACF;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAS;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAS;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { CapClaim, ZomeCallCapGrant } from "./capabilities";
2
+ import { AgentPubKey } from "./common";
3
+ export declare type EntryVisibility = "Public" | "Private";
4
+ export declare type AppEntryType = {
5
+ id: number;
6
+ zome_id: number;
7
+ visibility: EntryVisibility;
8
+ };
9
+ export declare type EntryType = "Agent" | {
10
+ App: AppEntryType;
11
+ } | "CapClaim" | "CapGrant";
12
+ export interface EntryContent<E extends string, C> {
13
+ entry_type: E;
14
+ entry: C;
15
+ }
16
+ export declare type Entry = EntryContent<"Agent", AgentPubKey> | EntryContent<"App", any> | EntryContent<"CapGrant", ZomeCallCapGrant> | EntryContent<"CapClaim", CapClaim>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/types/entry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ import { AgentPubKey, DnaHash, EntryHash, HeaderHash, Signature } from "./common";
2
+ import { EntryType } from "./entry";
3
+ import { HoloHashed, Timestamp } from "./common";
4
+ export interface SignedHeaderHashed<H extends Header = Header> {
5
+ header: HoloHashed<H>;
6
+ signature: Signature;
7
+ }
8
+ export declare type HeaderHashed = HoloHashed<Header>;
9
+ export declare enum HeaderType {
10
+ Dna = "Dna",
11
+ AgentValidationPkg = "AgentValidationPkg",
12
+ InitZomesComplete = "InitZomesComplete",
13
+ CreateLink = "CreateLink",
14
+ DeleteLink = "DeleteLink",
15
+ OpenChain = "OpenChain",
16
+ CloseChain = "CloseChain",
17
+ Create = "Create",
18
+ Update = "Update",
19
+ Delete = "Delete"
20
+ }
21
+ export declare type Header = Dna | AgentValidationPkg | InitZomesComplete | CreateLink | DeleteLink | OpenChain | CloseChain | Delete | NewEntryHeader;
22
+ export declare type NewEntryHeader = Create | Update;
23
+ export interface Dna {
24
+ type: HeaderType.Dna;
25
+ author: AgentPubKey;
26
+ timestamp: Timestamp;
27
+ hash: DnaHash;
28
+ }
29
+ export interface AgentValidationPkg {
30
+ type: HeaderType.AgentValidationPkg;
31
+ author: AgentPubKey;
32
+ timestamp: Timestamp;
33
+ header_seq: number;
34
+ prev_header: HeaderHash;
35
+ membrane_proof: any;
36
+ }
37
+ export interface InitZomesComplete {
38
+ type: HeaderType.InitZomesComplete;
39
+ author: AgentPubKey;
40
+ timestamp: Timestamp;
41
+ header_seq: number;
42
+ prev_header: HeaderHash;
43
+ }
44
+ export interface CreateLink {
45
+ type: HeaderType.CreateLink;
46
+ author: AgentPubKey;
47
+ timestamp: Timestamp;
48
+ header_seq: number;
49
+ prev_header: HeaderHash;
50
+ base_address: EntryHash;
51
+ target_address: EntryHash;
52
+ zome_id: number;
53
+ tag: any;
54
+ }
55
+ export interface DeleteLink {
56
+ type: HeaderType.DeleteLink;
57
+ author: AgentPubKey;
58
+ timestamp: Timestamp;
59
+ header_seq: number;
60
+ prev_header: HeaderHash;
61
+ base_address: EntryHash;
62
+ link_add_address: HeaderHash;
63
+ }
64
+ export interface OpenChain {
65
+ type: HeaderType.OpenChain;
66
+ author: AgentPubKey;
67
+ timestamp: Timestamp;
68
+ header_seq: number;
69
+ prev_header: HeaderHash;
70
+ prev_dna_hash: DnaHash;
71
+ }
72
+ export interface CloseChain {
73
+ type: HeaderType.CloseChain;
74
+ author: AgentPubKey;
75
+ timestamp: Timestamp;
76
+ header_seq: number;
77
+ prev_header: HeaderHash;
78
+ new_dna_hash: DnaHash;
79
+ }
80
+ export interface Update {
81
+ type: HeaderType.Update;
82
+ author: AgentPubKey;
83
+ timestamp: Timestamp;
84
+ header_seq: number;
85
+ prev_header: HeaderHash;
86
+ original_header_address: HeaderHash;
87
+ original_entry_address: EntryHash;
88
+ entry_type: EntryType;
89
+ entry_hash: EntryHash;
90
+ }
91
+ export interface Delete {
92
+ type: HeaderType.Delete;
93
+ author: AgentPubKey;
94
+ timestamp: Timestamp;
95
+ header_seq: number;
96
+ prev_header: HeaderHash;
97
+ deletes_address: HeaderHash;
98
+ deletes_entry_address: EntryHash;
99
+ }
100
+ export interface Create {
101
+ type: HeaderType.Create;
102
+ author: AgentPubKey;
103
+ timestamp: Timestamp;
104
+ header_seq: number;
105
+ prev_header: HeaderHash;
106
+ entry_type: EntryType;
107
+ entry_hash: EntryHash;
108
+ }
@@ -0,0 +1,14 @@
1
+ export var HeaderType;
2
+ (function (HeaderType) {
3
+ HeaderType["Dna"] = "Dna";
4
+ HeaderType["AgentValidationPkg"] = "AgentValidationPkg";
5
+ HeaderType["InitZomesComplete"] = "InitZomesComplete";
6
+ HeaderType["CreateLink"] = "CreateLink";
7
+ HeaderType["DeleteLink"] = "DeleteLink";
8
+ HeaderType["OpenChain"] = "OpenChain";
9
+ HeaderType["CloseChain"] = "CloseChain";
10
+ HeaderType["Create"] = "Create";
11
+ HeaderType["Update"] = "Update";
12
+ HeaderType["Delete"] = "Delete";
13
+ })(HeaderType || (HeaderType = {}));
14
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/types/header.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAN,IAAY,UAWX;AAXD,WAAY,UAAU;IACpB,yBAAW,CAAA;IACX,uDAAyC,CAAA;IACzC,qDAAuC,CAAA;IACvC,uCAAyB,CAAA;IACzB,uCAAyB,CAAA;IACzB,qCAAuB,CAAA;IACvB,uCAAyB,CAAA;IACzB,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;AACnB,CAAC,EAXW,UAAU,KAAV,UAAU,QAWrB"}
@@ -0,0 +1,5 @@
1
+ export * from "./capabilities";
2
+ export * from "./common";
3
+ export * from "./dht-ops";
4
+ export * from "./entry";
5
+ export * from "./header";
@@ -0,0 +1,6 @@
1
+ export * from "./capabilities";
2
+ export * from "./common";
3
+ export * from "./dht-ops";
4
+ export * from "./entry";
5
+ export * from "./header";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Defines AdminWebsocket, an easy-to-use websocket implementation of the
3
+ * Conductor Admin API
4
+ *
5
+ * const client = AdminWebsocket.connect(
6
+ * 'ws://localhost:9000'
7
+ * )
8
+ *
9
+ * client.generateAgentPubKey()
10
+ * .then(agentPubKey => {
11
+ * console.log('Agent successfully generated:', agentPubKey)
12
+ * })
13
+ * .catch(err => {
14
+ * console.error('problem generating agent:', err)
15
+ * })
16
+ */
17
+ import * as Api from '../api/admin';
18
+ import { WsClient } from './client';
19
+ import { Transformer, Requester } from '../api/common';
20
+ export declare class AdminWebsocket implements Api.AdminApi {
21
+ client: WsClient;
22
+ defaultTimeout: number;
23
+ constructor(client: WsClient, defaultTimeout?: number);
24
+ static connect(url: string, defaultTimeout?: number): Promise<AdminWebsocket>;
25
+ _requester: <ReqO, ReqI, ResI, ResO>(tag: string, transformer?: Transformer<ReqO, ReqI, ResI, ResO> | undefined) => (req: ReqO, timeout?: number | undefined) => Promise<ResO>;
26
+ attachAppInterface: Requester<Api.AttachAppInterfaceRequest, Api.AttachAppInterfaceResponse>;
27
+ activateApp: Requester<Api.ActivateAppRequest, Api.ActivateAppResponse>;
28
+ deactivateApp: Requester<Api.DeactivateAppRequest, Api.DeactivateAppResponse>;
29
+ enableApp: Requester<Api.EnableAppRequest, Api.EnableAppResponse>;
30
+ disableApp: Requester<Api.DisableAppRequest, Api.DisableAppResponse>;
31
+ startApp: Requester<Api.StartAppRequest, Api.StartAppResponse>;
32
+ dumpState: Requester<Api.DumpStateRequest, Api.DumpStateResponse>;
33
+ dumpFullState: Requester<Api.DumpFullStateRequest, Api.DumpFullStateResponse>;
34
+ generateAgentPubKey: Requester<Api.GenerateAgentPubKeyRequest, Api.GenerateAgentPubKeyResponse>;
35
+ registerDna: Requester<Api.RegisterDnaRequest, Api.RegisterDnaResponse>;
36
+ installApp: Requester<Api.InstallAppRequest, Api.InstallAppResponse>;
37
+ uninstallApp: Requester<Api.UninstallAppRequest, Api.UninstallAppResponse>;
38
+ installAppBundle: Requester<Api.InstallAppBundleRequest, Api.InstallAppBundleResponse>;
39
+ createCloneCell: Requester<Api.CreateCloneCellRequest, Api.CreateCloneCellResponse>;
40
+ listDnas: Requester<Api.ListDnasRequest, Api.ListDnasResponse>;
41
+ listCellIds: Requester<Api.ListCellIdsRequest, Api.ListCellIdsResponse>;
42
+ listActiveApps: Requester<Api.ListActiveAppsRequest, Api.ListActiveAppsResponse>;
43
+ listApps: Requester<Api.ListAppsRequest, Api.ListAppsResponse>;
44
+ listAppInterfaces: Requester<Api.ListAppInterfacesRequest, Api.ListAppInterfacesResponse>;
45
+ requestAgentInfo: Requester<Api.RequestAgentInfoRequest, Api.RequestAgentInfoResponse>;
46
+ addAgentInfo: Requester<Api.AddAgentInfoRequest, Api.AddAgentInfoResponse>;
47
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Defines AdminWebsocket, an easy-to-use websocket implementation of the
3
+ * Conductor Admin API
4
+ *
5
+ * const client = AdminWebsocket.connect(
6
+ * 'ws://localhost:9000'
7
+ * )
8
+ *
9
+ * client.generateAgentPubKey()
10
+ * .then(agentPubKey => {
11
+ * console.log('Agent successfully generated:', agentPubKey)
12
+ * })
13
+ * .catch(err => {
14
+ * console.error('problem generating agent:', err)
15
+ * })
16
+ */
17
+ import * as Api from '../api/admin';
18
+ import { WsClient } from './client';
19
+ import { catchError, promiseTimeout, DEFAULT_TIMEOUT } from './common';
20
+ import { requesterTransformer } from '../api/common';
21
+ import { getLauncherEnvironment } from '../environments/launcher';
22
+ export class AdminWebsocket {
23
+ constructor(client, defaultTimeout) {
24
+ this._requester = (tag, transformer) => requesterTransformer((req, timeout) => promiseTimeout(this.client.request(req), tag, timeout || this.defaultTimeout).then(catchError), tag, transformer);
25
+ // the specific request/response types come from the Interface
26
+ // which this class implements
27
+ this.attachAppInterface = this._requester('attach_app_interface');
28
+ // Deprecated
29
+ this.activateApp = this._requester('activate_app');
30
+ // Deprecated
31
+ this.deactivateApp = this._requester('deactivate_app');
32
+ this.enableApp = this._requester('enable_app');
33
+ this.disableApp = this._requester('disable_app');
34
+ this.startApp = this._requester('start_app');
35
+ this.dumpState = this._requester('dump_state', dumpStateTransform);
36
+ this.dumpFullState = this._requester('dump_full_state');
37
+ this.generateAgentPubKey = this._requester('generate_agent_pub_key');
38
+ this.registerDna = this._requester('register_dna');
39
+ this.installApp = this._requester('install_app');
40
+ this.uninstallApp = this._requester('uninstall_app');
41
+ this.installAppBundle = this._requester('install_app_bundle');
42
+ this.createCloneCell = this._requester('create_clone_cell');
43
+ this.listDnas = this._requester('list_dnas');
44
+ this.listCellIds = this._requester('list_cell_ids');
45
+ // Deprecated
46
+ this.listActiveApps = this._requester('list_active_apps');
47
+ this.listApps = this._requester('list_apps', listAppsTransform);
48
+ this.listAppInterfaces = this._requester('list_app_interfaces');
49
+ this.requestAgentInfo = this._requester('request_agent_info');
50
+ this.addAgentInfo = this._requester('add_agent_info');
51
+ this.client = client;
52
+ this.defaultTimeout = defaultTimeout === undefined ? DEFAULT_TIMEOUT : defaultTimeout;
53
+ }
54
+ static async connect(url, defaultTimeout) {
55
+ // Check if we are in the launcher's environment, and if so, redirect the url to connect to
56
+ const env = await getLauncherEnvironment();
57
+ if (env) {
58
+ url = `ws://localhost:${env.ADMIN_INTERFACE_PORT}`;
59
+ }
60
+ const wsClient = await WsClient.connect(url);
61
+ return new AdminWebsocket(wsClient, defaultTimeout);
62
+ }
63
+ }
64
+ const listAppsTransform = {
65
+ input: (req) => {
66
+ const args = {};
67
+ if (req.status_filter) {
68
+ args.status_filter = getAppStatusInApiForm(req.status_filter);
69
+ }
70
+ return args;
71
+ },
72
+ output: (res) => res,
73
+ };
74
+ const dumpStateTransform = {
75
+ input: (req) => req,
76
+ output: (res) => {
77
+ return JSON.parse(res);
78
+ },
79
+ };
80
+ function getAppStatusInApiForm(status_filter) {
81
+ switch (status_filter) {
82
+ case Api.AppStatusFilter.Running:
83
+ return {
84
+ Running: null,
85
+ };
86
+ case Api.AppStatusFilter.Enabled:
87
+ return {
88
+ Enabled: null,
89
+ };
90
+ case Api.AppStatusFilter.Paused:
91
+ return {
92
+ Paused: null,
93
+ };
94
+ case Api.AppStatusFilter.Disabled:
95
+ return {
96
+ Disabled: null,
97
+ };
98
+ case Api.AppStatusFilter.Stopped:
99
+ return {
100
+ Stopped: null,
101
+ };
102
+ }
103
+ }
104
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/websocket/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { AppApi, AppInfoRequest, AppInfoResponse, CallZomeRequestGeneric, CallZomeResponseGeneric, AppSignalCb } from '../api/app';
2
+ import { WsClient } from './client';
3
+ import { Transformer, Requester } from '../api/common';
4
+ export declare class AppWebsocket implements AppApi {
5
+ protected overrideInstalledAppId?: string | undefined;
6
+ client: WsClient;
7
+ defaultTimeout: number;
8
+ constructor(client: WsClient, defaultTimeout?: number, overrideInstalledAppId?: string | undefined);
9
+ static connect(url: string, defaultTimeout?: number, signalCb?: AppSignalCb): Promise<AppWebsocket>;
10
+ _requester: <ReqO, ReqI, ResI, ResO>(tag: string, transformer?: Transformer<ReqO, ReqI, ResI, ResO> | undefined) => (req: ReqO, timeout?: number | undefined) => Promise<ResO>;
11
+ appInfo: Requester<AppInfoRequest, AppInfoResponse>;
12
+ callZome: Requester<CallZomeRequestGeneric<any>, CallZomeResponseGeneric<any>>;
13
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Defines AppWebsocket, an easy-to-use websocket implementation of the
3
+ * Conductor API for apps
4
+ *
5
+ * const client = AppWebsocket.connect(
6
+ * 'ws://localhost:9000',
7
+ * signal => console.log('got a signal:', signal)
8
+ * )
9
+ *
10
+ * client.callZome({...}) // TODO: show what's in here
11
+ * .then(() => {
12
+ * console.log('DNA successfully installed')
13
+ * })
14
+ * .catch(err => {
15
+ * console.error('problem installing DNA:', err)
16
+ * })
17
+ */
18
+ import { encode, decode } from '@msgpack/msgpack';
19
+ import { WsClient } from './client';
20
+ import { catchError, promiseTimeout, DEFAULT_TIMEOUT } from './common';
21
+ import { requesterTransformer } from '../api/common';
22
+ import { getLauncherEnvironment } from '../environments/launcher';
23
+ export class AppWebsocket {
24
+ constructor(client, defaultTimeout, overrideInstalledAppId) {
25
+ this.overrideInstalledAppId = overrideInstalledAppId;
26
+ this._requester = (tag, transformer) => requesterTransformer((req, timeout) => promiseTimeout(this.client.request(req), tag, timeout || this.defaultTimeout).then(catchError), tag, transformer);
27
+ this.appInfo = this._requester('app_info', appInfoTransform(this.overrideInstalledAppId));
28
+ this.callZome = this._requester('zome_call', callZomeTransform);
29
+ this.client = client;
30
+ this.defaultTimeout = defaultTimeout === undefined ? DEFAULT_TIMEOUT : defaultTimeout;
31
+ }
32
+ static async connect(url, defaultTimeout, signalCb) {
33
+ // Check if we are in the launcher's environment, and if so, redirect the url to connect to
34
+ const env = await getLauncherEnvironment();
35
+ if (env) {
36
+ url = `ws://localhost:${env.APP_INTERFACE_PORT}`;
37
+ }
38
+ const wsClient = await WsClient.connect(url, signalCb);
39
+ return new AppWebsocket(wsClient, defaultTimeout, env ? env.INSTALLED_APP_ID : undefined);
40
+ }
41
+ }
42
+ const callZomeTransform = {
43
+ input: (req) => {
44
+ return {
45
+ ...req,
46
+ payload: encode(req.payload),
47
+ };
48
+ },
49
+ output: (res) => {
50
+ return decode(res);
51
+ },
52
+ };
53
+ const appInfoTransform = (overrideInstalledAppId) => ({
54
+ input: (req) => {
55
+ if (overrideInstalledAppId) {
56
+ return {
57
+ installed_app_id: overrideInstalledAppId,
58
+ };
59
+ }
60
+ return req;
61
+ },
62
+ output: (res) => {
63
+ return res;
64
+ },
65
+ });
66
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/websocket/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGjD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAe,oBAAoB,EAAa,MAAM,eAAe,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,MAAM,OAAO,YAAY;IAIvB,YAAY,MAAgB,EAAE,cAAuB,EAAY,sBAAuC;QAAvC,2BAAsB,GAAtB,sBAAsB,CAAiB;QAiBxG,eAAU,GAAG,CAAyB,GAAW,EAAE,WAAiD,EAAE,EAAE,CACtG,oBAAoB,CAClB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAChH,GAAG,EACH,WAAW,CACZ,CAAA;QAEH,YAAO,GACH,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAC9E,aAAQ,GACJ,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAA;QA1BjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,cAAc,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAA;IACvF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,cAAuB,EAAE,QAAsB;QAC/E,2FAA2F;QAC3F,MAAM,GAAG,GAAG,MAAM,sBAAsB,EAAE,CAAA;QAE1C,IAAI,GAAG,EAAE;YACP,GAAG,GAAG,kBAAkB,GAAG,CAAC,kBAAkB,EAAE,CAAA;SACjD;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACtD,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC3F,CAAC;CAaF;AAED,MAAM,iBAAiB,GAAoJ;IACzK,KAAK,EAAE,CAAC,GAAgC,EAAsC,EAAE;QAC9E,OAAO;YACL,GAAG,GAAG;YACN,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;SAC7B,CAAA;IACH,CAAC;IACD,MAAM,EAAE,CAAC,GAAwC,EAAgC,EAAE;QACjF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;CACF,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,sBAAuC,EAAiF,EAAE,CAAC,CAAC;IACpJ,KAAK,EAAE,CAAC,GAAmB,EAAkB,EAAE;QAC7C,IAAI,sBAAsB,EAAE;YAC1B,OAAO;gBACL,gBAAgB,EAAE,sBAAsB;aACzC,CAAA;SACF;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,EAAE,CAAC,GAAoB,EAAmB,EAAE;QAChD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,25 @@
1
+ import Websocket from "isomorphic-ws";
2
+ import { decode } from "@msgpack/msgpack";
3
+ import { AppSignalCb } from "../api/app";
4
+ /**
5
+ * A Websocket client which can make requests and receive responses,
6
+ * as well as send and receive signals
7
+ *
8
+ * Uses Holochain's websocket WireMessage for communication.
9
+ */
10
+ export declare class WsClient {
11
+ socket: Websocket;
12
+ pendingRequests: Record<number, {
13
+ fulfill: (msg: unknown) => ReturnType<typeof decode>;
14
+ reject: (error: Error) => void;
15
+ }>;
16
+ index: number;
17
+ alreadyWarnedNoSignalCb: boolean;
18
+ constructor(socket: any, signalCb?: AppSignalCb);
19
+ emitSignal(data: any): void;
20
+ request<Req, Res>(data: Req): Promise<Res>;
21
+ handleResponse(msg: any): void;
22
+ close(): Promise<void>;
23
+ awaitClose(): Promise<void>;
24
+ static connect(url: string, signalCb?: AppSignalCb): Promise<WsClient>;
25
+ }
@@ -0,0 +1,122 @@
1
+ import Websocket from "isomorphic-ws";
2
+ import { encode, decode } from "@msgpack/msgpack";
3
+ /**
4
+ * A Websocket client which can make requests and receive responses,
5
+ * as well as send and receive signals
6
+ *
7
+ * Uses Holochain's websocket WireMessage for communication.
8
+ */
9
+ export class WsClient {
10
+ constructor(socket, signalCb) {
11
+ this.socket = socket;
12
+ this.pendingRequests = {};
13
+ this.index = 0;
14
+ // TODO: allow adding signal handlers later
15
+ this.alreadyWarnedNoSignalCb = false;
16
+ socket.onmessage = async (encodedMsg) => {
17
+ let data = encodedMsg.data;
18
+ // If data is not a buffer (nodejs), it will be a blob (browser)
19
+ if (typeof Buffer === "undefined" || !Buffer.isBuffer(data)) {
20
+ data = await data.arrayBuffer();
21
+ }
22
+ const msg = decode(data);
23
+ if (msg.type === "Signal") {
24
+ if (signalCb) {
25
+ const decodedMessage = decode(msg.data);
26
+ if (!decodedMessage.App) {
27
+ // We have received a system signal, do nothing
28
+ return;
29
+ }
30
+ // Note: holochain currently returns signals as an array of two values: cellId and the serialized signal payload
31
+ // and this array is nested within the App key within the returned message.
32
+ const decodedCellId = decodedMessage.App[0];
33
+ // Note:In order to return readible content to the UI, the signal payload must also be decoded.
34
+ const decodedPayload = signalTransform(decodedMessage.App[1]);
35
+ // Return a uniform format to UI (ie: { type, data } - the same format as with callZome and appInfo...)
36
+ const signal = {
37
+ type: msg.type,
38
+ data: { cellId: decodedCellId, payload: decodedPayload },
39
+ };
40
+ signalCb(signal);
41
+ }
42
+ else {
43
+ if (!this.alreadyWarnedNoSignalCb)
44
+ console.log('Received signal but no signal callback was set in constructor');
45
+ this.alreadyWarnedNoSignalCb = true;
46
+ }
47
+ }
48
+ else if (msg.type === 'Response') {
49
+ this.handleResponse(msg);
50
+ }
51
+ else {
52
+ console.error(`Got unrecognized Websocket message type: ${msg.type}`);
53
+ }
54
+ };
55
+ }
56
+ emitSignal(data) {
57
+ const encodedMsg = encode({
58
+ type: 'Signal',
59
+ data: encode(data),
60
+ });
61
+ this.socket.send(encodedMsg);
62
+ }
63
+ request(data) {
64
+ const id = this.index;
65
+ this.index += 1;
66
+ const encodedMsg = encode({
67
+ id,
68
+ type: 'Request',
69
+ data: encode(data),
70
+ });
71
+ const promise = new Promise((fulfill, reject) => {
72
+ this.pendingRequests[id] = { fulfill, reject };
73
+ });
74
+ if (this.socket.readyState === this.socket.OPEN) {
75
+ this.socket.send(encodedMsg);
76
+ }
77
+ else {
78
+ return Promise.reject(new Error('Socket is not open'));
79
+ }
80
+ return promise;
81
+ }
82
+ handleResponse(msg) {
83
+ const id = msg.id;
84
+ if (this.pendingRequests[id]) {
85
+ // resolve response
86
+ if (msg.data === null || msg.data === undefined) {
87
+ this.pendingRequests[id].reject(new Error('Response canceled by responder'));
88
+ }
89
+ else {
90
+ this.pendingRequests[id].fulfill(decode(msg.data));
91
+ }
92
+ }
93
+ else {
94
+ console.error(`Got response with no matching request. id=${id}`);
95
+ }
96
+ }
97
+ close() {
98
+ this.socket.close();
99
+ return this.awaitClose();
100
+ }
101
+ awaitClose() {
102
+ return new Promise((resolve) => this.socket.on('close', resolve));
103
+ }
104
+ static connect(url, signalCb) {
105
+ return new Promise((resolve, reject) => {
106
+ const socket = new Websocket(url);
107
+ // make sure that there are no uncaught connection
108
+ // errors because that causes nodejs thread to crash
109
+ // with uncaught exception
110
+ socket.onerror = () => {
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
+ });
117
+ }
118
+ }
119
+ const signalTransform = (res) => {
120
+ return decode(res);
121
+ };
122
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/websocket/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const DEFAULT_TIMEOUT = 15000;
2
+ export declare const catchError: (res: any) => Promise<any>;
3
+ export declare const promiseTimeout: (promise: Promise<any>, tag: string, ms: number) => Promise<unknown>;
@@ -0,0 +1,29 @@
1
+ const ERROR_TYPE = 'error';
2
+ export const DEFAULT_TIMEOUT = 15000;
3
+ export const catchError = (res) => {
4
+ return res.type === ERROR_TYPE
5
+ ? Promise.reject(res)
6
+ : Promise.resolve(res);
7
+ };
8
+ export const promiseTimeout = (promise, tag, ms) => {
9
+ let id;
10
+ const timeout = new Promise((_, reject) => {
11
+ id = setTimeout(() => {
12
+ clearTimeout(id);
13
+ reject(new Error(`Timed out in ${ms}ms: ${tag}`));
14
+ }, ms);
15
+ });
16
+ return new Promise((res, rej) => {
17
+ Promise.race([
18
+ promise,
19
+ timeout
20
+ ]).then((a) => {
21
+ clearTimeout(id);
22
+ return res(a);
23
+ })
24
+ .catch(e => {
25
+ return rej(e);
26
+ });
27
+ });
28
+ };
29
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/websocket/common.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,OAAO,CAAA;AAC1B,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAA;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE;IACrC,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;QAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QACrB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAqB,EAAE,GAAW,EAAE,EAAU,EAAE,EAAE;IAC/E,IAAI,EAAkB,CAAA;IAEtB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACxC,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;YACnB,YAAY,CAAC,EAAE,CAAC,CAAA;YAChB,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC,CAAA;QACnD,CAAC,EAAE,EAAE,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9B,OAAO,CAAC,IAAI,CAAC;YACX,OAAO;YACP,OAAO;SACR,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACZ,YAAY,CAAC,EAAE,CAAC,CAAA;YAChB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;QACf,CAAC,CAAC;aACC,KAAK,CAAC,CAAC,CAAC,EAAE;YACT,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}