@simplysm/service-client 13.0.76 → 13.0.77
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 +19 -19
- package/dist/features/event-client.d.ts +2 -2
- package/dist/features/event-client.d.ts.map +1 -1
- package/dist/features/event-client.js +5 -5
- package/dist/features/event-client.js.map +1 -1
- package/dist/features/orm/orm-client-connector.d.ts +3 -3
- package/dist/features/orm/orm-client-connector.d.ts.map +1 -1
- package/dist/features/orm/{orm-connect-config.d.ts → orm-connect-options.d.ts} +2 -2
- package/dist/features/orm/orm-connect-options.d.ts.map +1 -0
- package/dist/features/orm/orm-connect-options.js +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/protocol/client-protocol-wrapper.js +5 -5
- package/dist/protocol/client-protocol-wrapper.js.map +1 -1
- package/dist/service-client.d.ts +9 -9
- package/dist/service-client.d.ts.map +1 -1
- package/dist/service-client.js +5 -5
- package/dist/service-client.js.map +1 -1
- package/dist/transport/service-transport.js +1 -1
- package/dist/transport/service-transport.js.map +1 -1
- package/dist/transport/socket-provider.js +5 -5
- package/dist/transport/socket-provider.js.map +1 -1
- package/dist/types/{connection-config.d.ts → connection-options.d.ts} +2 -2
- package/dist/types/connection-options.d.ts.map +1 -0
- package/dist/types/connection-options.js +1 -0
- package/dist/workers/client-protocol.worker.js +2 -2
- package/dist/workers/client-protocol.worker.js.map +1 -1
- package/package.json +4 -4
- package/src/features/event-client.ts +7 -7
- package/src/features/orm/orm-client-connector.ts +6 -6
- package/src/features/orm/{orm-connect-config.ts → orm-connect-options.ts} +1 -1
- package/src/index.ts +2 -2
- package/src/protocol/client-protocol-wrapper.ts +5 -5
- package/src/service-client.ts +11 -11
- package/src/transport/service-transport.ts +1 -1
- package/src/transport/socket-provider.ts +5 -5
- package/src/types/{connection-config.ts → connection-options.ts} +1 -1
- package/src/workers/client-protocol.worker.ts +2 -2
- package/dist/features/orm/orm-connect-config.d.ts.map +0 -1
- package/dist/features/orm/orm-connect-config.js +0 -1
- package/dist/types/connection-config.d.ts.map +0 -1
- package/dist/types/connection-config.js +0 -1
- /package/dist/features/orm/{orm-connect-config.js.map → orm-connect-options.js.map} +0 -0
- /package/dist/types/{connection-config.js.map → connection-options.js.map} +0 -0
package/README.md
CHANGED
|
@@ -49,7 +49,7 @@ await client.connect();
|
|
|
49
49
|
| Property | Type | Description |
|
|
50
50
|
|---|---|---|
|
|
51
51
|
| `name` | `string` | Client identifier sent to the server |
|
|
52
|
-
| `options` | `
|
|
52
|
+
| `options` | `ServiceConnectionOptions` | Connection configuration (readonly) |
|
|
53
53
|
| `connected` | `boolean` | Whether the WebSocket is currently connected |
|
|
54
54
|
| `hostUrl` | `string` | HTTP base URL derived from `options` (e.g. `http://localhost:3000`) |
|
|
55
55
|
|
|
@@ -59,10 +59,10 @@ await client.connect();
|
|
|
59
59
|
- `close(): Promise<void>` — Closes the WebSocket connection.
|
|
60
60
|
- `auth(token: string): Promise<void>` — Sends an auth token to the server and stores it for automatic re-authentication on reconnect.
|
|
61
61
|
- `send(serviceName, methodName, params, progress?): Promise<unknown>` — Sends a raw RPC call. Prefer `getService()` for type safety.
|
|
62
|
-
- `getService<TService>(serviceName):
|
|
63
|
-
- `
|
|
64
|
-
- `
|
|
65
|
-
- `
|
|
62
|
+
- `getService<TService>(serviceName): ServiceProxy<TService>` — Returns a typed proxy object where every method of `TService` is wrapped to return a `Promise`.
|
|
63
|
+
- `addListener(eventDef, info, cb): Promise<string>` — Subscribes to a server event. Returns a listener key.
|
|
64
|
+
- `removeListener(key): Promise<void>` — Unsubscribes from a server event by key.
|
|
65
|
+
- `emitEvent(eventDef, infoSelector, data): Promise<void>` — Triggers a server event for listeners matching `infoSelector`.
|
|
66
66
|
- `uploadFile(files): Promise<ServiceUploadResult[]>` — Uploads files to the server. Requires prior `auth()` call.
|
|
67
67
|
- `downloadFileBuffer(relPath): Promise<Bytes>` — Downloads a file from the server as a `Uint8Array`.
|
|
68
68
|
|
|
@@ -229,12 +229,12 @@ export interface EventClient {
|
|
|
229
229
|
cb: (data: TData) => PromiseLike<void>,
|
|
230
230
|
): Promise<string>;
|
|
231
231
|
removeListener(key: string): Promise<void>;
|
|
232
|
-
|
|
232
|
+
emit<TInfo, TData>(
|
|
233
233
|
eventDef: ServiceEventDef<TInfo, TData>,
|
|
234
234
|
infoSelector: (item: TInfo) => boolean,
|
|
235
235
|
data: TData,
|
|
236
236
|
): Promise<void>;
|
|
237
|
-
|
|
237
|
+
resubscribeAll(): Promise<void>;
|
|
238
238
|
}
|
|
239
239
|
```
|
|
240
240
|
|
|
@@ -242,8 +242,8 @@ export interface EventClient {
|
|
|
242
242
|
|
|
243
243
|
- `addListener(eventDef, info, cb)` — Registers a listener. `info` is sent to the server to filter which events this client receives. Returns a unique key.
|
|
244
244
|
- `removeListener(key)` — Unregisters a listener by the key returned from `addListener`.
|
|
245
|
-
- `
|
|
246
|
-
- `
|
|
245
|
+
- `emit(eventDef, infoSelector, data)` — Fetches all registered listeners from the server and emits `data` to those where `infoSelector(info)` returns `true`.
|
|
246
|
+
- `resubscribeAll()` — Re-registers all listeners with the server (called automatically on reconnect).
|
|
247
247
|
|
|
248
248
|
---
|
|
249
249
|
|
|
@@ -297,12 +297,12 @@ const fileClient = createFileClient("http://localhost:3000", "my-app");
|
|
|
297
297
|
|
|
298
298
|
---
|
|
299
299
|
|
|
300
|
-
#### `
|
|
300
|
+
#### `OrmConnectOptions<TDef>` (interface)
|
|
301
301
|
|
|
302
302
|
Configuration for connecting to a database through the ORM service.
|
|
303
303
|
|
|
304
304
|
```typescript
|
|
305
|
-
export interface
|
|
305
|
+
export interface OrmConnectOptions<TDef extends DbContextDef<any, any, any>> {
|
|
306
306
|
dbContextDef: TDef;
|
|
307
307
|
connOpt: DbConnOptions & { configName: string };
|
|
308
308
|
dbContextOpt?: {
|
|
@@ -327,11 +327,11 @@ Provides a high-level API for running ORM operations through the service client.
|
|
|
327
327
|
```typescript
|
|
328
328
|
export interface OrmClientConnector {
|
|
329
329
|
connect<TDef extends DbContextDef<any, any, any>, R>(
|
|
330
|
-
config:
|
|
330
|
+
config: OrmConnectOptions<TDef>,
|
|
331
331
|
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
332
332
|
): Promise<R>;
|
|
333
333
|
connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(
|
|
334
|
-
config:
|
|
334
|
+
config: OrmConnectOptions<TDef>,
|
|
335
335
|
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
336
336
|
): Promise<R>;
|
|
337
337
|
}
|
|
@@ -404,12 +404,12 @@ constructor(client: ServiceClient, opt: DbConnOptions & { configName: string })
|
|
|
404
404
|
|
|
405
405
|
## Types
|
|
406
406
|
|
|
407
|
-
### `
|
|
407
|
+
### `ServiceConnectionOptions`
|
|
408
408
|
|
|
409
409
|
```typescript
|
|
410
|
-
import {
|
|
410
|
+
import { ServiceConnectionOptions } from "@simplysm/service-client";
|
|
411
411
|
|
|
412
|
-
export interface
|
|
412
|
+
export interface ServiceConnectionOptions {
|
|
413
413
|
port: number;
|
|
414
414
|
host: string;
|
|
415
415
|
ssl?: boolean;
|
|
@@ -464,13 +464,13 @@ export interface ServiceProgressState {
|
|
|
464
464
|
|
|
465
465
|
---
|
|
466
466
|
|
|
467
|
-
### `
|
|
467
|
+
### `ServiceProxy<TService>`
|
|
468
468
|
|
|
469
469
|
Utility type that wraps all methods of `TService` so their return types become `Promise`. Non-function properties are excluded (`never`). Used as the return type of `ServiceClient.getService()`.
|
|
470
470
|
|
|
471
471
|
```typescript
|
|
472
|
-
import type {
|
|
472
|
+
import type { ServiceProxy } from "@simplysm/service-client";
|
|
473
473
|
|
|
474
|
-
type
|
|
474
|
+
type ProxiedMyService = ServiceProxy<MyService>;
|
|
475
475
|
// Every method now returns Promise<ReturnType>
|
|
476
476
|
```
|
|
@@ -3,8 +3,8 @@ import type { ServiceTransport } from "../transport/service-transport";
|
|
|
3
3
|
export interface EventClient {
|
|
4
4
|
addListener<TInfo, TData>(eventDef: ServiceEventDef<TInfo, TData>, info: TInfo, cb: (data: TData) => PromiseLike<void>): Promise<string>;
|
|
5
5
|
removeListener(key: string): Promise<void>;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
emit<TInfo, TData>(eventDef: ServiceEventDef<TInfo, TData>, infoSelector: (item: TInfo) => boolean, data: TData): Promise<void>;
|
|
7
|
+
resubscribeAll(): Promise<void>;
|
|
8
8
|
}
|
|
9
9
|
export declare function createEventClient(transport: ServiceTransport): EventClient;
|
|
10
10
|
//# sourceMappingURL=event-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-client.d.ts","sourceRoot":"","sources":["..\\..\\src\\features\\event-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKvE,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,KAAK,EAAE,KAAK,EACtB,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,IAAI,EAAE,KAAK,EACX,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,GACrC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,
|
|
1
|
+
{"version":3,"file":"event-client.d.ts","sourceRoot":"","sources":["..\\..\\src\\features\\event-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKvE,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,KAAK,EAAE,KAAK,EACtB,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,IAAI,EAAE,KAAK,EACX,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,GACrC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,KAAK,EACf,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,EACtC,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,WAAW,CAsG1E"}
|
|
@@ -7,7 +7,7 @@ function createEventClient(transport) {
|
|
|
7
7
|
await executeByKey(keys, data);
|
|
8
8
|
});
|
|
9
9
|
async function addListener(eventDef, info, cb) {
|
|
10
|
-
const key = Uuid.
|
|
10
|
+
const key = Uuid.generate().toString();
|
|
11
11
|
const eventName = eventDef.eventName;
|
|
12
12
|
await transport.send({
|
|
13
13
|
name: "evt:add",
|
|
@@ -27,7 +27,7 @@ function createEventClient(transport) {
|
|
|
27
27
|
} catch {
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
async function
|
|
30
|
+
async function emit(eventDef, infoSelector, data) {
|
|
31
31
|
const eventName = eventDef.eventName;
|
|
32
32
|
const listenerInfos = await transport.send({
|
|
33
33
|
name: "evt:gets",
|
|
@@ -41,7 +41,7 @@ function createEventClient(transport) {
|
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
-
async function
|
|
44
|
+
async function resubscribeAll() {
|
|
45
45
|
for (const [key, value] of listenerMap.entries()) {
|
|
46
46
|
try {
|
|
47
47
|
await transport.send({
|
|
@@ -68,8 +68,8 @@ function createEventClient(transport) {
|
|
|
68
68
|
return {
|
|
69
69
|
addListener,
|
|
70
70
|
removeListener,
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
emit,
|
|
72
|
+
resubscribeAll
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/features/event-client.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,YAAY;AAGrB,OAAO,aAAa;AAEpB,MAAM,SAAS,QAAQ,QAAQ,4BAA4B;AAiBpD,SAAS,kBAAkB,WAA0C;AAC1E,QAAM,cAAc,oBAAI,IAGtB;AAEF,YAAU,GAAG,SAAS,OAAO,EAAE,MAAM,KAAK,MAAM;AAC9C,UAAM,aAAa,MAAM,IAAI;AAAA,EAC/B,CAAC;AAED,iBAAe,YACb,UACA,MACA,IACiB;AACjB,UAAM,MAAM,KAAK,
|
|
4
|
+
"mappings": "AAAA,SAAS,YAAY;AAGrB,OAAO,aAAa;AAEpB,MAAM,SAAS,QAAQ,QAAQ,4BAA4B;AAiBpD,SAAS,kBAAkB,WAA0C;AAC1E,QAAM,cAAc,oBAAI,IAGtB;AAEF,YAAU,GAAG,SAAS,OAAO,EAAE,MAAM,KAAK,MAAM;AAC9C,UAAM,aAAa,MAAM,IAAI;AAAA,EAC/B,CAAC;AAED,iBAAe,YACb,UACA,MACA,IACiB;AACjB,UAAM,MAAM,KAAK,SAAS,EAAE,SAAS;AACrC,UAAM,YAAY,SAAS;AAG3B,UAAM,UAAU,KAAK;AAAA,MACnB,MAAM;AAAA,MACN,MAAM,EAAE,KAAK,MAAM,WAAW,KAAK;AAAA,IACrC,CAAC;AAGD,gBAAY,IAAI,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAEA,iBAAe,eAAe,KAA4B;AACxD,gBAAY,OAAO,GAAG;AACtB,QAAI;AACF,YAAM,UAAU,KAAK,EAAE,MAAM,cAAc,MAAM,EAAE,IAAI,EAAE,CAAC;AAAA,IAC5D,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,iBAAe,KACb,UACA,cACA,MACe;AACf,UAAM,YAAY,SAAS;AAG3B,UAAM,gBAAiB,MAAM,UAAU,KAAK;AAAA,MAC1C,MAAM;AAAA,MACN,MAAM,EAAE,MAAM,UAAU;AAAA,IAC1B,CAAC;AAED,UAAM,aAAa,cAChB,OAAO,CAAC,SAAS,aAAa,KAAK,IAAI,CAAC,EACxC,IAAI,CAAC,SAAS,KAAK,GAAG;AAEzB,QAAI,WAAW,SAAS,GAAG;AACzB,YAAM,UAAU,KAAK;AAAA,QACnB,MAAM;AAAA,QACN,MAAM,EAAE,MAAM,YAAY,KAAK;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,EACF;AAGA,iBAAe,iBAAgC;AAC7C,eAAW,CAAC,KAAK,KAAK,KAAK,YAAY,QAAQ,GAAG;AAChD,UAAI;AACF,cAAM,UAAU,KAAK;AAAA,UACnB,MAAM;AAAA,UACN,MAAM,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QACvD,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,eAAO,MAAM,oCAAoC,EAAE,KAAK,WAAW,MAAM,UAAU,CAAC;AAAA,MACtF;AAAA,IACF;AAAA,EACF;AAGA,iBAAe,aAAa,MAAgB,MAA8B;AACxE,eAAW,OAAO,MAAM;AACtB,YAAM,QAAQ,YAAY,IAAI,GAAG;AACjC,UAAI,SAAS,MAAM;AACjB,YAAI;AACF,gBAAM,MAAM,GAAG,IAAI;AAAA,QACrB,SAAS,KAAK;AACZ,iBAAO,MAAM,uBAAuB,EAAE,KAAK,WAAW,MAAM,UAAU,CAAC;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OrmConnectOptions } from "./orm-connect-options";
|
|
2
2
|
import { type DbContextDef, type DbContextInstance } from "@simplysm/orm-common";
|
|
3
3
|
import type { ServiceClient } from "../../service-client";
|
|
4
4
|
export interface OrmClientConnector {
|
|
5
|
-
connect<TDef extends DbContextDef<any, any, any>, R>(config:
|
|
6
|
-
connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(config:
|
|
5
|
+
connect<TDef extends DbContextDef<any, any, any>, R>(config: OrmConnectOptions<TDef>, callback: (db: DbContextInstance<TDef>) => Promise<R> | R): Promise<R>;
|
|
6
|
+
connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(config: OrmConnectOptions<TDef>, callback: (db: DbContextInstance<TDef>) => Promise<R> | R): Promise<R>;
|
|
7
7
|
}
|
|
8
8
|
export declare function createOrmClientConnector(serviceClient: ServiceClient): OrmClientConnector;
|
|
9
9
|
//# sourceMappingURL=orm-client-connector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orm-client-connector.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\features\\orm\\orm-client-connector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"orm-client-connector.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\features\\orm\\orm-client-connector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EACjD,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAC/B,QAAQ,EAAE,CAAC,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,yBAAyB,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EACnE,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAC/B,QAAQ,EAAE,CAAC,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC,CAAC;CACf;AAED,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,aAAa,GAAG,kBAAkB,CAkDzF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DbContextDef } from "@simplysm/orm-common";
|
|
2
2
|
import type { DbConnOptions } from "@simplysm/service-common";
|
|
3
|
-
export interface
|
|
3
|
+
export interface OrmConnectOptions<TDef extends DbContextDef<any, any, any>> {
|
|
4
4
|
dbContextDef: TDef;
|
|
5
5
|
connOpt: DbConnOptions & {
|
|
6
6
|
configName: string;
|
|
@@ -10,4 +10,4 @@ export interface OrmConnectConfig<TDef extends DbContextDef<any, any, any>> {
|
|
|
10
10
|
schema: string;
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
-
//# sourceMappingURL=orm-connect-
|
|
13
|
+
//# sourceMappingURL=orm-connect-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orm-connect-options.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\features\\orm\\orm-connect-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,iBAAiB,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACzE,YAAY,EAAE,IAAI,CAAC;IACnB,OAAO,EAAE,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,YAAY,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=orm-connect-options.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export * from "./types/connection-
|
|
1
|
+
export * from "./types/connection-options";
|
|
2
2
|
export * from "./types/progress.types";
|
|
3
3
|
export * from "./transport/socket-provider";
|
|
4
4
|
export * from "./transport/service-transport";
|
|
5
5
|
export * from "./protocol/client-protocol-wrapper";
|
|
6
6
|
export * from "./features/event-client";
|
|
7
7
|
export * from "./features/file-client";
|
|
8
|
-
export * from "./features/orm/orm-connect-
|
|
8
|
+
export * from "./features/orm/orm-connect-options";
|
|
9
9
|
export * from "./features/orm/orm-client-connector";
|
|
10
10
|
export * from "./features/orm/orm-client-db-context-executor";
|
|
11
11
|
export * from "./service-client";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["..\\src\\index.ts"],"names":[],"mappings":"AACA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["..\\src\\index.ts"],"names":[],"mappings":"AACA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,oCAAoC,CAAC;AAGnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,+CAA+C,CAAC;AAG9D,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export * from "./types/connection-
|
|
1
|
+
export * from "./types/connection-options.js";
|
|
2
2
|
export * from "./types/progress.types.js";
|
|
3
3
|
export * from "./transport/socket-provider.js";
|
|
4
4
|
export * from "./transport/service-transport.js";
|
|
5
5
|
export * from "./protocol/client-protocol-wrapper.js";
|
|
6
6
|
export * from "./features/event-client.js";
|
|
7
7
|
export * from "./features/file-client.js";
|
|
8
|
-
export * from "./features/orm/orm-connect-
|
|
8
|
+
export * from "./features/orm/orm-connect-options.js";
|
|
9
9
|
export * from "./features/orm/orm-client-connector.js";
|
|
10
10
|
export * from "./features/orm/orm-client-db-context-executor.js";
|
|
11
11
|
export * from "./service-client.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LazyGcMap,
|
|
1
|
+
import { LazyGcMap, transfer, Uuid } from "@simplysm/core-common";
|
|
2
2
|
let worker;
|
|
3
3
|
const workerResolvers = new LazyGcMap({
|
|
4
4
|
gcInterval: 5 * 1e3,
|
|
@@ -41,11 +41,11 @@ function getWorker() {
|
|
|
41
41
|
}
|
|
42
42
|
return worker;
|
|
43
43
|
}
|
|
44
|
-
async function runWorker(type, data,
|
|
44
|
+
async function runWorker(type, data, transferables = []) {
|
|
45
45
|
return new Promise((resolve, reject) => {
|
|
46
|
-
const id = Uuid.
|
|
46
|
+
const id = Uuid.generate().toString();
|
|
47
47
|
workerResolvers.set(id, { resolve, reject });
|
|
48
|
-
getWorker().postMessage({ id, type, data }, { transfer });
|
|
48
|
+
getWorker().postMessage({ id, type, data }, { transfer: transferables });
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
function createClientProtocolWrapper(protocol) {
|
|
@@ -72,7 +72,7 @@ function createClientProtocolWrapper(protocol) {
|
|
|
72
72
|
return protocol.decode(bytes);
|
|
73
73
|
}
|
|
74
74
|
const rawResult = await runWorker("decode", bytes, [bytes.buffer]);
|
|
75
|
-
return
|
|
75
|
+
return transfer.decode(rawResult);
|
|
76
76
|
}
|
|
77
77
|
return {
|
|
78
78
|
encode,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/protocol/client-protocol-wrapper.ts"],
|
|
4
|
-
"mappings": "AACA,SAAS,WAAW,
|
|
4
|
+
"mappings": "AACA,SAAS,WAAW,UAAU,YAAY;AAa1C,IAAI;AACJ,MAAM,kBAAkB,IAAI,UAG1B;AAAA,EACA,YAAY,IAAI;AAAA;AAAA,EAChB,YAAY,KAAK;AAAA;AAAA,EACjB,UAAU,CAAC,KAAK,SAAS;AAEvB,SAAK,OAAO,IAAI,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAAA,EAC/D;AACF,CAAC;AAED,IAAI;AAEJ,SAAS,oBAA6B;AACpC,MAAI,oBAAoB,QAAW;AACjC,sBAAkB,OAAO,WAAW;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,YAAgC;AACvC,MAAI,CAAC,kBAAkB,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ;AAGX,aAAS,IAAI,OAAO,IAAI,IAAI,wCAAwC,YAAY,GAAG,GAAG;AAAA,MACpF,MAAM;AAAA,IACR,CAAC;AAED,WAAO,YAAY,CAAC,UAAwB;AAC1C,YAAM,EAAE,IAAI,MAAM,QAAQ,MAAM,IAAI,MAAM;AAO1C,YAAM,WAAW,gBAAgB,IAAI,EAAE;AACvC,UAAI,YAAY,MAAM;AACpB,YAAI,SAAS,WAAW;AACtB,mBAAS,QAAQ,MAAM;AAAA,QACzB,OAAO;AACL,gBAAM,MAAM,IAAI,OAAM,+BAAO,YAAW,sBAAsB;AAC9D,cAAI,QAAQ,+BAAO;AACnB,mBAAS,OAAO,GAAG;AAAA,QACrB;AACA,wBAAgB,OAAO,EAAE;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAMA,eAAe,UACb,MACA,MACA,gBAAgC,CAAC,GACf;AAClB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,KAAK,KAAK,SAAS,EAAE,SAAS;AAEpC,oBAAgB,IAAI,IAAI,EAAE,SAAS,OAAO,CAAC;AAE3C,cAAU,EAAG,YAAY,EAAE,IAAI,MAAM,KAAK,GAAG,EAAE,UAAU,cAAc,CAAC;AAAA,EAC1E,CAAC;AACH;AAEO,SAAS,4BAA4B,UAAkD;AAE5F,QAAM,iBAAiB,KAAK;AAE5B,WAAS,yBAAyB,KAA8B;AAC9D,QAAI,EAAE,UAAU,KAAM,QAAO;AAC7B,UAAM,OAAO,IAAI;AAGjB,QAAI,gBAAgB,WAAY,QAAO;AACvC,QAAI,OAAO,SAAS,YAAY,KAAK,SAAS,eAAgB,QAAO;AACrE,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,aAAO,KAAK,SAAS,OAAQ,KAAK,SAAS,KAAK,KAAK,CAAC,aAAa;AAAA,IACrE;AAEA,WAAO;AAAA,EACT;AAEA,iBAAe,OACb,MACA,SACiD;AAEjD,QAAI,CAAC,kBAAkB,KAAK,CAAC,yBAAyB,OAAO,GAAG;AAC9D,aAAO,SAAS,OAAO,MAAM,OAAO;AAAA,IACtC;AAKA,WAAQ,MAAM,UAAU,UAAU,EAAE,MAAM,QAAQ,CAAC;AAAA,EAIrD;AAEA,iBAAe,OAAO,OAAmE;AACvF,UAAM,YAAY,MAAM;AAGxB,QAAI,CAAC,kBAAkB,KAAK,aAAa,gBAAgB;AACvD,aAAO,SAAS,OAAO,KAAK;AAAA,IAC9B;AAIA,UAAM,YAAY,MAAM,UAAU,UAAU,OAAO,CAAC,MAAM,MAAM,CAAC;AAGjE,WAAO,SAAS,OAAO,SAAS;AAAA,EAClC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/service-client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from "@simplysm/core-common";
|
|
2
2
|
import type { ServiceEventDef } from "@simplysm/service-common";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ServiceConnectionOptions } from "./types/connection-options";
|
|
4
4
|
import type { ServiceProgress, ServiceProgressState } from "./types/progress.types";
|
|
5
5
|
interface ServiceClientEvents {
|
|
6
6
|
"request-progress": ServiceProgressState;
|
|
@@ -10,7 +10,7 @@ interface ServiceClientEvents {
|
|
|
10
10
|
}
|
|
11
11
|
export declare class ServiceClient extends EventEmitter<ServiceClientEvents> {
|
|
12
12
|
readonly name: string;
|
|
13
|
-
readonly options:
|
|
13
|
+
readonly options: ServiceConnectionOptions;
|
|
14
14
|
private readonly _socket;
|
|
15
15
|
private readonly _transport;
|
|
16
16
|
private readonly _eventClient;
|
|
@@ -18,24 +18,24 @@ export declare class ServiceClient extends EventEmitter<ServiceClientEvents> {
|
|
|
18
18
|
private _authToken?;
|
|
19
19
|
get connected(): boolean;
|
|
20
20
|
get hostUrl(): string;
|
|
21
|
-
constructor(name: string, options:
|
|
22
|
-
getService<TService>(serviceName: string):
|
|
21
|
+
constructor(name: string, options: ServiceConnectionOptions);
|
|
22
|
+
getService<TService>(serviceName: string): ServiceProxy<TService>;
|
|
23
23
|
connect(): Promise<void>;
|
|
24
24
|
close(): Promise<void>;
|
|
25
25
|
send(serviceName: string, methodName: string, params: unknown[], progress?: ServiceProgress): Promise<unknown>;
|
|
26
26
|
auth(token: string): Promise<void>;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
addListener<TInfo, TData>(eventDef: ServiceEventDef<TInfo, TData>, info: TInfo, cb: (data: TData) => PromiseLike<void>): Promise<string>;
|
|
28
|
+
removeListener(key: string): Promise<void>;
|
|
29
|
+
emitEvent<TInfo, TData>(eventDef: ServiceEventDef<TInfo, TData>, infoSelector: (item: TInfo) => boolean, data: TData): Promise<void>;
|
|
30
30
|
uploadFile(files: File[] | FileList | {
|
|
31
31
|
name: string;
|
|
32
32
|
data: BlobPart;
|
|
33
33
|
}[]): Promise<import("@simplysm/service-common").ServiceUploadResult[]>;
|
|
34
34
|
downloadFileBuffer(relPath: string): Promise<import("@simplysm/core-common").Bytes>;
|
|
35
35
|
}
|
|
36
|
-
export type
|
|
36
|
+
export type ServiceProxy<TService> = {
|
|
37
37
|
[K in keyof TService]: TService[K] extends (...args: infer P) => infer R ? (...args: P) => Promise<Awaited<R>> : never;
|
|
38
38
|
};
|
|
39
|
-
export declare function createServiceClient(name: string, options:
|
|
39
|
+
export declare function createServiceClient(name: string, options: ServiceConnectionOptions): ServiceClient;
|
|
40
40
|
export {};
|
|
41
41
|
//# sourceMappingURL=service-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-client.d.ts","sourceRoot":"","sources":["..\\src\\service-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"service-client.d.ts","sourceRoot":"","sources":["..\\src\\service-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AASpF,UAAU,mBAAmB;IAC3B,kBAAkB,EAAE,oBAAoB,CAAC;IACzC,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,OAAO,EAAE,WAAW,GAAG,QAAQ,GAAG,cAAc,CAAC;IACjD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvB;AAED,qBAAa,aAAc,SAAQ,YAAY,CAAC,mBAAmB,CAAC;aAmBhD,IAAI,EAAE,MAAM;aACZ,OAAO,EAAE,wBAAwB;IAlBnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAEzC,OAAO,CAAC,UAAU,CAAC,CAAS;IAG5B,IAAI,SAAS,YAEZ;IACD,IAAI,OAAO,WAGV;gBAGiB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,wBAAwB;IAsCnD,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC;IAW3D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EAAE,EACjB,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,CAAC,OAAO,CAAC;IAmBb,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlC,WAAW,CAAC,KAAK,EAAE,KAAK,EAC5B,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,IAAI,EAAE,KAAK,EACX,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,GACrC,OAAO,CAAC,MAAM,CAAC;IAKZ,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,SAAS,CAAC,KAAK,EAAE,KAAK,EAC1B,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,EACtC,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,IAAI,CAAC;IAIV,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE;IASxE,kBAAkB,CAAC,OAAO,EAAE,MAAM;CAGzC;AAGD,MAAM,MAAM,YAAY,CAAC,QAAQ,IAAI;KAClC,CAAC,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACpE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACnC,KAAK;CACV,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,aAAa,CAElG"}
|
package/dist/service-client.js
CHANGED
|
@@ -27,7 +27,7 @@ class ServiceClient extends EventEmitter {
|
|
|
27
27
|
if (this._authToken != null) {
|
|
28
28
|
await this.auth(this._authToken);
|
|
29
29
|
}
|
|
30
|
-
await this._eventClient.
|
|
30
|
+
await this._eventClient.resubscribeAll();
|
|
31
31
|
} catch (err) {
|
|
32
32
|
logger.error("Failed to recover event listeners", err);
|
|
33
33
|
}
|
|
@@ -92,15 +92,15 @@ class ServiceClient extends EventEmitter {
|
|
|
92
92
|
await this._transport.send({ name: "auth", body: token });
|
|
93
93
|
this._authToken = token;
|
|
94
94
|
}
|
|
95
|
-
async
|
|
95
|
+
async addListener(eventDef, info, cb) {
|
|
96
96
|
if (!this.connected) throw new Error("Not connected to the server.");
|
|
97
97
|
return this._eventClient.addListener(eventDef, info, cb);
|
|
98
98
|
}
|
|
99
|
-
async
|
|
99
|
+
async removeListener(key) {
|
|
100
100
|
await this._eventClient.removeListener(key);
|
|
101
101
|
}
|
|
102
|
-
async
|
|
103
|
-
await this._eventClient.
|
|
102
|
+
async emitEvent(eventDef, infoSelector, data) {
|
|
103
|
+
await this._eventClient.emit(eventDef, infoSelector, data);
|
|
104
104
|
}
|
|
105
105
|
async uploadFile(files) {
|
|
106
106
|
if (this._authToken == null) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/service-client.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,aAAa;AACpB,SAAS,oBAAoB;AAE7B,SAAS,6BAA6B;AAItC,SAAS,8BAAqD;AAC9D,SAAS,4BAAiD;AAC1D,SAAS,yBAA2C;AACpD,SAAS,wBAAyC;AAClD,SAAS,mCAAmC;AAE5C,MAAM,SAAS,QAAQ,QAAQ,8BAA8B;AAStD,MAAM,sBAAsB,aAAkC;AAAA,EAkBnE,YACkB,MACA,SAChB;AACA,UAAM;AAHU;AACA;AAIhB,UAAM,aAAa,QAAQ,MAAM,QAAQ;AACzC,UAAM,QAAQ,GAAG,UAAU,MAAM,QAAQ,IAAI,IAAI,QAAQ,IAAI;AAG7D,SAAK,UAAU,qBAAqB,OAAO,KAAK,MAAM,KAAK,QAAQ,qBAAqB,EAAE;AAC1F,UAAM,WAAW,sBAAsB;AACvC,UAAM,kBAAkB,4BAA4B,QAAQ;AAC5D,SAAK,aAAa,uBAAuB,KAAK,SAAS,eAAe;AACtE,SAAK,eAAe,kBAAkB,KAAK,UAAU;AACrD,SAAK,cAAc,iBAAiB,KAAK,SAAS,KAAK,IAAI;AAG3D,SAAK,QAAQ,GAAG,SAAS,OAAO,UAAU;AACxC,WAAK,KAAK,SAAS,KAAK;AAGxB,UAAI,UAAU,aAAa;AACzB,YAAI;AACF,cAAI,KAAK,cAAc,MAAM;AAC3B,kBAAM,KAAK,KAAK,KAAK,UAAU;AAAA,UACjC;AACA,gBAAM,KAAK,aAAa,
|
|
4
|
+
"mappings": "AAAA,OAAO,aAAa;AACpB,SAAS,oBAAoB;AAE7B,SAAS,6BAA6B;AAItC,SAAS,8BAAqD;AAC9D,SAAS,4BAAiD;AAC1D,SAAS,yBAA2C;AACpD,SAAS,wBAAyC;AAClD,SAAS,mCAAmC;AAE5C,MAAM,SAAS,QAAQ,QAAQ,8BAA8B;AAStD,MAAM,sBAAsB,aAAkC;AAAA,EAkBnE,YACkB,MACA,SAChB;AACA,UAAM;AAHU;AACA;AAIhB,UAAM,aAAa,QAAQ,MAAM,QAAQ;AACzC,UAAM,QAAQ,GAAG,UAAU,MAAM,QAAQ,IAAI,IAAI,QAAQ,IAAI;AAG7D,SAAK,UAAU,qBAAqB,OAAO,KAAK,MAAM,KAAK,QAAQ,qBAAqB,EAAE;AAC1F,UAAM,WAAW,sBAAsB;AACvC,UAAM,kBAAkB,4BAA4B,QAAQ;AAC5D,SAAK,aAAa,uBAAuB,KAAK,SAAS,eAAe;AACtE,SAAK,eAAe,kBAAkB,KAAK,UAAU;AACrD,SAAK,cAAc,iBAAiB,KAAK,SAAS,KAAK,IAAI;AAG3D,SAAK,QAAQ,GAAG,SAAS,OAAO,UAAU;AACxC,WAAK,KAAK,SAAS,KAAK;AAGxB,UAAI,UAAU,aAAa;AACzB,YAAI;AACF,cAAI,KAAK,cAAc,MAAM;AAC3B,kBAAM,KAAK,KAAK,KAAK,UAAU;AAAA,UACjC;AACA,gBAAM,KAAK,aAAa,eAAe;AAAA,QACzC,SAAS,KAAK;AACZ,iBAAO,MAAM,qCAAqC,GAAG;AAAA,QACvD;AAAA,MACF;AAAA,IACF,CAAC;AAED,SAAK,WAAW,GAAG,UAAU,CAAC,iBAAiB;AAC7C,WAAK,KAAK,UAAU,YAAY;AAAA,IAClC,CAAC;AAAA,EACH;AAAA;AAAA,EArDiB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET;AAAA;AAAA,EAGR,IAAI,YAAY;AACd,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EACA,IAAI,UAAU;AACZ,UAAM,eAAe,KAAK,QAAQ,MAAM,UAAU;AAClD,WAAO,GAAG,YAAY,MAAM,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI;AAAA,EACpE;AAAA;AAAA,EA0CA,WAAqB,aAA6C;AAChE,WAAO,IAAI,MAAM,CAAC,GAA6B;AAAA,MAC7C,KAAK,CAAC,SAAS,SAAS;AACtB,cAAM,aAAa,OAAO,IAAI;AAC9B,eAAO,UAAU,WAAsB;AACrC,iBAAO,KAAK,KAAK,aAAa,YAAY,MAAM;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,QAAQ,QAAQ;AAAA,EAC7B;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,KAAK,QAAQ,MAAM;AAAA,EAC3B;AAAA,EAEA,MAAM,KACJ,aACA,YACA,QACA,UACkB;AAClB,WAAO,KAAK,WAAW;AAAA,MACrB;AAAA,QACE,MAAM,GAAG,WAAW,IAAI,UAAU;AAAA,QAClC,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS,CAAC,UAAU;AA/G5B;AAgHU,eAAK,KAAK,oBAAoB,KAAK;AACnC,qDAAU,YAAV,kCAAoB;AAAA,QACtB;AAAA,QACA,UAAU,CAAC,UAAU;AAnH7B;AAoHU,eAAK,KAAK,qBAAqB,KAAK;AACpC,qDAAU,aAAV,kCAAqB;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,OAA8B;AACvC,UAAM,KAAK,WAAW,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC;AACxD,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,YACJ,UACA,MACA,IACiB;AACjB,QAAI,CAAC,KAAK,UAAW,OAAM,IAAI,MAAM,8BAA8B;AACnE,WAAO,KAAK,aAAa,YAAY,UAAU,MAAM,EAAE;AAAA,EACzD;AAAA,EAEA,MAAM,eAAe,KAA4B;AAC/C,UAAM,KAAK,aAAa,eAAe,GAAG;AAAA,EAC5C;AAAA,EAEA,MAAM,UACJ,UACA,cACA,MACe;AACf,UAAM,KAAK,aAAa,KAAK,UAAU,cAAc,IAAI;AAAA,EAC3D;AAAA,EAEA,MAAM,WAAW,OAA+D;AAC9E,QAAI,KAAK,cAAc,MAAM;AAC3B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,YAAY,OAAO,OAAO,KAAK,UAAU;AAAA,EACvD;AAAA,EAEA,MAAM,mBAAmB,SAAiB;AACxC,WAAO,KAAK,YAAY,SAAS,OAAO;AAAA,EAC1C;AACF;AASO,SAAS,oBAAoB,MAAc,SAAkD;AAClG,SAAO,IAAI,cAAc,MAAM,OAAO;AACxC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -11,7 +11,7 @@ function createServiceTransport(socket, protocol) {
|
|
|
11
11
|
});
|
|
12
12
|
async function send(message, progress) {
|
|
13
13
|
var _a, _b;
|
|
14
|
-
const uuid = Uuid.
|
|
14
|
+
const uuid = Uuid.generate().toString();
|
|
15
15
|
const responsePromise = new Promise((resolve, reject) => {
|
|
16
16
|
pendingRequests.set(uuid, { resolve, reject, progress });
|
|
17
17
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/transport/service-transport.ts"],
|
|
4
|
-
"mappings": "AACA,SAAS,cAAc,YAAY;AA2B5B,SAAS,uBACd,QACA,UACkB;AAClB,QAAM,UAAU,IAAI,aAAqC;AAEzD,QAAM,kBAAkB,oBAAI,IAO1B;AAGF,QAAM,4BAA4B,oBAAI,IAAoB;AAE1D,SAAO,GAAG,WAAW,SAAS;AAG9B,SAAO,GAAG,SAAS,CAAC,UAAU;AAC5B,QAAI,UAAU,YAAY,UAAU,gBAAgB;AAClD,wBAAkB,wBAAwB;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,iBAAe,KAAK,SAA+B,UAA8C;AAvDnG;AAwDI,UAAM,OAAO,KAAK,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventEmitter, Uuid,
|
|
1
|
+
import { EventEmitter, Uuid, wait } from "@simplysm/core-common";
|
|
2
2
|
import consola from "consola";
|
|
3
3
|
const logger = consola.withTag("service-client:SocketProvider");
|
|
4
4
|
function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
@@ -33,14 +33,14 @@ function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
|
33
33
|
const currentWs = ws;
|
|
34
34
|
if (currentWs != null) {
|
|
35
35
|
currentWs.close();
|
|
36
|
-
await
|
|
36
|
+
await wait.until(() => currentWs.readyState === WebSocket.CLOSED, 100, 30).catch(() => {
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
emitter.emit("state", "closed");
|
|
40
40
|
}
|
|
41
41
|
async function send(data) {
|
|
42
42
|
try {
|
|
43
|
-
await
|
|
43
|
+
await wait.until(() => isConnected(), void 0, 50);
|
|
44
44
|
} catch {
|
|
45
45
|
throw new Error("Not connected to the server. Please check your internet connection.");
|
|
46
46
|
}
|
|
@@ -51,7 +51,7 @@ function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
|
51
51
|
currentWs.send(data);
|
|
52
52
|
}
|
|
53
53
|
async function createSocket() {
|
|
54
|
-
const clientId = Uuid.
|
|
54
|
+
const clientId = Uuid.generate().toString();
|
|
55
55
|
const params = new URLSearchParams({
|
|
56
56
|
ver: "2",
|
|
57
57
|
clientId,
|
|
@@ -98,7 +98,7 @@ function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
|
98
98
|
reconnectCount,
|
|
99
99
|
maxReconnectCount
|
|
100
100
|
});
|
|
101
|
-
await
|
|
101
|
+
await wait.time(RECONNECT_DELAY);
|
|
102
102
|
try {
|
|
103
103
|
await createSocket();
|
|
104
104
|
startHeartbeat();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/transport/socket-provider.ts"],
|
|
4
|
-
"mappings": "AACA,SAAS,cAAc,MAAM,
|
|
4
|
+
"mappings": "AACA,SAAS,cAAc,MAAM,YAAY;AACzC,OAAO,aAAa;AAEpB,MAAM,SAAS,QAAQ,QAAQ,+BAA+B;AAuBvD,SAAS,qBACd,KACA,YACA,mBACgB;AAEhB,QAAM,oBAAoB;AAC1B,QAAM,qBAAqB;AAC3B,QAAM,kBAAkB;AAGxB,QAAM,cAAc,IAAI,WAAW,CAAC,CAAI,CAAC;AAGzC,MAAI;AACJ,MAAI,gBAAgB;AACpB,MAAI,iBAAiB;AACrB,MAAI;AACJ,MAAI,oBAAoB,KAAK,IAAI;AAEjC,QAAM,UAAU,IAAI,aAAmC;AAEvD,WAAS,cAAuB;AAC9B,YAAO,yBAAI,gBAAe,UAAU;AAAA,EACtC;AAEA,iBAAe,UAAyB;AACtC,QAAI,YAAY,EAAG;AACnB,oBAAgB;AAEhB,QAAI;AACF,YAAM,aAAa;AACnB,qBAAe;AACf,uBAAiB;AACjB,cAAQ,KAAK,SAAS,WAAW;AAAA,IACnC,SAAS,KAAK;AAEZ,YAAM;AAAA,IACR;AAAA,EACF;AAEA,iBAAe,QAAuB;AACpC,oBAAgB;AAChB,kBAAc;AACd,UAAM,YAAY;AAClB,QAAI,aAAa,MAAM;AACrB,gBAAU,MAAM;AAEhB,YAAM,KAAK,MAAM,MAAM,UAAU,eAAe,UAAU,QAAQ,KAAK,EAAE,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC3F;AACA,YAAQ,KAAK,SAAS,QAAQ;AAAA,EAChC;AAEA,iBAAe,KAAK,MAA4B;AAC9C,QAAI;AACF,YAAM,KAAK,MAAM,MAAM,YAAY,GAAG,QAAW,EAAE;AAAA,IACrD,QAAQ;AACN,YAAM,IAAI,MAAM,qEAAqE;AAAA,IACvF;AACA,UAAM,YAAY;AAClB,QAAI,aAAa,MAAM;AACrB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,cAAU,KAAK,IAAI;AAAA,EACrB;AAEA,iBAAe,eAA8B;AAC3C,UAAM,WAAW,KAAK,SAAS,EAAE,SAAS;AAC1C,UAAM,SAAS,IAAI,gBAAgB;AAAA,MACjC,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,YAAM,QAAQ,IAAI,UAAU,GAAG,GAAG,IAAI,OAAO,SAAS,CAAC,EAAE;AACzD,YAAM,aAAa;AAEnB,YAAM,SAAS,MAAM;AACnB,aAAK;AACL,gBAAQ;AAAA,MACV;AAEA,YAAM,UAAU,CAAC,UAAiB;AAEhC,YAAI,CAAC,YAAY,GAAG;AAClB,gBAAM,aAAa;AACnB,gBAAM,MAAM,WAAW;AACvB,iBAAO,IAAI,MAAM,GAAG,CAAC;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AAGD,UAAM,YAAY;AAClB,QAAI,aAAa,MAAM;AACrB,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAEA,cAAU,YAAY,CAAC,UAAU;AAC/B,0BAAoB,KAAK,IAAI;AAE7B,YAAM,OAAO,MAAM;AACnB,YAAM,QAAQ,IAAI,WAAW,IAAI;AAKjC,UAAI,MAAM,WAAW,KAAK,MAAM,CAAC,MAAM,EAAM;AAE7C,cAAQ,KAAK,WAAW,KAAK;AAAA,IAC/B;AAEA,cAAU,UAAU,YAAY;AAC9B,oBAAc;AACd,UAAI,CAAC,eAAe;AAClB,cAAM,aAAa;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,iBAAe,eAA8B;AAE3C,WAAO,iBAAiB,mBAAmB;AACzC;AACA,cAAQ,KAAK,SAAS,cAAc;AACpC,aAAO,KAAK,mDAAmD;AAAA,QAC7D;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,KAAK,KAAK,eAAe;AAE/B,UAAI;AACF,cAAM,aAAa;AACnB,uBAAe;AACf,yBAAiB;AACjB,gBAAQ,KAAK,SAAS,WAAW;AACjC,eAAO,KAAK,oCAAoC;AAChD;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAGA,WAAO,MAAM,4CAA4C;AACzD,YAAQ,KAAK,SAAS,QAAQ;AAAA,EAChC;AAEA,WAAS,iBAAuB;AAC9B,kBAAc;AACd,wBAAoB,KAAK,IAAI;AAE7B,qBAAiB,YAAY,MAAM;AAEjC,UAAI,KAAK,IAAI,IAAI,oBAAoB,mBAAmB;AACtD,eAAO,KAAK,qCAAqC;AAGjD,sBAAc;AAGd,YAAI,MAAM,MAAM;AACd,gBAAM,SAAS;AACf,eAAK;AAIL,iBAAO,UAAU;AACjB,iBAAO,UAAU;AACjB,iBAAO,YAAY;AAGnB,cAAI;AACF,mBAAO,MAAM;AAAA,UACf,QAAQ;AAAA,UAER;AAGA,cAAI,CAAC,eAAe;AAClB,iBAAK,aAAa;AAAA,UACpB;AAAA,QACF;AACA;AAAA,MACF;AAGA,YAAM,YAAY;AAClB,UAAI,YAAY,KAAK,aAAa,MAAM;AACtC,YAAI;AACF,oBAAU,KAAK,WAAW;AAAA,QAC5B,SAAS,KAAK;AACZ,iBAAO,KAAK,oBAAoB,GAAG;AAAA,QACrC;AAAA,MACF;AAAA,IACF,GAAG,kBAAkB;AAAA,EACvB;AAEA,WAAS,gBAAsB;AAC7B,QAAI,kBAAkB,MAAM;AAC1B,oBAAc,cAAc;AAC5B,uBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,IAAI,YAAY;AACd,aAAO,YAAY;AAAA,IACrB;AAAA,IACA,IAAI,QAAQ,GAAG,KAAK,OAAO;AAAA,IAC3B,KAAK,QAAQ,IAAI,KAAK,OAAO;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export interface
|
|
1
|
+
export interface ServiceConnectionOptions {
|
|
2
2
|
port: number;
|
|
3
3
|
host: string;
|
|
4
4
|
ssl?: boolean;
|
|
5
5
|
/** Set to 0 to disable reconnect; disconnects immediately */
|
|
6
6
|
maxReconnectCount?: number;
|
|
7
7
|
}
|
|
8
|
-
//# sourceMappingURL=connection-
|
|
8
|
+
//# sourceMappingURL=connection-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-options.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\connection-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=connection-options.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createServiceProtocol } from "@simplysm/service-common";
|
|
2
|
-
import {
|
|
2
|
+
import { transfer } from "@simplysm/core-common";
|
|
3
3
|
const protocol = createServiceProtocol();
|
|
4
4
|
self.onmessage = (event) => {
|
|
5
5
|
const { id, type, data } = event.data;
|
|
@@ -14,7 +14,7 @@ self.onmessage = (event) => {
|
|
|
14
14
|
} else {
|
|
15
15
|
const bytes = new Uint8Array(data);
|
|
16
16
|
const decodeResult = protocol.decode(bytes);
|
|
17
|
-
const encoded =
|
|
17
|
+
const encoded = transfer.encode(decodeResult);
|
|
18
18
|
result = encoded.result;
|
|
19
19
|
transferList = encoded.transferList;
|
|
20
20
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/workers/client-protocol.worker.ts"],
|
|
4
|
-
"mappings": "AAEA,SAAS,6BAA6B;AACtC,SAAS,
|
|
4
|
+
"mappings": "AAEA,SAAS,6BAA6B;AACtC,SAAS,gBAAgB;AAEzB,MAAM,WAAW,sBAAsB;AAEvC,KAAK,YAAY,CAAC,UAAwB;AACxC,QAAM,EAAE,IAAI,MAAM,KAAK,IAAI,MAAM;AAMjC,MAAI;AACF,QAAI;AACJ,QAAI,eAA+B,CAAC;AAEpC,QAAI,SAAS,UAAU;AAGrB,YAAM,EAAE,MAAM,QAAQ,IAAI;AAI1B,YAAM,EAAE,OAAO,IAAI,SAAS,OAAO,MAAM,OAAO;AAGhD,eAAS;AAET,qBAAe,OAAO,IAAI,CAAC,UAAU,MAAM,MAAqB;AAAA,IAClE,OAAO;AAGL,YAAM,QAAQ,IAAI,WAAW,IAAmB;AAChD,YAAM,eAAe,SAAS,OAAO,KAAK;AAG1C,YAAM,UAAU,SAAS,OAAO,YAAY;AAC5C,eAAS,QAAQ;AACjB,qBAAe,QAAQ;AAAA,IACzB;AAGA,SAAK,YAAY,EAAE,IAAI,MAAM,WAAW,OAAO,GAAG,EAAE,UAAU,aAAa,CAAC;AAAA,EAC9E,SAAS,KAAK;AAEZ,SAAK,YAAY;AAAA,MACf;AAAA,MACA,MAAM;AAAA,MACN,OACE,eAAe,QACX,EAAE,SAAS,IAAI,SAAS,OAAO,IAAI,MAAM,IACzC,EAAE,SAAS,OAAO,GAAG,EAAE;AAAA,IAC/B,CAAC;AAAA,EACH;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/service-client",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.77",
|
|
4
4
|
"description": "Simplysm package - Service module (client)",
|
|
5
5
|
"author": "simplysm",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"sideEffects": false,
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"consola": "^3.4.2",
|
|
22
|
-
"@simplysm/core-common": "13.0.
|
|
23
|
-
"@simplysm/orm-common": "13.0.
|
|
24
|
-
"@simplysm/service-common": "13.0.
|
|
22
|
+
"@simplysm/core-common": "13.0.77",
|
|
23
|
+
"@simplysm/orm-common": "13.0.77",
|
|
24
|
+
"@simplysm/service-common": "13.0.77"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/ws": "^8.18.1",
|
|
@@ -12,12 +12,12 @@ export interface EventClient {
|
|
|
12
12
|
cb: (data: TData) => PromiseLike<void>,
|
|
13
13
|
): Promise<string>;
|
|
14
14
|
removeListener(key: string): Promise<void>;
|
|
15
|
-
|
|
15
|
+
emit<TInfo, TData>(
|
|
16
16
|
eventDef: ServiceEventDef<TInfo, TData>,
|
|
17
17
|
infoSelector: (item: TInfo) => boolean,
|
|
18
18
|
data: TData,
|
|
19
19
|
): Promise<void>;
|
|
20
|
-
|
|
20
|
+
resubscribeAll(): Promise<void>;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
export function createEventClient(transport: ServiceTransport): EventClient {
|
|
@@ -35,7 +35,7 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
35
35
|
info: TInfo,
|
|
36
36
|
cb: (data: TData) => PromiseLike<void>,
|
|
37
37
|
): Promise<string> {
|
|
38
|
-
const key = Uuid.
|
|
38
|
+
const key = Uuid.generate().toString();
|
|
39
39
|
const eventName = eventDef.eventName;
|
|
40
40
|
|
|
41
41
|
// Send registration request to server
|
|
@@ -63,7 +63,7 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
async function
|
|
66
|
+
async function emit<TInfo, TData>(
|
|
67
67
|
eventDef: ServiceEventDef<TInfo, TData>,
|
|
68
68
|
infoSelector: (item: TInfo) => boolean,
|
|
69
69
|
data: TData,
|
|
@@ -89,7 +89,7 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
// Called on reconnect
|
|
92
|
-
async function
|
|
92
|
+
async function resubscribeAll(): Promise<void> {
|
|
93
93
|
for (const [key, value] of listenerMap.entries()) {
|
|
94
94
|
try {
|
|
95
95
|
await transport.send({
|
|
@@ -119,7 +119,7 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
119
119
|
return {
|
|
120
120
|
addListener,
|
|
121
121
|
removeListener,
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
emit,
|
|
123
|
+
resubscribeAll,
|
|
124
124
|
};
|
|
125
125
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { OrmClientDbContextExecutor } from "./orm-client-db-context-executor";
|
|
2
|
-
import type {
|
|
2
|
+
import type { OrmConnectOptions } from "./orm-connect-options";
|
|
3
3
|
import { createDbContext, type DbContextDef, type DbContextInstance } from "@simplysm/orm-common";
|
|
4
4
|
import type { ServiceClient } from "../../service-client";
|
|
5
5
|
|
|
6
6
|
export interface OrmClientConnector {
|
|
7
7
|
connect<TDef extends DbContextDef<any, any, any>, R>(
|
|
8
|
-
config:
|
|
8
|
+
config: OrmConnectOptions<TDef>,
|
|
9
9
|
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
10
10
|
): Promise<R>;
|
|
11
11
|
connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(
|
|
12
|
-
config:
|
|
12
|
+
config: OrmConnectOptions<TDef>,
|
|
13
13
|
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
14
14
|
): Promise<R>;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export function createOrmClientConnector(serviceClient: ServiceClient): OrmClientConnector {
|
|
18
18
|
async function _createConfiguredDb<TDef extends DbContextDef<any, any, any>>(
|
|
19
|
-
config:
|
|
19
|
+
config: OrmConnectOptions<TDef>,
|
|
20
20
|
): Promise<DbContextInstance<TDef>> {
|
|
21
21
|
const executor = new OrmClientDbContextExecutor(serviceClient, config.connOpt);
|
|
22
22
|
const info = await executor.getInfo();
|
|
@@ -31,7 +31,7 @@ export function createOrmClientConnector(serviceClient: ServiceClient): OrmClien
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
async function connect<TDef extends DbContextDef<any, any, any>, R>(
|
|
34
|
-
config:
|
|
34
|
+
config: OrmConnectOptions<TDef>,
|
|
35
35
|
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
36
36
|
): Promise<R> {
|
|
37
37
|
const db = await _createConfiguredDb(config);
|
|
@@ -53,7 +53,7 @@ export function createOrmClientConnector(serviceClient: ServiceClient): OrmClien
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
async function connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(
|
|
56
|
-
config:
|
|
56
|
+
config: OrmConnectOptions<TDef>,
|
|
57
57
|
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
58
58
|
): Promise<R> {
|
|
59
59
|
const db = await _createConfiguredDb(config);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { DbContextDef } from "@simplysm/orm-common";
|
|
2
2
|
import type { DbConnOptions } from "@simplysm/service-common";
|
|
3
3
|
|
|
4
|
-
export interface
|
|
4
|
+
export interface OrmConnectOptions<TDef extends DbContextDef<any, any, any>> {
|
|
5
5
|
dbContextDef: TDef;
|
|
6
6
|
connOpt: DbConnOptions & { configName: string };
|
|
7
7
|
dbContextOpt?: {
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Types
|
|
2
|
-
export * from "./types/connection-
|
|
2
|
+
export * from "./types/connection-options";
|
|
3
3
|
export * from "./types/progress.types";
|
|
4
4
|
|
|
5
5
|
// Transport
|
|
@@ -12,7 +12,7 @@ export * from "./protocol/client-protocol-wrapper";
|
|
|
12
12
|
// Features
|
|
13
13
|
export * from "./features/event-client";
|
|
14
14
|
export * from "./features/file-client";
|
|
15
|
-
export * from "./features/orm/orm-connect-
|
|
15
|
+
export * from "./features/orm/orm-connect-options";
|
|
16
16
|
export * from "./features/orm/orm-client-connector";
|
|
17
17
|
export * from "./features/orm/orm-client-db-context-executor";
|
|
18
18
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Bytes } from "@simplysm/core-common";
|
|
2
|
-
import { LazyGcMap,
|
|
2
|
+
import { LazyGcMap, transfer, Uuid } from "@simplysm/core-common";
|
|
3
3
|
import type {
|
|
4
4
|
ServiceMessageDecodeResult,
|
|
5
5
|
ServiceMessage,
|
|
@@ -77,14 +77,14 @@ function getWorker(): Worker | undefined {
|
|
|
77
77
|
async function runWorker(
|
|
78
78
|
type: "encode" | "decode",
|
|
79
79
|
data: unknown,
|
|
80
|
-
|
|
80
|
+
transferables: Transferable[] = [],
|
|
81
81
|
): Promise<unknown> {
|
|
82
82
|
return new Promise((resolve, reject) => {
|
|
83
|
-
const id = Uuid.
|
|
83
|
+
const id = Uuid.generate().toString();
|
|
84
84
|
|
|
85
85
|
workerResolvers.set(id, { resolve, reject });
|
|
86
86
|
// Called after workerAvailable check, so worker always exists
|
|
87
|
-
getWorker()!.postMessage({ id, type, data }, { transfer });
|
|
87
|
+
getWorker()!.postMessage({ id, type, data }, { transfer: transferables });
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -137,7 +137,7 @@ export function createClientProtocolWrapper(protocol: ServiceProtocol): ClientPr
|
|
|
137
137
|
const rawResult = await runWorker("decode", bytes, [bytes.buffer]);
|
|
138
138
|
|
|
139
139
|
// Restore class instances (DateTime, etc.) from Worker's plain object result
|
|
140
|
-
return
|
|
140
|
+
return transfer.decode(rawResult) as ServiceMessageDecodeResult<ServiceMessage>;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
return {
|
package/src/service-client.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { EventEmitter } from "@simplysm/core-common";
|
|
|
3
3
|
import type { ServiceEventDef } from "@simplysm/service-common";
|
|
4
4
|
import { createServiceProtocol } from "@simplysm/service-common";
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type { ServiceConnectionOptions } from "./types/connection-options";
|
|
7
7
|
import type { ServiceProgress, ServiceProgressState } from "./types/progress.types";
|
|
8
8
|
import { createServiceTransport, type ServiceTransport } from "./transport/service-transport";
|
|
9
9
|
import { createSocketProvider, type SocketProvider } from "./transport/socket-provider";
|
|
@@ -40,7 +40,7 @@ export class ServiceClient extends EventEmitter<ServiceClientEvents> {
|
|
|
40
40
|
|
|
41
41
|
constructor(
|
|
42
42
|
public readonly name: string,
|
|
43
|
-
public readonly options:
|
|
43
|
+
public readonly options: ServiceConnectionOptions,
|
|
44
44
|
) {
|
|
45
45
|
super();
|
|
46
46
|
|
|
@@ -65,7 +65,7 @@ export class ServiceClient extends EventEmitter<ServiceClientEvents> {
|
|
|
65
65
|
if (this._authToken != null) {
|
|
66
66
|
await this.auth(this._authToken); // Re-authenticate
|
|
67
67
|
}
|
|
68
|
-
await this._eventClient.
|
|
68
|
+
await this._eventClient.resubscribeAll();
|
|
69
69
|
} catch (err) {
|
|
70
70
|
logger.error("Failed to recover event listeners", err);
|
|
71
71
|
}
|
|
@@ -78,8 +78,8 @@ export class ServiceClient extends EventEmitter<ServiceClientEvents> {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
// Proxy creation method for type safety
|
|
81
|
-
getService<TService>(serviceName: string):
|
|
82
|
-
return new Proxy({} as
|
|
81
|
+
getService<TService>(serviceName: string): ServiceProxy<TService> {
|
|
82
|
+
return new Proxy({} as ServiceProxy<TService>, {
|
|
83
83
|
get: (_target, prop) => {
|
|
84
84
|
const methodName = String(prop);
|
|
85
85
|
return async (...params: unknown[]) => {
|
|
@@ -126,7 +126,7 @@ export class ServiceClient extends EventEmitter<ServiceClientEvents> {
|
|
|
126
126
|
this._authToken = token;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
async
|
|
129
|
+
async addListener<TInfo, TData>(
|
|
130
130
|
eventDef: ServiceEventDef<TInfo, TData>,
|
|
131
131
|
info: TInfo,
|
|
132
132
|
cb: (data: TData) => PromiseLike<void>,
|
|
@@ -135,16 +135,16 @@ export class ServiceClient extends EventEmitter<ServiceClientEvents> {
|
|
|
135
135
|
return this._eventClient.addListener(eventDef, info, cb);
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
async
|
|
138
|
+
async removeListener(key: string): Promise<void> {
|
|
139
139
|
await this._eventClient.removeListener(key);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
async
|
|
142
|
+
async emitEvent<TInfo, TData>(
|
|
143
143
|
eventDef: ServiceEventDef<TInfo, TData>,
|
|
144
144
|
infoSelector: (item: TInfo) => boolean,
|
|
145
145
|
data: TData,
|
|
146
146
|
): Promise<void> {
|
|
147
|
-
await this._eventClient.
|
|
147
|
+
await this._eventClient.emit(eventDef, infoSelector, data);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
async uploadFile(files: File[] | FileList | { name: string; data: BlobPart }[]) {
|
|
@@ -162,12 +162,12 @@ export class ServiceClient extends EventEmitter<ServiceClientEvents> {
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
// Type transformer that wraps all method return types of TService with Promise
|
|
165
|
-
export type
|
|
165
|
+
export type ServiceProxy<TService> = {
|
|
166
166
|
[K in keyof TService]: TService[K] extends (...args: infer P) => infer R
|
|
167
167
|
? (...args: P) => Promise<Awaited<R>>
|
|
168
168
|
: never; // Non-function properties are excluded
|
|
169
169
|
};
|
|
170
170
|
|
|
171
|
-
export function createServiceClient(name: string, options:
|
|
171
|
+
export function createServiceClient(name: string, options: ServiceConnectionOptions): ServiceClient {
|
|
172
172
|
return new ServiceClient(name, options);
|
|
173
173
|
}
|
|
@@ -54,7 +54,7 @@ export function createServiceTransport(
|
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
async function send(message: ServiceClientMessage, progress?: ServiceProgress): Promise<unknown> {
|
|
57
|
-
const uuid = Uuid.
|
|
57
|
+
const uuid = Uuid.generate().toString();
|
|
58
58
|
|
|
59
59
|
// Start awaiting response (register listener before sending request for safety)
|
|
60
60
|
const responsePromise = new Promise((resolve, reject) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Bytes } from "@simplysm/core-common";
|
|
2
|
-
import { EventEmitter, Uuid,
|
|
2
|
+
import { EventEmitter, Uuid, wait } from "@simplysm/core-common";
|
|
3
3
|
import consola from "consola";
|
|
4
4
|
|
|
5
5
|
const logger = consola.withTag("service-client:SocketProvider");
|
|
@@ -73,14 +73,14 @@ export function createSocketProvider(
|
|
|
73
73
|
if (currentWs != null) {
|
|
74
74
|
currentWs.close();
|
|
75
75
|
// Wait until fully closed (graceful shutdown)
|
|
76
|
-
await
|
|
76
|
+
await wait.until(() => currentWs.readyState === WebSocket.CLOSED, 100, 30).catch(() => {});
|
|
77
77
|
}
|
|
78
78
|
emitter.emit("state", "closed");
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
async function send(data: Bytes): Promise<void> {
|
|
82
82
|
try {
|
|
83
|
-
await
|
|
83
|
+
await wait.until(() => isConnected(), undefined, 50);
|
|
84
84
|
} catch {
|
|
85
85
|
throw new Error("Not connected to the server. Please check your internet connection.");
|
|
86
86
|
}
|
|
@@ -92,7 +92,7 @@ export function createSocketProvider(
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
async function createSocket(): Promise<void> {
|
|
95
|
-
const clientId = Uuid.
|
|
95
|
+
const clientId = Uuid.generate().toString();
|
|
96
96
|
const params = new URLSearchParams({
|
|
97
97
|
ver: "2",
|
|
98
98
|
clientId,
|
|
@@ -156,7 +156,7 @@ export function createSocketProvider(
|
|
|
156
156
|
maxReconnectCount,
|
|
157
157
|
});
|
|
158
158
|
|
|
159
|
-
await
|
|
159
|
+
await wait.time(RECONNECT_DELAY);
|
|
160
160
|
|
|
161
161
|
try {
|
|
162
162
|
await createSocket();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference lib="webworker" />
|
|
2
2
|
|
|
3
3
|
import { createServiceProtocol } from "@simplysm/service-common";
|
|
4
|
-
import {
|
|
4
|
+
import { transfer } from "@simplysm/core-common";
|
|
5
5
|
|
|
6
6
|
const protocol = createServiceProtocol();
|
|
7
7
|
|
|
@@ -36,7 +36,7 @@ self.onmessage = (event: MessageEvent) => {
|
|
|
36
36
|
const decodeResult = protocol.decode(bytes);
|
|
37
37
|
|
|
38
38
|
// Convert result object to transferable form (prepare for zero-copy)
|
|
39
|
-
const encoded =
|
|
39
|
+
const encoded = transfer.encode(decodeResult);
|
|
40
40
|
result = encoded.result;
|
|
41
41
|
transferList = encoded.transferList;
|
|
42
42
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orm-connect-config.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\features\\orm\\orm-connect-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,gBAAgB,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACxE,YAAY,EAAE,IAAI,CAAC;IACnB,OAAO,EAAE,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,YAAY,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=orm-connect-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection-config.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\connection-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=connection-config.js.map
|
|
File without changes
|
|
File without changes
|