@codiac.io/codiac-cli 1.3.34 → 1.3.36
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 +1 -1
- package/dist/apis/nats/nats-client.d.ts +41 -0
- package/dist/apis/nats/nats-client.js +313 -0
- package/dist/apis/nats/nats-client.js.map +1 -0
- package/dist/apis/nats/sample-listener.d.ts +1 -0
- package/dist/apis/nats/sample-listener.js +19 -0
- package/dist/apis/nats/sample-listener.js.map +1 -0
- package/dist/command-base-enterprise.d.ts +3 -3
- package/dist/command-base-enterprise.js +10 -5
- package/dist/command-base-enterprise.js.map +1 -1
- package/dist/commands/asset/view.d.ts +5 -0
- package/dist/commands/asset/view.js +99 -62
- package/dist/commands/asset/view.js.map +1 -1
- package/dist/commands/auth/register.js +9 -4
- package/dist/commands/auth/register.js.map +1 -1
- package/dist/commands/cluster/scaling/update.js.map +1 -1
- package/dist/commands/noc/cluster/create.js +76 -69
- package/dist/commands/noc/cluster/create.js.map +1 -1
- package/dist/commands/tenant/create.js +1 -1
- package/dist/commands/tenant/create.js.map +1 -1
- package/dist/ops/INTERFACES_CLI.d.ts +1 -0
- package/dist/ops/INTERFACES_CLI.js +1 -0
- package/dist/ops/INTERFACES_CLI.js.map +1 -1
- package/dist/relay/relay-container.d.ts +17 -19
- package/dist/relay/relay-container.js +150 -119
- package/dist/relay/relay-container.js.map +1 -1
- package/dist/relay/wsclient/relay-socket-listener.d.ts +0 -68
- package/dist/relay/wsclient/relay-socket-listener.js +163 -163
- package/dist/relay/wsclient/relay-socket-listener.js.map +1 -1
- package/dist/relay/wsclient/relay-websocket-client.d.ts +21 -10
- package/dist/relay/wsclient/relay-websocket-client.js +95 -28
- package/dist/relay/wsclient/relay-websocket-client.js.map +1 -1
- package/dist/relay/wsclient/rx-websocket-subject.d.ts +0 -25
- package/dist/relay/wsclient/rx-websocket-subject.js +133 -132
- package/dist/relay/wsclient/rx-websocket-subject.js.map +1 -1
- package/dist/relay/wsclient/socket-contracts.d.ts +2 -16
- package/dist/relay/wsclient/socket-contracts.js +16 -0
- package/dist/relay/wsclient/socket-contracts.js.map +1 -1
- package/dist/relay/wsclient/websocket-listener-settings.d.ts +11 -0
- package/dist/relay/wsclient/websocket-listener-settings.js +16 -0
- package/dist/relay/wsclient/websocket-listener-settings.js.map +1 -0
- package/dist/uilogic/cloud-resource-configurators/az-interactive-login-configurator.d.ts +3 -3
- package/dist/uilogic/cloud-resource-configurators/az-interactive-login-configurator.js +53 -36
- package/dist/uilogic/cloud-resource-configurators/az-interactive-login-configurator.js.map +1 -1
- package/dist/uilogic/i-messaging-client.d.ts +55 -0
- package/dist/uilogic/i-messaging-client.js +11 -0
- package/dist/uilogic/i-messaging-client.js.map +1 -0
- package/dist/uilogic/lrp-watcher-predef.d.ts +3 -3
- package/dist/uilogic/lrp-watcher-predef.js +19 -13
- package/dist/uilogic/lrp-watcher-predef.js.map +1 -1
- package/dist/uilogic/lrp-watcher.d.ts +3 -3
- package/dist/uilogic/lrp-watcher.js +17 -18
- package/dist/uilogic/lrp-watcher.js.map +1 -1
- package/oclif.manifest.json +2 -2
- package/package.json +4 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Configuration for the relay web socket client
|
|
2
|
+
* (ie: duplex comms with the relay via Websocket) */
|
|
3
|
+
export declare class WebsocketListenerSettings {
|
|
4
|
+
constructor();
|
|
5
|
+
/** Fully qualified url of the target web socket service. */
|
|
6
|
+
url?: string | undefined;
|
|
7
|
+
/** The pause in mmilliseconds to wait after a connection failure before attempting to reconnect. */
|
|
8
|
+
reconnectIntervalMs?: number | undefined;
|
|
9
|
+
/** The number of retries on a failed connection before throwing exception. */
|
|
10
|
+
reconnectAttempts?: number | undefined;
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebsocketListenerSettings = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const inversify_1 = require("inversify");
|
|
6
|
+
/** Configuration for the relay web socket client
|
|
7
|
+
* (ie: duplex comms with the relay via Websocket) */
|
|
8
|
+
let WebsocketListenerSettings = class WebsocketListenerSettings {
|
|
9
|
+
constructor() { }
|
|
10
|
+
};
|
|
11
|
+
WebsocketListenerSettings = tslib_1.__decorate([
|
|
12
|
+
(0, inversify_1.injectable)(),
|
|
13
|
+
tslib_1.__metadata("design:paramtypes", [])
|
|
14
|
+
], WebsocketListenerSettings);
|
|
15
|
+
exports.WebsocketListenerSettings = WebsocketListenerSettings;
|
|
16
|
+
//# sourceMappingURL=websocket-listener-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-listener-settings.js","sourceRoot":"","sources":["../../../src/relay/wsclient/websocket-listener-settings.ts"],"names":[],"mappings":";;;;AAAA,yCAA0D;AAE1D;sDACsD;AAE/C,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC,gBAAgB,CAAC;CAQlB,CAAA;AATY,yBAAyB;IADrC,IAAA,sBAAU,GAAE;;GACA,yBAAyB,CASrC;AATY,8DAAyB"}
|
|
@@ -4,20 +4,20 @@ import { UserNameTenantCode } from "@codiac.io/codiac-ops-common";
|
|
|
4
4
|
import { RelayClient as GenRelayClient } from "../../apis/codiac-relay";
|
|
5
5
|
import { ILoginConfigurator } from "../i-login-configurator";
|
|
6
6
|
import { OperationMeta } from '../../ops';
|
|
7
|
-
import { RelayWebsocketClient } from '../../relay/wsclient/relay-websocket-client';
|
|
8
7
|
import { IOutputStyler, IUserInputProvider } from '../../ops';
|
|
8
|
+
import { IMessagingClient } from '../i-messaging-client';
|
|
9
9
|
/** Implements AuthorizationCode Flow with a popup-browser interactive login
|
|
10
10
|
* for user to authenticate and provide consent.
|
|
11
11
|
*/
|
|
12
12
|
export declare class AzureInteractiveLoginConfigurator implements ILoginConfigurator {
|
|
13
13
|
private opMeta;
|
|
14
14
|
private genRelayClient;
|
|
15
|
-
private
|
|
15
|
+
private msgClient;
|
|
16
16
|
private codiacUser;
|
|
17
17
|
private _ui;
|
|
18
18
|
private _styler;
|
|
19
19
|
private logger;
|
|
20
|
-
constructor(opMeta: OperationMeta, genRelayClient: GenRelayClient,
|
|
20
|
+
constructor(opMeta: OperationMeta, genRelayClient: GenRelayClient, msgClient: IMessagingClient, codiacUser: UserNameTenantCode, _ui: IUserInputProvider, _styler: IOutputStyler, logger: IBetterLogger);
|
|
21
21
|
get cloudProvider(): CloudProviderEnum;
|
|
22
22
|
/** Performs an EXPLICIT login sequence in ALL CASES.
|
|
23
23
|
* It does NOT attempt or defer to a silent authentication.
|
|
@@ -10,18 +10,15 @@ const codiac_domain_1 = require("@codiac.io/codiac-domain");
|
|
|
10
10
|
const codiac_ops_common_1 = require("@codiac.io/codiac-ops-common");
|
|
11
11
|
const codiac_relay_1 = require("../../apis/codiac-relay");
|
|
12
12
|
const ops_1 = require("../../ops");
|
|
13
|
-
const relay_websocket_client_1 = require("../../relay/wsclient/relay-websocket-client");
|
|
14
13
|
const ops_2 = require("../../ops");
|
|
15
14
|
/** Implements AuthorizationCode Flow with a popup-browser interactive login
|
|
16
15
|
* for user to authenticate and provide consent.
|
|
17
16
|
*/
|
|
18
17
|
let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator {
|
|
19
|
-
constructor(opMeta, genRelayClient,
|
|
20
|
-
// @inject(RelaySocketListener) private relayWebSocket: RelaySocketListener,
|
|
21
|
-
relayWebSocket, codiacUser, _ui, _styler, logger) {
|
|
18
|
+
constructor(opMeta, genRelayClient, msgClient, codiacUser, _ui, _styler, logger) {
|
|
22
19
|
this.opMeta = opMeta;
|
|
23
20
|
this.genRelayClient = genRelayClient;
|
|
24
|
-
this.
|
|
21
|
+
this.msgClient = msgClient;
|
|
25
22
|
this.codiacUser = codiacUser;
|
|
26
23
|
this._ui = _ui;
|
|
27
24
|
this._styler = _styler;
|
|
@@ -48,7 +45,7 @@ let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator
|
|
|
48
45
|
// };
|
|
49
46
|
// }
|
|
50
47
|
commChannel = {
|
|
51
|
-
socketId: yield this.
|
|
48
|
+
socketId: yield this.msgClient.connect() // .start()
|
|
52
49
|
};
|
|
53
50
|
// 2. Get the login url
|
|
54
51
|
let authResult = yield this.genRelayClient.Call.csp_login_interactive({ providerCode: this.cloudProvider, commChannel: commChannel, correlationId: this.opMeta.correlationId }, {});
|
|
@@ -59,7 +56,6 @@ let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator
|
|
|
59
56
|
throw new Error(`No interactive login url found.`);
|
|
60
57
|
// 3. Trigger the external auth sequence in a browser window.
|
|
61
58
|
let result = yield this.invokeBrowserSequence(loginUrl);
|
|
62
|
-
yield this.relayWebSocket.close();
|
|
63
59
|
return result;
|
|
64
60
|
}
|
|
65
61
|
catch (err) {
|
|
@@ -68,6 +64,11 @@ let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator
|
|
|
68
64
|
}
|
|
69
65
|
throw new Error(`Error logging into ${this.cloudProvider}: ${(_b = err.name) !== null && _b !== void 0 ? _b : ""} ${(_c = err.message) !== null && _c !== void 0 ? _c : "(not details available)"}`);
|
|
70
66
|
}
|
|
67
|
+
finally {
|
|
68
|
+
if (this.msgClient.isConnected()) {
|
|
69
|
+
yield this.msgClient.disconnect();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
71
72
|
});
|
|
72
73
|
}
|
|
73
74
|
/** Opens the the external login url in a browser window.
|
|
@@ -81,17 +82,17 @@ let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator
|
|
|
81
82
|
let isCompleted = false;
|
|
82
83
|
let isAuthed = false; // Read this from the websocket message / fail / timeout.
|
|
83
84
|
let cspUserName; // Read this from the websocket message
|
|
84
|
-
let handlerId = this.
|
|
85
|
-
var _a, _b
|
|
85
|
+
let handlerId = this.msgClient.subscribe("loginComplete", (err, msg, meta, raw) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
var _a, _b;
|
|
86
87
|
isCompleted = true;
|
|
87
88
|
// TODO: get these from the completion message
|
|
88
|
-
isAuthed = Boolean((
|
|
89
|
-
cspUserName = (
|
|
89
|
+
isAuthed = Boolean((_a = msg === null || msg === void 0 ? void 0 : msg.success) !== null && _a !== void 0 ? _a : "false") === true;
|
|
90
|
+
cspUserName = (_b = msg === null || msg === void 0 ? void 0 : msg.cspUserName) !== null && _b !== void 0 ? _b : "anonymous@domain.com";
|
|
90
91
|
this.logger.debug(`Interactive ${this.cloudProvider} login sequence completed [${cspUserName}]`, msg);
|
|
91
|
-
this.
|
|
92
|
+
this.msgClient.unsubscribe("loginComplete", { subscriptionId: handlerId });
|
|
92
93
|
// resolve([isAuthed, cspUserName]);
|
|
93
94
|
// return;
|
|
94
|
-
});
|
|
95
|
+
}));
|
|
95
96
|
// 3. Sprout the login interaction in a browser popup
|
|
96
97
|
let childProcess = yield open(loginUrl, {});
|
|
97
98
|
// 4. Wait for the completion message via websocket
|
|
@@ -125,18 +126,24 @@ let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator
|
|
|
125
126
|
promptToLogout() {
|
|
126
127
|
var _a, _b, _c, _d;
|
|
127
128
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
// try {
|
|
130
|
+
// // if (webSocketId) {
|
|
131
|
+
// // commChannel = { socketId: webSocketId };
|
|
132
|
+
// // } else {
|
|
133
|
+
// // commChannel = {
|
|
134
|
+
// // socketId: await this.openWebSocket()
|
|
135
|
+
// // };
|
|
136
|
+
// // }
|
|
137
|
+
// } catch (err) {
|
|
138
|
+
// const errMsg = "Error establishing messaging connection: ".concat(err.message ?? "no details available");
|
|
139
|
+
// this.logger.error(errMsg, err.stack);
|
|
140
|
+
// throw new Error(errMsg);
|
|
141
|
+
// }
|
|
128
142
|
try {
|
|
129
143
|
// 1. Establish 2-way messaging channel w the relay
|
|
130
144
|
let commChannel;
|
|
131
|
-
// if (webSocketId) {
|
|
132
|
-
// commChannel = { socketId: webSocketId };
|
|
133
|
-
// } else {
|
|
134
|
-
// commChannel = {
|
|
135
|
-
// socketId: await this.openWebSocket()
|
|
136
|
-
// };
|
|
137
|
-
// }
|
|
138
145
|
commChannel = {
|
|
139
|
-
socketId: yield this.
|
|
146
|
+
socketId: yield this.msgClient.connect() // .start()
|
|
140
147
|
};
|
|
141
148
|
// 2. Get the logout url
|
|
142
149
|
let authResult = yield this.genRelayClient.Call.csp_logout_interactive({ providerCode: this.cloudProvider, commChannel: commChannel, correlationId: this.opMeta.correlationId }, {});
|
|
@@ -147,7 +154,6 @@ let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator
|
|
|
147
154
|
throw new Error(`No interactive login url found.`);
|
|
148
155
|
// 3. Trigger the external auth sequence in a browser window.
|
|
149
156
|
let result = yield this.invokeLogoutBrowserSequence(logoutUrl, (_b = authResult.output) === null || _b === void 0 ? void 0 : _b.cspUserName);
|
|
150
|
-
yield this.relayWebSocket.close();
|
|
151
157
|
return result;
|
|
152
158
|
}
|
|
153
159
|
catch (err) {
|
|
@@ -156,6 +162,11 @@ let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator
|
|
|
156
162
|
}
|
|
157
163
|
throw new Error(`Error logging out from ${this.cloudProvider}: ${(_c = err.name) !== null && _c !== void 0 ? _c : ""} ${(_d = err.message) !== null && _d !== void 0 ? _d : "(no details available)"}`);
|
|
158
164
|
}
|
|
165
|
+
finally {
|
|
166
|
+
if (this.msgClient.isConnected()) {
|
|
167
|
+
yield this.msgClient.disconnect();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
159
170
|
});
|
|
160
171
|
}
|
|
161
172
|
/** Opens the the external login url in a browser window.
|
|
@@ -185,17 +196,25 @@ let AzureInteractiveLoginConfigurator = class AzureInteractiveLoginConfigurator
|
|
|
185
196
|
*
|
|
186
197
|
* Do we need to fire the logout at all in that scenario? Perhaps. We may want to run this command anyway to make sure our systems are in sync. */
|
|
187
198
|
let waitForResult = !_.isEmpty(currentCspUserName);
|
|
199
|
+
let subxId;
|
|
188
200
|
if (waitForResult) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
201
|
+
subxId = this.msgClient.subscribe("logoutComplete", (err, msg, meta, raw) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
202
|
+
var _a;
|
|
203
|
+
try {
|
|
204
|
+
isCompleted = true;
|
|
205
|
+
// TODO: get these from the completion message
|
|
206
|
+
isAuthed = true;
|
|
207
|
+
cspUserName = currentCspUserName;
|
|
208
|
+
this.logger.debug(`Interactive logout sequence completed`, msg);
|
|
209
|
+
this.msgClient.unsubscribe("logoutComplete", { subscriptionId: subxId });
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
this.logger.error(`Error handling logoutComplete on [subxId: ${subxId}]: ${(_a = err.message) !== null && _a !== void 0 ? _a : "no details available"}`, err.stack);
|
|
213
|
+
}
|
|
214
|
+
finally {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
}));
|
|
199
218
|
}
|
|
200
219
|
// 3. Sprout the login interaction in a browser popup
|
|
201
220
|
let childProcess = yield open(logoutUrl, {});
|
|
@@ -235,15 +254,13 @@ AzureInteractiveLoginConfigurator = tslib_1.__decorate([
|
|
|
235
254
|
(0, inversify_1.injectable)(),
|
|
236
255
|
tslib_1.__param(0, (0, inversify_1.inject)(ops_1.OperationMeta)),
|
|
237
256
|
tslib_1.__param(1, (0, inversify_1.inject)(codiac_relay_1.RelayClient)),
|
|
238
|
-
tslib_1.__param(2, (0, inversify_1.inject)(
|
|
257
|
+
tslib_1.__param(2, (0, inversify_1.inject)(ops_2.INTERFACES_CLI.IMessagingClient)),
|
|
239
258
|
tslib_1.__param(3, (0, inversify_1.inject)(codiac_ops_common_1.UserNameTenantCode)),
|
|
240
259
|
tslib_1.__param(4, (0, inversify_1.inject)(ops_2.INTERFACES_CLI.IUserInputProvider)),
|
|
241
260
|
tslib_1.__param(5, (0, inversify_1.inject)(ops_2.INTERFACES_CLI.IOutputStyler)),
|
|
242
261
|
tslib_1.__param(6, (0, inversify_1.inject)(codiac_common_1.INTERFACES.IBetterLogger)),
|
|
243
262
|
tslib_1.__metadata("design:paramtypes", [ops_1.OperationMeta,
|
|
244
|
-
codiac_relay_1.RelayClient,
|
|
245
|
-
relay_websocket_client_1.RelayWebsocketClient,
|
|
246
|
-
codiac_ops_common_1.UserNameTenantCode, Object, Object, Object])
|
|
263
|
+
codiac_relay_1.RelayClient, Object, codiac_ops_common_1.UserNameTenantCode, Object, Object, Object])
|
|
247
264
|
], AzureInteractiveLoginConfigurator);
|
|
248
265
|
exports.AzureInteractiveLoginConfigurator = AzureInteractiveLoginConfigurator;
|
|
249
266
|
//# sourceMappingURL=az-interactive-login-configurator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"az-interactive-login-configurator.js","sourceRoot":"","sources":["../../../src/uilogic/cloud-resource-configurators/az-interactive-login-configurator.ts"],"names":[],"mappings":";;;;AAAA,6BAA6B;AAC7B,4BAA6B;AAC7B,yCAA+C;AAC/C,4DAAqE;AACrE,4DAA6D;AAC7D,oEAAkE;AAClE,0DAAwE;AAGxE,mCAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"az-interactive-login-configurator.js","sourceRoot":"","sources":["../../../src/uilogic/cloud-resource-configurators/az-interactive-login-configurator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Result } from "@codiac.io/codiac-common/contracts";
|
|
2
|
+
export declare class MessagingDefaults {
|
|
3
|
+
/** Default message action to specify when not provided by sender. */
|
|
4
|
+
static readonly ACTION = "none";
|
|
5
|
+
/** Default subject (aka: topic/queue) to specify when not provided by sender. */
|
|
6
|
+
static readonly SUBJECT = "default";
|
|
7
|
+
}
|
|
8
|
+
/** Information about a message being sent. */
|
|
9
|
+
export interface IMessageSendMeta {
|
|
10
|
+
/** The purpose of the message being sent (aka: the operation type).
|
|
11
|
+
* (akin to a type of message, but not dependent on the details of the class implementation of the message). */
|
|
12
|
+
action: string;
|
|
13
|
+
/** (format: guid) Unique identifier for the composite of one or more transactions in a hierarchical sequence. */
|
|
14
|
+
correlationId: string;
|
|
15
|
+
/** The string of tokens ("." separated) constituting the concrete topic/queue
|
|
16
|
+
* to which the message is being sent
|
|
17
|
+
* (ie: no wildcards "*" or wire taps ">" included). */
|
|
18
|
+
subject: string;
|
|
19
|
+
/** (Optional) The concrete topic/queue (dot-separated tokens) on which the recipient of a message can send back a direct response to the sender. */
|
|
20
|
+
replyOn?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Generic information related to the message and channel on which it was sent. */
|
|
23
|
+
export interface IMessageReceivedMeta extends IMessageSendMeta {
|
|
24
|
+
/** The subscription ID to which the message was dispatched. */
|
|
25
|
+
sid: number;
|
|
26
|
+
}
|
|
27
|
+
/** Declares an Enumerable Object (requiring serialization)
|
|
28
|
+
* to differentiate the entity from a string that is already serialized. */
|
|
29
|
+
export type MessagePayload = {
|
|
30
|
+
[name: string]: string | string[] | any;
|
|
31
|
+
};
|
|
32
|
+
export interface ITransportMessage {
|
|
33
|
+
payload: MessagePayload;
|
|
34
|
+
meta: IMessageSendMeta;
|
|
35
|
+
}
|
|
36
|
+
export type MessageHandlerOf<TMsg extends MessagePayload> = (err: Error | null, msg: TMsg, meta: IMessageReceivedMeta, raw?: any) => Promise<void>;
|
|
37
|
+
export type MessageHandler = MessageHandlerOf<MessagePayload>;
|
|
38
|
+
/** Abstraction enforcing selected patterns for basic communications functionality. */
|
|
39
|
+
export interface IMessagingClient {
|
|
40
|
+
/** Returns the unique identifier for the connection. */
|
|
41
|
+
connect(connectionId?: string): Promise<string>;
|
|
42
|
+
isConnected(): boolean;
|
|
43
|
+
disconnect(): Promise<void>;
|
|
44
|
+
/** Throws on errors subscribing.
|
|
45
|
+
* Returns the unique id for the subscription. */
|
|
46
|
+
subscribe<TMsg extends MessagePayload>(topics: string, handler: MessageHandlerOf<TMsg>): string;
|
|
47
|
+
/** Throws on errors unsubscribing. */
|
|
48
|
+
unsubscribe(topics: string, options?: {
|
|
49
|
+
force?: boolean;
|
|
50
|
+
subscriptionId?: string;
|
|
51
|
+
}): Promise<boolean>;
|
|
52
|
+
publish(msg: MessagePayload, meta?: Partial<IMessageSendMeta>): Promise<void>;
|
|
53
|
+
/** Invoke and wait for a direct response (Request-response pattern). */
|
|
54
|
+
request<TMsg extends MessagePayload, TRes extends Result>(msg: TMsg, meta?: Partial<IMessageSendMeta>, timeoutInSecs?: number): Promise<TRes>;
|
|
55
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessagingDefaults = void 0;
|
|
4
|
+
class MessagingDefaults {
|
|
5
|
+
}
|
|
6
|
+
exports.MessagingDefaults = MessagingDefaults;
|
|
7
|
+
/** Default message action to specify when not provided by sender. */
|
|
8
|
+
MessagingDefaults.ACTION = "none";
|
|
9
|
+
/** Default subject (aka: topic/queue) to specify when not provided by sender. */
|
|
10
|
+
MessagingDefaults.SUBJECT = "default";
|
|
11
|
+
//# sourceMappingURL=i-messaging-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i-messaging-client.js","sourceRoot":"","sources":["../../src/uilogic/i-messaging-client.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;;AAA9B,8CAKC;AAJC,qEAAqE;AAC9C,wBAAM,GAAG,MAAM,CAAC;AACvC,iFAAiF;AAC1D,yBAAO,GAAG,SAAS,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IBetterLogger } from "@codiac.io/codiac-common";
|
|
2
2
|
import { Result } from '@codiac.io/codiac-common/contracts';
|
|
3
|
-
import { RelayWebsocketClient } from "../relay/wsclient/relay-websocket-client";
|
|
4
3
|
import { AsyncTrigger } from "./lrp-watcher-utils";
|
|
4
|
+
import { IMessagingClient } from "./i-messaging-client";
|
|
5
5
|
/** Triggers and renders real time status for a Long Running Process using a predefined call tree.
|
|
6
6
|
*
|
|
7
7
|
* That is, it fires an async request to trigger the process,
|
|
@@ -9,9 +9,9 @@ import { AsyncTrigger } from "./lrp-watcher-utils";
|
|
|
9
9
|
* and renders them in sequential order.
|
|
10
10
|
*/
|
|
11
11
|
export declare class LrpWatcherPredef {
|
|
12
|
-
private
|
|
12
|
+
private msgClient;
|
|
13
13
|
private logger;
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(msgClient: IMessagingClient, logger: IBetterLogger);
|
|
15
15
|
private readonly qmgr;
|
|
16
16
|
private statusHandlerId;
|
|
17
17
|
private removeStatusListeners;
|
|
@@ -7,10 +7,10 @@ const listr2_1 = require("listr2");
|
|
|
7
7
|
const codiac_common_1 = require("@codiac.io/codiac-common");
|
|
8
8
|
const contracts_1 = require("@codiac.io/codiac-common/contracts");
|
|
9
9
|
const contracts_2 = require("../apis/codiac-relay/contracts");
|
|
10
|
-
const relay_websocket_client_1 = require("../relay/wsclient/relay-websocket-client");
|
|
11
10
|
const relay_queue_manager_1 = require("../relay/wsclient/relay-queue-manager");
|
|
12
11
|
const _ = require("lodash");
|
|
13
12
|
const lrp_watcher_utils_1 = require("./lrp-watcher-utils");
|
|
13
|
+
const ops_1 = require("../ops");
|
|
14
14
|
/** Triggers and renders real time status for a Long Running Process using a predefined call tree.
|
|
15
15
|
*
|
|
16
16
|
* That is, it fires an async request to trigger the process,
|
|
@@ -18,15 +18,15 @@ const lrp_watcher_utils_1 = require("./lrp-watcher-utils");
|
|
|
18
18
|
* and renders them in sequential order.
|
|
19
19
|
*/
|
|
20
20
|
let LrpWatcherPredef = class LrpWatcherPredef {
|
|
21
|
-
constructor(
|
|
22
|
-
this.
|
|
21
|
+
constructor(msgClient, logger) {
|
|
22
|
+
this.msgClient = msgClient;
|
|
23
23
|
this.logger = logger;
|
|
24
24
|
this.qmgr = new relay_queue_manager_1.QueueManager();
|
|
25
25
|
}
|
|
26
26
|
removeStatusListeners() {
|
|
27
27
|
let closed = false;
|
|
28
|
-
if (this.
|
|
29
|
-
closed = closed && this.
|
|
28
|
+
if (this.msgClient) {
|
|
29
|
+
closed = closed && this.msgClient.unsubscribe(lrp_watcher_utils_1.LrpWatcherUtils.STATUS_MSG_TYPE, { subscriptionId: this.statusHandlerId });
|
|
30
30
|
}
|
|
31
31
|
return closed;
|
|
32
32
|
}
|
|
@@ -35,14 +35,20 @@ let LrpWatcherPredef = class LrpWatcherPredef {
|
|
|
35
35
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
36
36
|
let result = new contracts_1.Result(false);
|
|
37
37
|
try {
|
|
38
|
-
let socketId = yield this.
|
|
39
|
-
this.statusHandlerId = this.
|
|
38
|
+
let socketId = yield this.msgClient.connect();
|
|
39
|
+
this.statusHandlerId = this.msgClient.subscribe(lrp_watcher_utils_1.LrpWatcherUtils.STATUS_MSG_TYPE, (err, msg, meta, raw) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
40
40
|
// gotta queue these to prevent msg loss due to
|
|
41
41
|
// client-server latency in triggering each task watcher
|
|
42
42
|
// (server may send messages before the local client task starts listening).
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
// TODO: Convert MemoryQueue to take an ITransportMessage instead...
|
|
44
|
+
const msgForQ = {
|
|
45
|
+
action: meta.action,
|
|
46
|
+
correlationId: meta.correlationId,
|
|
47
|
+
payload: msg
|
|
48
|
+
};
|
|
49
|
+
this.qmgr.push(msgForQ, msg.opCode); // todo: consider prefixing with "<CorrelationId>."
|
|
50
|
+
return;
|
|
51
|
+
}));
|
|
46
52
|
// TODO: Make this the first task in the taskMap
|
|
47
53
|
let ack = yield this.invokeOperation(socketId, trigger);
|
|
48
54
|
let statusView = yield this.buildStatusView(ack.taskMap);
|
|
@@ -55,7 +61,7 @@ let LrpWatcherPredef = class LrpWatcherPredef {
|
|
|
55
61
|
result.message = (_b = err.message) !== null && _b !== void 0 ? _b : "Error executing operation: See logs for details";
|
|
56
62
|
}
|
|
57
63
|
finally {
|
|
58
|
-
yield this.
|
|
64
|
+
yield this.msgClient.disconnect();
|
|
59
65
|
return result;
|
|
60
66
|
}
|
|
61
67
|
});
|
|
@@ -149,9 +155,9 @@ let LrpWatcherPredef = class LrpWatcherPredef {
|
|
|
149
155
|
};
|
|
150
156
|
LrpWatcherPredef = tslib_1.__decorate([
|
|
151
157
|
(0, inversify_1.injectable)(),
|
|
152
|
-
tslib_1.__param(0, (0, inversify_1.inject)(
|
|
158
|
+
tslib_1.__param(0, (0, inversify_1.inject)(ops_1.INTERFACES_CLI.IMessagingClient)),
|
|
153
159
|
tslib_1.__param(1, (0, inversify_1.inject)(codiac_common_1.INTERFACES.IBetterLogger)),
|
|
154
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
160
|
+
tslib_1.__metadata("design:paramtypes", [Object, Object])
|
|
155
161
|
], LrpWatcherPredef);
|
|
156
162
|
exports.LrpWatcherPredef = LrpWatcherPredef;
|
|
157
163
|
//# sourceMappingURL=lrp-watcher-predef.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lrp-watcher-predef.js","sourceRoot":"","sources":["../../src/uilogic/lrp-watcher-predef.ts"],"names":[],"mappings":";;;;AAAA,yCAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"lrp-watcher-predef.js","sourceRoot":"","sources":["../../src/uilogic/lrp-watcher-predef.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IBetterLogger } from "@codiac.io/codiac-common";
|
|
2
2
|
import { SingleResult, Result } from '@codiac.io/codiac-common/contracts';
|
|
3
3
|
import { AsyncAck } from '../apis/codiac-relay/contracts';
|
|
4
|
-
import {
|
|
4
|
+
import { IMessagingClient } from "./i-messaging-client";
|
|
5
5
|
/** Triggers and renders real time status for Long Running Processes.
|
|
6
6
|
*
|
|
7
7
|
* That is, it fires an async request to trigger the process,
|
|
@@ -9,9 +9,9 @@ import { RelayWebsocketClient } from "../relay/wsclient/relay-websocket-client";
|
|
|
9
9
|
* and renders them in sequential order.
|
|
10
10
|
*/
|
|
11
11
|
export declare class LrpWatcher {
|
|
12
|
-
private
|
|
12
|
+
private msgClient;
|
|
13
13
|
private logger;
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(msgClient: IMessagingClient, logger: IBetterLogger);
|
|
15
15
|
private statusHandlerId;
|
|
16
16
|
private removeStatusListeners;
|
|
17
17
|
/** Opens and closes its own web socket.
|
|
@@ -6,7 +6,6 @@ const inversify_1 = require("inversify");
|
|
|
6
6
|
const listr2_1 = require("listr2");
|
|
7
7
|
const codiac_common_1 = require("@codiac.io/codiac-common");
|
|
8
8
|
const contracts_1 = require("../apis/codiac-relay/contracts");
|
|
9
|
-
const relay_websocket_client_1 = require("../relay/wsclient/relay-websocket-client");
|
|
10
9
|
const lrp_watcher_utils_1 = require("./lrp-watcher-utils");
|
|
11
10
|
/** Triggers and renders real time status for Long Running Processes.
|
|
12
11
|
*
|
|
@@ -15,8 +14,8 @@ const lrp_watcher_utils_1 = require("./lrp-watcher-utils");
|
|
|
15
14
|
* and renders them in sequential order.
|
|
16
15
|
*/
|
|
17
16
|
let LrpWatcher = class LrpWatcher {
|
|
18
|
-
constructor(
|
|
19
|
-
this.
|
|
17
|
+
constructor(msgClient, logger) {
|
|
18
|
+
this.msgClient = msgClient;
|
|
20
19
|
this.logger = logger;
|
|
21
20
|
}
|
|
22
21
|
// private setStatusHandlers(): void {
|
|
@@ -40,8 +39,8 @@ let LrpWatcher = class LrpWatcher {
|
|
|
40
39
|
// }
|
|
41
40
|
removeStatusListeners() {
|
|
42
41
|
let closed = false;
|
|
43
|
-
if (this.
|
|
44
|
-
closed = closed && this.
|
|
42
|
+
if (this.msgClient) {
|
|
43
|
+
closed = closed && this.msgClient.unsubscribe(lrp_watcher_utils_1.LrpWatcherUtils.STATUS_MSG_TYPE, { subscriptionId: this.statusHandlerId });
|
|
45
44
|
// closed = closed && this.relayWebSocket.unlisten("clusterCreateCompleted", this.completionHandlerId!);
|
|
46
45
|
}
|
|
47
46
|
return closed;
|
|
@@ -61,17 +60,17 @@ let LrpWatcher = class LrpWatcher {
|
|
|
61
60
|
// 1. open real time status stream
|
|
62
61
|
let commChannel;
|
|
63
62
|
commChannel = {
|
|
64
|
-
socketId: yield this.
|
|
63
|
+
socketId: yield this.msgClient.connect() // .start()
|
|
65
64
|
};
|
|
66
65
|
// this.setStatusHandlers();
|
|
67
|
-
this.statusHandlerId = this.
|
|
68
|
-
var
|
|
69
|
-
if (msg
|
|
70
|
-
let statusMsg = msg
|
|
66
|
+
this.statusHandlerId = this.msgClient.subscribe(lrp_watcher_utils_1.LrpWatcherUtils.STATUS_MSG_TYPE, (err, msg, meta, raw) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
var _l, _m, _o, _p, _q, _r;
|
|
68
|
+
if (msg) {
|
|
69
|
+
let statusMsg = msg;
|
|
71
70
|
// COMPLETION STATUS
|
|
72
71
|
if (statusMsg.opCode == mainOpCode && statusMsg.state == contracts_1.OperationStateEnum.Completed) {
|
|
73
|
-
task.output = "".concat((
|
|
74
|
-
task.title = task.title.concat("...", (
|
|
72
|
+
task.output = "".concat((_m = (_l = statusMsg.completionCode) !== null && _l !== void 0 ? _l : statusMsg.message) !== null && _m !== void 0 ? _m : statusMsg.state, "!");
|
|
73
|
+
task.title = task.title.concat("...", (_o = statusMsg.completionCode) !== null && _o !== void 0 ? _o : statusMsg.state);
|
|
75
74
|
task.task.complete();
|
|
76
75
|
ctx.res = lrp_watcher_utils_1.LrpWatcherUtils.resultFromStatusMessage(statusMsg);
|
|
77
76
|
// Poor man's DRAIN
|
|
@@ -88,18 +87,18 @@ let LrpWatcher = class LrpWatcher {
|
|
|
88
87
|
}
|
|
89
88
|
else {
|
|
90
89
|
if (statusMsg.state == contracts_1.OperationStateEnum.Completed) {
|
|
91
|
-
task.output = statusMsg.opIngTitle.concat("...", (
|
|
90
|
+
task.output = statusMsg.opIngTitle.concat("...", (_p = statusMsg.completionCode) !== null && _p !== void 0 ? _p : statusMsg.state, " ", (_q = statusMsg.message) !== null && _q !== void 0 ? _q : "").trimEnd();
|
|
92
91
|
}
|
|
93
92
|
else {
|
|
94
|
-
task.output = statusMsg.opIngTitle.concat("...", (
|
|
93
|
+
task.output = statusMsg.opIngTitle.concat("...", (_r = statusMsg.message) !== null && _r !== void 0 ? _r : "").trimEnd();
|
|
95
94
|
}
|
|
96
95
|
}
|
|
97
96
|
}
|
|
98
97
|
else {
|
|
99
98
|
// No payload - ignore as a ping/heartbeat
|
|
100
|
-
task.output = JSON.stringify(
|
|
99
|
+
task.output = JSON.stringify(raw);
|
|
101
100
|
}
|
|
102
|
-
});
|
|
101
|
+
}));
|
|
103
102
|
// 2. Fire off the async cluster create
|
|
104
103
|
// this._ui.userMessage(`(CLI says, Starting cluster create...`);
|
|
105
104
|
task.output = "Invoking operation...";
|
|
@@ -128,7 +127,7 @@ let LrpWatcher = class LrpWatcher {
|
|
|
128
127
|
});
|
|
129
128
|
let taskResult = yield (spinners === null || spinners === void 0 ? void 0 : spinners.run()); // we're not going to await because we cant block execution (we havent fired the actual task yet)
|
|
130
129
|
// this._ui.userMessage("CLI says, spinner task ended. ".concat(JSON.stringify(taskResult)));
|
|
131
|
-
yield this.
|
|
130
|
+
yield this.msgClient.disconnect();
|
|
132
131
|
// return <TResult>{ success: true, message: "Process execution completed" }; // TODO: Capture the result from the completion status message
|
|
133
132
|
return taskResult.res;
|
|
134
133
|
});
|
|
@@ -137,7 +136,7 @@ let LrpWatcher = class LrpWatcher {
|
|
|
137
136
|
LrpWatcher = tslib_1.__decorate([
|
|
138
137
|
(0, inversify_1.injectable)(),
|
|
139
138
|
tslib_1.__param(1, (0, inversify_1.inject)(codiac_common_1.INTERFACES.IBetterLogger)),
|
|
140
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
139
|
+
tslib_1.__metadata("design:paramtypes", [Object, Object])
|
|
141
140
|
], LrpWatcher);
|
|
142
141
|
exports.LrpWatcher = LrpWatcher;
|
|
143
142
|
//# sourceMappingURL=lrp-watcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lrp-watcher.js","sourceRoot":"","sources":["../../src/uilogic/lrp-watcher.ts"],"names":[],"mappings":";;;;AAAA,yCAA+C;AAC/C,mCAA6C;AAC7C,4DAAqE;AAErE,8DAA4I;AAC5I,
|
|
1
|
+
{"version":3,"file":"lrp-watcher.js","sourceRoot":"","sources":["../../src/uilogic/lrp-watcher.ts"],"names":[],"mappings":"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"}
|