@camunda8/sdk 8.4.0 → 8.5.0-alpha.4
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/.eslintrc.json +31 -0
- package/CHANGELOG.md +32 -21
- package/CODE_OF_CONDUCT.md +73 -0
- package/CONTRIBUTING.md +116 -0
- package/LICENSE +3 -3
- package/README.md +228 -34
- package/dist/admin/index.d.ts +2 -0
- package/dist/admin/index.js +30 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/lib/AdminApiClient.d.ts +121 -0
- package/dist/admin/lib/AdminApiClient.js +254 -0
- package/dist/admin/lib/AdminApiClient.js.map +1 -0
- package/dist/admin/lib/AdminDto.d.ts +98 -0
- package/dist/admin/lib/AdminDto.js +3 -0
- package/dist/admin/lib/AdminDto.js.map +1 -0
- package/dist/c8/index.d.ts +42 -0
- package/dist/c8/index.js +92 -0
- package/dist/c8/index.js.map +1 -0
- package/dist/index.d.ts +15 -14
- package/dist/index.js +14 -16
- package/dist/index.js.map +1 -1
- package/dist/lib/CertificateAuthority.d.ts +2 -0
- package/dist/lib/CertificateAuthority.js +15 -0
- package/dist/lib/CertificateAuthority.js.map +1 -0
- package/dist/lib/ClientConstructor.d.ts +6 -0
- package/dist/lib/ClientConstructor.js +3 -0
- package/dist/lib/ClientConstructor.js.map +1 -0
- package/dist/lib/Configuration.d.ts +113 -0
- package/dist/lib/Configuration.js +367 -0
- package/dist/lib/Configuration.js.map +1 -0
- package/dist/lib/ConstructOAuthProvider.d.ts +3 -0
- package/dist/lib/ConstructOAuthProvider.js +14 -0
- package/dist/lib/ConstructOAuthProvider.js.map +1 -0
- package/dist/lib/CreateUserAgentString.d.ts +2 -0
- package/dist/lib/CreateUserAgentString.js +11 -0
- package/dist/lib/CreateUserAgentString.js.map +1 -0
- package/dist/lib/Delay.d.ts +1 -0
- package/dist/lib/Delay.js +6 -0
- package/dist/lib/Delay.js.map +1 -0
- package/dist/lib/EnvironmentSetup.d.ts +11 -0
- package/dist/lib/EnvironmentSetup.js +35 -0
- package/dist/lib/EnvironmentSetup.js.map +1 -0
- package/dist/lib/GetPackageVersion.d.ts +1 -0
- package/dist/lib/GetPackageVersion.js +32 -0
- package/dist/lib/GetPackageVersion.js.map +1 -0
- package/dist/lib/LosslessJsonParser.d.ts +103 -0
- package/dist/lib/LosslessJsonParser.js +252 -0
- package/dist/lib/LosslessJsonParser.js.map +1 -0
- package/dist/lib/RequireConfiguration.d.ts +2 -0
- package/dist/lib/RequireConfiguration.js +11 -0
- package/dist/lib/RequireConfiguration.js.map +1 -0
- package/dist/lib/SuppressZeebeLogging.d.ts +2 -0
- package/dist/lib/SuppressZeebeLogging.js +14 -0
- package/dist/lib/SuppressZeebeLogging.js.map +1 -0
- package/dist/lib/ValueOrDefault.d.ts +1 -0
- package/dist/lib/ValueOrDefault.js +8 -0
- package/dist/lib/ValueOrDefault.js.map +1 -0
- package/dist/lib/index.d.ts +12 -0
- package/dist/lib/index.js +32 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/modeler/index.d.ts +2 -0
- package/dist/modeler/index.js +30 -0
- package/dist/modeler/index.js.map +1 -0
- package/dist/modeler/lib/ModelerAPIClient.d.ts +210 -0
- package/dist/modeler/lib/ModelerAPIClient.js +417 -0
- package/dist/modeler/lib/ModelerAPIClient.js.map +1 -0
- package/dist/modeler/lib/ModelerDto.d.ts +187 -0
- package/dist/modeler/lib/ModelerDto.js +3 -0
- package/dist/modeler/lib/ModelerDto.js.map +1 -0
- package/dist/oauth/index.d.ts +15 -0
- package/dist/oauth/index.js +8 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/lib/IOAuthProvider.d.ts +4 -0
- package/dist/oauth/lib/IOAuthProvider.js +3 -0
- package/dist/oauth/lib/IOAuthProvider.js.map +1 -0
- package/dist/oauth/lib/NullAuthProvider.d.ts +5 -0
- package/dist/oauth/lib/NullAuthProvider.js +16 -0
- package/dist/oauth/lib/NullAuthProvider.js.map +1 -0
- package/dist/oauth/lib/OAuthProvider.d.ts +44 -0
- package/dist/oauth/lib/OAuthProvider.js +316 -0
- package/dist/oauth/lib/OAuthProvider.js.map +1 -0
- package/dist/operate/index.d.ts +2 -0
- package/dist/operate/index.js +30 -0
- package/dist/operate/index.js.map +1 -0
- package/dist/operate/lib/OperateApiClient.d.ts +204 -0
- package/dist/operate/lib/OperateApiClient.js +440 -0
- package/dist/operate/lib/OperateApiClient.js.map +1 -0
- package/dist/operate/lib/OperateDto.d.ts +126 -0
- package/dist/operate/lib/OperateDto.js +125 -0
- package/dist/operate/lib/OperateDto.js.map +1 -0
- package/dist/operate/lib/TestableOperateApiClient.d.ts +7 -0
- package/dist/operate/lib/TestableOperateApiClient.js +15 -0
- package/dist/operate/lib/TestableOperateApiClient.js.map +1 -0
- package/dist/operate/lib/parseSearchResults.d.ts +4 -0
- package/dist/operate/lib/parseSearchResults.js +26 -0
- package/dist/operate/lib/parseSearchResults.js.map +1 -0
- package/dist/optimize/index.d.ts +2 -0
- package/dist/optimize/index.js +30 -0
- package/dist/optimize/index.js.map +1 -0
- package/dist/optimize/lib/APIObjects.d.ts +191 -0
- package/dist/optimize/lib/APIObjects.js +3 -0
- package/dist/optimize/lib/APIObjects.js.map +1 -0
- package/dist/optimize/lib/OptimizeApiClient.d.ts +269 -0
- package/dist/optimize/lib/OptimizeApiClient.js +410 -0
- package/dist/optimize/lib/OptimizeApiClient.js.map +1 -0
- package/dist/optimize/lib/ReportResults.d.ts +23 -0
- package/dist/optimize/lib/ReportResults.js +28 -0
- package/dist/optimize/lib/ReportResults.js.map +1 -0
- package/dist/proto/zeebe.proto +996 -0
- package/dist/tasklist/index.d.ts +2 -0
- package/dist/tasklist/index.js +30 -0
- package/dist/tasklist/index.js.map +1 -0
- package/dist/tasklist/lib/TasklistApiClient.d.ts +104 -0
- package/dist/tasklist/lib/TasklistApiClient.js +233 -0
- package/dist/tasklist/lib/TasklistApiClient.js.map +1 -0
- package/dist/tasklist/lib/TasklistDto.d.ts +147 -0
- package/dist/tasklist/lib/TasklistDto.js +26 -0
- package/dist/tasklist/lib/TasklistDto.js.map +1 -0
- package/dist/tasklist/lib/utils.d.ts +15 -0
- package/dist/tasklist/lib/utils.js +25 -0
- package/dist/tasklist/lib/utils.js.map +1 -0
- package/dist/zeebe/index.d.ts +21 -0
- package/dist/zeebe/index.js +53 -0
- package/dist/zeebe/index.js.map +1 -0
- package/dist/zeebe/lib/BpmnParser.d.ts +38 -0
- package/dist/zeebe/lib/BpmnParser.js +274 -0
- package/dist/zeebe/lib/BpmnParser.js.map +1 -0
- package/dist/zeebe/lib/ConnectionFactory.d.ts +25 -0
- package/dist/zeebe/lib/ConnectionFactory.js +43 -0
- package/dist/zeebe/lib/ConnectionFactory.js.map +1 -0
- package/dist/zeebe/lib/ConnectionStatusEvent.d.ts +6 -0
- package/dist/zeebe/lib/ConnectionStatusEvent.js +10 -0
- package/dist/zeebe/lib/ConnectionStatusEvent.js.map +1 -0
- package/dist/zeebe/lib/GetPackageVersion.d.ts +1 -0
- package/dist/zeebe/lib/GetPackageVersion.js +32 -0
- package/dist/zeebe/lib/GetPackageVersion.js.map +1 -0
- package/dist/zeebe/lib/GrpcClient.d.ts +75 -0
- package/dist/zeebe/lib/GrpcClient.js +467 -0
- package/dist/zeebe/lib/GrpcClient.js.map +1 -0
- package/dist/zeebe/lib/GrpcError.d.ts +19 -0
- package/dist/zeebe/lib/GrpcError.js +23 -0
- package/dist/zeebe/lib/GrpcError.js.map +1 -0
- package/dist/zeebe/lib/GrpcMiddleware.d.ts +21 -0
- package/dist/zeebe/lib/GrpcMiddleware.js +78 -0
- package/dist/zeebe/lib/GrpcMiddleware.js.map +1 -0
- package/dist/zeebe/lib/MockStdOut.d.ts +7 -0
- package/dist/zeebe/lib/MockStdOut.js +19 -0
- package/dist/zeebe/lib/MockStdOut.js.map +1 -0
- package/dist/zeebe/lib/Queue.d.ts +8 -0
- package/dist/zeebe/lib/Queue.js +15 -0
- package/dist/zeebe/lib/Queue.js.map +1 -0
- package/dist/zeebe/lib/SimpleLogger.d.ts +8 -0
- package/dist/zeebe/lib/SimpleLogger.js +47 -0
- package/dist/zeebe/lib/SimpleLogger.js.map +1 -0
- package/dist/zeebe/lib/StatefulLogInterceptor.d.ts +29 -0
- package/dist/zeebe/lib/StatefulLogInterceptor.js +81 -0
- package/dist/zeebe/lib/StatefulLogInterceptor.js.map +1 -0
- package/dist/zeebe/lib/TypedEmitter.d.ts +16 -0
- package/dist/zeebe/lib/TypedEmitter.js +24 -0
- package/dist/zeebe/lib/TypedEmitter.js.map +1 -0
- package/dist/zeebe/lib/ZBJsonLogger.d.ts +5 -0
- package/dist/zeebe/lib/ZBJsonLogger.js +12 -0
- package/dist/zeebe/lib/ZBJsonLogger.js.map +1 -0
- package/dist/zeebe/lib/ZBLogger.d.ts +20 -0
- package/dist/zeebe/lib/ZBLogger.js +134 -0
- package/dist/zeebe/lib/ZBLogger.js.map +1 -0
- package/dist/zeebe/lib/ZBWorkerBase.d.ts +78 -0
- package/dist/zeebe/lib/ZBWorkerBase.js +417 -0
- package/dist/zeebe/lib/ZBWorkerBase.js.map +1 -0
- package/dist/zeebe/lib/cancelProcesses.d.ts +1 -0
- package/dist/zeebe/lib/cancelProcesses.js +40 -0
- package/dist/zeebe/lib/cancelProcesses.js.map +1 -0
- package/dist/zeebe/lib/createUniqueTaskType.d.ts +0 -0
- package/dist/zeebe/lib/createUniqueTaskType.js +65 -0
- package/dist/zeebe/lib/createUniqueTaskType.js.map +1 -0
- package/dist/zeebe/lib/index.d.ts +2 -0
- package/dist/zeebe/lib/index.js +19 -0
- package/dist/zeebe/lib/index.js.map +1 -0
- package/dist/zeebe/lib/interfaces-1.0.d.ts +303 -0
- package/dist/zeebe/lib/interfaces-1.0.js +5 -0
- package/dist/zeebe/lib/interfaces-1.0.js.map +1 -0
- package/dist/zeebe/lib/interfaces-grpc-1.0.d.ts +679 -0
- package/dist/zeebe/lib/interfaces-grpc-1.0.js +22 -0
- package/dist/zeebe/lib/interfaces-grpc-1.0.js.map +1 -0
- package/dist/zeebe/lib/interfaces-published-contract.d.ts +67 -0
- package/dist/zeebe/lib/interfaces-published-contract.js +3 -0
- package/dist/zeebe/lib/interfaces-published-contract.js.map +1 -0
- package/dist/zeebe/lib/stringifyVariables.d.ts +18 -0
- package/dist/zeebe/lib/stringifyVariables.js +28 -0
- package/dist/zeebe/lib/stringifyVariables.js.map +1 -0
- package/dist/zeebe/lib/utils.d.ts +7 -0
- package/dist/zeebe/lib/utils.js +48 -0
- package/dist/zeebe/lib/utils.js.map +1 -0
- package/dist/zeebe/types.d.ts +3 -0
- package/dist/zeebe/types.js +20 -0
- package/dist/zeebe/types.js.map +1 -0
- package/dist/zeebe/zb/ZBWorker.d.ts +7 -0
- package/dist/zeebe/zb/ZBWorker.js +73 -0
- package/dist/zeebe/zb/ZBWorker.js.map +1 -0
- package/dist/zeebe/zb/ZeebeGrpcClient.d.ts +587 -0
- package/dist/zeebe/zb/ZeebeGrpcClient.js +1021 -0
- package/dist/zeebe/zb/ZeebeGrpcClient.js.map +1 -0
- package/package.json +130 -30
- package/renovate.json +9 -0
- package/.github/workflows/build-docs.yml +0 -39
- package/.github/workflows/tag-and-publish.yml +0 -48
- package/.prettierignore +0 -2
- package/img/video.png +0 -0
- package/jest.config.js +0 -5
- package/src/__tests__/exports.spec.ts +0 -7
- package/src/index.ts +0 -17
- package/tsconfig.build.json +0 -8
- package/tsconfig.json +0 -10
- package/tsconfig.tsbuildinfo +0 -1
- package/typedoc.json +0 -10
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GrpcClient = exports.MiddlewareSignals = void 0;
|
|
7
|
+
const events_1 = require("events");
|
|
8
|
+
const grpc_js_1 = require("@grpc/grpc-js");
|
|
9
|
+
const proto_loader_1 = require("@grpc/proto-loader");
|
|
10
|
+
const debug_1 = __importDefault(require("debug"));
|
|
11
|
+
const lib_1 = require("lib");
|
|
12
|
+
const typed_duration_1 = require("typed-duration");
|
|
13
|
+
const GrpcError_1 = require("./GrpcError");
|
|
14
|
+
const debug = (0, debug_1.default)('camunda:grpc');
|
|
15
|
+
// tslint:disable: object-literal-sort-keys
|
|
16
|
+
function replaceTimeValuesWithMillisecondNumber(data) {
|
|
17
|
+
if (typeof data !== 'object') {
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
return Object.entries(data).reduce((acc, [key, value]) => ({
|
|
21
|
+
...acc,
|
|
22
|
+
[key]: typed_duration_1.Duration.isTypedDuration(value)
|
|
23
|
+
? typed_duration_1.Duration.milliseconds.from(value)
|
|
24
|
+
: value,
|
|
25
|
+
}), {});
|
|
26
|
+
}
|
|
27
|
+
exports.MiddlewareSignals = {
|
|
28
|
+
Log: {
|
|
29
|
+
Error: 'MIDDLEWARE_ERROR',
|
|
30
|
+
Info: 'MIDDLEWARE_INFO',
|
|
31
|
+
Debug: 'MIDDLEWARE_DEBUG',
|
|
32
|
+
},
|
|
33
|
+
Event: {
|
|
34
|
+
Error: 'MIDDLEWARE_EVENT_ERROR',
|
|
35
|
+
Ready: 'MIDDLEWARE_EVENT_READY',
|
|
36
|
+
GrpcInterceptError: 'MIDDLEWARE_GRPC_INTERCEPT_ERROR',
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
const InternalSignals = {
|
|
40
|
+
Error: 'INTERNAL_ERROR',
|
|
41
|
+
Ready: 'INTERNAL_READY',
|
|
42
|
+
};
|
|
43
|
+
const GrpcState = {
|
|
44
|
+
/**
|
|
45
|
+
* The channel is trying to establish a connection and is waiting to make progress on one of the steps involved in name resolution,
|
|
46
|
+
* TCP connection establishment or TLS handshake.
|
|
47
|
+
*/
|
|
48
|
+
CONNECTING: 1,
|
|
49
|
+
/**
|
|
50
|
+
* This is the state where the channel is not even trying to create a connection because of a lack of new or pending RPCs.
|
|
51
|
+
*/
|
|
52
|
+
IDLE: 0,
|
|
53
|
+
/**
|
|
54
|
+
* The channel has successfully established a connection all the way through TLS handshake (or equivalent)
|
|
55
|
+
* and all subsequent attempt to communicate have succeeded (or are pending without any known failure ).
|
|
56
|
+
*/
|
|
57
|
+
READY: 2,
|
|
58
|
+
/**
|
|
59
|
+
* This channel has started shutting down.
|
|
60
|
+
*/
|
|
61
|
+
SHUTDOWN: 4,
|
|
62
|
+
/**
|
|
63
|
+
* There has been some transient failure (such as a TCP 3-way handshake timing out or a socket error).
|
|
64
|
+
*/
|
|
65
|
+
TRANSIENT_FAILURE: 3,
|
|
66
|
+
};
|
|
67
|
+
const connectivityState = [
|
|
68
|
+
'IDLE',
|
|
69
|
+
'CONNECTING',
|
|
70
|
+
'READY',
|
|
71
|
+
'TRANSIENT_FAILURE',
|
|
72
|
+
'SHUTDOWN',
|
|
73
|
+
];
|
|
74
|
+
class GrpcClient extends events_1.EventEmitter {
|
|
75
|
+
constructor({ config, connectionTolerance, host, oAuth, options = {}, packageName, protoPath, service, useTLS, customSSL, }) {
|
|
76
|
+
super();
|
|
77
|
+
this.channelClosed = false;
|
|
78
|
+
this.connected = false;
|
|
79
|
+
this.closing = false;
|
|
80
|
+
this.channelState = 0;
|
|
81
|
+
this.gRPCRetryCount = 0;
|
|
82
|
+
// https://github.com/grpc/proposal/blob/master/L5-node-client-interceptors.md#proposal
|
|
83
|
+
this.interceptor = (options, nextCall) => {
|
|
84
|
+
const requester = {
|
|
85
|
+
start: (metadata, _, next) => {
|
|
86
|
+
const newListener = {
|
|
87
|
+
onReceiveStatus: (callStatus, nxt) => {
|
|
88
|
+
const isError = callStatus.code !== grpc_js_1.status.OK;
|
|
89
|
+
if (isError) {
|
|
90
|
+
if (callStatus.code === 1 &&
|
|
91
|
+
callStatus.details.includes('503') // ||
|
|
92
|
+
// callStatus.code === 13
|
|
93
|
+
) {
|
|
94
|
+
return this.emit(exports.MiddlewareSignals.Event.GrpcInterceptError, {
|
|
95
|
+
callStatus,
|
|
96
|
+
options,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (callStatus.code === 1 && this.closing) {
|
|
100
|
+
return this.emit(exports.MiddlewareSignals.Log.Debug, 'Closing, and error received from server');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return nxt(callStatus);
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
next(metadata, newListener);
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
return new grpc_js_1.InterceptingCall(nextCall(options), requester);
|
|
110
|
+
};
|
|
111
|
+
debug('Constructing gRPC client...');
|
|
112
|
+
this.config = config;
|
|
113
|
+
this.userAgentString = (0, lib_1.createUserAgentString)(config);
|
|
114
|
+
this.host = host;
|
|
115
|
+
this.oAuth = oAuth;
|
|
116
|
+
this.longPoll = options.longPoll;
|
|
117
|
+
this.connectionTolerance = typed_duration_1.Duration.milliseconds.from(connectionTolerance);
|
|
118
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, `Connection Tolerance: ${typed_duration_1.Duration.milliseconds.from(connectionTolerance)}ms`);
|
|
119
|
+
this.on(InternalSignals.Ready, () => this.setReady());
|
|
120
|
+
this.on(InternalSignals.Error, () => this.setNotReady());
|
|
121
|
+
this.packageDefinition = (0, proto_loader_1.loadSync)(protoPath, {
|
|
122
|
+
defaults: options.defaults ?? true,
|
|
123
|
+
enums: options.enums ?? String,
|
|
124
|
+
keepCase: options.keepCase ?? true,
|
|
125
|
+
longs: options.longs ?? String,
|
|
126
|
+
oneofs: options.oneofs ?? true,
|
|
127
|
+
});
|
|
128
|
+
const proto = (0, grpc_js_1.loadPackageDefinition)(this.packageDefinition)[packageName];
|
|
129
|
+
const listMethods = this.packageDefinition[`${packageName}.${service}`];
|
|
130
|
+
const channelCredentials = useTLS
|
|
131
|
+
? grpc_js_1.credentials.createSsl(customSSL?.rootCerts, customSSL?.privateKey, customSSL?.certChain, customSSL?.verifyOptions)
|
|
132
|
+
: grpc_js_1.credentials.createInsecure();
|
|
133
|
+
// Options documented here: https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/grpc_types.h
|
|
134
|
+
this.client = new proto[service](host, channelCredentials, {
|
|
135
|
+
/**
|
|
136
|
+
* If set to zero, disables retry behavior.
|
|
137
|
+
* Otherwise, transparent retries are enabled for all RPCs,
|
|
138
|
+
* and configurable retries are enabled when they are configured
|
|
139
|
+
* via the service config. For details, see:
|
|
140
|
+
* https://github.com/grpc/proposal/blob/master/A6-client-retries.md
|
|
141
|
+
*/
|
|
142
|
+
'grpc.enable_retries': 1,
|
|
143
|
+
/**
|
|
144
|
+
* The time between the first and second connection attempts,
|
|
145
|
+
* in ms
|
|
146
|
+
*/
|
|
147
|
+
'grpc.initial_reconnect_backoff_ms': this.config.zeebeGrpcSettings.GRPC_INITIAL_RECONNECT_BACKOFF_MS,
|
|
148
|
+
/**
|
|
149
|
+
* The maximum time between subsequent connection attempts,
|
|
150
|
+
* in ms
|
|
151
|
+
*/
|
|
152
|
+
'grpc.max_reconnect_backoff_ms': this.config.zeebeGrpcSettings.GRPC_MAX_RECONNECT_BACKOFF_MS,
|
|
153
|
+
/**
|
|
154
|
+
* The minimum time between subsequent connection attempts,
|
|
155
|
+
* in ms. Default is 1000ms, but this can cause an SSL Handshake failure.
|
|
156
|
+
* This causes an intermittent failure in the Worker-LongPoll test when run
|
|
157
|
+
* against Camunda Cloud.
|
|
158
|
+
* Raised to 5000ms.
|
|
159
|
+
* See: https://github.com/grpc/grpc/issues/8382#issuecomment-259482949
|
|
160
|
+
*/
|
|
161
|
+
'grpc.min_reconnect_backoff_ms': this.config.zeebeGrpcSettings.GRPC_INITIAL_RECONNECT_BACKOFF_MS,
|
|
162
|
+
/**
|
|
163
|
+
* After a duration of this time the client/server
|
|
164
|
+
* pings its peer to see if the transport is still alive.
|
|
165
|
+
* Int valued, milliseconds.
|
|
166
|
+
*/
|
|
167
|
+
'grpc.keepalive_time_ms': this.config.zeebeGrpcSettings.GRPC_KEEPALIVE_TIME_MS,
|
|
168
|
+
/**
|
|
169
|
+
* After waiting for a duration of this time,
|
|
170
|
+
* if the keepalive ping sender does
|
|
171
|
+
* not receive the ping ack, it will close the
|
|
172
|
+
* transport. Int valued, milliseconds.
|
|
173
|
+
*/
|
|
174
|
+
'grpc.keepalive_timeout_ms': this.config.zeebeGrpcSettings.GRPC_KEEPALIVE_TIMEOUT_MS,
|
|
175
|
+
'grpc.http2.min_time_between_pings_ms': this.config.zeebeGrpcSettings.GRPC_HTTP2_MIN_TIME_BETWEEN_PINGS_MS,
|
|
176
|
+
/**
|
|
177
|
+
* Minimum allowed time between a server receiving
|
|
178
|
+
* successive ping frames without sending any data
|
|
179
|
+
* frame. Int valued, milliseconds. Default: 90000
|
|
180
|
+
*/
|
|
181
|
+
'grpc.http2.min_ping_interval_without_data_ms': this.config.zeebeGrpcSettings
|
|
182
|
+
.GRPC_HTTP2_MIN_PING_INTERVAL_WITHOUT_DATA_MS,
|
|
183
|
+
/**
|
|
184
|
+
* This channel argument if set to 1
|
|
185
|
+
* (0 : false; 1 : true), allows keepalive pings
|
|
186
|
+
* to be sent even if there are no calls in flight.
|
|
187
|
+
* Default is 1.
|
|
188
|
+
*/
|
|
189
|
+
'grpc.keepalive_permit_without_calls': this.config.zeebeGrpcSettings.GRPC_KEEPALIVE_PERMIT_WITHOUT_CALLS,
|
|
190
|
+
/**
|
|
191
|
+
* This channel argument controls the maximum number
|
|
192
|
+
* of pings that can be sent when there is no other
|
|
193
|
+
* data (data frame or header frame) to be sent.
|
|
194
|
+
* GRPC Core will not continue sending pings if we
|
|
195
|
+
* run over the limit. Setting it to 0 allows sending
|
|
196
|
+
* pings without sending data.
|
|
197
|
+
*/
|
|
198
|
+
'grpc.http2.max_pings_without_data': this.config.zeebeGrpcSettings.GRPC_HTTP2_MAX_PINGS_WITHOUT_DATA,
|
|
199
|
+
interceptors: [this.interceptor],
|
|
200
|
+
});
|
|
201
|
+
this.listNameMethods = [];
|
|
202
|
+
this.client.waitForReady(10000, (error) => error
|
|
203
|
+
? this.emit(exports.MiddlewareSignals.Event.Error, error)
|
|
204
|
+
: this.emit(exports.MiddlewareSignals.Event.Ready));
|
|
205
|
+
for (const key in listMethods) {
|
|
206
|
+
if (listMethods[key]) {
|
|
207
|
+
const methodName = listMethods[key].originalName;
|
|
208
|
+
this.listNameMethods.push(methodName);
|
|
209
|
+
this[`${methodName}Stream`] = async (data) => {
|
|
210
|
+
debug(`Calling ${methodName}Stream...`);
|
|
211
|
+
if (this.closing) {
|
|
212
|
+
// tslint:disable-next-line: no-console
|
|
213
|
+
console.log('Short-circuited on channel closed'); // @DEBUG
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
let stream;
|
|
217
|
+
const timeNormalisedRequest = replaceTimeValuesWithMillisecondNumber(data);
|
|
218
|
+
try {
|
|
219
|
+
const metadata = await this.getAuthToken();
|
|
220
|
+
stream = this.client[methodName](timeNormalisedRequest, metadata);
|
|
221
|
+
this.setReady();
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
const e = error;
|
|
225
|
+
debug(`${methodName}Stream error: ${e.code}`, e.message);
|
|
226
|
+
this.emit(exports.MiddlewareSignals.Log.Error, e.message);
|
|
227
|
+
this.emit(exports.MiddlewareSignals.Event.Error);
|
|
228
|
+
this.setNotReady();
|
|
229
|
+
return { error };
|
|
230
|
+
}
|
|
231
|
+
if (!stream) {
|
|
232
|
+
return {
|
|
233
|
+
error: new Error(`No stream returned by call to ${methodName}Stream`),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
// This deals with the case where during a broker restart the call returns a stream
|
|
237
|
+
// but that stream is not a legit Gateway activation. In that case, the Gateway will
|
|
238
|
+
// never time out or close the stream. So we have to manage that case.
|
|
239
|
+
const clientsideTimeoutDuration = typed_duration_1.Duration.milliseconds.from(this.longPoll) + 1000;
|
|
240
|
+
const clientSideTimeout = setTimeout(() => {
|
|
241
|
+
debug(`Triggered client-side timeout after ${clientsideTimeoutDuration}ms`);
|
|
242
|
+
stream.emit('end');
|
|
243
|
+
}, clientsideTimeoutDuration);
|
|
244
|
+
/**
|
|
245
|
+
* Once this gets attached here, it is attached to *all* calls
|
|
246
|
+
* This is an issue if you do a sync call like cancelWorkflowSync
|
|
247
|
+
* The error will not propagate, and the channel will be closed.
|
|
248
|
+
* So we use a separate GRPCClient for the client, which never does
|
|
249
|
+
* streaming calls, and each worker, which only does streaming calls
|
|
250
|
+
*/
|
|
251
|
+
stream.on('error', (error) => {
|
|
252
|
+
clearTimeout(clientSideTimeout);
|
|
253
|
+
debug(`${methodName}Stream error emitted by stream`, error);
|
|
254
|
+
this.emit(exports.MiddlewareSignals.Event.Error);
|
|
255
|
+
if (error.message.includes('14 UNAVAILABLE')) {
|
|
256
|
+
this.emit(exports.MiddlewareSignals.Log.Error, `Grpc Stream Error: ${error.message} - ${host}`);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
this.emit(exports.MiddlewareSignals.Log.Error, `Grpc Stream Error: ${error.message}`);
|
|
260
|
+
}
|
|
261
|
+
// Do not handle stream errors the same way
|
|
262
|
+
// this.handleGrpcError(stream)(error)
|
|
263
|
+
this.setNotReady();
|
|
264
|
+
});
|
|
265
|
+
stream.on('data', () => (this.gRPCRetryCount = 0));
|
|
266
|
+
stream.on('metadata', (md) => this.emit(exports.MiddlewareSignals.Log.Debug, JSON.stringify(md)));
|
|
267
|
+
stream.on('status', (s) => this.emit(exports.MiddlewareSignals.Log.Debug, `gRPC Status event: ${JSON.stringify(s)}`));
|
|
268
|
+
stream.on('end', () => clearTimeout(clientSideTimeout));
|
|
269
|
+
return stream;
|
|
270
|
+
};
|
|
271
|
+
this[`${methodName}Sync`] = (data) => {
|
|
272
|
+
debug(`Calling ${methodName}Sync...`);
|
|
273
|
+
if (this.closing) {
|
|
274
|
+
debug(`Aborting ${methodName}Sync due to client closing.`);
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const timeNormalisedRequest = replaceTimeValuesWithMillisecondNumber(data);
|
|
278
|
+
const client = this.client;
|
|
279
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
280
|
+
return new Promise(async (resolve, reject) => {
|
|
281
|
+
try {
|
|
282
|
+
const metadata = (await this.getAuthToken()) || {};
|
|
283
|
+
debug(methodName, 'timeNormalisedRequest', timeNormalisedRequest);
|
|
284
|
+
client[methodName](timeNormalisedRequest, metadata, (err, dat) => {
|
|
285
|
+
// This will error on network or business errors
|
|
286
|
+
if (err) {
|
|
287
|
+
debug(`${methodName}Sync error: ${err.code}`);
|
|
288
|
+
debug(err.message);
|
|
289
|
+
const isNetworkError = err.code === GrpcError_1.GrpcError.UNAVAILABLE &&
|
|
290
|
+
!err.message.includes('partition');
|
|
291
|
+
if (isNetworkError) {
|
|
292
|
+
this.setNotReady();
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
this.setReady();
|
|
296
|
+
}
|
|
297
|
+
return reject(err);
|
|
298
|
+
}
|
|
299
|
+
this.emit(exports.MiddlewareSignals.Event.Ready);
|
|
300
|
+
this.setReady();
|
|
301
|
+
debug(`${methodName}Sync completed`);
|
|
302
|
+
resolve(dat);
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
catch (e) {
|
|
306
|
+
reject(e);
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
runService(fnName, data, fnAnswer) {
|
|
314
|
+
this.client[fnName](data, fnAnswer);
|
|
315
|
+
}
|
|
316
|
+
listMethods() {
|
|
317
|
+
return this.listNameMethods;
|
|
318
|
+
}
|
|
319
|
+
close(timeout = 5000) {
|
|
320
|
+
const STATE_SHUTDOWN = 4;
|
|
321
|
+
const isClosed = (state) => state === STATE_SHUTDOWN;
|
|
322
|
+
this.closing = true;
|
|
323
|
+
let alreadyClosed = false;
|
|
324
|
+
return new Promise((resolve, reject) => {
|
|
325
|
+
const gRPC = this.client;
|
|
326
|
+
gRPC.getChannel().close();
|
|
327
|
+
gRPC.close();
|
|
328
|
+
try {
|
|
329
|
+
this.channelState = gRPC.getChannel().getConnectivityState(false);
|
|
330
|
+
}
|
|
331
|
+
catch (e) {
|
|
332
|
+
const msg = e.toString();
|
|
333
|
+
alreadyClosed =
|
|
334
|
+
isClosed(this.channelState) ||
|
|
335
|
+
msg.includes('Cannot call getConnectivityState on a closed Channel'); // C-based library
|
|
336
|
+
}
|
|
337
|
+
const closed = isClosed(this.channelState);
|
|
338
|
+
if (closed || alreadyClosed) {
|
|
339
|
+
this.channelClosed = true;
|
|
340
|
+
this.emit(exports.MiddlewareSignals.Log.Info, 'Grpc channel closed');
|
|
341
|
+
return resolve(null); // setTimeout(() => resolve(), 2000)
|
|
342
|
+
}
|
|
343
|
+
this.emit(exports.MiddlewareSignals.Log.Info, `Grpc Channel State: ${connectivityState[this.channelState]}`);
|
|
344
|
+
const deadline = new Date().setSeconds(new Date().getSeconds() + 300);
|
|
345
|
+
gRPC
|
|
346
|
+
.getChannel()
|
|
347
|
+
.watchConnectivityState(this.channelState, deadline, async () => {
|
|
348
|
+
try {
|
|
349
|
+
this.channelState = gRPC.getChannel().getConnectivityState(false);
|
|
350
|
+
this.emit(exports.MiddlewareSignals.Log.Info, `Grpc Channel State: ${connectivityState[this.channelState]}`);
|
|
351
|
+
alreadyClosed = isClosed(this.channelState);
|
|
352
|
+
}
|
|
353
|
+
catch (e) {
|
|
354
|
+
const msg = e.toString();
|
|
355
|
+
alreadyClosed =
|
|
356
|
+
msg.includes('Cannot call getConnectivityState on a closed Channel') || isClosed(this.channelState);
|
|
357
|
+
this.emit(exports.MiddlewareSignals.Log.Info, `Closed: ${alreadyClosed}`);
|
|
358
|
+
}
|
|
359
|
+
if (alreadyClosed) {
|
|
360
|
+
return resolve(null);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
return setTimeout(() => {
|
|
364
|
+
// tslint:disable-next-line: no-console
|
|
365
|
+
console.log(`Channel timeout after ${timeout}`); // @DEBUG
|
|
366
|
+
return isClosed(this.channelState)
|
|
367
|
+
? null
|
|
368
|
+
: reject(new Error(`Didn't close in time: ${this.channelState}`));
|
|
369
|
+
}, timeout);
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
async getAuthToken() {
|
|
373
|
+
const metadata = new grpc_js_1.Metadata({ waitForReady: false });
|
|
374
|
+
metadata.add('user-agent', this.userAgentString);
|
|
375
|
+
if (this.oAuth) {
|
|
376
|
+
const token = await this.oAuth.getToken('ZEEBE');
|
|
377
|
+
metadata.add('Authorization', `Bearer ${token}`);
|
|
378
|
+
}
|
|
379
|
+
return metadata;
|
|
380
|
+
}
|
|
381
|
+
waitForGrpcChannelReconnect() {
|
|
382
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, 'Start watching Grpc channel...');
|
|
383
|
+
return new Promise((resolve) => {
|
|
384
|
+
const tryToConnect = true;
|
|
385
|
+
const gRPC = this.client;
|
|
386
|
+
if (this.channelClosed) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
const currentChannelState = gRPC
|
|
390
|
+
.getChannel()
|
|
391
|
+
.getConnectivityState(tryToConnect);
|
|
392
|
+
this.emit(exports.MiddlewareSignals.Log.Error, `Grpc Channel State: ${connectivityState[currentChannelState]}`);
|
|
393
|
+
const delay = currentChannelState === GrpcState.TRANSIENT_FAILURE ? 5 : 30;
|
|
394
|
+
const deadline = new Date().setSeconds(new Date().getSeconds() + delay);
|
|
395
|
+
if (currentChannelState === GrpcState.IDLE ||
|
|
396
|
+
currentChannelState === GrpcState.READY) {
|
|
397
|
+
this.gRPCRetryCount = 0;
|
|
398
|
+
return resolve(currentChannelState);
|
|
399
|
+
}
|
|
400
|
+
gRPC
|
|
401
|
+
.getChannel()
|
|
402
|
+
.watchConnectivityState(currentChannelState, deadline, async (error) => {
|
|
403
|
+
if (this.channelClosed) {
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
this.gRPCRetryCount++;
|
|
407
|
+
if (error) {
|
|
408
|
+
this.emit(exports.MiddlewareSignals.Log.Error, error);
|
|
409
|
+
}
|
|
410
|
+
const newState = gRPC
|
|
411
|
+
.getChannel()
|
|
412
|
+
.getConnectivityState(tryToConnect);
|
|
413
|
+
this.emit(exports.MiddlewareSignals.Log.Error, `Grpc Channel State: ${connectivityState[newState]}`);
|
|
414
|
+
this.emit(exports.MiddlewareSignals.Log.Error, `Grpc Retry count: ${this.gRPCRetryCount}`);
|
|
415
|
+
if (newState === GrpcState.READY || newState === GrpcState.IDLE) {
|
|
416
|
+
return resolve(newState);
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
this.emit(exports.MiddlewareSignals.Log.Error, `Grpc Retry count: ${this.gRPCRetryCount}`);
|
|
420
|
+
return resolve(await this.waitForGrpcChannelReconnect());
|
|
421
|
+
}
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
setReady() {
|
|
426
|
+
// debounce rapid connect / disconnect
|
|
427
|
+
if (this.readyTimer) {
|
|
428
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, 'Reset Grpc channel ready timer.');
|
|
429
|
+
clearTimeout(this.readyTimer);
|
|
430
|
+
}
|
|
431
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, `Set Grpc channel ready timer for ${this.connectionTolerance}ms`);
|
|
432
|
+
this.readyTimer = setTimeout(() => {
|
|
433
|
+
if (this.failTimer) {
|
|
434
|
+
clearTimeout(this.failTimer);
|
|
435
|
+
this.failTimer = undefined;
|
|
436
|
+
}
|
|
437
|
+
this.readyTimer = undefined;
|
|
438
|
+
this.connected = true;
|
|
439
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, `Set Grpc channel state ready after ${this.connectionTolerance}ms`);
|
|
440
|
+
this.emit(exports.MiddlewareSignals.Event.Ready);
|
|
441
|
+
}, this.connectionTolerance);
|
|
442
|
+
}
|
|
443
|
+
setNotReady() {
|
|
444
|
+
if (this.readyTimer) {
|
|
445
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, 'Cancelled channel ready timer');
|
|
446
|
+
clearTimeout(this.readyTimer);
|
|
447
|
+
this.readyTimer = undefined;
|
|
448
|
+
}
|
|
449
|
+
this.connected = false;
|
|
450
|
+
if (!this.failTimer) {
|
|
451
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, `Set Grpc channel failure timer for ${this.connectionTolerance}ms`);
|
|
452
|
+
this.failTimer = setTimeout(() => {
|
|
453
|
+
if (this.readyTimer) {
|
|
454
|
+
this.failTimer = undefined;
|
|
455
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, 'Grpc channel ready timer is running, not failing channel...');
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
this.emit(exports.MiddlewareSignals.Log.Debug, `Set Grpc Channel state to failed after ${this.connectionTolerance}ms`);
|
|
459
|
+
this.failTimer = undefined;
|
|
460
|
+
this.connected = false;
|
|
461
|
+
this.emit(exports.MiddlewareSignals.Event.Error);
|
|
462
|
+
}, this.connectionTolerance);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
exports.GrpcClient = GrpcClient;
|
|
467
|
+
//# sourceMappingURL=GrpcClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrpcClient.js","sourceRoot":"","sources":["../../../src/zeebe/lib/GrpcClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const GrpcError: {
|
|
2
|
+
OK: 0;
|
|
3
|
+
CANCELLED: 1;
|
|
4
|
+
UNKNOWN: 2;
|
|
5
|
+
INVALID_ARGUMENT: 3;
|
|
6
|
+
DEADLINE_EXCEEDED: 4;
|
|
7
|
+
NOT_FOUND: 5;
|
|
8
|
+
ALREADY_EXISTS: 6;
|
|
9
|
+
PERMISSION_DENIED: 7;
|
|
10
|
+
UNAUTHENTICATED: 16;
|
|
11
|
+
RESOURCE_EXHAUSTED: 8;
|
|
12
|
+
FAILED_PRECONDITION: 9;
|
|
13
|
+
ABORTED: 10;
|
|
14
|
+
OUT_OF_RANGE: 11;
|
|
15
|
+
UNIMPLEMENTED: 12;
|
|
16
|
+
INTERNAL: 13;
|
|
17
|
+
UNAVAILABLE: 14;
|
|
18
|
+
DATA_LOSS: 15;
|
|
19
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GrpcError = void 0;
|
|
4
|
+
exports.GrpcError = {
|
|
5
|
+
OK: 0,
|
|
6
|
+
CANCELLED: 1,
|
|
7
|
+
UNKNOWN: 2,
|
|
8
|
+
INVALID_ARGUMENT: 3,
|
|
9
|
+
DEADLINE_EXCEEDED: 4,
|
|
10
|
+
NOT_FOUND: 5,
|
|
11
|
+
ALREADY_EXISTS: 6,
|
|
12
|
+
PERMISSION_DENIED: 7,
|
|
13
|
+
UNAUTHENTICATED: 16,
|
|
14
|
+
RESOURCE_EXHAUSTED: 8,
|
|
15
|
+
FAILED_PRECONDITION: 9,
|
|
16
|
+
ABORTED: 10,
|
|
17
|
+
OUT_OF_RANGE: 11,
|
|
18
|
+
UNIMPLEMENTED: 12,
|
|
19
|
+
INTERNAL: 13,
|
|
20
|
+
UNAVAILABLE: 14,
|
|
21
|
+
DATA_LOSS: 15,
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=GrpcError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrpcError.js","sourceRoot":"","sources":["../../../src/zeebe/lib/GrpcError.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACxB,EAAE,EAAE,CAAU;IACd,SAAS,EAAE,CAAU;IACrB,OAAO,EAAE,CAAU;IACnB,gBAAgB,EAAE,CAAU;IAC5B,iBAAiB,EAAE,CAAU;IAC7B,SAAS,EAAE,CAAU;IACrB,cAAc,EAAE,CAAU;IAC1B,iBAAiB,EAAE,CAAU;IAC7B,eAAe,EAAE,EAAW;IAC5B,kBAAkB,EAAE,CAAU;IAC9B,mBAAmB,EAAE,CAAU;IAC/B,OAAO,EAAE,EAAW;IACpB,YAAY,EAAE,EAAW;IACzB,aAAa,EAAE,EAAW;IAC1B,QAAQ,EAAE,EAAW;IACrB,WAAW,EAAE,EAAW;IACxB,SAAS,EAAE,EAAW;CACtB,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Characteristics, State } from './ConnectionFactory';
|
|
2
|
+
import { GrpcClient, GrpcClientCtor } from './GrpcClient';
|
|
3
|
+
import { StatefulLogInterceptor } from './StatefulLogInterceptor';
|
|
4
|
+
export declare class GrpcMiddleware {
|
|
5
|
+
blocking: boolean;
|
|
6
|
+
state: State;
|
|
7
|
+
log: StatefulLogInterceptor;
|
|
8
|
+
private grpcClient;
|
|
9
|
+
private characteristics;
|
|
10
|
+
private blockingTimer?;
|
|
11
|
+
constructor({ characteristics, config, log, }: {
|
|
12
|
+
characteristics: Characteristics;
|
|
13
|
+
config: GrpcClientCtor;
|
|
14
|
+
log: StatefulLogInterceptor;
|
|
15
|
+
});
|
|
16
|
+
getGrpcClient: () => GrpcClient;
|
|
17
|
+
private createInterceptedGrpcClient;
|
|
18
|
+
private emitError;
|
|
19
|
+
private emitReady;
|
|
20
|
+
private handleExceptionalGrpc;
|
|
21
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GrpcMiddleware = void 0;
|
|
4
|
+
const ConnectionStatusEvent_1 = require("./ConnectionStatusEvent");
|
|
5
|
+
const GrpcClient_1 = require("./GrpcClient");
|
|
6
|
+
class GrpcMiddleware {
|
|
7
|
+
constructor({ characteristics, config, log, }) {
|
|
8
|
+
this.getGrpcClient = () => this.grpcClient;
|
|
9
|
+
this.emitError = (err) => this.grpcClient.emit(ConnectionStatusEvent_1.ConnectionStatusEvent.connectionError, err);
|
|
10
|
+
this.emitReady = () => this.grpcClient.emit(ConnectionStatusEvent_1.ConnectionStatusEvent.ready);
|
|
11
|
+
this.handleExceptionalGrpc = ({ callStatus, options, }) => {
|
|
12
|
+
if (options.method_definition.path === 'not-happening') {
|
|
13
|
+
this.log.logDebug('This is to stop the compiler choking on an unused parameter while I figure out which cases to handle.');
|
|
14
|
+
}
|
|
15
|
+
if (callStatus.code === 1 && callStatus.details.includes('503')) {
|
|
16
|
+
this.log.logError('The gateway returned HTTP Error 503 (Bad Gateway). This can be a transient failure while a Kubernetes node in Camunda Cloud is being pre-empted.');
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
this.characteristics = characteristics;
|
|
20
|
+
this.blocking = this.characteristics.startupTime > 0;
|
|
21
|
+
this.state = 'UNKNOWN';
|
|
22
|
+
log.logDebug(`Grpc Middleware blocking: ${this.blocking}`);
|
|
23
|
+
if (this.blocking) {
|
|
24
|
+
this.blockingTimer = setTimeout(() => {
|
|
25
|
+
this.blocking = false;
|
|
26
|
+
log.logDebug(`Grpc Middleware state: ${this.state}`);
|
|
27
|
+
if (this.state === 'ERROR') {
|
|
28
|
+
this.emitError(new Error(`Did not establish connection before deadline ${this.characteristics.startupTime}ms`));
|
|
29
|
+
}
|
|
30
|
+
else if (this.state === 'CONNECTED') {
|
|
31
|
+
this.emitReady();
|
|
32
|
+
}
|
|
33
|
+
else if (this.state === 'UNKNOWN') {
|
|
34
|
+
this.grpcClient.emit(ConnectionStatusEvent_1.ConnectionStatusEvent.unknown);
|
|
35
|
+
}
|
|
36
|
+
}, this.characteristics.startupTime);
|
|
37
|
+
}
|
|
38
|
+
this.log = log;
|
|
39
|
+
this.grpcClient = this.createInterceptedGrpcClient(config);
|
|
40
|
+
}
|
|
41
|
+
createInterceptedGrpcClient(config) {
|
|
42
|
+
const grpcClient = new GrpcClient_1.GrpcClient(config);
|
|
43
|
+
const logInterceptor = this.log;
|
|
44
|
+
const _close = grpcClient.close.bind(grpcClient);
|
|
45
|
+
grpcClient.close = async () => {
|
|
46
|
+
if (this.blockingTimer) {
|
|
47
|
+
clearTimeout(this.blockingTimer);
|
|
48
|
+
}
|
|
49
|
+
_close();
|
|
50
|
+
return null;
|
|
51
|
+
};
|
|
52
|
+
grpcClient.on(GrpcClient_1.MiddlewareSignals.Log.Debug, logInterceptor.logDebug);
|
|
53
|
+
grpcClient.on(GrpcClient_1.MiddlewareSignals.Log.Info, logInterceptor.logInfo);
|
|
54
|
+
grpcClient.on(GrpcClient_1.MiddlewareSignals.Log.Error, logInterceptor.logError);
|
|
55
|
+
grpcClient.on(GrpcClient_1.MiddlewareSignals.Event.Error, (err) => {
|
|
56
|
+
this.state = 'ERROR';
|
|
57
|
+
logInterceptor.connectionError();
|
|
58
|
+
if (!this.blocking) {
|
|
59
|
+
this.emitError(err);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
grpcClient.on(GrpcClient_1.MiddlewareSignals.Event.Ready, () => {
|
|
63
|
+
this.state = 'CONNECTED';
|
|
64
|
+
logInterceptor.ready();
|
|
65
|
+
if (!this.blocking) {
|
|
66
|
+
this.emitReady();
|
|
67
|
+
logInterceptor.logDebug('Middleware emits ready');
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
logInterceptor.logDebug('Blocked ready emit');
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
grpcClient.on(GrpcClient_1.MiddlewareSignals.Event.GrpcInterceptError, this.handleExceptionalGrpc);
|
|
74
|
+
return grpcClient;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.GrpcMiddleware = GrpcMiddleware;
|
|
78
|
+
//# sourceMappingURL=GrpcMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrpcMiddleware.js","sourceRoot":"","sources":["../../../src/zeebe/lib/GrpcMiddleware.ts"],"names":[],"mappings":"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"}
|