@casual-simulation/aux-vm-client 3.0.2-alpha.1884665520 → 3.0.3
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@casual-simulation/aux-vm-client",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "A set of utilities required to securely run an AUX as a client.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"aux"
|
|
@@ -40,17 +40,18 @@
|
|
|
40
40
|
"url": "https://github.com/casual-simulation/casualos/issues"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@casual-simulation/aux-common": "^3.0.
|
|
44
|
-
"@casual-simulation/aux-vm": "^3.0.
|
|
45
|
-
"@casual-simulation/causal-tree-client-apiary": "^3.0.2
|
|
46
|
-
"@casual-simulation/causal-tree-client-websocket": "^3.0.2
|
|
47
|
-
"@casual-simulation/causal-trees": "^3.0.2
|
|
48
|
-
"@casual-simulation/crypto": "^3.0.
|
|
49
|
-
"@casual-simulation/
|
|
43
|
+
"@casual-simulation/aux-common": "^3.0.3",
|
|
44
|
+
"@casual-simulation/aux-vm": "^3.0.3",
|
|
45
|
+
"@casual-simulation/causal-tree-client-apiary": "^3.0.2",
|
|
46
|
+
"@casual-simulation/causal-tree-client-websocket": "^3.0.2",
|
|
47
|
+
"@casual-simulation/causal-trees": "^3.0.2",
|
|
48
|
+
"@casual-simulation/crypto": "^3.0.0",
|
|
49
|
+
"@casual-simulation/timesync": "^3.0.2",
|
|
50
|
+
"@casual-simulation/websocket": "^3.0.0",
|
|
50
51
|
"axios": "0.25.0",
|
|
51
52
|
"lodash": "4.17.21",
|
|
52
53
|
"rxjs": "^6.5.2",
|
|
53
54
|
"uuid": "^8.3.2"
|
|
54
55
|
},
|
|
55
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "e2455ec50cd6cc09443e3d345b71fbb59ddc35fb"
|
|
56
57
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { User } from '@casual-simulation/causal-trees';
|
|
2
2
|
import { CausalRepoClient } from '@casual-simulation/causal-trees/core2';
|
|
3
3
|
import { PartitionConfig, RemoteCausalRepoPartition, BotPartition, OtherPlayersPartition, RemoteCausalRepoProtocol, YjsPartition } from '@casual-simulation/aux-common';
|
|
4
|
+
import { AuxTimeSyncConfiguration } from '@casual-simulation/aux-vm';
|
|
5
|
+
import { TimeSyncController } from '@casual-simulation/timesync';
|
|
4
6
|
/**
|
|
5
7
|
* Gets the causal repo client that should be used for the given host.
|
|
6
8
|
* @param host The host.
|
|
@@ -33,4 +35,5 @@ export declare function createRemoteYjsPartition(config: PartitionConfig, user:
|
|
|
33
35
|
*/
|
|
34
36
|
export declare function createOtherPlayersRepoPartition(config: PartitionConfig, user: User, useCache?: boolean): Promise<OtherPlayersPartition>;
|
|
35
37
|
export declare function createBotPartition(config: PartitionConfig): Promise<BotPartition>;
|
|
38
|
+
export declare function createTimeSyncController(config: AuxTimeSyncConfiguration, user: User): TimeSyncController;
|
|
36
39
|
//# sourceMappingURL=PartitionFactories.d.ts.map
|
|
@@ -7,12 +7,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { CausalRepoClient } from '@casual-simulation/causal-trees/core2';
|
|
10
|
+
import { CausalRepoClient, CausalRepoClientTimeSyncConnection } from '@casual-simulation/causal-trees/core2';
|
|
11
11
|
import { BotHttpClient } from './BotHttpClient';
|
|
12
12
|
import { RemoteCausalRepoPartitionImpl, BotPartitionImpl, OtherPlayersPartitionImpl, RemoteYjsPartitionImpl, } from '@casual-simulation/aux-common';
|
|
13
13
|
import { AwsSocket, ApiaryConnectionClient, } from '@casual-simulation/causal-tree-client-apiary';
|
|
14
14
|
import { WebSocketConnectionClient } from '@casual-simulation/causal-tree-client-websocket';
|
|
15
15
|
import { SocketManager as WebSocketManager } from '@casual-simulation/websocket';
|
|
16
|
+
import { TimeSyncController } from '@casual-simulation/timesync';
|
|
16
17
|
/**
|
|
17
18
|
* A map of hostnames to CausalRepoClients.
|
|
18
19
|
* Helps prevent duplicating websocket connections to the same host.
|
|
@@ -130,4 +131,11 @@ export function createBotPartition(config) {
|
|
|
130
131
|
return undefined;
|
|
131
132
|
});
|
|
132
133
|
}
|
|
134
|
+
export function createTimeSyncController(config, user) {
|
|
135
|
+
if (config.host) {
|
|
136
|
+
const client = getClientForHostAndProtocol(config.host, user, config.connectionProtocol);
|
|
137
|
+
return new TimeSyncController(new CausalRepoClientTimeSyncConnection(client));
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
133
141
|
//# sourceMappingURL=PartitionFactories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartitionFactories.js","sourceRoot":"","sources":["PartitionFactories.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"PartitionFactories.js","sourceRoot":"","sources":["PartitionFactories.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,gBAAgB,EAAE,kCAAkC,EAAE,MAAM,uCAAuC,CAAC;AAC7G,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAGH,6BAA6B,EAE7B,gBAAgB,EAEhB,yBAAyB,EAEzB,sBAAsB,GAEzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,SAAS,EACT,sBAAsB,GACzB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE;;;GAGG;AACH,IAAI,oBAAoB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAE/D;;;GAGG;AACH,IAAI,oBAAoB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAE/D;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACvC,IAAY,EACZ,IAAU,EACV,QAAkC;IAElC,IAAI,QAAQ,KAAK,YAAY,EAAE;QAC3B,OAAO,oCAAoC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC3D;SAAM;QACH,OAAO,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAChD;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAChD,IAAY,EACZ,IAAU;IAEV,IAAI,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC1C,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEvC,MAAM,CAAC,IAAI,EAAE,CAAC;KACjB;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACrC,IAAY,EACZ,IAAU;IAEV,IAAI,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE;QACT,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAExC,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC1B,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;SACxB;aAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAClC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;SACzB;QAED,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvE,MAAM,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC1C,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEvC,UAAU,CAAC,OAAO,EAAE,CAAC;KACxB;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAgB,+BAA+B,CACjD,MAAuB,EACvB,IAAU,EACV,WAAoB,IAAI;;QAExB,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE;YACtC,MAAM,MAAM,GAAG,2BAA2B,CACtC,MAAM,CAAC,IAAI,EACX,IAAI,EACJ,MAAM,CAAC,kBAAkB,CAC5B,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAC/C,IAAI,EACJ,MAAM,EACN,MAAM,CACT,CAAC;YACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CAAA;AAED;;;GAGG;AACH,MAAM,UAAgB,wBAAwB,CAC1C,MAAuB,EACvB,IAAU,EACV,WAAoB,IAAI;;QAExB,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE;YAC9B,MAAM,MAAM,GAAG,2BAA2B,CACtC,MAAM,CAAC,IAAI,EACX,IAAI,EACJ,MAAM,CAAC,kBAAkB,CAC5B,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CAAA;AAED;;;GAGG;AACH,MAAM,UAAgB,+BAA+B,CACjD,MAAuB,EACvB,IAAU,EACV,WAAoB,IAAI;;QAExB,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE;YACtC,MAAM,MAAM,GAAG,2BAA2B,CACtC,MAAM,CAAC,IAAI,EACX,IAAI,EACJ,MAAM,CAAC,kBAAkB,CAC5B,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACtE,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CAAA;AAED,MAAM,UAAgB,kBAAkB,CACpC,MAAuB;;QAEvB,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;YACvB,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvD,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CAAA;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAgC,EAAE,IAAU;IACjF,IAAI,MAAM,CAAC,IAAI,EAAE;QACb,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACzF,OAAO,IAAI,kBAAkB,CAAC,IAAI,kCAAkC,CAAC,MAAM,CAAC,CAAC,CAAC;KACjF;IAED,OAAO,SAAS,CAAC;AACrB,CAAC"}
|
package/vm/RemoteAuxChannel.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { LocalActions, PartitionConfig, AuxPartition } from '@casual-simulation/aux-common';
|
|
2
2
|
import { AuxConfig, BaseAuxChannel, AuxUser, AuxChannelOptions } from '@casual-simulation/aux-vm';
|
|
3
|
+
import { TimeSyncController } from '@casual-simulation/timesync';
|
|
3
4
|
export interface RemoteAuxChannelOptions extends AuxChannelOptions {
|
|
4
5
|
}
|
|
5
6
|
export declare class RemoteAuxChannel extends BaseAuxChannel {
|
|
6
7
|
constructor(user: AuxUser, config: AuxConfig, options: RemoteAuxChannelOptions);
|
|
7
8
|
protected _createPartition(config: PartitionConfig): Promise<AuxPartition>;
|
|
9
|
+
protected _createTimeSyncController(): TimeSyncController;
|
|
8
10
|
protected _handleError(error: any): void;
|
|
9
11
|
protected _handleLocalEvents(e: LocalActions[]): void;
|
|
10
12
|
}
|
package/vm/RemoteAuxChannel.js
CHANGED
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { createAuxPartition, createMemoryPartition, createCausalRepoPartition, createCausalRepoClientPartition, createCausalRepoHistoryClientPartition, createBotClientPartition, iteratePartitions, createOtherPlayersClientPartition, createYjsPartition, createRemoteClientYjsPartition, } from '@casual-simulation/aux-common';
|
|
11
11
|
import { BaseAuxChannel, } from '@casual-simulation/aux-vm';
|
|
12
|
-
import { createBotPartition, createRemoteCausalRepoPartition, createOtherPlayersRepoPartition, createRemoteYjsPartition, } from '../partitions';
|
|
12
|
+
import { createBotPartition, createRemoteCausalRepoPartition, createOtherPlayersRepoPartition, createRemoteYjsPartition, createTimeSyncController, } from '../partitions';
|
|
13
13
|
export class RemoteAuxChannel extends BaseAuxChannel {
|
|
14
14
|
constructor(user, config, options) {
|
|
15
15
|
super(user, config, options);
|
|
@@ -19,6 +19,13 @@ export class RemoteAuxChannel extends BaseAuxChannel {
|
|
|
19
19
|
return yield createAuxPartition(config, createMemoryPartition, (config) => createCausalRepoPartition(config, this.user), (config) => createRemoteCausalRepoPartition(config, this.user), (config) => createCausalRepoClientPartition(config, this.user), (config) => createCausalRepoHistoryClientPartition(config, this.user), (config) => createBotPartition(config), (config) => createBotClientPartition(config), (config) => createOtherPlayersClientPartition(config, this.user), (config) => createOtherPlayersRepoPartition(config, this.user), (config) => createYjsPartition(config), (config) => createRemoteYjsPartition(config, this.user), (config) => createRemoteClientYjsPartition(config, this.user));
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
|
+
_createTimeSyncController() {
|
|
23
|
+
var _a, _b, _c;
|
|
24
|
+
if ((_b = (_a = this._config) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.timesync) {
|
|
25
|
+
return ((_c = createTimeSyncController(this._config.config.timesync, this.user)) !== null && _c !== void 0 ? _c : super._createTimeSyncController());
|
|
26
|
+
}
|
|
27
|
+
return super._createTimeSyncController();
|
|
28
|
+
}
|
|
22
29
|
_handleError(error) {
|
|
23
30
|
if (error instanceof Error) {
|
|
24
31
|
super._handleError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteAuxChannel.js","sourceRoot":"","sources":["RemoteAuxChannel.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAIH,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,sCAAsC,EACtC,wBAAwB,EACxB,iBAAiB,EACjB,iCAAiC,EACjC,kBAAkB,EAClB,8BAA8B,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEH,cAAc,GAGjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,kBAAkB,EAClB,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,GAC3B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"RemoteAuxChannel.js","sourceRoot":"","sources":["RemoteAuxChannel.ts"],"names":[],"mappings":"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"}
|