@simplysm/service-client 14.0.49 → 14.0.52

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.
@@ -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":"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"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/service-client",
3
- "version": "14.0.49",
3
+ "version": "14.0.52",
4
4
  "description": "심플리즘 패키지 - 서비스 (client)",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -14,15 +14,14 @@
14
14
  "types": "./dist/index.d.ts",
15
15
  "files": [
16
16
  "dist",
17
- "src",
18
- "docs"
17
+ "src"
19
18
  ],
20
19
  "sideEffects": false,
21
20
  "dependencies": {
22
21
  "consola": "^3.4.2",
23
- "@simplysm/core-common": "14.0.49",
24
- "@simplysm/service-common": "14.0.49",
25
- "@simplysm/orm-common": "14.0.49"
22
+ "@simplysm/orm-common": "14.0.52",
23
+ "@simplysm/core-common": "14.0.52",
24
+ "@simplysm/service-common": "14.0.52"
26
25
  },
27
26
  "devDependencies": {
28
27
  "@types/ws": "^8.18.1",
@@ -62,7 +62,7 @@ export function createEventClient(transport: ServiceTransport): EventClient {
62
62
  listenerMap.set(key, {
63
63
  eventName,
64
64
  info,
65
- cb: cb as (data: unknown) => PromiseLike<void>,
65
+ cb,
66
66
  });
67
67
 
68
68
  return key;
@@ -120,7 +120,7 @@ export function createServiceTransport(
120
120
  });
121
121
  } else {
122
122
  if (decoded.message.name === "progress") {
123
- const body = decoded.message.body as { totalSize: number; completedSize: number };
123
+ const body = decoded.message.body;
124
124
  listenerInfo?.progress?.server?.({
125
125
  uuid: decoded.uuid,
126
126
  totalSize: body.totalSize,
@@ -151,7 +151,7 @@ export function createServiceTransport(
151
151
 
152
152
  listenerInfo?.reject(toError(decoded.message.body));
153
153
  } else if (decoded.message.name === "evt:on") {
154
- const body = decoded.message.body as { keys: string[]; data: unknown };
154
+ const body = decoded.message.body;
155
155
  emitter.emit("event", { keys: body.keys, data: body.data });
156
156
  } else {
157
157
  throw new Error("서버로부터 잘못된 메시지를 수신했습니다.");
package/README.md DELETED
@@ -1,200 +0,0 @@
1
- # @simplysm/service-client
2
-
3
- WebSocket 기반 서비스 서버 클라이언트로, 서비스 호출, 실시간 이벤트 구독/발행, 파일 업로드/다운로드, ORM 원격 실행을 지원한다.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install @simplysm/service-client
9
- ```
10
-
11
- ## API Overview
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.
83
-
84
- ## Usage Examples
85
-
86
- ### Basic Service Connection & RPC
87
-
88
- ```typescript
89
- import { createServiceClient } from "@simplysm/service-client";
90
-
91
- const client = createServiceClient("my-app", {
92
- host: "localhost",
93
- port: 3000,
94
- ssl: false,
95
- maxReconnectCount: 10, // 자동 재연결 (0으로 비활성화)
96
- });
97
-
98
- await client.connect();
99
- await client.auth("jwt-token");
100
-
101
- // 타입 안전한 서비스 프록시
102
- const userSvc = client.getService<UserService>("User");
103
- const users = await userSvc.getAll();
104
-
105
- await client.close();
106
- ```
107
-
108
- ### Event Subscription
109
-
110
- ```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
132
-
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);
144
- ```
145
-
146
- ### ORM Remote Execution
147
-
148
- ```typescript
149
- import { createOrmClientConnector } from "@simplysm/service-client";
150
-
151
- const connector = createOrmClientConnector(client);
152
-
153
- 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
- },
161
- );
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
- ```
package/docs/features.md DELETED
@@ -1,217 +0,0 @@
1
- # Features
2
-
3
- ## `ClientEventProxy`
4
-
5
- `getEvent()`가 반환하는 이벤트 프록시 인터페이스. 이벤트 이름과 제네릭 타입이 캡처되어 있어 호출 시 반복 지정이 불필요하다.
6
-
7
- ```typescript
8
- export interface ClientEventProxy<TEventDef extends ServiceEventDef> {
9
- addListener(
10
- info: TEventDef["$info"],
11
- cb: (data: TEventDef["$data"]) => PromiseLike<void>,
12
- ): Promise<string>;
13
- removeListener(key: string): Promise<void>;
14
- emit(
15
- infoSelector: (item: TEventDef["$info"]) => boolean,
16
- data: TEventDef["$data"],
17
- ): Promise<void>;
18
- }
19
- ```
20
-
21
- | Member | Type | Description |
22
- |--------|------|-------------|
23
- | `addListener(info, cb)` | `Promise<string>` | 이벤트 리스너 등록. 반환값은 `key` (제거 시 사용) |
24
- | `removeListener(key)` | `Promise<void>` | 등록된 이벤트 리스너 제거 |
25
- | `emit(infoSelector, data)` | `Promise<void>` | `infoSelector`가 참인 대상에게 데이터 발행 |
26
-
27
- ## `EventClient`
28
-
29
- 서버 이벤트 구독/발행 인터페이스. 재연결 시 자동 재구독된다.
30
-
31
- ```typescript
32
- export interface EventClient {
33
- getEvent<TEventDef extends ServiceEventDef>(
34
- eventName: string,
35
- ): ClientEventProxy<TEventDef>;
36
- addListener<TEventDef extends ServiceEventDef>(
37
- eventName: string,
38
- info: TEventDef["$info"],
39
- cb: (data: TEventDef["$data"]) => PromiseLike<void>,
40
- ): Promise<string>;
41
- removeListener(key: string): Promise<void>;
42
- emit<TEventDef extends ServiceEventDef>(
43
- eventName: string,
44
- infoSelector: (item: TEventDef["$info"]) => boolean,
45
- data: TEventDef["$data"],
46
- ): Promise<void>;
47
- resubscribeAll(): Promise<void>;
48
- }
49
- ```
50
-
51
- | Member | Type | Description |
52
- |--------|------|-------------|
53
- | `getEvent(eventName)` | `ClientEventProxy<TEventDef>` | 이벤트 이름과 타입을 캡처한 프록시 반환. `getService()` 패턴과 동일 |
54
- | `addListener(eventName, info, cb)` | `Promise<string>` | 이벤트 리스너 등록. 제네릭 `TEventDef`로 `info`/`data` 타입 추론. 반환값은 `key` (제거 시 사용) |
55
- | `removeListener(key)` | `Promise<void>` | 등록된 이벤트 리스너 제거 |
56
- | `emit(eventName, infoSelector, data)` | `Promise<void>` | 서버의 이벤트 리스너 중 `infoSelector`가 참인 대상에게 데이터 발행. 제네릭 `TEventDef`로 타입 안전성 보장 |
57
- | `resubscribeAll()` | `Promise<void>` | 재연결 시 모든 리스너를 서버에 재등록. `ServiceClient`가 자동 호출 |
58
-
59
- ## `createEventClient`
60
-
61
- `EventClient` 팩토리 함수.
62
-
63
- ```typescript
64
- export function createEventClient(transport: ServiceTransport): EventClient;
65
- ```
66
-
67
- | Parameter | Type | Description |
68
- |-----------|------|-------------|
69
- | `transport` | `ServiceTransport` | 서비스 전송 계층 |
70
-
71
- ## `FileClient`
72
-
73
- 파일 업로드(POST)/다운로드(GET) 인터페이스.
74
-
75
- ```typescript
76
- export interface FileClient {
77
- download(relPath: string): Promise<Bytes>;
78
- upload(
79
- files: File[] | FileCollection | { name: string; data: BlobInput }[],
80
- authToken: string,
81
- ): Promise<ServiceUploadResult[]>;
82
- }
83
- ```
84
-
85
- | Member | Type | Description |
86
- |--------|------|-------------|
87
- | `download(relPath)` | `Promise<Bytes>` | `GET {hostUrl}{relPath}`로 파일 다운로드. `Uint8Array` 반환 |
88
- | `upload(files, authToken)` | `Promise<ServiceUploadResult[]>` | `POST {hostUrl}/upload`로 파일 업로드. `multipart/form-data` 사용 |
89
-
90
- `upload` 파라미터:
91
-
92
- | Parameter | Type | Description |
93
- |-----------|------|-------------|
94
- | `files` | `File[] \| FileCollection \| { name: string; data: BlobInput }[]` | 업로드할 파일 목록 |
95
- | `authToken` | `string` | 인증 토큰 (`Authorization: Bearer {token}` 헤더로 전송) |
96
-
97
- ## `createFileClient`
98
-
99
- `FileClient` 팩토리 함수.
100
-
101
- ```typescript
102
- export function createFileClient(hostUrl: string, clientName: string): FileClient;
103
- ```
104
-
105
- | Parameter | Type | Description |
106
- |-----------|------|-------------|
107
- | `hostUrl` | `string` | 서버 기본 URL (`http://host:port` 형식) |
108
- | `clientName` | `string` | 클라이언트 식별자 (`x-sd-client-name` 헤더로 전송) |
109
-
110
- ## `OrmConnectOptions`
111
-
112
- ORM 원격 연결에 필요한 옵션 인터페이스.
113
-
114
- ```typescript
115
- export interface OrmConnectOptions<T extends DbContext> {
116
- DbClass: new (executor: DbContextExecutor, opt: { database: string; schema?: string }) => T;
117
- connOpt: DbConnOptions & { configName: string };
118
- dbContextOpt?: {
119
- database: string;
120
- schema: string;
121
- };
122
- }
123
- ```
124
-
125
- | Field | Type | Description |
126
- |-------|------|-------------|
127
- | `DbClass` | `new (...) => T` | 사용할 `DbContext` 서브클래스 생성자 |
128
- | `connOpt` | `DbConnOptions & { configName: string }` | DB 연결 옵션. `configName`은 서버 설정 키 |
129
- | `dbContextOpt` | `{ database: string; schema: string }?` | DB 컨텍스트 옵션. 생략하면 서버에서 조회한 `info.database`/`info.schema` 사용 |
130
-
131
- ## `OrmClientConnector`
132
-
133
- `DbContext` 트랜잭션 연결을 원격 서버에서 실행하는 헬퍼 인터페이스.
134
-
135
- ```typescript
136
- export interface OrmClientConnector {
137
- connect<T extends DbContext, R>(
138
- config: OrmConnectOptions<T>,
139
- callback: (db: T) => Promise<R> | R,
140
- ): Promise<R>;
141
- connectWithoutTransaction<T extends DbContext, R>(
142
- config: OrmConnectOptions<T>,
143
- callback: (db: T) => Promise<R> | R,
144
- ): Promise<R>;
145
- }
146
- ```
147
-
148
- | Member | Type | Description |
149
- |--------|------|-------------|
150
- | `connect(config, callback)` | `Promise<R>` | 트랜잭션 모드로 연결. FK 제약 위반 시 사용자 친화적 에러 메시지로 변환 |
151
- | `connectWithoutTransaction(config, callback)` | `Promise<R>` | 트랜잭션 없이 연결 |
152
-
153
- ## `createOrmClientConnector`
154
-
155
- `OrmClientConnector` 팩토리 함수.
156
-
157
- ```typescript
158
- export function createOrmClientConnector(serviceClient: ServiceClient): OrmClientConnector;
159
- ```
160
-
161
- | Parameter | Type | Description |
162
- |-----------|------|-------------|
163
- | `serviceClient` | `ServiceClient` | 이미 연결된 서비스 클라이언트 |
164
-
165
- 사용 예:
166
-
167
- ```typescript
168
- const connector = createOrmClientConnector(client);
169
-
170
- const result = await connector.connect(
171
- { DbClass: MyDbContext, connOpt: { configName: "main" } },
172
- async (db) => {
173
- return db.myTable.select((item) => ({ id: item.id, name: item.name }));
174
- },
175
- );
176
- ```
177
-
178
- ## `OrmClientDbContextExecutor`
179
-
180
- `DbContextExecutor` 인터페이스 구현체. `DbContext`의 쿼리 실행을 서버 `OrmService`에 원격 호출한다. 직접 사용보다 `createOrmClientConnector`를 통해 사용하는 것을 권장한다.
181
-
182
- ```typescript
183
- export class OrmClientDbContextExecutor implements DbContextExecutor {
184
- constructor(
185
- private readonly _client: ServiceClient,
186
- private readonly _opt: DbConnOptions & { configName: string },
187
- );
188
- async getInfo(): Promise<{ dialect: Dialect; database?: string; schema?: string }>;
189
- async connect(): Promise<void>;
190
- async beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
191
- async commitTransaction(): Promise<void>;
192
- async rollbackTransaction(): Promise<void>;
193
- async close(): Promise<void>;
194
- async executeDefs<T = Record<string, unknown>>(
195
- defs: QueryDef[],
196
- options?: (ResultMeta | undefined)[],
197
- ): Promise<T[][]>;
198
- async executeParametrized(query: string, params?: unknown[]): Promise<unknown[][]>;
199
- async bulkInsert(
200
- tableName: string,
201
- columnDefs: Record<string, ColumnMeta>,
202
- records: Record<string, unknown>[],
203
- ): Promise<void>;
204
- }
205
- ```
206
-
207
- | Method | Description |
208
- |--------|-------------|
209
- | `getInfo()` | 서버에서 DB dialect, database, schema 조회 |
210
- | `connect()` | 서버에서 DB 연결 생성. `_connId` 할당 |
211
- | `beginTransaction(isolationLevel?)` | 트랜잭션 시작 |
212
- | `commitTransaction()` | 트랜잭션 커밋 |
213
- | `rollbackTransaction()` | 트랜잭션 롤백 |
214
- | `close()` | DB 연결 종료 및 `_connId` 해제 |
215
- | `executeDefs(defs, options?)` | QueryDef 배열을 서버에서 실행 |
216
- | `executeParametrized(query, params?)` | 파라미터화된 쿼리를 서버에서 실행 |
217
- | `bulkInsert(tableName, columnDefs, records)` | 대량 INSERT를 서버에서 실행 |
package/docs/main.md DELETED
@@ -1,148 +0,0 @@
1
- # Main
2
-
3
- ## `ServiceClient`
4
-
5
- WebSocket 기반 서비스 클라이언트의 최상위 파사드 클래스. `SocketProvider`, `ClientProtocolWrapper`, `ServiceTransport`, `EventClient`, `FileClient`를 내부적으로 조합한다.
6
-
7
- ```typescript
8
- export class ServiceClient extends EventEmitter<ServiceClientEvents> {
9
- constructor(
10
- public readonly name: string,
11
- public readonly options: ServiceConnectionOptions,
12
- );
13
- get connected(): boolean;
14
- get hostUrl(): string;
15
- getService<TService>(serviceName: string): ServiceProxy<TService>;
16
- getEvent<TEventDef extends ServiceEventDef>(eventName: string): ClientEventProxy<TEventDef>;
17
- async connect(): Promise<void>;
18
- async close(): Promise<void>;
19
- async send(
20
- serviceName: string,
21
- methodName: string,
22
- params: unknown[],
23
- progress?: ServiceProgress,
24
- ): Promise<unknown>;
25
- async auth(token: string): Promise<void>;
26
- async addListener<TEventDef extends ServiceEventDef>(
27
- eventName: string,
28
- info: TEventDef["$info"],
29
- cb: (data: TEventDef["$data"]) => PromiseLike<void>,
30
- ): Promise<string>;
31
- async removeListener(key: string): Promise<void>;
32
- async emitEvent<TEventDef extends ServiceEventDef>(
33
- eventName: string,
34
- infoSelector: (item: TEventDef["$info"]) => boolean,
35
- data: TEventDef["$data"],
36
- ): Promise<void>;
37
- async uploadFile(
38
- files: File[] | FileCollection | { name: string; data: BlobInput }[],
39
- ): Promise<ServiceUploadResult[]>;
40
- async downloadFileBuffer(relPath: string): Promise<Bytes>;
41
- }
42
- ```
43
-
44
- `ServiceClient`가 발생시키는 이벤트 (`EventEmitter<ServiceClientEvents>`):
45
-
46
- | Event | Data Type | Description |
47
- |-------|-----------|-------------|
48
- | `request-progress` | `ServiceProgressState` | 요청 전송 progress |
49
- | `response-progress` | `ServiceProgressState` | 응답 수신 progress |
50
- | `server-progress` | `ServiceProgressState` | 서버 내부 처리 progress |
51
- | `state` | `"connected" \| "closed" \| "reconnecting"` | 연결 상태 변경 |
52
-
53
- 생성자 파라미터:
54
-
55
- | Parameter | Type | Description |
56
- |-----------|------|-------------|
57
- | `name` | `string` | 클라이언트 식별자 (WebSocket URL 파라미터 및 HTTP 헤더로 전달됨) |
58
- | `options` | `ServiceConnectionOptions` | 연결 옵션 (host, port, ssl, maxReconnectCount) |
59
-
60
- 주요 메서드:
61
-
62
- | Method | Description |
63
- |--------|-------------|
64
- | `connect()` | WebSocket 연결 시작 |
65
- | `close()` | WebSocket 연결 종료 및 protocol dispose |
66
- | `auth(token)` | 서버에 인증 토큰 전송. 재연결 시 자동 재인증됨 |
67
- | `getService<TService>(serviceName)` | 타입 안전한 서비스 프록시 반환 |
68
- | `getEvent<TEventDef>(eventName)` | 타입 안전한 이벤트 프록시 반환. `ClientEventProxy<TEventDef>`를 반환하며 이벤트 이름과 타입이 캡처됨 |
69
- | `send(serviceName, methodName, params, progress?)` | 서비스 메서드 원격 호출 |
70
- | `addListener(eventName, info, cb)` | 서버 이벤트 구독. 제네릭 `TEventDef`로 타입 안전성 보장. 연결 상태여야 함 |
71
- | `removeListener(key)` | 서버 이벤트 구독 해제 |
72
- | `emitEvent(eventName, infoSelector, data)` | 서버 이벤트 발행. 제네릭 `TEventDef`로 타입 안전성 보장 |
73
- | `uploadFile(files)` | 파일 업로드. `auth()` 호출 후 사용해야 함 |
74
- | `downloadFileBuffer(relPath)` | 파일 다운로드 (`Uint8Array` 반환) |
75
-
76
- 접근자:
77
-
78
- | Property | Type | Description |
79
- |----------|------|-------------|
80
- | `connected` | `boolean` | 현재 WebSocket 연결 상태 |
81
- | `hostUrl` | `string` | HTTP 기본 URL (`http(s)://host:port`) |
82
-
83
- ## `ServiceProxy`
84
-
85
- `TService`의 모든 메서드 반환 타입을 `Promise`로 래핑하는 유틸리티 타입. `ServiceClient.getService<TService>()`의 반환 타입으로 사용된다.
86
-
87
- ```typescript
88
- export type ServiceProxy<TService> = {
89
- [K in keyof TService]: TService[K] extends (...args: infer P) => infer R
90
- ? (...args: P) => Promise<Awaited<R>>
91
- : never;
92
- };
93
- ```
94
-
95
- 함수가 아닌 속성(`never`)은 타입에서 제외된다.
96
-
97
- ## `createServiceClient`
98
-
99
- `ServiceClient` 팩토리 함수. `new ServiceClient(name, options)`와 동일하다.
100
-
101
- ```typescript
102
- export function createServiceClient(name: string, options: ServiceConnectionOptions): ServiceClient;
103
- ```
104
-
105
- | Parameter | Type | Description |
106
- |-----------|------|-------------|
107
- | `name` | `string` | 클라이언트 식별자 |
108
- | `options` | `ServiceConnectionOptions` | 연결 옵션 |
109
-
110
- 사용 예:
111
-
112
- ```typescript
113
- import { ServiceClient } from "@simplysm/service-client";
114
-
115
- const client = new ServiceClient("my-app", {
116
- host: "localhost",
117
- port: 3000,
118
- ssl: false,
119
- maxReconnectCount: 10,
120
- });
121
-
122
- await client.connect();
123
- await client.auth("my-auth-token");
124
-
125
- // 타입 안전한 서비스 호출
126
- const userSvc = client.getService<UserService>("User");
127
- const users = await userSvc.getList();
128
-
129
- // 이벤트 프록시 방식 (권장 — getService()와 동일한 패턴)
130
- const chatEvt = client.getEvent<typeof ChatEvent>("Chat");
131
- const key = await chatEvt.addListener({ roomId: "room-1" }, async (data) => {
132
- // data.message는 string으로 타입 추론
133
- });
134
- await chatEvt.removeListener(key);
135
-
136
- // 직접 호출 방식 (하위 호환)
137
- const key2 = await client.addListener<typeof ChatEvent>("Chat", { roomId: "room-1" }, async (data) => {
138
- // data.message
139
- });
140
-
141
- // 파일 업로드
142
- const results = await client.uploadFile([{ name: "file.txt", data: "hello" }]);
143
-
144
- // 파일 다운로드
145
- const bytes = await client.downloadFileBuffer("/files/report.pdf");
146
-
147
- await client.close();
148
- ```
package/docs/protocol.md DELETED
@@ -1,56 +0,0 @@
1
- # Protocol
2
-
3
- ## `ClientProtocolWrapper`
4
-
5
- 메시지 인코딩/디코딩 인터페이스. 데이터 크기가 30KB 이상이면 Web Worker로 처리를 오프로드한다.
6
-
7
- ```typescript
8
- export interface ClientProtocolWrapper {
9
- encode(uuid: string, message: ServiceMessage): Promise<{ chunks: Bytes[]; totalSize: number }>;
10
- decode(bytes: Bytes): Promise<ServiceMessageDecodeResult<ServiceMessage>>;
11
- dispose(): void;
12
- }
13
- ```
14
-
15
- | Member | Type | Description |
16
- |--------|------|-------------|
17
- | `encode(uuid, message)` | `Promise<{ chunks: Bytes[]; totalSize: number }>` | 메시지를 바이너리 청크로 인코딩. 큰 데이터는 Worker로 오프로드 |
18
- | `decode(bytes)` | `Promise<ServiceMessageDecodeResult<ServiceMessage>>` | 바이너리를 메시지로 디코딩. 큰 데이터는 Worker로 오프로드 (zero-copy 전송) |
19
- | `dispose()` | `void` | 내부 `ServiceProtocol`과 Worker resolver 맵 정리 |
20
-
21
- ## `createClientProtocolWrapper`
22
-
23
- `ClientProtocolWrapper` 팩토리 함수.
24
-
25
- ```typescript
26
- export function createClientProtocolWrapper(protocol: ServiceProtocol): ClientProtocolWrapper;
27
- ```
28
-
29
- | Parameter | Type | Description |
30
- |-----------|------|-------------|
31
- | `protocol` | `ServiceProtocol` | `@simplysm/service-common`의 `createServiceProtocol()`로 생성한 프로토콜 인스턴스 |
32
-
33
- 내부 동작:
34
- - 임계값: 30KB (`30 * 1024` bytes)
35
- - Worker가 지원되지 않는 환경(Node.js)에서는 메인 스레드에서 처리
36
- - Worker는 싱글턴 패턴으로 공유됨 (`createClientProtocolWrapper` 여러 번 호출해도 Worker는 하나)
37
- - Worker 작업은 60초 타임아웃 후 자동 reject (메모리 누수 방지)
38
- - `decode` 시 Worker로 `ArrayBuffer` 소유권 이전 (zero-copy), 결과에서 `DateTime` 등 클래스 인스턴스 복원
39
-
40
- **CRITICAL — Worker 생성 패턴 제약:**
41
- Worker 생성 시 반드시 `new Worker(new URL("...", import.meta.url))` 직접 패턴을 사용해야 한다. sd-cli의 esbuild Worker 번들링 플러그인(`sd-worker-bundle`)이 AST에서 `new Worker(new URL(..., import.meta.url))` 패턴만 인식하여 Worker 파일을 별도 번들로 분리한다. 래퍼 함수(예: `createBrowserWorker(new URL(...))`)로 감싸면 `CallExpression`이 되어 플러그인이 인식하지 못하고, Worker 파일이 번들에 포함되지 않아 브라우저에서 404 에러가 발생한다.
42
-
43
- 사용 예:
44
-
45
- ```typescript
46
- import { createClientProtocolWrapper } from "@simplysm/service-client";
47
- import { createServiceProtocol } from "@simplysm/service-common";
48
-
49
- const protocol = createServiceProtocol();
50
- const wrapper = createClientProtocolWrapper(protocol);
51
-
52
- const { chunks, totalSize } = await wrapper.encode("uuid-1", { name: "User.getList", body: [] });
53
-
54
- // 사용 완료 후 정리
55
- wrapper.dispose();
56
- ```
package/docs/transport.md DELETED
@@ -1,131 +0,0 @@
1
- # Transport
2
-
3
- ## `SocketProviderEvents`
4
-
5
- `SocketProvider`에서 발생하는 이벤트 타입 맵.
6
-
7
- ```typescript
8
- export interface SocketProviderEvents {
9
- message: Bytes;
10
- state: "connected" | "closed" | "reconnecting";
11
- }
12
- ```
13
-
14
- | Event | Type | Description |
15
- |-------|------|-------------|
16
- | `message` | `Bytes` | 서버로부터 바이너리 메시지 수신 |
17
- | `state` | `"connected" \| "closed" \| "reconnecting"` | 연결 상태 변경 |
18
-
19
- ## `SocketProvider`
20
-
21
- WebSocket 연결, 재연결, 하트비트를 관리하는 인터페이스. 팩토리 함수 `createSocketProvider`로 생성한다.
22
-
23
- ```typescript
24
- export interface SocketProvider {
25
- readonly clientName: string;
26
- readonly connected: boolean;
27
- on<K extends keyof SocketProviderEvents & string>(
28
- type: K,
29
- listener: (data: SocketProviderEvents[K]) => void,
30
- ): void;
31
- off<K extends keyof SocketProviderEvents & string>(
32
- type: K,
33
- listener: (data: SocketProviderEvents[K]) => void,
34
- ): void;
35
- connect(): Promise<void>;
36
- close(): Promise<void>;
37
- send(data: Bytes): Promise<void>;
38
- }
39
- ```
40
-
41
- | Member | Type | Description |
42
- |--------|------|-------------|
43
- | `clientName` | `string` | 클라이언트 식별자 (읽기 전용) |
44
- | `connected` | `boolean` | 현재 연결 상태 (읽기 전용) |
45
- | `on(type, listener)` | `void` | 이벤트 리스너 등록 |
46
- | `off(type, listener)` | `void` | 이벤트 리스너 제거 |
47
- | `connect()` | `Promise<void>` | WebSocket 연결 시작 |
48
- | `close()` | `Promise<void>` | WebSocket 연결 종료 |
49
- | `send(data)` | `Promise<void>` | 바이너리 데이터 전송. 연결 복구 대기 후 전송 |
50
-
51
- ## `createSocketProvider`
52
-
53
- `SocketProvider` 팩토리 함수.
54
-
55
- ```typescript
56
- export function createSocketProvider(
57
- url: string,
58
- clientName: string,
59
- maxReconnectCount: number,
60
- ): SocketProvider;
61
- ```
62
-
63
- | Parameter | Type | Description |
64
- |-----------|------|-------------|
65
- | `url` | `string` | WebSocket 서버 URL (`ws://` 또는 `wss://`) |
66
- | `clientName` | `string` | 클라이언트 식별자 (URL 파라미터로 전달됨) |
67
- | `maxReconnectCount` | `number` | 최대 재연결 횟수. `0`이면 재연결 안 함 |
68
-
69
- 내부 동작:
70
- - 하트비트: 5초마다 ping 전송, 30초 응답 없으면 재연결 시도
71
- - 재연결: 연결 끊김 시 3초 간격으로 `maxReconnectCount`회 재시도
72
- - Node.js 환경에서 `globalThis.WebSocket`이 없으면 `ws` 패키지로 폴리필
73
-
74
- ## `ServiceTransportEvents`
75
-
76
- `ServiceTransport`에서 발생하는 이벤트 타입 맵.
77
-
78
- ```typescript
79
- export interface ServiceTransportEvents {
80
- event: { keys: string[]; data: unknown };
81
- }
82
- ```
83
-
84
- | Event | Type | Description |
85
- |-------|------|-------------|
86
- | `event` | `{ keys: string[]; data: unknown }` | 서버에서 발행된 이벤트 수신 |
87
-
88
- ## `ServiceTransport`
89
-
90
- 요청-응답 매핑, progress 중계, 서버 이벤트 디스패치를 담당하는 인터페이스.
91
-
92
- ```typescript
93
- export interface ServiceTransport {
94
- on<K extends keyof ServiceTransportEvents & string>(
95
- type: K,
96
- listener: (data: ServiceTransportEvents[K]) => void,
97
- ): void;
98
- off<K extends keyof ServiceTransportEvents & string>(
99
- type: K,
100
- listener: (data: ServiceTransportEvents[K]) => void,
101
- ): void;
102
- send(message: ServiceClientMessage, progress?: ServiceProgress): Promise<unknown>;
103
- }
104
- ```
105
-
106
- | Member | Type | Description |
107
- |--------|------|-------------|
108
- | `on(type, listener)` | `void` | 이벤트 리스너 등록 |
109
- | `off(type, listener)` | `void` | 이벤트 리스너 제거 |
110
- | `send(message, progress?)` | `Promise<unknown>` | 서버에 메시지 전송하고 응답 대기 |
111
-
112
- ## `createServiceTransport`
113
-
114
- `ServiceTransport` 팩토리 함수.
115
-
116
- ```typescript
117
- export function createServiceTransport(
118
- socket: SocketProvider,
119
- protocol: ClientProtocolWrapper,
120
- ): ServiceTransport;
121
- ```
122
-
123
- | Parameter | Type | Description |
124
- |-----------|------|-------------|
125
- | `socket` | `SocketProvider` | WebSocket 소켓 제공자 |
126
- | `protocol` | `ClientProtocolWrapper` | 인코딩/디코딩 래퍼 |
127
-
128
- 내부 동작:
129
- - `uuid` 기반 요청-응답 `Map`으로 비동기 응답을 매핑
130
- - 소켓 `closed`/`reconnecting` 상태 시 대기 중인 모든 요청을 reject
131
- - 분할 메시지의 progress 상태를 추적하여 완료 시 100% 이벤트 전송
package/docs/types.md DELETED
@@ -1,93 +0,0 @@
1
- # Types
2
-
3
- ## `BlobInput`
4
-
5
- Blob constructor가 허용하는 데이터 타입. DOM `BlobPart`를 대체하여 Node.js / 브라우저 양쪽에서 typecheck가 통과하도록 한다.
6
-
7
- ```typescript
8
- export type BlobInput = Blob | Uint8Array<ArrayBuffer> | ArrayBuffer | string;
9
- ```
10
-
11
- ## `FileCollection`
12
-
13
- File 컬렉션 인터페이스. DOM `FileList`를 대체하며 브라우저 `FileList`와 구조적으로 호환된다.
14
-
15
- ```typescript
16
- export interface FileCollection {
17
- readonly length: number;
18
- item(index: number): File | null;
19
- [index: number]: File;
20
- [Symbol.iterator](): IterableIterator<File>;
21
- }
22
- ```
23
-
24
- | Field | Type | Description |
25
- |-------|------|-------------|
26
- | `length` | `number` | 파일 개수 |
27
- | `item(index)` | `File \| null` | 인덱스로 File 반환 |
28
- | `[index]` | `File` | 인덱스 접근자 |
29
- | `[Symbol.iterator]()` | `IterableIterator<File>` | for-of 이터레이션 지원 |
30
-
31
- ## `isWorkerSupported`
32
-
33
- Web Worker API 지원 여부를 확인한다. `globalThis.Worker` 존재 여부로 판별한다.
34
-
35
- ```typescript
36
- export function isWorkerSupported(): boolean;
37
- ```
38
-
39
- ## `ServiceConnectionOptions`
40
-
41
- 서비스 서버에 연결할 때 사용하는 옵션 인터페이스.
42
-
43
- ```typescript
44
- export interface ServiceConnectionOptions {
45
- port: number;
46
- host: string;
47
- ssl?: boolean;
48
- maxReconnectCount?: number;
49
- }
50
- ```
51
-
52
- | Field | Type | Description |
53
- |-------|------|-------------|
54
- | `port` | `number` | 서버 포트 번호 |
55
- | `host` | `string` | 서버 호스트 주소 |
56
- | `ssl` | `boolean?` | HTTPS/WSS 사용 여부 |
57
- | `maxReconnectCount` | `number?` | 최대 재연결 횟수. `0`이면 재연결 비활성화. 기본값 `10` |
58
-
59
- ## `ServiceProgress`
60
-
61
- 요청/응답/서버 단계별 progress 콜백을 담는 컨테이너 인터페이스.
62
-
63
- ```typescript
64
- export interface ServiceProgress {
65
- request?: (s: ServiceProgressState) => void;
66
- response?: (s: ServiceProgressState) => void;
67
- server?: (s: ServiceProgressState) => void;
68
- }
69
- ```
70
-
71
- | Field | Type | Description |
72
- |-------|------|-------------|
73
- | `request` | `((s: ServiceProgressState) => void)?` | 클라이언트 → 서버 전송 progress |
74
- | `response` | `((s: ServiceProgressState) => void)?` | 서버 → 클라이언트 수신 progress |
75
- | `server` | `((s: ServiceProgressState) => void)?` | 서버 내부 처리 progress |
76
-
77
- ## `ServiceProgressState`
78
-
79
- progress 콜백에 전달되는 상태 객체.
80
-
81
- ```typescript
82
- export interface ServiceProgressState {
83
- uuid: string;
84
- totalSize: number;
85
- completedSize: number;
86
- }
87
- ```
88
-
89
- | Field | Type | Description |
90
- |-------|------|-------------|
91
- | `uuid` | `string` | 요청 식별자 |
92
- | `totalSize` | `number` | 전체 크기 (bytes) |
93
- | `completedSize` | `number` | 완료된 크기 (bytes) |