@simplysm/service-client 14.0.49 → 14.0.51

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 CHANGED
@@ -10,89 +10,72 @@ npm install @simplysm/service-client
10
10
 
11
11
  ## API Overview
12
12
 
13
- ### Core Client
14
-
15
- | API | Type | Description |
16
- |-----|------|-------------|
17
- | `ServiceClient` | class | WebSocket 서비스 클라이언트 최상위 파사드 (연결, RPC, 이벤트, 파일, ORM 통합) |
18
- | `createServiceClient()` | function | ServiceClient 인스턴스 생성 팩토리 함수 |
19
- | `ServiceProxy<T>` | type | 서비스 메서드 반환 타입을 Promise로 래핑하는 타입 변환기 |
20
-
21
- See [docs/main.md](./docs/main.md) for details.
22
-
23
- ### Transport Layer
24
-
25
- | API | Type | Description |
26
- |-----|------|-------------|
27
- | `SocketProvider` | interface | WebSocket 래퍼 인터페이스 (connect, close, send, on, off, heartbeat) |
28
- | `createSocketProvider()` | function | SocketProvider 팩토리. 재연결 하트비트 관리 |
29
- | `SocketProviderEvents` | interface | SocketProvider 이벤트 맵 (message, state) |
30
- | `ServiceTransport` | interface | 요청-응답 매핑, progress 중계, 이벤트 디스패치 |
31
- | `createServiceTransport()` | function | ServiceTransport 팩토리. SocketProvider와 ClientProtocolWrapper 조합 |
32
- | `ServiceTransportEvents` | interface | ServiceTransport 이벤트 맵 (event) |
33
-
34
- See [docs/transport.md](./docs/transport.md) for details.
35
-
36
- ### Protocol & Encoding
37
-
38
- | API | Type | Description |
39
- |-----|------|-------------|
40
- | `ClientProtocolWrapper` | interface | 메시지 인코딩/디코딩 (30KB 이상 시 Web Worker 오프로드) |
41
- | `createClientProtocolWrapper()` | function | ClientProtocolWrapper 팩토리. ServiceProtocol 래핑 |
42
-
43
- See [docs/protocol.md](./docs/protocol.md) for details.
44
-
45
- ### Event Management
46
-
47
- | API | Type | Description |
48
- |-----|------|-------------|
49
- | `EventClient` | interface | 서버 이벤트 구독/발행 관리 (재연결 자동 재구독) |
50
- | `createEventClient()` | function | EventClient 팩토리. ServiceTransport 사용 |
51
- | `ClientEventProxy<T>` | interface | 특정 이벤트에 대한 프록시 인터페이스 |
52
-
53
- See [docs/features.md](./docs/features.md) for details.
54
-
55
- ### File Operations
56
-
57
- | API | Type | Description |
58
- |-----|------|-------------|
59
- | `FileClient` | interface | 파일 업로드(POST)/다운로드(GET) 인터페이스 |
60
- | `createFileClient()` | function | FileClient 팩토리. hostUrl과 clientName으로 생성 |
61
-
62
- ### ORM Remote Execution
63
-
64
- | API | Type | Description |
65
- |-----|------|-------------|
66
- | `OrmClientConnector` | interface | DbContext 원격 트랜잭션 연결 헬퍼 |
67
- | `createOrmClientConnector()` | function | OrmClientConnector 팩토리. ServiceClient 사용 |
68
- | `OrmConnectOptions<T>` | interface | ORM 연결 설정 (DbClass, connOpt, dbContextOpt) |
69
- | `OrmClientDbContextExecutor` | class | DbContextExecutor 구현체 (서버로 원격 호출) |
70
-
71
- ### Types & Utilities
72
-
73
- | API | Type | Description |
74
- |-----|------|-------------|
75
- | `ServiceConnectionOptions` | interface | 서버 연결 옵션 (host, port, ssl, maxReconnectCount) |
76
- | `ServiceProgress` | interface | progress 콜백 인터페이스 (request, response, server) |
77
- | `ServiceProgressState` | interface | progress 상태 (uuid, totalSize, completedSize) |
78
- | `BlobInput` | type | Blob \| Uint8Array \| ArrayBuffer \| string (Blob 생성자 허용 타입) |
79
- | `FileCollection` | interface | FileList 호환 컬렉션 인터페이스 |
80
- | `isWorkerSupported()` | function | Web Worker 지원 여부 확인 |
81
-
82
- → See [docs/types.md](./docs/types.md) for details.
13
+ ### Main
14
+
15
+ | Entry | Kind | Description |
16
+ |-------|------|-------------|
17
+ | [`ServiceClient`](./docs/main/service-client.md) | class | WebSocket 서비스 클라이언트 최상위 파사드 (연결, RPC, 이벤트, 파일, ORM 통합) |
18
+ | [`ServiceProxy<T>`](./docs/main/service-client.md) | type | 서비스 메서드 반환 타입을 Promise로 래핑하는 타입 변환기 |
19
+ | [`createServiceClient()`](./docs/main/service-client.md) | function | ServiceClient 인스턴스 생성 팩토리 함수 |
20
+
21
+ ### Transport
22
+
23
+ | Entry | Kind | Description |
24
+ |-------|------|-------------|
25
+ | [`SocketProvider`](./docs/transport/socket-provider.md) | interface | WebSocket 래퍼 (connect, close, send, on, off, 하트비트·재연결 관리) |
26
+ | [`SocketProviderEvents`](./docs/transport/socket-provider.md) | interface | SocketProvider 이벤트 맵 (message, state) |
27
+ | [`createSocketProvider()`](./docs/transport/socket-provider.md) | function | SocketProvider 팩토리 |
28
+ | [`ServiceTransport`](./docs/transport/service-transport.md) | interface | 요청-응답 매핑, progress 중계, 이벤트 디스패치 |
29
+ | [`ServiceTransportEvents`](./docs/transport/service-transport.md) | interface | ServiceTransport 이벤트 맵 (event) |
30
+ | [`createServiceTransport()`](./docs/transport/service-transport.md) | function | ServiceTransport 팩토리 |
31
+
32
+ ### Protocol
33
+
34
+ | Entry | Kind | Description |
35
+ |-------|------|-------------|
36
+ | [`ClientProtocolWrapper`](./docs/protocol/client-protocol-wrapper.md) | interface | 메시지 인코딩/디코딩 (30KB 이상 시 Web Worker 오프로드) |
37
+ | [`createClientProtocolWrapper()`](./docs/protocol/client-protocol-wrapper.md) | function | ClientProtocolWrapper 팩토리 |
38
+
39
+ ### Features
40
+
41
+ | Entry | Kind | Description |
42
+ |-------|------|-------------|
43
+ | [`EventClient`](./docs/features/event-client.md) | interface | 서버 이벤트 구독/발행 관리 (재연결 시 자동 재구독) |
44
+ | [`ClientEventProxy<T>`](./docs/features/event-client.md) | interface | 특정 이벤트에 대한 프록시 인터페이스 |
45
+ | [`createEventClient()`](./docs/features/event-client.md) | function | EventClient 팩토리 |
46
+ | [`FileClient`](./docs/features/file-client.md) | interface | 파일 업로드(POST)/다운로드(GET) |
47
+ | [`createFileClient()`](./docs/features/file-client.md) | function | FileClient 팩토리 |
48
+ | [`OrmClientConnector`](./docs/features/orm-client-connector.md) | interface | DbContext 원격 트랜잭션 연결 헬퍼 |
49
+ | [`OrmConnectOptions<T>`](./docs/features/orm-client-connector.md) | interface | ORM 연결 설정 (DbClass, connOpt, dbContextOpt) |
50
+ | [`createOrmClientConnector()`](./docs/features/orm-client-connector.md) | function | OrmClientConnector 팩토리 |
51
+ | [`OrmClientDbContextExecutor`](./docs/features/orm-client-db-context-executor.md) | class | DbContextExecutor 구현체 (서버로 원격 호출) |
52
+
53
+ ### Types
54
+
55
+ | Entry | Kind | Description |
56
+ |-------|------|-------------|
57
+ | [`ServiceConnectionOptions`](./docs/types/service-connection-options.md) | interface | 서버 연결 옵션 (host, port, ssl, maxReconnectCount) |
58
+ | [`ServiceProgress`](./docs/types/service-progress.md) | interface | progress 콜백 인터페이스 (request, response, server) |
59
+ | [`ServiceProgressState`](./docs/types/service-progress.md) | interface | progress 상태 (uuid, totalSize, completedSize) |
60
+ | [`BlobInput`](./docs/types/blob-input.md) | type | `Blob \| Uint8Array \| ArrayBuffer \| string` (Blob 생성자 허용 타입) |
61
+ | [`FileCollection`](./docs/types/file-collection.md) | interface | FileList 호환 컬렉션 인터페이스 |
62
+ | [`BrowserWorker`](./docs/types/browser-worker.md) | interface | Web Worker 최소 인터페이스 (cross-env 타입 호환용) |
63
+ | [`isBrowserWorkerSupported()`](./docs/types/browser-worker.md) | function | DOM Worker API 지원 여부 확인 |
64
+ | [`isNodeWorkerSupported()`](./docs/types/browser-worker.md) | function | Node.js worker_threads 지원 여부 확인 |
65
+ | [`isWorkerSupported()`](./docs/types/browser-worker.md) | function | Worker 오프로딩 지원 여부 확인 |
83
66
 
