@holochain/client 0.3.2 → 0.4.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.
- package/README.md +9 -9
- package/lib/api/admin/index.d.ts +2 -0
- package/lib/api/admin/index.js +3 -0
- package/lib/api/admin/index.js.map +1 -0
- package/{lib.es/api/admin.d.ts → lib/api/admin/types.d.ts} +71 -4
- package/{lib.es/api/admin.js → lib/api/admin/types.js} +1 -1
- package/lib/api/admin/types.js.map +1 -0
- package/lib/{websocket/admin.d.ts → api/admin/websocket.d.ts} +3 -3
- package/lib/api/admin/websocket.js +107 -0
- package/lib/api/admin/websocket.js.map +1 -0
- package/lib/api/app/index.d.ts +2 -0
- package/lib/api/app/index.js +3 -0
- package/lib/api/app/index.js.map +1 -0
- package/lib/api/{app.d.ts → app/types.d.ts} +4 -4
- package/lib/api/app/types.js +2 -0
- package/lib/api/app/types.js.map +1 -0
- package/{lib.es/websocket/app.d.ts → lib/api/app/websocket.d.ts} +6 -5
- package/{lib.es/websocket/app.js → lib/api/app/websocket.js} +14 -11
- package/lib/api/app/websocket.js.map +1 -0
- package/lib/{websocket → api}/client.d.ts +2 -2
- package/{lib.es/websocket → lib/api}/client.js +12 -8
- package/lib/api/client.js.map +1 -0
- package/lib/api/common.d.ts +9 -6
- package/lib/api/common.js +26 -6
- package/lib/api/common.js.map +1 -1
- package/lib/api/index.d.ts +2 -0
- package/lib/api/index.js +3 -0
- package/lib/api/index.js.map +1 -0
- package/lib/bundle.d.ts +6 -0
- package/lib/bundle.js +32 -0
- package/lib/bundle.js.map +1 -0
- package/lib/environments/launcher.d.ts +1 -1
- package/lib/environments/launcher.js +7 -12
- package/lib/environments/launcher.js.map +1 -1
- package/{lib.es/types → lib/hdk}/capabilities.d.ts +1 -1
- package/{lib.es/types → lib/hdk}/capabilities.js +0 -0
- package/{lib.es/types → lib/hdk}/capabilities.js.map +1 -1
- package/lib/{types → hdk}/dht-ops.d.ts +3 -3
- package/{lib.es/types → lib/hdk}/dht-ops.js +0 -0
- package/lib/hdk/dht-ops.js.map +1 -0
- package/lib/{types → hdk}/entry.d.ts +2 -2
- package/{lib.es/types → lib/hdk}/entry.js +0 -0
- package/{lib.es/types → lib/hdk}/entry.js.map +1 -1
- package/{lib.es/types → lib/hdk}/header.d.ts +2 -3
- package/{lib.es/types → lib/hdk}/header.js +0 -0
- package/lib/hdk/header.js.map +1 -0
- package/lib/hdk/index.d.ts +4 -0
- package/lib/hdk/index.js +5 -0
- package/lib/hdk/index.js.map +1 -0
- package/lib/index.d.ts +4 -6
- package/lib/index.js +4 -18
- package/lib/index.js.map +1 -1
- package/{lib.es/types/common.d.ts → lib/types.d.ts} +0 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/package.json +29 -24
- package/lib/api/admin.d.ts +0 -224
- package/lib/api/admin.js +0 -12
- package/lib/api/admin.js.map +0 -1
- package/lib/api/app.js +0 -3
- package/lib/api/app.js.map +0 -1
- package/lib/api/state-dump.d.ts +0 -36
- package/lib/api/state-dump.js +0 -3
- package/lib/api/state-dump.js.map +0 -1
- package/lib/api/types.d.ts +0 -39
- package/lib/api/types.js +0 -8
- package/lib/api/types.js.map +0 -1
- package/lib/types/capabilities.d.ts +0 -30
- package/lib/types/capabilities.js +0 -3
- package/lib/types/capabilities.js.map +0 -1
- package/lib/types/common.d.ts +0 -22
- package/lib/types/common.js +0 -3
- package/lib/types/common.js.map +0 -1
- package/lib/types/dht-ops.js +0 -42
- package/lib/types/dht-ops.js.map +0 -1
- package/lib/types/entry.js +0 -3
- package/lib/types/entry.js.map +0 -1
- package/lib/types/header.d.ts +0 -108
- package/lib/types/header.js +0 -17
- package/lib/types/header.js.map +0 -1
- package/lib/types/index.d.ts +0 -5
- package/lib/types/index.js +0 -18
- package/lib/types/index.js.map +0 -1
- package/lib/websocket/admin.js +0 -127
- package/lib/websocket/admin.js.map +0 -1
- package/lib/websocket/app.d.ts +0 -13
- package/lib/websocket/app.js +0 -70
- package/lib/websocket/app.js.map +0 -1
- package/lib/websocket/client.js +0 -129
- package/lib/websocket/client.js.map +0 -1
- package/lib/websocket/common.d.ts +0 -3
- package/lib/websocket/common.js +0 -34
- package/lib/websocket/common.js.map +0 -1
- package/lib.es/api/admin.js.map +0 -1
- package/lib.es/api/app.d.ts +0 -32
- package/lib.es/api/app.js +0 -2
- package/lib.es/api/app.js.map +0 -1
- package/lib.es/api/common.d.ts +0 -16
- package/lib.es/api/common.js +0 -17
- package/lib.es/api/common.js.map +0 -1
- package/lib.es/api/state-dump.d.ts +0 -36
- package/lib.es/api/state-dump.js +0 -2
- package/lib.es/api/state-dump.js.map +0 -1
- package/lib.es/api/types.d.ts +0 -39
- package/lib.es/api/types.js +0 -4
- package/lib.es/api/types.js.map +0 -1
- package/lib.es/environments/launcher.d.ts +0 -8
- package/lib.es/environments/launcher.js +0 -35
- package/lib.es/environments/launcher.js.map +0 -1
- package/lib.es/index.d.ts +0 -6
- package/lib.es/index.js +0 -7
- package/lib.es/index.js.map +0 -1
- package/lib.es/types/common.js +0 -2
- package/lib.es/types/common.js.map +0 -1
- package/lib.es/types/dht-ops.d.ts +0 -45
- package/lib.es/types/dht-ops.js.map +0 -1
- package/lib.es/types/entry.d.ts +0 -16
- package/lib.es/types/header.js.map +0 -1
- package/lib.es/types/index.d.ts +0 -5
- package/lib.es/types/index.js +0 -6
- package/lib.es/types/index.js.map +0 -1
- package/lib.es/websocket/admin.d.ts +0 -47
- package/lib.es/websocket/admin.js +0 -104
- package/lib.es/websocket/admin.js.map +0 -1
- package/lib.es/websocket/app.js.map +0 -1
- package/lib.es/websocket/client.d.ts +0 -25
- package/lib.es/websocket/client.js.map +0 -1
- package/lib.es/websocket/common.d.ts +0 -3
- package/lib.es/websocket/common.js +0 -29
- package/lib.es/websocket/common.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
# Holochain Client - JavaScript
|
|
2
|
-
|
|
3
1
|
[](http://holochain.org/)
|
|
4
2
|
[](https://forum.holochain.org)
|
|
5
3
|
[](https://github.com/holochain/cryptographic-autonomy-license)
|
|
6
4
|

|
|
7
|
-
|
|
8
5
|
[](https://twitter.com/holochain)
|
|
9
6
|
|
|
10
|
-
|
|
7
|
+
# Holochain Client - JavaScript
|
|
8
|
+
|
|
9
|
+
A JavaScript client for the Holochain Conductor API (works with browsers as well as Nodejs).
|
|
11
10
|
|
|
12
11
|
> Holochain's Conductor API is under active development. This client package tracks that development fairly closely but sometimes gets behind.
|
|
13
12
|
|
|
@@ -57,11 +56,10 @@ See [docs/API.md](docs/API.md)
|
|
|
57
56
|
|
|
58
57
|
# Holochain Compatibility
|
|
59
58
|
|
|
60
|
-
|
|
61
|
-
- `holochain/holochain` at tag [holochain-0.0.122](https://github.com/holochain/holochain/tree/holochain-0.0.122)
|
|
62
|
-
- hdk version [0.0.118 from crates.io](https://crates.io/crates/hdk/0.0.118)
|
|
59
|
+
See [default.nix](./default.nix) for the Holochain version this package is compatible with.
|
|
63
60
|
|
|
64
|
-
If updating
|
|
61
|
+
If updating the Holochain version included in holonix, please use `niv update` as explained in the
|
|
62
|
+
[Holochain Installation Guide](https://developer.holochain.org/install/#upgrading-the-holochain-version).
|
|
65
63
|
|
|
66
64
|
## Running tests
|
|
67
65
|
|
|
@@ -76,14 +74,16 @@ nix-shell
|
|
|
76
74
|
```
|
|
77
75
|
|
|
78
76
|
## Contribute
|
|
77
|
+
|
|
79
78
|
Holochain is an open source project. We welcome all sorts of participation and are actively working on increasing surface area to accept it. Please see our [contribution guidelines](/CONTRIBUTING.md) for our general practices and protocols on participating in the community, as well as specific expectations around things like code formatting, testing practices, continuous integration, etc.
|
|
80
79
|
|
|
81
80
|
* Connect with us on our [forum](https://forum.holochain.org)
|
|
82
81
|
|
|
83
82
|
## License
|
|
83
|
+
|
|
84
84
|
[](https://github.com/holochain/cryptographic-autonomy-license)
|
|
85
85
|
|
|
86
|
-
Copyright (C) 2020-
|
|
86
|
+
Copyright (C) 2020-2022, Holochain Foundation
|
|
87
87
|
|
|
88
88
|
This program is free software: you can redistribute it and/or modify it under the terms of the license
|
|
89
89
|
provided in the LICENSE file (CAL-1.0). This program is distributed in the hope that it will be useful,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { FullStateDump } from "./state-dump";
|
|
2
|
+
import { AgentPubKey, CellId, DnaHash, DnaProperties, HeaderHash, HoloHash, InstalledAppId, InstalledCell, KitsuneAgent, KitsuneSpace, RoleId, Signature } from "../../types.js";
|
|
3
|
+
import { DhtOp, Entry, Header } from "../../hdk/index.js";
|
|
4
|
+
import { Requester } from "../common.js";
|
|
6
5
|
export declare type AttachAppInterfaceRequest = {
|
|
7
6
|
port: number;
|
|
8
7
|
};
|
|
@@ -22,6 +21,42 @@ export declare type EnableAppResponse = {
|
|
|
22
21
|
app: InstalledAppInfo;
|
|
23
22
|
errors: Array<[CellId, string]>;
|
|
24
23
|
};
|
|
24
|
+
export declare type DeactivationReason = {
|
|
25
|
+
never_activated: null;
|
|
26
|
+
} | {
|
|
27
|
+
normal: null;
|
|
28
|
+
} | {
|
|
29
|
+
quarantined: {
|
|
30
|
+
error: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export declare type PausedAppReason = {
|
|
34
|
+
error: string;
|
|
35
|
+
};
|
|
36
|
+
export declare type DisabledAppReason = {
|
|
37
|
+
never_started: null;
|
|
38
|
+
} | {
|
|
39
|
+
user: null;
|
|
40
|
+
} | {
|
|
41
|
+
error: string;
|
|
42
|
+
};
|
|
43
|
+
export declare type InstalledAppInfoStatus = {
|
|
44
|
+
paused: {
|
|
45
|
+
reason: PausedAppReason;
|
|
46
|
+
};
|
|
47
|
+
} | {
|
|
48
|
+
disabled: {
|
|
49
|
+
reason: DisabledAppReason;
|
|
50
|
+
};
|
|
51
|
+
} | {
|
|
52
|
+
running: null;
|
|
53
|
+
};
|
|
54
|
+
export declare type InstalledAppInfo = {
|
|
55
|
+
installed_app_id: InstalledAppId;
|
|
56
|
+
cell_data: Array<InstalledCell>;
|
|
57
|
+
status: InstalledAppInfoStatus;
|
|
58
|
+
};
|
|
59
|
+
export declare type MembraneProof = Buffer;
|
|
25
60
|
export declare type DisableAppRequest = {
|
|
26
61
|
installed_app_id: InstalledAppId;
|
|
27
62
|
};
|
|
@@ -222,3 +257,35 @@ export declare type Zomes = Array<[string, {
|
|
|
222
257
|
export declare type WasmCode = [HoloHash, {
|
|
223
258
|
code: Array<number>;
|
|
224
259
|
}];
|
|
260
|
+
export interface AgentInfoDump {
|
|
261
|
+
kitsune_agent: KitsuneAgent;
|
|
262
|
+
kitsune_space: KitsuneSpace;
|
|
263
|
+
dump: string;
|
|
264
|
+
}
|
|
265
|
+
export interface P2pAgentsDump {
|
|
266
|
+
this_agent_info: AgentInfoDump | undefined;
|
|
267
|
+
this_dna: [DnaHash, KitsuneSpace] | undefined;
|
|
268
|
+
this_agent: [AgentPubKey, KitsuneAgent] | undefined;
|
|
269
|
+
peers: Array<AgentInfoDump>;
|
|
270
|
+
}
|
|
271
|
+
export interface FullIntegrationStateDump {
|
|
272
|
+
validation_limbo: Array<DhtOp>;
|
|
273
|
+
integration_limbo: Array<DhtOp>;
|
|
274
|
+
integrated: Array<DhtOp>;
|
|
275
|
+
dht_ops_cursor: number;
|
|
276
|
+
}
|
|
277
|
+
export interface SourceChainJsonElement {
|
|
278
|
+
signature: Signature;
|
|
279
|
+
header_address: HeaderHash;
|
|
280
|
+
header: Header;
|
|
281
|
+
entry: Entry | undefined;
|
|
282
|
+
}
|
|
283
|
+
export interface SourceChainJsonDump {
|
|
284
|
+
elements: Array<SourceChainJsonElement>;
|
|
285
|
+
published_ops_count: number;
|
|
286
|
+
}
|
|
287
|
+
export interface FullStateDump {
|
|
288
|
+
peer_dump: P2pAgentsDump;
|
|
289
|
+
source_chain_dump: SourceChainJsonDump;
|
|
290
|
+
integration_dump: FullIntegrationStateDump;
|
|
291
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/admin/types.ts"],"names":[],"mappings":"AAgOA,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"}
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* console.error('problem generating agent:', err)
|
|
15
15
|
* })
|
|
16
16
|
*/
|
|
17
|
-
import * as Api from
|
|
18
|
-
import { WsClient } from
|
|
19
|
-
import { Transformer, Requester } from
|
|
17
|
+
import * as Api from "./types.js";
|
|
18
|
+
import { WsClient } from "../client.js";
|
|
19
|
+
import { Transformer, Requester } from "../common.js";
|
|
20
20
|
export declare class AdminWebsocket implements Api.AdminApi {
|
|
21
21
|
client: WsClient;
|
|
22
22
|
defaultTimeout: number;
|
|
@@ -0,0 +1,107 @@
|
|
|
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 "./types.js";
|
|
18
|
+
import { WsClient } from "../client.js";
|
|
19
|
+
import { catchError, promiseTimeout, DEFAULT_TIMEOUT } from "../common.js";
|
|
20
|
+
import { requesterTransformer } from "../common.js";
|
|
21
|
+
import { getLauncherEnvironment } from "../../environments/launcher.js";
|
|
22
|
+
export class AdminWebsocket {
|
|
23
|
+
client;
|
|
24
|
+
defaultTimeout;
|
|
25
|
+
constructor(client, defaultTimeout) {
|
|
26
|
+
this.client = client;
|
|
27
|
+
this.defaultTimeout =
|
|
28
|
+
defaultTimeout === undefined ? DEFAULT_TIMEOUT : defaultTimeout;
|
|
29
|
+
}
|
|
30
|
+
static async connect(url, defaultTimeout) {
|
|
31
|
+
// Check if we are in the launcher's environment, and if so, redirect the url to connect to
|
|
32
|
+
const env = await getLauncherEnvironment();
|
|
33
|
+
if (env) {
|
|
34
|
+
url = `ws://localhost:${env.ADMIN_INTERFACE_PORT}`;
|
|
35
|
+
}
|
|
36
|
+
const wsClient = await WsClient.connect(url);
|
|
37
|
+
return new AdminWebsocket(wsClient, defaultTimeout);
|
|
38
|
+
}
|
|
39
|
+
_requester = (tag, transformer) => requesterTransformer((req, timeout) => promiseTimeout(this.client.request(req), tag, timeout || this.defaultTimeout).then(catchError), tag, transformer);
|
|
40
|
+
// the specific request/response types come from the Interface
|
|
41
|
+
// which this class implements
|
|
42
|
+
attachAppInterface = this._requester("attach_app_interface");
|
|
43
|
+
// Deprecated
|
|
44
|
+
activateApp = this._requester("activate_app");
|
|
45
|
+
// Deprecated
|
|
46
|
+
deactivateApp = this._requester("deactivate_app");
|
|
47
|
+
enableApp = this._requester("enable_app");
|
|
48
|
+
disableApp = this._requester("disable_app");
|
|
49
|
+
startApp = this._requester("start_app");
|
|
50
|
+
dumpState = this._requester("dump_state", dumpStateTransform);
|
|
51
|
+
dumpFullState = this._requester("dump_full_state");
|
|
52
|
+
generateAgentPubKey = this._requester("generate_agent_pub_key");
|
|
53
|
+
registerDna = this._requester("register_dna");
|
|
54
|
+
installApp = this._requester("install_app");
|
|
55
|
+
uninstallApp = this._requester("uninstall_app");
|
|
56
|
+
installAppBundle = this._requester("install_app_bundle");
|
|
57
|
+
createCloneCell = this._requester("create_clone_cell");
|
|
58
|
+
listDnas = this._requester("list_dnas");
|
|
59
|
+
listCellIds = this._requester("list_cell_ids");
|
|
60
|
+
// Deprecated
|
|
61
|
+
listActiveApps = this._requester("list_active_apps");
|
|
62
|
+
listApps = this._requester("list_apps", listAppsTransform);
|
|
63
|
+
listAppInterfaces = this._requester("list_app_interfaces");
|
|
64
|
+
requestAgentInfo = this._requester("request_agent_info");
|
|
65
|
+
addAgentInfo = this._requester("add_agent_info");
|
|
66
|
+
}
|
|
67
|
+
const listAppsTransform = {
|
|
68
|
+
input: (req) => {
|
|
69
|
+
const args = {};
|
|
70
|
+
if (req.status_filter) {
|
|
71
|
+
args.status_filter = getAppStatusInApiForm(req.status_filter);
|
|
72
|
+
}
|
|
73
|
+
return args;
|
|
74
|
+
},
|
|
75
|
+
output: (res) => res,
|
|
76
|
+
};
|
|
77
|
+
const dumpStateTransform = {
|
|
78
|
+
input: (req) => req,
|
|
79
|
+
output: (res) => {
|
|
80
|
+
return JSON.parse(res);
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
function getAppStatusInApiForm(status_filter) {
|
|
84
|
+
switch (status_filter) {
|
|
85
|
+
case Api.AppStatusFilter.Running:
|
|
86
|
+
return {
|
|
87
|
+
Running: null,
|
|
88
|
+
};
|
|
89
|
+
case Api.AppStatusFilter.Enabled:
|
|
90
|
+
return {
|
|
91
|
+
Enabled: null,
|
|
92
|
+
};
|
|
93
|
+
case Api.AppStatusFilter.Paused:
|
|
94
|
+
return {
|
|
95
|
+
Paused: null,
|
|
96
|
+
};
|
|
97
|
+
case Api.AppStatusFilter.Disabled:
|
|
98
|
+
return {
|
|
99
|
+
Disabled: null,
|
|
100
|
+
};
|
|
101
|
+
case Api.AppStatusFilter.Stopped:
|
|
102
|
+
return {
|
|
103
|
+
Stopped: null,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/admin/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { CapSecret } from "../../hdk/capabilities.js";
|
|
2
|
+
import { AgentPubKey, CellId, InstalledAppId } from "../../types.js";
|
|
3
|
+
import { Requester } from "../common.js";
|
|
4
|
+
import { InstalledAppInfo } from "../admin/index.js";
|
|
5
5
|
export declare type CallZomeRequestGeneric<Payload> = {
|
|
6
6
|
cap_secret: CapSecret | null;
|
|
7
7
|
cell_id: CellId;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/app/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { WsClient } from
|
|
3
|
-
import {
|
|
1
|
+
import { InstalledAppId } from "../../types.js";
|
|
2
|
+
import { WsClient } from "../client.js";
|
|
3
|
+
import { Requester, Transformer } from "../common.js";
|
|
4
|
+
import { AppApi, AppInfoRequest, AppInfoResponse, AppSignalCb, CallZomeRequestGeneric, CallZomeResponseGeneric } from "./types.js";
|
|
4
5
|
export declare class AppWebsocket implements AppApi {
|
|
5
|
-
protected overrideInstalledAppId?: string | undefined;
|
|
6
6
|
client: WsClient;
|
|
7
7
|
defaultTimeout: number;
|
|
8
|
-
|
|
8
|
+
protected overrideInstalledAppId?: InstalledAppId;
|
|
9
|
+
constructor(client: WsClient, defaultTimeout?: number, overrideInstalledAppId?: InstalledAppId);
|
|
9
10
|
static connect(url: string, defaultTimeout?: number, signalCb?: AppSignalCb): Promise<AppWebsocket>;
|
|
10
11
|
_requester: <ReqO, ReqI, ResI, ResO>(tag: string, transformer?: Transformer<ReqO, ReqI, ResI, ResO> | undefined) => (req: ReqO, timeout?: number | undefined) => Promise<ResO>;
|
|
11
12
|
appInfo: Requester<AppInfoRequest, AppInfoResponse>;
|
|
@@ -15,19 +15,19 @@
|
|
|
15
15
|
* console.error('problem installing DNA:', err)
|
|
16
16
|
* })
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { requesterTransformer } from
|
|
22
|
-
import { getLauncherEnvironment } from '../environments/launcher';
|
|
18
|
+
import { decode, encode } from "@msgpack/msgpack";
|
|
19
|
+
import { getLauncherEnvironment } from "../../environments/launcher.js";
|
|
20
|
+
import { WsClient } from "../client.js";
|
|
21
|
+
import { catchError, DEFAULT_TIMEOUT, promiseTimeout, requesterTransformer, } from "../common.js";
|
|
23
22
|
export class AppWebsocket {
|
|
23
|
+
client;
|
|
24
|
+
defaultTimeout;
|
|
25
|
+
overrideInstalledAppId;
|
|
24
26
|
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
27
|
this.client = client;
|
|
30
|
-
this.defaultTimeout =
|
|
28
|
+
this.defaultTimeout =
|
|
29
|
+
defaultTimeout === undefined ? DEFAULT_TIMEOUT : defaultTimeout;
|
|
30
|
+
this.overrideInstalledAppId = overrideInstalledAppId;
|
|
31
31
|
}
|
|
32
32
|
static async connect(url, defaultTimeout, signalCb) {
|
|
33
33
|
// Check if we are in the launcher's environment, and if so, redirect the url to connect to
|
|
@@ -38,6 +38,9 @@ export class AppWebsocket {
|
|
|
38
38
|
const wsClient = await WsClient.connect(url, signalCb);
|
|
39
39
|
return new AppWebsocket(wsClient, defaultTimeout, env ? env.INSTALLED_APP_ID : undefined);
|
|
40
40
|
}
|
|
41
|
+
_requester = (tag, transformer) => requesterTransformer((req, timeout) => promiseTimeout(this.client.request(req), tag, timeout || this.defaultTimeout).then(catchError), tag, transformer);
|
|
42
|
+
appInfo = this._requester("app_info", appInfoTransform(this.overrideInstalledAppId));
|
|
43
|
+
callZome = this._requester("zome_call", callZomeTransform);
|
|
41
44
|
}
|
|
42
45
|
const callZomeTransform = {
|
|
43
46
|
input: (req) => {
|
|
@@ -63,4 +66,4 @@ const appInfoTransform = (overrideInstalledAppId) => ({
|
|
|
63
66
|
return res;
|
|
64
67
|
},
|
|
65
68
|
});
|
|
66
|
-
//# sourceMappingURL=
|
|
69
|
+
//# sourceMappingURL=websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/app/websocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,UAAU,EACV,eAAe,EACf,cAAc,EAEd,oBAAoB,GAErB,MAAM,cAAc,CAAC;AAUtB,MAAM,OAAO,YAAY;IACvB,MAAM,CAAW;IACjB,cAAc,CAAS;IACb,sBAAsB,CAAkB;IAElD,YACE,MAAgB,EAChB,cAAuB,EACvB,sBAAuC;QAEvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc;YACjB,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;QAClE,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,GAAW,EACX,cAAuB,EACvB,QAAsB;QAEtB,2FAA2F;QAC3F,MAAM,GAAG,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAE3C,IAAI,GAAG,EAAE;YACP,GAAG,GAAG,kBAAkB,GAAG,CAAC,kBAAkB,EAAE,CAAC;SAClD;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvD,OAAO,IAAI,YAAY,CACrB,QAAQ,EACR,cAAc,EACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;IACJ,CAAC;IAED,UAAU,GAAG,CACX,GAAW,EACX,WAAiD,EACjD,EAAE,CACF,oBAAoB,CAClB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CACf,cAAc,CACZ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EACxB,GAAG,EACH,OAAO,IAAI,IAAI,CAAC,cAAc,CAC/B,CAAC,IAAI,CAAC,UAAU,CAAC,EACpB,GAAG,EACH,WAAW,CACZ,CAAC;IAEJ,OAAO,GAA+C,IAAI,CAAC,UAAU,CACnE,UAAU,EACV,gBAAgB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAC9C,CAAC;IACF,QAAQ,GAGJ,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;CACrD;AAED,MAAM,iBAAiB,GAKnB;IACF,KAAK,EAAE,CACL,GAAgC,EACI,EAAE;QACtC,OAAO;YACL,GAAG,GAAG;YACN,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;SAC7B,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,CACN,GAAwC,EACV,EAAE;QAChC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,sBAAuC,EAMvC,EAAE,CAAC,CAAC;IACJ,KAAK,EAAE,CAAC,GAAmB,EAAkB,EAAE;QAC7C,IAAI,sBAAsB,EAAE;YAC1B,OAAO;gBACL,gBAAgB,EAAE,sBAAsB;aACzC,CAAC;SACH;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,EAAE,CAAC,GAAoB,EAAmB,EAAE;QAChD,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import Websocket from "isomorphic-ws";
|
|
2
1
|
import { decode } from "@msgpack/msgpack";
|
|
3
|
-
import
|
|
2
|
+
import Websocket from "isomorphic-ws";
|
|
3
|
+
import { AppSignalCb } from "./app/types.js";
|
|
4
4
|
/**
|
|
5
5
|
* A Websocket client which can make requests and receive responses,
|
|
6
6
|
* as well as send and receive signals
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { decode, encode } from "@msgpack/msgpack";
|
|
1
2
|
import Websocket from "isomorphic-ws";
|
|
2
|
-
import { encode, decode } from "@msgpack/msgpack";
|
|
3
3
|
/**
|
|
4
4
|
* A Websocket client which can make requests and receive responses,
|
|
5
5
|
* as well as send and receive signals
|
|
@@ -7,6 +7,10 @@ import { encode, decode } from "@msgpack/msgpack";
|
|
|
7
7
|
* Uses Holochain's websocket WireMessage for communication.
|
|
8
8
|
*/
|
|
9
9
|
export class WsClient {
|
|
10
|
+
socket;
|
|
11
|
+
pendingRequests;
|
|
12
|
+
index;
|
|
13
|
+
alreadyWarnedNoSignalCb;
|
|
10
14
|
constructor(socket, signalCb) {
|
|
11
15
|
this.socket = socket;
|
|
12
16
|
this.pendingRequests = {};
|
|
@@ -41,11 +45,11 @@ export class WsClient {
|
|
|
41
45
|
}
|
|
42
46
|
else {
|
|
43
47
|
if (!this.alreadyWarnedNoSignalCb)
|
|
44
|
-
console.log(
|
|
48
|
+
console.log("Received signal but no signal callback was set in constructor");
|
|
45
49
|
this.alreadyWarnedNoSignalCb = true;
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
|
-
else if (msg.type ===
|
|
52
|
+
else if (msg.type === "Response") {
|
|
49
53
|
this.handleResponse(msg);
|
|
50
54
|
}
|
|
51
55
|
else {
|
|
@@ -55,7 +59,7 @@ export class WsClient {
|
|
|
55
59
|
}
|
|
56
60
|
emitSignal(data) {
|
|
57
61
|
const encodedMsg = encode({
|
|
58
|
-
type:
|
|
62
|
+
type: "Signal",
|
|
59
63
|
data: encode(data),
|
|
60
64
|
});
|
|
61
65
|
this.socket.send(encodedMsg);
|
|
@@ -65,7 +69,7 @@ export class WsClient {
|
|
|
65
69
|
this.index += 1;
|
|
66
70
|
const encodedMsg = encode({
|
|
67
71
|
id,
|
|
68
|
-
type:
|
|
72
|
+
type: "Request",
|
|
69
73
|
data: encode(data),
|
|
70
74
|
});
|
|
71
75
|
const promise = new Promise((fulfill, reject) => {
|
|
@@ -75,7 +79,7 @@ export class WsClient {
|
|
|
75
79
|
this.socket.send(encodedMsg);
|
|
76
80
|
}
|
|
77
81
|
else {
|
|
78
|
-
return Promise.reject(new Error(
|
|
82
|
+
return Promise.reject(new Error("Socket is not open"));
|
|
79
83
|
}
|
|
80
84
|
return promise;
|
|
81
85
|
}
|
|
@@ -84,7 +88,7 @@ export class WsClient {
|
|
|
84
88
|
if (this.pendingRequests[id]) {
|
|
85
89
|
// resolve response
|
|
86
90
|
if (msg.data === null || msg.data === undefined) {
|
|
87
|
-
this.pendingRequests[id].reject(new Error(
|
|
91
|
+
this.pendingRequests[id].reject(new Error("Response canceled by responder"));
|
|
88
92
|
}
|
|
89
93
|
else {
|
|
90
94
|
this.pendingRequests[id].fulfill(decode(msg.data));
|
|
@@ -99,7 +103,7 @@ export class WsClient {
|
|
|
99
103
|
return this.awaitClose();
|
|
100
104
|
}
|
|
101
105
|
awaitClose() {
|
|
102
|
-
return new Promise((resolve) => this.socket.on(
|
|
106
|
+
return new Promise((resolve) => this.socket.on("close", resolve));
|
|
103
107
|
}
|
|
104
108
|
static connect(url, signalCb) {
|
|
105
109
|
return new Promise((resolve, reject) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/lib/api/common.d.ts
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Take a Requester function which deals with tagged requests and responses,
|
|
3
|
-
* and return a Requester which deals only with the inner data types, also
|
|
4
|
-
* with the optional Transformer applied to further modify the input and output.
|
|
5
|
-
*/
|
|
6
|
-
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 | undefined) => Promise<ResO>;
|
|
1
|
+
export declare const DEFAULT_TIMEOUT = 15000;
|
|
7
2
|
export declare type Transformer<ReqO, ReqI, ResI, ResO> = {
|
|
8
3
|
input: (req: ReqO) => ReqI;
|
|
9
4
|
output: (res: ResI) => ResO;
|
|
@@ -14,3 +9,11 @@ export declare type Tagged<T> = {
|
|
|
14
9
|
type: string;
|
|
15
10
|
data: T;
|
|
16
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Take a Requester function which deals with tagged requests and responses,
|
|
14
|
+
* and return a Requester which deals only with the inner data types, also
|
|
15
|
+
* with the optional Transformer applied to further modify the input and output.
|
|
16
|
+
*/
|
|
17
|
+
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 catchError: (res: any) => Promise<any>;
|
|
19
|
+
export declare const promiseTimeout: (promise: Promise<any>, tag: string, ms: number) => Promise<unknown>;
|
package/lib/api/common.js
CHANGED
|
@@ -1,21 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.requesterTransformer = void 0;
|
|
1
|
+
const ERROR_TYPE = "error";
|
|
2
|
+
export const DEFAULT_TIMEOUT = 15000;
|
|
4
3
|
/**
|
|
5
4
|
* Take a Requester function which deals with tagged requests and responses,
|
|
6
5
|
* and return a Requester which deals only with the inner data types, also
|
|
7
6
|
* with the optional Transformer applied to further modify the input and output.
|
|
8
7
|
*/
|
|
9
|
-
const requesterTransformer = (requester, tag, transform = identityTransformer) =>
|
|
8
|
+
export const requesterTransformer = (requester, tag, transform = identityTransformer) => async (req, timeout) => {
|
|
10
9
|
const input = { type: tag, data: transform.input(req) };
|
|
11
10
|
const response = await requester(input, timeout);
|
|
12
11
|
const output = transform.output(response.data);
|
|
13
12
|
return output;
|
|
14
|
-
}
|
|
15
|
-
exports.requesterTransformer = requesterTransformer;
|
|
13
|
+
};
|
|
16
14
|
const identity = (x) => x;
|
|
17
15
|
const identityTransformer = {
|
|
18
16
|
input: identity,
|
|
19
17
|
output: identity,
|
|
20
18
|
};
|
|
19
|
+
export const catchError = (res) => {
|
|
20
|
+
return res.type === ERROR_TYPE ? Promise.reject(res) : Promise.resolve(res);
|
|
21
|
+
};
|
|
22
|
+
export const promiseTimeout = (promise, tag, ms) => {
|
|
23
|
+
let id;
|
|
24
|
+
const timeout = new Promise((_, reject) => {
|
|
25
|
+
id = setTimeout(() => {
|
|
26
|
+
clearTimeout(id);
|
|
27
|
+
reject(new Error(`Timed out in ${ms}ms: ${tag}`));
|
|
28
|
+
}, ms);
|
|
29
|
+
});
|
|
30
|
+
return new Promise((res, rej) => {
|
|
31
|
+
Promise.race([promise, timeout])
|
|
32
|
+
.then((a) => {
|
|
33
|
+
clearTimeout(id);
|
|
34
|
+
return res(a);
|
|
35
|
+
})
|
|
36
|
+
.catch((e) => {
|
|
37
|
+
return rej(e);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
};
|
|
21
41
|
//# sourceMappingURL=common.js.map
|
package/lib/api/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,OAAO,CAAC;AAC3B,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAWrC;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,CACE,SAAgD,EAChD,GAAW,EACX,YAAiD,mBAAmB,EACpE,EAAE,CACJ,KAAK,EAAE,GAAS,EAAE,OAAgB,EAAE,EAAE;IACpC,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACJ,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/B,MAAM,mBAAmB,GAAG;IAC1B,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE;IACrC,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAAqB,EACrB,GAAW,EACX,EAAU,EACV,EAAE;IACF,IAAI,EAAkB,CAAC;IAEvB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACxC,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;YACnB,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;aAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/lib/api/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
package/lib/bundle.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AppBundleSource } from "./api/index.js";
|
|
2
|
+
import { DnaProperties } from "./types.js";
|
|
3
|
+
export declare type HappProperties = {
|
|
4
|
+
[role_id: string]: DnaProperties;
|
|
5
|
+
};
|
|
6
|
+
export declare const appBundleWithProperties: (source: AppBundleSource, properties: HappProperties) => Promise<AppBundleSource>;
|
package/lib/bundle.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { decode } from "@msgpack/msgpack";
|
|
2
|
+
const readAppBundleFromPath = async (path) => {
|
|
3
|
+
const isBrowser = typeof window !== "undefined";
|
|
4
|
+
if (isBrowser) {
|
|
5
|
+
throw new Error("Cannot read app bundle from path in browser context");
|
|
6
|
+
}
|
|
7
|
+
const { promises: { readFile }, } = await import("node:fs");
|
|
8
|
+
const { gunzip } = await import("node:zlib");
|
|
9
|
+
const compressed = await readFile(path);
|
|
10
|
+
const encoded = await new Promise((resolve, reject) => gunzip(compressed, (err, bytes) => err === null ? resolve(bytes) : reject(err)));
|
|
11
|
+
return decode(encoded);
|
|
12
|
+
};
|
|
13
|
+
/// Adds properties to app bundle. Requires node if passed a path.
|
|
14
|
+
export const appBundleWithProperties = async (source, properties) => {
|
|
15
|
+
const originalBundle = "path" in source ? await readAppBundleFromPath(source.path) : source.bundle;
|
|
16
|
+
return {
|
|
17
|
+
bundle: {
|
|
18
|
+
...originalBundle,
|
|
19
|
+
manifest: {
|
|
20
|
+
...originalBundle.manifest,
|
|
21
|
+
roles: originalBundle.manifest.roles.map((roleManifest) => ({
|
|
22
|
+
...roleManifest,
|
|
23
|
+
dna: {
|
|
24
|
+
...roleManifest.dna,
|
|
25
|
+
properties: properties[roleManifest.id],
|
|
26
|
+
},
|
|
27
|
+
})),
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAM1C,MAAM,qBAAqB,GAAG,KAAK,EAAE,IAAY,EAAsB,EAAE;IACvE,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IAChD,IAAI,SAAS,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IACD,MAAM,EACJ,QAAQ,EAAE,EAAE,QAAQ,EAAE,GACvB,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAe,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAChE,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAChC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5C,CACF,CAAC;IACF,OAAO,MAAM,CAAC,OAAO,CAAc,CAAC;AACtC,CAAC,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,MAAuB,EACvB,UAA0B,EACA,EAAE;IAC5B,MAAM,cAAc,GAClB,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9E,OAAO;QACL,MAAM,EAAE;YACN,GAAG,cAAc;YACjB,QAAQ,EAAE;gBACR,GAAG,cAAc,CAAC,QAAQ;gBAC1B,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;oBAC1D,GAAG,YAAY;oBACf,GAAG,EAAE;wBACH,GAAG,YAAY,CAAC,GAAG;wBACnB,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;qBACxC;iBACF,CAAC,CAAC;aACJ;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
|