@pathscale/wss-adapter 1.0.9 → 1.0.12
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/dist/types/index.d.ts +2 -9
- package/dist/wssAdapter.js +12 -12
- package/package.json +1 -1
- package/types/index.ts +2 -3
- package/wssAdapter.ts +23 -14
package/dist/types/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ interface IService {
|
|
|
9
9
|
}
|
|
10
10
|
declare type ISubscriptions = Record<string, unknown>;
|
|
11
11
|
interface IServiceConfig extends IService {
|
|
12
|
-
subscriptions
|
|
12
|
+
subscriptions?: ISubscriptions;
|
|
13
13
|
onDisconnect: (event: {
|
|
14
14
|
code: number;
|
|
15
15
|
reason: string;
|
|
@@ -26,10 +26,6 @@ interface IConfiguration {
|
|
|
26
26
|
timeout: number;
|
|
27
27
|
services: IServices;
|
|
28
28
|
errors: IErrors;
|
|
29
|
-
onError: (error: {
|
|
30
|
-
error: number;
|
|
31
|
-
message: string;
|
|
32
|
-
}) => void;
|
|
33
29
|
}
|
|
34
30
|
interface IServiceConnect {
|
|
35
31
|
connect<T>(payload: string | string[] | undefined, remote?: string): Promise<T>;
|
|
@@ -57,6 +53,7 @@ interface IPendingPromises {
|
|
|
57
53
|
resolve: (payload: unknown) => void;
|
|
58
54
|
reject: (error: Error) => void;
|
|
59
55
|
toHandler: ReturnType<typeof setTimeout>;
|
|
56
|
+
methodName: string;
|
|
60
57
|
};
|
|
61
58
|
}
|
|
62
59
|
interface IStore {
|
|
@@ -67,9 +64,5 @@ interface IStore {
|
|
|
67
64
|
sessions: ISessions;
|
|
68
65
|
subscriptions: ISubscriptions;
|
|
69
66
|
pendingPromises: IPendingPromises;
|
|
70
|
-
onError: (error: {
|
|
71
|
-
error: number;
|
|
72
|
-
message: string;
|
|
73
|
-
}) => void;
|
|
74
67
|
}
|
|
75
68
|
export { IStore, IWssAdapter, IServiceConfig, IConfiguration, IErrors, IServices, IService, };
|
package/dist/wssAdapter.js
CHANGED
|
@@ -25,15 +25,13 @@ var store = {
|
|
|
25
25
|
},
|
|
26
26
|
sessions: {},
|
|
27
27
|
pendingPromises: {},
|
|
28
|
-
onError: function () { },
|
|
29
28
|
};
|
|
30
29
|
wssAdapter.configure = function (configuration) {
|
|
31
|
-
var timeout = configuration.timeout, services = configuration.services, errors = configuration.errors
|
|
30
|
+
var timeout = configuration.timeout, services = configuration.services, errors = configuration.errors;
|
|
32
31
|
// save some stuff for later retrieval
|
|
33
32
|
store.timeout = timeout;
|
|
34
33
|
store.errors = errors;
|
|
35
34
|
store.services = services;
|
|
36
|
-
store.onError = onError;
|
|
37
35
|
var _loop_1 = function (serviceName, serviceConfig) {
|
|
38
36
|
// construct services objects with two simple functions
|
|
39
37
|
// intended use: `wssAdapter.services.admin.connect([1, 2, 3])` or `wssAdapter.services.auth.connect([1, 2, 3])`
|
|
@@ -112,19 +110,20 @@ var sendHandler = function (serviceName, serviceConfig, methodName, params) {
|
|
|
112
110
|
resolve: resolve,
|
|
113
111
|
reject: reject,
|
|
114
112
|
toHandler: setTimeout(function () {
|
|
115
|
-
reject(new Error(
|
|
113
|
+
reject(new Error(methodName + ' took to long, aborting'));
|
|
116
114
|
}, store.timeout),
|
|
115
|
+
methodName: methodName,
|
|
117
116
|
};
|
|
118
117
|
});
|
|
119
118
|
};
|
|
120
119
|
var receiveHandler = function (event) {
|
|
120
|
+
var _a;
|
|
121
121
|
var response = JSON.parse(event.data);
|
|
122
122
|
if (response.method || response.method === 0) {
|
|
123
|
-
console.log("app::".concat(response.method, " got:"), response);
|
|
123
|
+
console.log("app::".concat(((_a = store.pendingPromises[response.seq]) === null || _a === void 0 ? void 0 : _a.methodName) || response.method, " got:"), response);
|
|
124
124
|
var error = response.method === 0;
|
|
125
125
|
var done = response.method.toString().endsWith('1');
|
|
126
126
|
var resolve = function (payload, code) {
|
|
127
|
-
console.log(code);
|
|
128
127
|
var executor = store.pendingPromises[response.seq];
|
|
129
128
|
clearTimeout(store.pendingPromises[response.seq].toHandler);
|
|
130
129
|
delete store.pendingPromises[response.seq];
|
|
@@ -140,7 +139,6 @@ var receiveHandler = function (event) {
|
|
|
140
139
|
}
|
|
141
140
|
}
|
|
142
141
|
else if (response.resource) {
|
|
143
|
-
console.log("app::".concat(response.resource, " got:"), response);
|
|
144
142
|
var resource = response.resource.split('@')[0];
|
|
145
143
|
//@ts-ignore
|
|
146
144
|
var executor = store.subscriptions.app[resource];
|
|
@@ -153,19 +151,21 @@ function onError(response) {
|
|
|
153
151
|
var errorMsg = (_a = store.errors[errorCode]) !== null && _a !== void 0 ? _a : errorCode;
|
|
154
152
|
if ([45349638, 45349637].includes(errorCode)) {
|
|
155
153
|
store.sequence.decreaseSeq();
|
|
156
|
-
console.log('seq has been decreased because of error');
|
|
157
154
|
}
|
|
158
|
-
(_b = store.onError) === null || _b === void 0 ? void 0 : _b.call(store, {
|
|
159
|
-
error: errorCode,
|
|
160
|
-
message: errorMsg,
|
|
161
|
-
});
|
|
162
155
|
// if there was only one executor saved in store.pendingPromises, then it was that request that failed
|
|
163
156
|
if (Object.keys(store.pendingPromises).length === 1) {
|
|
164
157
|
var onlyKey = Number.parseInt(Object.keys(store.pendingPromises)[0]);
|
|
165
158
|
clearTimeout(store.pendingPromises[onlyKey].toHandler);
|
|
166
159
|
store.pendingPromises[onlyKey].reject(new Error(errorMsg));
|
|
160
|
+
console.error(store.pendingPromises[onlyKey].methodName + ' failed');
|
|
167
161
|
delete store.pendingPromises[onlyKey];
|
|
168
162
|
}
|
|
163
|
+
else if (response.seq > 1 && store.pendingPromises[response.seq]) {
|
|
164
|
+
var executor = store.pendingPromises[response.seq];
|
|
165
|
+
clearTimeout(executor.toHandler);
|
|
166
|
+
executor.reject(new Error("".concat((_b = executor.methodName) !== null && _b !== void 0 ? _b : '', ": ").concat(errorCode || JSON.stringify(response.params))));
|
|
167
|
+
delete store.pendingPromises[response.seq];
|
|
168
|
+
}
|
|
169
169
|
// if there were more than one, there is no way of knowing who failed
|
|
170
170
|
else {
|
|
171
171
|
throw new Error('Unkown request failed');
|
package/package.json
CHANGED
package/types/index.ts
CHANGED
|
@@ -11,7 +11,7 @@ interface IService {
|
|
|
11
11
|
type ISubscriptions = Record<string, unknown>
|
|
12
12
|
|
|
13
13
|
interface IServiceConfig extends IService {
|
|
14
|
-
subscriptions
|
|
14
|
+
subscriptions?: ISubscriptions
|
|
15
15
|
onDisconnect: (event: {
|
|
16
16
|
code: number
|
|
17
17
|
reason: string
|
|
@@ -28,7 +28,6 @@ interface IConfiguration {
|
|
|
28
28
|
timeout: number
|
|
29
29
|
services: IServices
|
|
30
30
|
errors: IErrors
|
|
31
|
-
onError: (error: { error: number; message: string }) => void
|
|
32
31
|
}
|
|
33
32
|
interface IServiceConnect {
|
|
34
33
|
connect<T>(
|
|
@@ -62,6 +61,7 @@ interface IPendingPromises {
|
|
|
62
61
|
resolve: (payload: unknown) => void
|
|
63
62
|
reject: (error: Error) => void
|
|
64
63
|
toHandler: ReturnType<typeof setTimeout>
|
|
64
|
+
methodName: string
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
interface IStore {
|
|
@@ -72,7 +72,6 @@ interface IStore {
|
|
|
72
72
|
sessions: ISessions
|
|
73
73
|
subscriptions: ISubscriptions
|
|
74
74
|
pendingPromises: IPendingPromises
|
|
75
|
-
onError: (error: { error: number; message: string }) => void
|
|
76
75
|
}
|
|
77
76
|
export {
|
|
78
77
|
IStore,
|
package/wssAdapter.ts
CHANGED
|
@@ -29,17 +29,15 @@ const store: IStore = {
|
|
|
29
29
|
|
|
30
30
|
sessions: {},
|
|
31
31
|
pendingPromises: {},
|
|
32
|
-
onError() {},
|
|
33
32
|
}
|
|
34
33
|
|
|
35
34
|
wssAdapter.configure = (configuration) => {
|
|
36
|
-
const { timeout, services, errors
|
|
35
|
+
const { timeout, services, errors } = configuration
|
|
37
36
|
|
|
38
37
|
// save some stuff for later retrieval
|
|
39
38
|
store.timeout = timeout
|
|
40
39
|
store.errors = errors
|
|
41
40
|
store.services = services
|
|
42
|
-
store.onError = onError
|
|
43
41
|
|
|
44
42
|
for (const [serviceName, serviceConfig] of Object.entries(services)) {
|
|
45
43
|
// construct services objects with two simple functions
|
|
@@ -144,8 +142,9 @@ const sendHandler = (
|
|
|
144
142
|
resolve,
|
|
145
143
|
reject,
|
|
146
144
|
toHandler: setTimeout(() => {
|
|
147
|
-
reject(new Error(
|
|
145
|
+
reject(new Error(methodName + ' took to long, aborting'))
|
|
148
146
|
}, store.timeout),
|
|
147
|
+
methodName,
|
|
149
148
|
}
|
|
150
149
|
})
|
|
151
150
|
}
|
|
@@ -154,13 +153,17 @@ const receiveHandler = (event: { data: string }) => {
|
|
|
154
153
|
const response = JSON.parse(event.data)
|
|
155
154
|
|
|
156
155
|
if (response.method || response.method === 0) {
|
|
157
|
-
console.log(
|
|
156
|
+
console.log(
|
|
157
|
+
`app::${
|
|
158
|
+
store.pendingPromises[response.seq]?.methodName || response.method
|
|
159
|
+
} got:`,
|
|
160
|
+
response
|
|
161
|
+
)
|
|
158
162
|
|
|
159
163
|
const error = response.method === 0
|
|
160
164
|
const done = response.method.toString().endsWith('1')
|
|
161
165
|
|
|
162
166
|
const resolve = (payload: unknown, code: number) => {
|
|
163
|
-
console.log(code)
|
|
164
167
|
const executor = store.pendingPromises[response.seq]
|
|
165
168
|
clearTimeout(store.pendingPromises[response.seq].toHandler)
|
|
166
169
|
delete store.pendingPromises[response.seq]
|
|
@@ -175,7 +178,6 @@ const receiveHandler = (event: { data: string }) => {
|
|
|
175
178
|
resolve(response, code)
|
|
176
179
|
}
|
|
177
180
|
} else if (response.resource) {
|
|
178
|
-
console.log(`app::${response.resource} got:`, response)
|
|
179
181
|
const resource = response.resource.split('@')[0]
|
|
180
182
|
//@ts-ignore
|
|
181
183
|
const executor = store.subscriptions.app[resource] as (
|
|
@@ -194,6 +196,7 @@ interface IResponse {
|
|
|
194
196
|
params: {
|
|
195
197
|
error: number
|
|
196
198
|
}
|
|
199
|
+
seq: number
|
|
197
200
|
}
|
|
198
201
|
|
|
199
202
|
function onError(response: IResponse) {
|
|
@@ -202,22 +205,28 @@ function onError(response: IResponse) {
|
|
|
202
205
|
|
|
203
206
|
if ([45349638, 45349637].includes(errorCode)) {
|
|
204
207
|
store.sequence.decreaseSeq()
|
|
205
|
-
console.log('seq has been decreased because of error')
|
|
206
208
|
}
|
|
207
209
|
|
|
208
|
-
store.onError?.({
|
|
209
|
-
error: errorCode,
|
|
210
|
-
message: errorMsg,
|
|
211
|
-
})
|
|
212
|
-
|
|
213
210
|
// if there was only one executor saved in store.pendingPromises, then it was that request that failed
|
|
214
211
|
if (Object.keys(store.pendingPromises).length === 1) {
|
|
215
212
|
const onlyKey = Number.parseInt(Object.keys(store.pendingPromises)[0])
|
|
216
213
|
clearTimeout(store.pendingPromises[onlyKey].toHandler)
|
|
217
214
|
store.pendingPromises[onlyKey].reject(new Error(errorMsg))
|
|
215
|
+
console.error(store.pendingPromises[onlyKey].methodName + ' failed')
|
|
218
216
|
delete store.pendingPromises[onlyKey]
|
|
217
|
+
} else if (response.seq > 1 && store.pendingPromises[response.seq]) {
|
|
218
|
+
const executor = store.pendingPromises[response.seq]
|
|
219
|
+
|
|
220
|
+
clearTimeout(executor.toHandler)
|
|
221
|
+
executor.reject(
|
|
222
|
+
new Error(
|
|
223
|
+
`${executor.methodName ?? ''}: ${
|
|
224
|
+
errorCode || JSON.stringify(response.params)
|
|
225
|
+
}`
|
|
226
|
+
)
|
|
227
|
+
)
|
|
228
|
+
delete store.pendingPromises[response.seq]
|
|
219
229
|
}
|
|
220
|
-
|
|
221
230
|
// if there were more than one, there is no way of knowing who failed
|
|
222
231
|
else {
|
|
223
232
|
throw new Error('Unkown request failed')
|