84
67
  ## Usage Examples
85
68
 
86
- ### Basic Service Connection & RPC
69
+ ### 기본 연결 서비스 호출
87
70
 
88
71
  ```typescript
89
- import { createServiceClient } from "@simplysm/service-client";
72
+ import { ServiceClient } from "@simplysm/service-client";
90
73
 
91
- const client = createServiceClient("my-app", {
74
+ const client = new ServiceClient("my-app", {
92
75
  host: "localhost",
93
76
  port: 3000,
94
77
  ssl: false,
95
- maxReconnectCount: 10, // 자동 재연결 (0으로 비활성화)
78
+ maxReconnectCount: 10,
96
79
  });
97
80
 
98
81
  await client.connect();
@@ -105,96 +88,28 @@ const users = await userSvc.getAll();
105
88
  await client.close();
106
89
  ```
107
90
 
108
- ### Event Subscription
91
+ ### 이벤트 구독
109
92
 
110
93
  ```typescript
111
- // 이벤트 리스너 등록 (selector로 필터링)
112
- const listenerId = await client.addListener(
113
- "user:created",
114
- { userId: 123 }, // info selector (서버와 공유되는 필터 정보)
115
- async (data) => {
116
- console.log("새 사용자:", data.name);
117
- },
118
- );
119
-
120
- // 이벤트 발행 (특정 selector에 매칭하는 리스너에만 전송)
121
- await client.emitEvent(
122
- "user:created",
123
- (info) => info.userId === 123,
124
- { name: "Alice", email: "alice@example.com" },
125
- );
126
-
127
- // 리스너 제거
128
- await client.removeListener(listenerId);
129
- ```
130
-
131
- ### File Upload & Download
94
+ // 이벤트 프록시 방식 (권장)
95
+ const chatEvt = client.getEvent<typeof ChatEvent>("Chat");
96
+ const key = await chatEvt.addListener({ roomId: "room-1" }, async (data) => {
97
+ console.log("메시지:", data.message);
98
+ });
99
+ await chatEvt.removeListener(key);
132
100
 
133
- ```typescript
134
- // 파일 업로드 (인증 필수)
135
- const files = [
136
- new File(["content"], "file.txt", { type: "text/plain" }),
137
- ];
138
- const results = await client.uploadFile(files);
139
- console.log("업로드 결과:", results);
140
-
141
- // 파일 다운로드
142
- const buffer = await client.downloadFileBuffer("/uploaded/file.txt");
143
- console.log("다운로드 바이트:", buffer.length);
101
+ // 발행
102
+ await chatEvt.emit((info) => info.roomId === "room-1", { message: "hello" });
144
103
  ```
145
104
 
146
- ### ORM Remote Execution
105
+ ### ORM 원격 실행
147
106
 
148
107
  ```typescript
149
108
  import { createOrmClientConnector } from "@simplysm/service-client";
150
109
 
151
110
  const connector = createOrmClientConnector(client);
152
-
153
111
  const result = await connector.connect(
154
- {
155
- DbClass: MyDbContext,
156
- connOpt: { configName: "main", username: "user", password: "pass" },
157
- },
158
- async (db) => {
159
- return db.users.select().execute();
160
- },
112
+ { DbClass: MyDbContext, connOpt: { configName: "main" } },
113
+ async (db) => db.users.select().execute(),
161
114
  );
162
-
163
- console.log("조회 결과:", result);
164
- ```
165
-
166
- ### Progress Tracking
167
-
168
- ```typescript
169
- const progress = {
170
- request: (state) => {
171
- console.log(`요청 전송: ${state.completedSize}/${state.totalSize} bytes`);
172
- },
173
- response: (state) => {
174
- console.log(`응답 수신: ${state.completedSize}/${state.totalSize} bytes`);
175
- },
176
- server: (state) => {
177
- console.log(`서버 처리: ${state.completedSize}/${state.totalSize}`);
178
- },
179
- };
180
-
181
- await client.send("Service", "method", [arg1, arg2], progress);
182
- ```
183
-
184
- ### Connection State & Events
185
-
186
- ```typescript
187
- // 연결 상태 모니터링
188
- client.on("state", (state) => {
189
- console.log("연결 상태:", state); // "connected" | "closed" | "reconnecting"
190
- });
191
-
192
- client.on("request-progress", (state) => {
193
- console.log(`요청 진행: ${state.completedSize}/${state.totalSize}`);
194
- });
195
-
196
- // 연결 확인
197
- if (client.connected) {
198
- console.log("서버에 연결됨");
199
- }
200
115
  ```
@@ -17,7 +17,7 @@ export function createEventClient(transport) {
17
17
  listenerMap.set(key, {
18
18
  eventName,
19
19
  info,
20
- cb: cb,
20
+ cb,
21
21
  });
22
22
  return key;
23
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"event-client.js","sourceRoot":"","sources":["../../src/features/event-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;AAgC7D,MAAM,UAAU,iBAAiB,CAAC,SAA2B;IAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,EAGxB,CAAC;IAEJ,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC7C,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,WAAW,CACxB,SAAiB,EACjB,IAAwB,EACxB,EAAmD;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;QAEvC,eAAe;QACf,MAAM,SAAS,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;SACrC,CAAC,CAAC;QAEH,uBAAuB;QACvB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE;YACnB,SAAS;YACT,IAAI;YACJ,EAAE,EAAE,EAA0C;SAC/C,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,UAAU,cAAc,CAAC,GAAW;QACvC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,UAAU,IAAI,CACjB,SAAiB,EACjB,YAAmD,EACnD,IAAwB;QAGxB,6BAA6B;QAC7B,MAAM,aAAa,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC;YAC1C,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC1B,CAAC,CAAgD,CAAC;QAEnD,MAAM,UAAU,GAAG,aAAa;aAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,SAAS,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;aACjC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,WAAW;IACX,KAAK,UAAU,cAAc;QAC3B,MAAM,OAAO,CAAC,UAAU,CACtB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC3D,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;iBACvD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,IAAa;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,QAAQ,CACf,SAAiB;QAEjB,OAAO;YACL,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,WAAW,CAAY,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YACtE,cAAc;YACd,IAAI,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAY,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC;SAC7E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ;QACR,WAAW;QACX,cAAc;QACd,IAAI;QACJ,cAAc;KACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"event-client.js","sourceRoot":"","sources":["../../src/features/event-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"service-transport.js","sourceRoot":"","sources":["../../src/transport/service-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-transport.js","sourceRoot":"","sources":["../../src/transport/service-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ # EventClient
2
+
3
+ 서버 이벤트 구독/발행 관리 인터페이스. 재연결 시 자동 재구독된다. 팩토리 함수 `createEventClient`로 생성한다.
4
+
5
+ ```typescript
6
+ export interface EventClient {
7
+ getEvent<TEventDef extends ServiceEventDef>(
8
+ eventName: string,
9
+ ): ClientEventProxy<TEventDef>;
10
+ addListener<TEventDef extends ServiceEventDef>(
11
+ eventName: string,
12
+ info: TEventDef["$info"],
13
+ cb: (data: TEventDef["$data"]) => PromiseLike<void>,
14
+ ): Promise<string>;
15
+ removeListener(key: string): Promise<void>;
16
+ emit<TEventDef extends ServiceEventDef>(
17
+ eventName: string,
18
+ infoSelector: (item: TEventDef["$info"]) => boolean,
19
+ data: TEventDef["$data"],
20
+ ): Promise<void>;
21
+ resubscribeAll(): Promise<void>;
22
+ }
23
+ ```
24
+
25
+ ## Members
26
+
27
+ | Member | Kind | Type | Description |
28
+ |--------|------|------|-------------|
29
+ | `getEvent(eventName)` | method | `ClientEventProxy<TEventDef>` | 이벤트 이름과 타입을 캡처한 프록시 반환 |
30
+ | `addListener(eventName, info, cb)` | method | `Promise<string>` | 이벤트 리스너 등록. 반환값은 `key` (제거 시 사용) |
31
+ | `removeListener(key)` | method | `Promise<void>` | 등록된 이벤트 리스너 제거 |
32
+ | `emit(eventName, infoSelector, data)` | method | `Promise<void>` | `infoSelector`가 참인 대상에게 데이터 발행 |
33
+ | `resubscribeAll()` | method | `Promise<void>` | 재연결 시 모든 리스너를 서버에 재등록. `ServiceClient`가 자동 호출 |
34
+
35
+ ## Related Types
36
+
37
+ ### `ClientEventProxy`
38
+
39
+ `getEvent()`가 반환하는 이벤트 프록시 인터페이스. 이벤트 이름과 제네릭 타입이 캡처되어 있어 호출 시 반복 지정이 불필요하다.
40
+
41
+ ```typescript
42
+ export interface ClientEventProxy<TEventDef extends ServiceEventDef> {
43
+ addListener(
44
+ info: TEventDef["$info"],
45
+ cb: (data: TEventDef["$data"]) => PromiseLike<void>,
46
+ ): Promise<string>;
47
+ removeListener(key: string): Promise<void>;
48
+ emit(
49
+ infoSelector: (item: TEventDef["$info"]) => boolean,
50
+ data: TEventDef["$data"],
51
+ ): Promise<void>;
52
+ }
53
+ ```
54
+
55
+ | Member | Type | Description |
56
+ |--------|------|-------------|
57
+ | `addListener(info, cb)` | `Promise<string>` | 이벤트 리스너 등록. 반환값은 `key` (제거 시 사용) |
58
+ | `removeListener(key)` | `Promise<void>` | 등록된 이벤트 리스너 제거 |
59
+ | `emit(infoSelector, data)` | `Promise<void>` | `infoSelector`가 참인 대상에게 데이터 발행 |
60
+
61
+ ## `createEventClient`
62
+
63
+ `EventClient` 팩토리 함수.
64
+
65
+ ```typescript
66
+ export function createEventClient(transport: ServiceTransport): EventClient;
67
+ ```
68
+
69
+ | Parameter | Type | Description |
70
+ |-----------|------|-------------|
71
+ | `transport` | [`ServiceTransport`](../transport/service-transport.md) | 서비스 전송 계층 |
72
+
73
+ ## Usage
74
+
75
+ ```typescript
76
+ // getEvent() 방식 (권장 — 이벤트 이름과 타입이 캡처됨)
77
+ const chatEvt = client.getEvent<typeof ChatEvent>("Chat");
78
+ const key = await chatEvt.addListener({ roomId: "room-1" }, async (data) => {
79
+ console.log("메시지:", data.message);
80
+ });
81
+ await chatEvt.removeListener(key);
82
+
83
+ // 이벤트 발행
84
+ await chatEvt.emit(
85
+ (info) => info.roomId === "room-1",
86
+ { message: "hello" },
87
+ );
88
+ ```
@@ -0,0 +1,58 @@
1
+ # FileClient
2
+
3
+ 파일 업로드(POST)/다운로드(GET) 인터페이스. 팩토리 함수 `createFileClient`로 생성한다.
4
+
5
+ ```typescript
6
+ export interface FileClient {
7
+ download(relPath: string): Promise<Bytes>;
8
+ upload(
9
+ files: File[] | FileCollection | { name: string; data: BlobInput }[],
10
+ authToken: string,
11
+ ): Promise<ServiceUploadResult[]>;
12
+ }
13
+ ```
14
+
15
+ ## Members
16
+
17
+ | Member | Kind | Type | Description |
18
+ |--------|------|------|-------------|
19
+ | `download(relPath)` | method | `Promise<Bytes>` | `GET {hostUrl}{relPath}`로 파일 다운로드. `Uint8Array` 반환 |
20
+ | `upload(files, authToken)` | method | `Promise<ServiceUploadResult[]>` | `POST {hostUrl}/upload`로 파일 업로드. `multipart/form-data` 사용 |
21
+
22
+ ### `upload` Parameters
23
+
24
+ | Parameter | Type | Description |
25
+ |-----------|------|-------------|
26
+ | `files` | `File[] \| FileCollection \| { name: string; data: BlobInput }[]` | 업로드할 파일 목록 |
27
+ | `authToken` | `string` | 인증 토큰 (`Authorization: Bearer {token}` 헤더로 전송) |
28
+
29
+ ## `createFileClient`
30
+
31
+ `FileClient` 팩토리 함수.
32
+
33
+ ```typescript
34
+ export function createFileClient(hostUrl: string, clientName: string): FileClient;
35
+ ```
36
+
37
+ | Parameter | Type | Description |
38
+ |-----------|------|-------------|
39
+ | `hostUrl` | `string` | 서버 기본 URL (`http://host:port` 형식) |
40
+ | `clientName` | `string` | 클라이언트 식별자 (`x-sd-client-name` 헤더로 전송) |
41
+
42
+ ## Usage
43
+
44
+ ```typescript
45
+ // 일반적으로 ServiceClient를 통해 간접 사용한다
46
+ // 파일 업로드 (auth() 호출 후 사용)
47
+ const results = await client.uploadFile([
48
+ new File(["content"], "file.txt", { type: "text/plain" }),
49
+ ]);
50
+
51
+ // 커스텀 데이터 업로드
52
+ const results2 = await client.uploadFile([
53
+ { name: "report.csv", data: "col1,col2\nval1,val2" },
54
+ ]);
55
+
56
+ // 파일 다운로드
57
+ const bytes = await client.downloadFileBuffer("/uploaded/file.txt");
58
+ ```
@@ -0,0 +1,83 @@
1
+ # OrmClientConnector
2
+
3
+ `DbContext` 트랜잭션 연결을 원격 서버에서 실행하는 헬퍼 인터페이스. 팩토리 함수 `createOrmClientConnector`로 생성한다.
4
+
5
+ ```typescript
6
+ export interface OrmClientConnector {
7
+ connect<T extends DbContext, R>(
8
+ config: OrmConnectOptions<T>,
9
+ callback: (db: T) => Promise<R> | R,
10
+ ): Promise<R>;
11
+ connectWithoutTransaction<T extends DbContext, R>(
12
+ config: OrmConnectOptions<T>,
13
+ callback: (db: T) => Promise<R> | R,
14
+ ): Promise<R>;
15
+ }
16
+ ```
17
+
18
+ ## Members
19
+
20
+ | Member | Kind | Type | Description |
21
+ |--------|------|------|-------------|
22
+ | `connect(config, callback)` | method | `Promise<R>` | 트랜잭션 모드로 연결. FK 제약 위반 시 사용자 친화적 에러 메시지로 변환 |
23
+ | `connectWithoutTransaction(config, callback)` | method | `Promise<R>` | 트랜잭션 없이 연결 |
24
+
25
+ ## Related Types
26
+
27
+ ### `OrmConnectOptions`
28
+
29
+ ORM 원격 연결에 필요한 옵션 인터페이스.
30
+
31
+ ```typescript
32
+ export interface OrmConnectOptions<T extends DbContext> {
33
+ DbClass: new (executor: DbContextExecutor, opt: { database: string; schema?: string }) => T;
34
+ connOpt: DbConnOptions & { configName: string };
35
+ dbContextOpt?: {
36
+ database: string;
37
+ schema: string;
38
+ };
39
+ }
40
+ ```
41
+
42
+ | Field | Type | Required | Description |
43
+ |-------|------|----------|-------------|
44
+ | `DbClass` | `new (executor: DbContextExecutor, opt: { database: string; schema?: string }) => T` | required | 사용할 `DbContext` 서브클래스 생성자 |
45
+ | `connOpt` | `DbConnOptions & { configName: string }` | required | DB 연결 옵션. `configName`은 서버 설정 키 |
46
+ | `dbContextOpt` | `{ database: string; schema: string }` | optional | DB 컨텍스트 옵션. 생략하면 서버에서 조회한 `info.database`/`info.schema` 사용 |
47
+
48
+ ## `createOrmClientConnector`
49
+
50
+ `OrmClientConnector` 팩토리 함수.
51
+
52
+ ```typescript
53
+ export function createOrmClientConnector(serviceClient: ServiceClient): OrmClientConnector;
54
+ ```
55
+
56
+ | Parameter | Type | Description |
57
+ |-----------|------|-------------|
58
+ | `serviceClient` | [`ServiceClient`](../main/service-client.md) | 이미 연결된 서비스 클라이언트 |
59
+
60
+ ## Usage
61
+
62
+ ```typescript
63
+ import { createOrmClientConnector } from "@simplysm/service-client";
64
+
65
+ const connector = createOrmClientConnector(client);
66
+
67
+ // 트랜잭션 모드
68
+ const result = await connector.connect(
69
+ {
70
+ DbClass: MyDbContext,
71
+ connOpt: { configName: "main", username: "user", password: "pass" },
72
+ },
73
+ async (db) => {
74
+ return db.myTable.select((item) => ({ id: item.id, name: item.name }));
75
+ },
76
+ );
77
+
78
+ // 트랜잭션 없이
79
+ const result2 = await connector.connectWithoutTransaction(
80
+ { DbClass: MyDbContext, connOpt: { configName: "main" } },
81
+ async (db) => db.myTable.select(),
82
+ );
83
+ ```
@@ -0,0 +1,26 @@
1
+ # OrmClientDbContextExecutor
2
+
3
+ `DbContextExecutor` 인터페이스 구현체. `DbContext`의 쿼리 실행을 서버 `OrmService`에 원격 호출한다. 직접 사용보다 [`createOrmClientConnector`](./orm-client-connector.md)를 통해 사용하는 것을 권장한다.
4
+
5
+ ```typescript
6
+ export class OrmClientDbContextExecutor implements DbContextExecutor {
7
+ constructor(
8
+ private readonly _client: ServiceClient,
9
+ private readonly _opt: DbConnOptions & { configName: string },
10
+ );
11
+ }
12
+ ```
13
+
14
+ ## Members
15
+
16
+ | Member | Kind | Type | Description |
17
+ |--------|------|------|-------------|
18
+ | `getInfo()` | method | `Promise<{ dialect: Dialect; database?: string; schema?: string }>` | 서버에서 DB dialect, database, schema 조회 |
19
+ | `connect()` | method | `Promise<void>` | 서버에서 DB 연결 생성. `_connId` 할당 |
20
+ | `beginTransaction(isolationLevel?)` | method | `Promise<void>` | 트랜잭션 시작 |
21
+ | `commitTransaction()` | method | `Promise<void>` | 트랜잭션 커밋 |
22
+ | `rollbackTransaction()` | method | `Promise<void>` | 트랜잭션 롤백 |
23
+ | `close()` | method | `Promise<void>` | DB 연결 종료 및 `_connId` 해제 |
24
+ | `executeDefs(defs, options?)` | method | `Promise<T[][]>` | QueryDef 배열을 서버에서 실행 |
25
+ | `executeParametrized(query, params?)` | method | `Promise<unknown[][]>` | 파라미터화된 쿼리를 서버에서 실행 |
26
+ | `bulkInsert(tableName, columnDefs, records)` | method | `Promise<void>` | 대량 INSERT를 서버에서 실행 |