@taco_tsinghua/graphnode-sdk 0.1.14 → 0.1.17

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
@@ -1,377 +1,381 @@
1
- # GraphNode BE SDK
2
-
3
- This SDK provides a convenient way to interact with the GraphNode Backend API from a TypeScript/JavaScript client.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install @taco_tsinghua/graphnode-sdk
9
- ```
10
-
11
- ## Getting Started
12
-
13
- ### Initialization
14
-
15
- Create a client instance. The base URL is automatically configured to point to the GraphNode backend.
16
-
17
- ```typescript
18
- import { createGraphNodeClient } from '@taco_tsinghua/graphnode-sdk';
19
-
20
- // No need to pass baseUrl, it defaults to the internal constant
21
- const client = createGraphNodeClient();
22
- ```
23
-
24
- If you need to pass custom fetch options (e.g., for testing or specific environments):
25
-
26
- ```typescript
27
- const client = createGraphNodeClient({
28
- // fetch: customFetch
29
- });
30
- ```
31
-
32
- ### API Usage Examples
33
-
34
- The client is organized by API resources.
35
-
36
- #### Health
37
-
38
- Check the health of the API server.
39
-
40
- ```typescript
41
- const health = await client.health.check();
42
- console.log(health); // { ok: true }
43
- ```
44
-
45
- #### Me (User Profile)
46
-
47
- Get the profile of the currently authenticated user.
48
-
49
- ```typescript
50
- try {
51
- const me = await client.me.getProfile();
52
- console.log(me); // { id: '...', displayName: '...' }
53
- } catch (error) {
54
- console.error('Not authenticated');
55
- }
56
- ```
57
-
58
- #### Conversations
59
-
60
- **Create a single conversation:**
61
-
62
- ```typescript
63
- const newConversation = await client.conversations.create({
64
- id: 'client-generated-uuid-1',
65
- title: 'My First Conversation',
66
- });
67
- console.log(newConversation);
68
- ```
69
-
70
- **Bulk create multiple conversations:**
71
-
72
- ```typescript
73
- const response = await client.conversations.bulkCreate({
74
- conversations: [
75
- { id: 'bulk-uuid-1', title: 'Bulk Conversation 1' },
76
- {
77
- id: 'bulk-uuid-2',
78
- title: 'Bulk Conversation 2 with messages',
79
- messages: [{ id: 'msg-uuid-1', role: 'user', content: 'Hello!' }]
80
- }
81
- ]
82
- });
83
- console.log(response.conversations); // Array of created conversations
84
- ```
85
-
86
- **List all conversations:**
87
-
88
- ```typescript
89
- const conversations = await client.conversations.list();
90
- console.log(conversations);
91
- ```
92
-
93
- **Get a specific conversation:**
94
-
95
- ```typescript
96
- const conversation = await client.conversations.get('conversation-id-123');
97
- console.log(conversation);
98
- ```
99
-
100
- #### Messages
101
-
102
- Create a message within a conversation:
103
-
104
- ```typescript
105
- const newMessage = await client.conversations.createMessage('conversation-id-123', {
106
- id: 'message-uuid-456',
107
- role: 'user',
108
- content: 'Hello, this is a new message.',
109
- });
110
- console.log(newMessage);
111
- ```
112
-
113
- #### Graph
114
-
115
- **Nodes:**
116
-
117
- ```typescript
118
- // Create a node
119
- const node = await client.graph.createNode({
120
- id: 1,
121
- label: 'My Node',
122
- type: 'concept',
123
- properties: { color: 'red' }
124
- });
125
-
126
- // List nodes
127
- const nodes = await client.graph.listNodes();
128
-
129
- // Get node
130
- const myNode = await client.graph.getNode(1);
131
-
132
- // Update node
133
- await client.graph.updateNode(1, { label: 'Updated Node' });
134
-
135
- // Delete node
136
- await client.graph.deleteNode(1);
137
-
138
- // Delete node cascade (with edges)
139
- await client.graph.deleteNodeCascade(1);
140
- ```
141
-
142
- **Edges:**
143
-
144
- ```typescript
145
- // Create an edge
146
- const edge = await client.graph.createEdge({
147
- source: 1,
148
- target: 2,
149
- relationship: 'related_to'
150
- });
151
-
152
- // List edges
153
- const edges = await client.graph.listEdges();
154
-
155
- // Delete edge
156
- await client.graph.deleteEdge('edge-id');
157
- ```
158
-
159
- **Clusters:**
160
-
161
- ```typescript
162
- // Create cluster
163
- const cluster = await client.graph.createCluster({
164
- name: 'My Cluster',
165
- nodeIds: [1, 2]
166
- });
167
-
168
- // List clusters
169
- const clusters = await client.graph.listClusters();
170
-
171
- // Get cluster
172
- const myCluster = await client.graph.getCluster('cluster-id');
173
-
174
- // Delete cluster
175
- await client.graph.deleteCluster('cluster-id');
176
-
177
- // Delete cluster cascade
178
- await client.graph.deleteClusterCascade('cluster-id');
179
- ```
180
-
181
- **Stats & Snapshot:**
182
-
183
- ```typescript
184
- // Get stats
185
- const stats = await client.graph.getStats();
186
-
187
- // Get snapshot
188
- const snapshot = await client.graph.getSnapshot();
189
-
190
- // Save snapshot
191
- await client.graph.saveSnapshot(snapshot);
192
- ```
193
-
194
- #### Graph AI (Graph Generation)
195
-
196
- **Generate Graph from User Conversations:**
197
-
198
- Starts a background task to analyze the user's conversation history and generate a knowledge graph.
199
-
200
- ```typescript
201
- const response = await client.graphAi.generateGraph();
202
-
203
- if (response.isSuccess) {
204
- console.log('Task Started:', response.data.taskId);
205
- console.log('Status:', response.data.status);
206
- }
207
- ```
208
-
209
- **Generate Graph from JSON (Test Mode):**
210
-
211
- Directly sends conversation data (in ChatGPT export format) to the AI engine for graph generation. Useful for testing without existing DB data.
212
-
213
- ```typescript
214
- import { AiInputData } from '@taco_tsinghua/graphnode-sdk';
215
-
216
- const mockData: AiInputData[] = [{
217
- title: "Test Conversation",
218
- create_time: 1678900000,
219
- update_time: 1678900100,
220
- mapping: {
221
- "msg-1": {
222
- id: "msg-1",
223
- message: {
224
- id: "msg-1",
225
- author: { role: "user" },
226
- content: { content_type: "text", parts: ["Hello"] }
227
- },
228
- parent: null,
229
- children: []
230
- }
231
- }
232
- }];
233
-
234
- const response = await client.graphAi.generateGraphTest(mockData);
235
- ```
236
-
237
- #### Notes & Folders
238
-
239
- **Notes:**
240
-
241
- ```typescript
242
- // Create a note
243
- const note = await client.note.createNote({
244
- title: 'My Note',
245
- content: '# Hello World',
246
- folderId: null // Optional
247
- });
248
-
249
- // List notes
250
- const notes = await client.note.listNotes();
251
-
252
- // Get note
253
- const myNote = await client.note.getNote('note-id');
254
-
255
- // Update note
256
- const updatedNote = await client.note.updateNote('note-id', {
257
- content: '# Updated Content'
258
- });
259
-
260
- // Delete note
261
- await client.note.deleteNote('note-id');
262
- ```
263
-
264
- **Folders:**
265
-
266
- ```typescript
267
- // Create a folder
268
- const folder = await client.note.createFolder({
269
- name: 'My Folder',
270
- parentId: null // Optional
271
- });
272
-
273
- // List folders
274
- const folders = await client.note.listFolders();
275
-
276
- // Get folder
277
- const myFolder = await client.note.getFolder('folder-id');
278
-
279
- // Update folder
280
- const updatedFolder = await client.note.updateFolder('folder-id', {
281
- name: 'Updated Folder Name'
282
- });
283
-
284
- // Delete folder
285
- await client.note.deleteFolder('folder-id');
286
- ```
287
-
288
- ### Error Handling
289
-
290
- The SDK uses a unified `HttpResponse` object for all API responses, eliminating the need for `try...catch` blocks for handling HTTP errors. Each API method returns a `Promise<HttpResponse<T>>`, which is a discriminated union type. You can check the `isSuccess` property to determine if the call was successful.
291
-
292
- ```typescript
293
- import { createGraphNodeClient, HttpResponse } from '@taco_tsinghua/graphnode-sdk';
294
-
295
- const client = createGraphNodeClient();
296
-
297
- async function fetchConversation() {
298
- const response = await client.conversations.get('non-existent-id');
299
-
300
- if (response.isSuccess) {
301
- // Type-safe access to `data` and `statusCode`
302
- console.log('Success:', response.data);
303
- } else {
304
- // Type-safe access to `error`
305
- console.error('API Error:', response.error.message);
306
- console.error('Status:', response.error.statusCode);
307
-
308
- // The error body might contain RFC 9457 Problem Details
309
- const problem = response.error.body as { title: string; detail: string };
310
- if (problem) {
311
- console.error('Problem Title:', problem.title);
312
- console.error('Problem Detail:', problem.detail);
313
- }
314
- }
315
- }
316
- ```
317
-
318
- ### HTTP 상태 코드 가이드 (HTTP Status Codes Guide)
319
-
320
- API는 표준 HTTP 상태 코드를 사용하여 요청의 성공 또는 실패를 나타냅니다.
321
-
322
- #### 성공 코드 (General Success Codes)
323
- - **`200 OK`**: 요청이 성공적으로 처리되었습니다. 응답 본문에 요청한 데이터가 포함됩니다. (예: `GET`, `PATCH`, `PUT`)
324
- - **`201 Created`**: 리소스가 성공적으로 생성되었습니다. `Location` 헤더에 새 리소스의 URL이 포함되며, 본문에 생성된 리소스가 포함됩니다. (예: `POST`)
325
- - **`204 No Content`**: 요청은 성공했으나 반환할 본문이 없습니다. (예: `DELETE`, 본문 없는 `PATCH`)
326
-
327
- #### 에러 코드 (General Error Codes)
328
- 모든 에러 응답은 **RFC 9457 Problem Details** 형식(`application/problem+json`)을 따릅니다.
329
- - **`400 Bad Request`**: 클라이언트 오류로 인해 서버가 요청을 처리할 수 없습니다(예: 잘못된 구문, 유효성 검사 실패). 응답 본문에 유효성 검사 실패에 대한 세부 정보가 포함됩니다.
330
- - **`401 Unauthorized`**: 요청된 응답을 받으려면 인증이 필요합니다. 세션이 유효하지 않거나 만료된 경우 발생합니다.
331
- - **`403 Forbidden`**: 클라이언트가 콘텐츠에 대한 접근 권한이 없습니다. 401과 달리 서버가 클라이언트의 신원을 알고 있습니다.
332
- - **`404 Not Found`**: 서버가 요청한 리소스를 찾을 수 없습니다.
333
- - **`409 Conflict`**: 요청이 서버의 현재 상태와 충돌할 때 전송됩니다(예: 이미 존재하는 리소스 생성).
334
- - **`429 Too Many Requests`**: 사용자가 일정 시간 동안 너무 많은 요청을 보냈습니다("속도 제한").
335
- - **`500 Internal Server Error`**: 서버가 처리 방법을 모르는 상황에 직면했습니다.
336
- - **`502 Bad Gateway`**: 업스트림 오류. 외부 서비스(예: OpenAI, DB)가 유효하지 않은 응답을 반환했습니다.
337
- - **`503 Service Unavailable`**: 서비스 불가. DB 연결 실패 등 일시적으로 서비스를 이용할 수 없습니다.
338
- - **`504 Gateway Timeout`**: 업스트림 타임아웃. 외부 서비스의 응답이 지연되어 타임아웃이 발생했습니다.
339
-
340
- #### 엔드포인트별 상태 코드 (Endpoint-Specific Status Codes)
341
-
342
- | Endpoint | Method | Success Codes | Error Codes | Description |
343
- |---|---|---|---|---|
344
- | **/healthz** | `GET` | `200` | `503` | API 상태를 확인합니다. <br> `503`: DB 등 필수 의존성 서비스가 다운된 경우. |
345
- | **/auth/logout** | `POST` | `204` | `401` | 사용자를 로그아웃하고 세션을 무효화합니다. <br> `401`: 이미 로그아웃되었거나 세션이 유효하지 않은 경우. |
346
- | **/v1/me** | `GET` | `200` | `401` | 현재 사용자의 프로필을 조회합니다. <br> `401`: 로그인하지 않은 사용자. |
347
- | **/v1/me/api-keys/{model}** | `GET` | `200` | `401`, `404` | 특정 모델의 API 키를 조회합니다. <br> `401`: 미인증. <br> `404`: 해당 모델의 키가 설정되지 않음. |
348
- | | `PATCH` | `204` | `400`, `401` | API 키를 업데이트합니다. <br> `400`: 키 형식이 잘못됨. <br> `401`: 미인증. |
349
- | | `DELETE` | `204` | `401` | API 키를 삭제합니다. <br> `401`: 미인증. |
350
- | **/v1/ai/conversations** | `POST` | `201` | `400`, `401`, `409` | 대화를 생성합니다. <br> `400`: 제목 누락 등 입력값 오류. <br> `401`: 미인증. <br> `409`: 클라이언트가 제공한 ID가 이미 존재함. |
351
- | | `GET` | `200` | `401` | 모든 대화를 조회합니다. <br> `401`: 미인증. |
352
- | **/v1/ai/conversations/bulk** | `POST` | `201` | `400`, `401` | 대화를 일괄 생성합니다. <br> `400`: 배열 형식이 아니거나 데이터 오류. <br> `401`: 미인증. |
353
- | **/v1/ai/conversations/{id}** | `GET` | `200` | `401`, `404` | 단일 대화를 조회합니다. <br> `401`: 미인증. <br> `404`: 대화를 찾을 수 없거나 삭제됨. |
354
- | | `PATCH` | `200` | `400`, `401`, `404` | 대화를 업데이트합니다. <br> `400`: 입력값 오류. <br> `401`: 미인증. <br> `404`: 대화 없음. |
355
- | | `DELETE` | `204` | `401`, `404` | 대화를 삭제합니다. <br> `401`: 미인증. <br> `404`: 대화 없음. |
356
- | **/v1/ai/conversations/{id}/restore** | `POST` | `200` | `401`, `404` | 삭제된 대화를 복원합니다. <br> `401`: 미인증. <br> `404`: 삭제된 대화 기록을 찾을 수 없음. |
357
- | **/v1/ai/conversations/{id}/messages** | `POST` | `201` | `400`, `401`, `404` | 대화에 메시지를 추가합니다. <br> `400`: 내용 누락 등. <br> `401`: 미인증. <br> `404`: 대화가 존재하지 않음. |
358
- | **/v1/graph/nodes** | `POST` | `201` | `400`, `401`, `409` | 그래프 노드를 생성합니다. <br> `400`: 필수 필드 누락. <br> `401`: 미인증. <br> `409`: 노드 ID 중복. |
359
- | | `GET` | `200` | `401` | 모든 그래프 노드를 조회합니다. <br> `401`: 미인증. |
360
- | **/v1/graph/nodes/{id}** | `GET` | `200` | `401`, `404` | 단일 노드를 조회합니다. <br> `401`: 미인증. <br> `404`: 노드 없음. |
361
- | | `PATCH` | `204` | `400`, `401`, `404` | 노드를 업데이트합니다. <br> `400`: 입력값 오류. <br> `401`: 미인증. <br> `404`: 노드 없음. |
362
- | | `DELETE` | `204` | `401`, `404` | 노드를 삭제합니다. <br> `401`: 미인증. <br> `404`: 노드 없음. |
363
- | **/v1/graph/edges** | `POST` | `201` | `400`, `401` | 그래프 엣지를 생성합니다. <br> `400`: Source/Target 노드 ID 오류. <br> `401`: 미인증. |
364
- | | `GET` | `200` | `401` | 모든 그래프 엣지를 조회합니다. <br> `401`: 미인증. |
365
- | | `DELETE` | `204` | `401`, `404` | 엣지를 삭제합니다. <br> `401`: 미인증. <br> `404`: 엣지 없음. |
366
- | **/v1/notes** | `POST` | `201` | `400`, `401` | 노트를 생성합니다. <br> `400`: 제목/내용 누락. <br> `401`: 미인증. |
367
- | | `GET` | `200` | `401` | 모든 노트를 조회합니다. <br> `401`: 미인증. |
368
- | **/v1/notes/{id}** | `GET` | `200` | `401`, `404` | 단일 노트를 조회합니다. <br> `401`: 미인증. <br> `404`: 노트 없음. |
369
- | | `PATCH` | `200` | `400`, `401`, `404` | 노트를 업데이트합니다. <br> `400`: 입력값 오류. <br> `401`: 미인증. <br> `404`: 노트 없음. |
370
- | | `DELETE` | `204` | `401`, `404` | 노트를 삭제합니다. <br> `401`: 미인증. <br> `404`: 노트 없음. |
371
- | **/v1/folders** | `POST` | `201` | `400`, `401` | 폴더를 생성합니다. <br> `400`: 이름 누락. <br> `401`: 미인증. |
372
- | | `GET` | `200` | `401` | 모든 폴더를 조회합니다. <br> `401`: 미인증. |
373
- | **/v1/sync/pull** | `GET` | `200` | `400`, `401` | 변경 사항을 가져옵니다. <br> `400`: `since` 파라미터 형식 오류. <br> `401`: 미인증. |
374
- | **/v1/sync/push** | `POST` | `204` | `400`, `401`, `409` | 변경 사항을 푸시합니다. <br> `400`: 데이터 형식 오류. <br> `401`: 미인증. <br> `409`: 데이터 버전 충돌 (클라이언트가 구버전 데이터 수정 시도). |
375
- | **/v1/graph-ai/generate** | `POST` | `202` | `401`, `409` | 그래프 생성 요청을 시작합니다. <br> `401`: 미인증. <br> `409`: 이미 진행 중인 작업이 있음. |
376
- | **/v1/graph-ai/test/generate-json** | `POST` | `202` | `400` | [테스트용] JSON 기반 그래프 생성 요청. <br> `400`: JSON 형식이 잘못되었거나 필수 필드 누락. |
377
-
1
+ # GraphNode BE SDK
2
+
3
+ This SDK provides a convenient way to interact with the GraphNode Backend API from a TypeScript/JavaScript client.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @taco_tsinghua/graphnode-sdk
9
+ ```
10
+
11
+ ## Getting Started
12
+
13
+ ### Initialization
14
+
15
+ Create a client instance. The base URL is automatically configured to point to the GraphNode backend.
16
+
17
+ ```typescript
18
+ import { createGraphNodeClient } from '@taco_tsinghua/graphnode-sdk';
19
+
20
+ // No need to pass baseUrl, it defaults to the internal constant
21
+ const client = createGraphNodeClient();
22
+ ```
23
+
24
+ If you need to pass custom fetch options (e.g., for testing or specific environments):
25
+
26
+ ```typescript
27
+ const client = createGraphNodeClient({
28
+ // fetch: customFetch
29
+ });
30
+ ```
31
+
32
+ ### API Usage Examples
33
+
34
+ The client is organized by API resources.
35
+
36
+ #### Health
37
+
38
+ Check the health of the API server.
39
+
40
+ ```typescript
41
+ const health = await client.health.check();
42
+ console.log(health); // { ok: true }
43
+ ```
44
+
45
+ #### Me (User Profile)
46
+
47
+ Get the profile of the currently authenticated user.
48
+
49
+ ```typescript
50
+ try {
51
+ const me = await client.me.getProfile();
52
+ console.log(me); // { id: '...', displayName: '...' }
53
+ } catch (error) {
54
+ console.error('Not authenticated');
55
+ }
56
+ ```
57
+
58
+ #### Conversations
59
+
60
+ **Create a single conversation:**
61
+
62
+ ```typescript
63
+ const newConversation = await client.conversations.create({
64
+ id: 'client-generated-uuid-1',
65
+ title: 'My First Conversation',
66
+ });
67
+ console.log(newConversation);
68
+ ```
69
+
70
+ **Bulk create multiple conversations:**
71
+
72
+ ```typescript
73
+ const response = await client.conversations.bulkCreate({
74
+ conversations: [
75
+ { id: 'bulk-uuid-1', title: 'Bulk Conversation 1' },
76
+ {
77
+ id: 'bulk-uuid-2',
78
+ title: 'Bulk Conversation 2 with messages',
79
+ messages: [{ id: 'msg-uuid-1', role: 'user', content: 'Hello!' }],
80
+ },
81
+ ],
82
+ });
83
+ console.log(response.conversations); // Array of created conversations
84
+ ```
85
+
86
+ **List all conversations:**
87
+
88
+ ```typescript
89
+ const conversations = await client.conversations.list();
90
+ console.log(conversations);
91
+ ```
92
+
93
+ **Get a specific conversation:**
94
+
95
+ ```typescript
96
+ const conversation = await client.conversations.get('conversation-id-123');
97
+ console.log(conversation);
98
+ ```
99
+
100
+ #### Messages
101
+
102
+ Create a message within a conversation:
103
+
104
+ ```typescript
105
+ const newMessage = await client.conversations.createMessage('conversation-id-123', {
106
+ id: 'message-uuid-456',
107
+ role: 'user',
108
+ content: 'Hello, this is a new message.',
109
+ });
110
+ console.log(newMessage);
111
+ ```
112
+
113
+ #### Graph
114
+
115
+ **Nodes:**
116
+
117
+ ```typescript
118
+ // Create a node
119
+ const node = await client.graph.createNode({
120
+ id: 1,
121
+ label: 'My Node',
122
+ type: 'concept',
123
+ properties: { color: 'red' },
124
+ });
125
+
126
+ // List nodes
127
+ const nodes = await client.graph.listNodes();
128
+
129
+ // Get node
130
+ const myNode = await client.graph.getNode(1);
131
+
132
+ // Update node
133
+ await client.graph.updateNode(1, { label: 'Updated Node' });
134
+
135
+ // Delete node
136
+ await client.graph.deleteNode(1);
137
+
138
+ // Delete node cascade (with edges)
139
+ await client.graph.deleteNodeCascade(1);
140
+ ```
141
+
142
+ **Edges:**
143
+
144
+ ```typescript
145
+ // Create an edge
146
+ const edge = await client.graph.createEdge({
147
+ source: 1,
148
+ target: 2,
149
+ relationship: 'related_to',
150
+ });
151
+
152
+ // List edges
153
+ const edges = await client.graph.listEdges();
154
+
155
+ // Delete edge
156
+ await client.graph.deleteEdge('edge-id');
157
+ ```
158
+
159
+ **Clusters:**
160
+
161
+ ```typescript
162
+ // Create cluster
163
+ const cluster = await client.graph.createCluster({
164
+ name: 'My Cluster',
165
+ nodeIds: [1, 2],
166
+ });
167
+
168
+ // List clusters
169
+ const clusters = await client.graph.listClusters();
170
+
171
+ // Get cluster
172
+ const myCluster = await client.graph.getCluster('cluster-id');
173
+
174
+ // Delete cluster
175
+ await client.graph.deleteCluster('cluster-id');
176
+
177
+ // Delete cluster cascade
178
+ await client.graph.deleteClusterCascade('cluster-id');
179
+ ```
180
+
181
+ **Stats & Snapshot:**
182
+
183
+ ```typescript
184
+ // Get stats
185
+ const stats = await client.graph.getStats();
186
+
187
+ // Get snapshot
188
+ const snapshot = await client.graph.getSnapshot();
189
+
190
+ // Save snapshot
191
+ await client.graph.saveSnapshot(snapshot);
192
+ ```
193
+
194
+ #### Graph AI (Graph Generation)
195
+
196
+ **Generate Graph from User Conversations:**
197
+
198
+ Starts a background task to analyze the user's conversation history and generate a knowledge graph.
199
+
200
+ ```typescript
201
+ const response = await client.graphAi.generateGraph();
202
+
203
+ if (response.isSuccess) {
204
+ console.log('Task Started:', response.data.taskId);
205
+ console.log('Status:', response.data.status);
206
+ }
207
+ ```
208
+
209
+ **Generate Graph from JSON (Test Mode):**
210
+
211
+ Directly sends conversation data (in ChatGPT export format) to the AI engine for graph generation. Useful for testing without existing DB data.
212
+
213
+ ```typescript
214
+ import { AiInputData } from '@taco_tsinghua/graphnode-sdk';
215
+
216
+ const mockData: AiInputData[] = [
217
+ {
218
+ title: 'Test Conversation',
219
+ create_time: 1678900000,
220
+ update_time: 1678900100,
221
+ mapping: {
222
+ 'msg-1': {
223
+ id: 'msg-1',
224
+ message: {
225
+ id: 'msg-1',
226
+ author: { role: 'user' },
227
+ content: { content_type: 'text', parts: ['Hello'] },
228
+ },
229
+ parent: null,
230
+ children: [],
231
+ },
232
+ },
233
+ },
234
+ ];
235
+
236
+ const response = await client.graphAi.generateGraphTest(mockData);
237
+ ```
238
+
239
+ #### Notes & Folders
240
+
241
+ **Notes:**
242
+
243
+ ```typescript
244
+ // Create a note
245
+ const note = await client.note.createNote({
246
+ title: 'My Note',
247
+ content: '# Hello World',
248
+ folderId: null, // Optional
249
+ });
250
+
251
+ // List notes
252
+ const notes = await client.note.listNotes();
253
+
254
+ // Get note
255
+ const myNote = await client.note.getNote('note-id');
256
+
257
+ // Update note
258
+ const updatedNote = await client.note.updateNote('note-id', {
259
+ content: '# Updated Content',
260
+ });
261
+
262
+ // Delete note
263
+ await client.note.deleteNote('note-id');
264
+ ```
265
+
266
+ **Folders:**
267
+
268
+ ```typescript
269
+ // Create a folder
270
+ const folder = await client.note.createFolder({
271
+ name: 'My Folder',
272
+ parentId: null, // Optional
273
+ });
274
+
275
+ // List folders
276
+ const folders = await client.note.listFolders();
277
+
278
+ // Get folder
279
+ const myFolder = await client.note.getFolder('folder-id');
280
+
281
+ // Update folder
282
+ const updatedFolder = await client.note.updateFolder('folder-id', {
283
+ name: 'Updated Folder Name',
284
+ });
285
+
286
+ // Delete folder
287
+ await client.note.deleteFolder('folder-id');
288
+ ```
289
+
290
+ ### Error Handling
291
+
292
+ The SDK uses a unified `HttpResponse` object for all API responses, eliminating the need for `try...catch` blocks for handling HTTP errors. Each API method returns a `Promise<HttpResponse<T>>`, which is a discriminated union type. You can check the `isSuccess` property to determine if the call was successful.
293
+
294
+ ```typescript
295
+ import { createGraphNodeClient, HttpResponse } from '@taco_tsinghua/graphnode-sdk';
296
+
297
+ const client = createGraphNodeClient();
298
+
299
+ async function fetchConversation() {
300
+ const response = await client.conversations.get('non-existent-id');
301
+
302
+ if (response.isSuccess) {
303
+ // Type-safe access to `data` and `statusCode`
304
+ console.log('Success:', response.data);
305
+ } else {
306
+ // Type-safe access to `error`
307
+ console.error('API Error:', response.error.message);
308
+ console.error('Status:', response.error.statusCode);
309
+
310
+ // The error body might contain RFC 9457 Problem Details
311
+ const problem = response.error.body as { title: string; detail: string };
312
+ if (problem) {
313
+ console.error('Problem Title:', problem.title);
314
+ console.error('Problem Detail:', problem.detail);
315
+ }
316
+ }
317
+ }
318
+ ```
319
+
320
+ ### HTTP 상태 코드 가이드 (HTTP Status Codes Guide)
321
+
322
+ API는 표준 HTTP 상태 코드를 사용하여 요청의 성공 또는 실패를 나타냅니다.
323
+
324
+ #### 성공 코드 (General Success Codes)
325
+
326
+ - **`200 OK`**: 요청이 성공적으로 처리되었습니다. 응답 본문에 요청한 데이터가 포함됩니다. (예: `GET`, `PATCH`, `PUT`)
327
+ - **`201 Created`**: 리소스가 성공적으로 생성되었습니다. `Location` 헤더에 새 리소스의 URL이 포함되며, 본문에 생성된 리소스가 포함됩니다. (예: `POST`)
328
+ - **`204 No Content`**: 요청은 성공했으나 반환할 본문이 없습니다. (예: `DELETE`, 본문 없는 `PATCH`)
329
+
330
+ #### 에러 코드 (General Error Codes)
331
+
332
+ 모든 에러 응답은 **RFC 9457 Problem Details** 형식(`application/problem+json`)을 따릅니다.
333
+
334
+ - **`400 Bad Request`**: 클라이언트 오류로 인해 서버가 요청을 처리할 없습니다(예: 잘못된 구문, 유효성 검사 실패). 응답 본문에 유효성 검사 실패에 대한 세부 정보가 포함됩니다.
335
+ - **`401 Unauthorized`**: 요청된 응답을 받으려면 인증이 필요합니다. 세션이 유효하지 않거나 만료된 경우 발생합니다.
336
+ - **`403 Forbidden`**: 클라이언트가 콘텐츠에 대한 접근 권한이 없습니다. 401과 달리 서버가 클라이언트의 신원을 알고 있습니다.
337
+ - **`404 Not Found`**: 서버가 요청한 리소스를 찾을 수 없습니다.
338
+ - **`409 Conflict`**: 요청이 서버의 현재 상태와 충돌할 전송됩니다(예: 이미 존재하는 리소스 생성).
339
+ - **`429 Too Many Requests`**: 사용자가 일정 시간 동안 너무 많은 요청을 보냈습니다("속도 제한").
340
+ - **`500 Internal Server Error`**: 서버가 처리 방법을 모르는 상황에 직면했습니다.
341
+ - **`502 Bad Gateway`**: 업스트림 오류. 외부 서비스(예: OpenAI, DB)가 유효하지 않은 응답을 반환했습니다.
342
+ - **`503 Service Unavailable`**: 서비스 불가. DB 연결 실패 일시적으로 서비스를 이용할 수 없습니다.
343
+ - **`504 Gateway Timeout`**: 업스트림 타임아웃. 외부 서비스의 응답이 지연되어 타임아웃이 발생했습니다.
344
+
345
+ #### 엔드포인트별 상태 코드 (Endpoint-Specific Status Codes)
346
+
347
+ | Endpoint | Method | Success Codes | Error Codes | Description |
348
+ | -------------------------------------- | -------- | ------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
349
+ | **/healthz** | `GET` | `200` | `503` | API 상태를 확인합니다. <br> `503`: DB 등 필수 의존성 서비스가 다운된 경우. |
350
+ | **/auth/logout** | `POST` | `204` | `401` | 사용자를 로그아웃하고 세션을 무효화합니다. <br> `401`: 이미 로그아웃되었거나 세션이 유효하지 않은 경우. |
351
+ | **/v1/me** | `GET` | `200` | `401` | 현재 사용자의 프로필을 조회합니다. <br> `401`: 로그인하지 않은 사용자. |
352
+ | **/v1/me/api-keys/{model}** | `GET` | `200` | `401`, `404` | 특정 모델의 API 키를 조회합니다. <br> `401`: 미인증. <br> `404`: 해당 모델의 키가 설정되지 않음. |
353
+ | | `PATCH` | `204` | `400`, `401` | API 키를 업데이트합니다. <br> `400`: 형식이 잘못됨. <br> `401`: 미인증. |
354
+ | | `DELETE` | `204` | `401` | API 키를 삭제합니다. <br> `401`: 미인증. |
355
+ | **/v1/ai/conversations** | `POST` | `201` | `400`, `401`, `409` | 대화를 생성합니다. <br> `400`: 제목 누락 등 입력값 오류. <br> `401`: 미인증. <br> `409`: 클라이언트가 제공한 ID가 이미 존재함. |
356
+ | | `GET` | `200` | `401` | 모든 대화를 조회합니다. <br> `401`: 미인증. |
357
+ | **/v1/ai/conversations/bulk** | `POST` | `201` | `400`, `401` | 대화를 일괄 생성합니다. <br> `400`: 배열 형식이 아니거나 데이터 오류. <br> `401`: 미인증. |
358
+ | **/v1/ai/conversations/{id}** | `GET` | `200` | `401`, `404` | 단일 대화를 조회합니다. <br> `401`: 미인증. <br> `404`: 대화를 찾을 없거나 삭제됨. |
359
+ | | `PATCH` | `200` | `400`, `401`, `404` | 대화를 업데이트합니다. <br> `400`: 입력값 오류. <br> `401`: 미인증. <br> `404`: 대화 없음. |
360
+ | | `DELETE` | `204` | `401`, `404` | 대화를 삭제합니다. <br> `401`: 미인증. <br> `404`: 대화 없음. |
361
+ | **/v1/ai/conversations/{id}/restore** | `POST` | `200` | `401`, `404` | 삭제된 대화를 복원합니다. <br> `401`: 미인증. <br> `404`: 삭제된 대화 기록을 찾을 수 없음. |
362
+ | **/v1/ai/conversations/{id}/messages** | `POST` | `201` | `400`, `401`, `404` | 대화에 메시지를 추가합니다. <br> `400`: 내용 누락 등. <br> `401`: 미인증. <br> `404`: 대화가 존재하지 않음. |
363
+ | **/v1/graph/nodes** | `POST` | `201` | `400`, `401`, `409` | 그래프 노드를 생성합니다. <br> `400`: 필수 필드 누락. <br> `401`: 미인증. <br> `409`: 노드 ID 중복. |
364
+ | | `GET` | `200` | `401` | 모든 그래프 노드를 조회합니다. <br> `401`: 미인증. |
365
+ | **/v1/graph/nodes/{id}** | `GET` | `200` | `401`, `404` | 단일 노드를 조회합니다. <br> `401`: 미인증. <br> `404`: 노드 없음. |
366
+ | | `PATCH` | `204` | `400`, `401`, `404` | 노드를 업데이트합니다. <br> `400`: 입력값 오류. <br> `401`: 미인증. <br> `404`: 노드 없음. |
367
+ | | `DELETE` | `204` | `401`, `404` | 노드를 삭제합니다. <br> `401`: 미인증. <br> `404`: 노드 없음. |
368
+ | **/v1/graph/edges** | `POST` | `201` | `400`, `401` | 그래프 엣지를 생성합니다. <br> `400`: Source/Target 노드 ID 오류. <br> `401`: 미인증. |
369
+ | | `GET` | `200` | `401` | 모든 그래프 엣지를 조회합니다. <br> `401`: 미인증. |
370
+ | | `DELETE` | `204` | `401`, `404` | 엣지를 삭제합니다. <br> `401`: 미인증. <br> `404`: 엣지 없음. |
371
+ | **/v1/notes** | `POST` | `201` | `400`, `401` | 노트를 생성합니다. <br> `400`: 제목/내용 누락. <br> `401`: 미인증. |
372
+ | | `GET` | `200` | `401` | 모든 노트를 조회합니다. <br> `401`: 미인증. |
373
+ | **/v1/notes/{id}** | `GET` | `200` | `401`, `404` | 단일 노트를 조회합니다. <br> `401`: 미인증. <br> `404`: 노트 없음. |
374
+ | | `PATCH` | `200` | `400`, `401`, `404` | 노트를 업데이트합니다. <br> `400`: 입력값 오류. <br> `401`: 미인증. <br> `404`: 노트 없음. |
375
+ | | `DELETE` | `204` | `401`, `404` | 노트를 삭제합니다. <br> `401`: 미인증. <br> `404`: 노트 없음. |
376
+ | **/v1/folders** | `POST` | `201` | `400`, `401` | 폴더를 생성합니다. <br> `400`: 이름 누락. <br> `401`: 미인증. |
377
+ | | `GET` | `200` | `401` | 모든 폴더를 조회합니다. <br> `401`: 미인증. |
378
+ | **/v1/sync/pull** | `GET` | `200` | `400`, `401` | 변경 사항을 가져옵니다. <br> `400`: `since` 파라미터 형식 오류. <br> `401`: 미인증. |
379
+ | **/v1/sync/push** | `POST` | `204` | `400`, `401`, `409` | 변경 사항을 푸시합니다. <br> `400`: 데이터 형식 오류. <br> `401`: 미인증. <br> `409`: 데이터 버전 충돌 (클라이언트가 구버전 데이터 수정 시도). |
380
+ | **/v1/graph-ai/generate** | `POST` | `202` | `401`, `409` | 그래프 생성 요청을 시작합니다. <br> `401`: 미인증. <br> `409`: 이미 진행 중인 작업이 있음. |
381
+ | **/v1/graph-ai/test/generate-json** | `POST` | `202` | `400` | [테스트용] JSON 기반 그래프 생성 요청. <br> `400`: JSON 형식이 잘못되었거나 필수 필드 누락. |
package/dist/client.d.ts CHANGED
@@ -15,8 +15,10 @@ import { AiApi } from './endpoints/ai.js';
15
15
  * @property fetch 커스텀 fetch 함수 (선택)
16
16
  * @property headers 기본 헤더 (선택)
17
17
  * @property credentials 인증 모드 (include | omit | same-origin)
18
+ * @property accessToken 초기 Access Token (선택)
18
19
  */
19
- export interface GraphNodeClientOptions extends Omit<BuilderOptions, 'baseUrl'> {
20
+ export interface GraphNodeClientOptions extends Omit<BuilderOptions, 'baseUrl' | 'accessToken'> {
21
+ accessToken?: string | null;
20
22
  }
21
23
  /**
22
24
  * GraphNode API 클라이언트
@@ -44,7 +46,13 @@ export declare class GraphNodeClient {
44
46
  readonly sync: SyncApi;
45
47
  readonly ai: AiApi;
46
48
  private readonly rb;
49
+ private _accessToken;
47
50
  constructor(opts?: GraphNodeClientOptions);
51
+ /**
52
+ * Access Token을 설정합니다.
53
+ * @param token JWT Access Token 또는 null (로그아웃 시)
54
+ */
55
+ setAccessToken(token: string | null): void;
48
56
  }
49
57
  /**
50
58
  * GraphNode 클라이언트 인스턴스를 생성합니다.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,cAAc,EAAkB,MAAM,mBAAmB,CAAC;AAE9F,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;CAAG;AAElF;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;gBAExB,IAAI,GAAE,sBAA2B;CA+B9C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,sBAAsB,GAAG,eAAe,CAEpF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,cAAc,EAAkB,MAAM,mBAAmB,CAAC;AAE9F,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,aAAa,CAAC;IAC7F,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,YAAY,CAAuB;gBAE/B,IAAI,GAAE,sBAA2B;IAmC7C;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAGpC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,sBAAsB,GAAG,eAAe,CAEpF"}
package/dist/client.js CHANGED
@@ -26,6 +26,7 @@ import { AiApi } from './endpoints/ai.js';
26
26
  */
27
27
  export class GraphNodeClient {
28
28
  constructor(opts = {}) {
29
+ this._accessToken = null;
29
30
  let fetchFn = opts.fetch;
30
31
  if (!fetchFn) {
31
32
  if (typeof window !== 'undefined' && window.fetch) {
@@ -38,11 +39,13 @@ export class GraphNodeClient {
38
39
  fetchFn = globalThis.fetch.bind(globalThis);
39
40
  }
40
41
  }
42
+ this._accessToken = opts.accessToken ?? null;
41
43
  // 내부 고정 baseUrl 사용, FE는 fetch/headers/credentials 정도만 선택 주입 가능
42
44
  this.rb = createRequestBuilder({
43
45
  baseUrl: GRAPHNODE_BASE_URL,
44
46
  ...opts,
45
47
  fetch: fetchFn, // 바인딩된 fetch 주입
48
+ accessToken: () => this._accessToken, // 동적 토큰 주입을 위한 함수 전달
46
49
  });
47
50
  this.health = new HealthApi(this.rb);
48
51
  this.me = new MeApi(this.rb);
@@ -55,6 +58,13 @@ export class GraphNodeClient {
55
58
  this.sync = new SyncApi(this.rb);
56
59
  this.ai = new AiApi(this.rb);
57
60
  }
61
+ /**
62
+ * Access Token을 설정합니다.
63
+ * @param token JWT Access Token 또는 null (로그아웃 시)
64
+ */
65
+ setAccessToken(token) {
66
+ this._accessToken = token;
67
+ }
58
68
  }
59
69
  /**
60
70
  * GraphNode 클라이언트 인스턴스를 생성합니다.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAuB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAW1C;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,eAAe;IAa1B,YAAY,OAA+B,EAAE;QAC3C,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClD,iCAAiC;gBACjC,0DAA0D;gBAC1D,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;iBAAM,IAAI,OAAO,UAAU,KAAK,WAAW,IAAK,UAAkB,CAAC,KAAK,EAAE,CAAC;gBAC1E,4BAA4B;gBAC5B,OAAO,GAAI,UAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,+DAA+D;QAC/D,IAAI,CAAC,EAAE,GAAG,oBAAoB,CAAC;YAC7B,OAAO,EAAE,kBAAkB;YAC3B,GAAG,IAAI;YACP,KAAK,EAAE,OAAO,EAAE,gBAAgB;SACjC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA6B;IACjE,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,12 @@ import type { MessageDto } from '../types/message.js';
4
4
  /**
5
5
  * AI 채팅 요청 DTO
6
6
  * @public
7
+ * @property id FE가 만들어줄 message 용 uuid
7
8
  * @property model 사용할 AI 모델 (openai | deepseek)
8
9
  * @property chatContent 사용자 입력 메시지
9
10
  */
10
11
  export interface AIChatRequestDto {
12
+ id: string;
11
13
  model: ApiKeyModel;
12
14
  chatContent: string;
13
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/endpoints/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAG,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,KAAK;IACJ,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;CAG9F"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/endpoints/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,KAAK;IACJ,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;CAG9F"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/endpoints/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,oBAAoB,CAAC;AA0BvE;;;;;;;;;;GAUG;AACH,MAAM,OAAO,KAAK;IAChB,YAAoB,EAAkB;QAAlB,OAAE,GAAF,EAAE,CAAgB;IAAG,CAAC;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,IAAI,CAAC,cAAsB,EAAE,GAAqB;QAChD,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,cAAc,OAAO,CAAC,CAAC,IAAI,CAAoB,GAAG,CAAC,CAAC;IAClG,CAAC;CACF"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/endpoints/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,oBAAoB,CAAC;AA4BvE;;;;;;;;;;GAUG;AACH,MAAM,OAAO,KAAK;IAChB,YAAoB,EAAkB;QAAlB,OAAE,GAAF,EAAE,CAAgB;IAAG,CAAC;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,IAAI,CAAC,cAAsB,EAAE,GAAqB;QAChD,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,cAAc,OAAO,CAAC,CAAC,IAAI,CAAoB,GAAG,CAAC,CAAC;IAClG,CAAC;CACF"}
@@ -0,0 +1,43 @@
1
+ import { RequestBuilder } from '../http-builder.js';
2
+ /**
3
+ * Notification API
4
+ *
5
+ * 사용자 알림 및 실시간 이벤트 스트림을 관리하는 API 클래스입니다.
6
+ * `/v1/notifications` 엔드포인트 하위의 API들을 사용합니다.
7
+ *
8
+ * 주요 기능:
9
+ * - 실시간 알림 스트림 URL 조회 (`getStreamUrl`)
10
+ *
11
+ * @public
12
+ */
13
+ export declare class NotificationApi {
14
+ private readonly rb;
15
+ constructor(rb: RequestBuilder);
16
+ /**
17
+ * 실시간 알림 수신을 위한 SSE(Server-Sent Events) 스트림 URL을 반환합니다.
18
+ *
19
+ * 이 엔드포인트는 `text/event-stream` 형식으로 데이터를 스트리밍합니다.
20
+ * 클라이언트는 `EventSource` API를 사용하여 연결해야 합니다.
21
+ *
22
+ * 참고:
23
+ * - 이 메서드는 HTTP 요청을 수행하지 않고, 연결 가능한 URL 문자열만 반환합니다.
24
+ * - 세션 기반 인증을 사용하므로, 브라우저의 `EventSource`가 쿠키를 전송하도록 설정해야 합니다.
25
+ *
26
+ * @returns SSE 연결을 위한 전체 URL 문자열
27
+ * @example
28
+ * const url = client.notification.getStreamUrl();
29
+ * const eventSource = new EventSource(url, { withCredentials: true });
30
+ *
31
+ * eventSource.onmessage = (event) => {
32
+ * const data = JSON.parse(event.data);
33
+ * console.log('Received notification:', data);
34
+ * };
35
+ *
36
+ * eventSource.onerror = (err) => {
37
+ * console.error('SSE Error:', err);
38
+ * eventSource.close();
39
+ * };
40
+ */
41
+ getStreamUrl(): string;
42
+ }
43
+ //# sourceMappingURL=notification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../src/endpoints/notification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;gBAExB,EAAE,EAAE,cAAc;IAI9B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,YAAY,IAAI,MAAM;CAGvB"}
@@ -0,0 +1,46 @@
1
+ import { RequestBuilder } from '../http-builder.js';
2
+ /**
3
+ * Notification API
4
+ *
5
+ * 사용자 알림 및 실시간 이벤트 스트림을 관리하는 API 클래스입니다.
6
+ * `/v1/notifications` 엔드포인트 하위의 API들을 사용합니다.
7
+ *
8
+ * 주요 기능:
9
+ * - 실시간 알림 스트림 URL 조회 (`getStreamUrl`)
10
+ *
11
+ * @public
12
+ */
13
+ export class NotificationApi {
14
+ constructor(rb) {
15
+ this.rb = rb.path('/v1/notifications');
16
+ }
17
+ /**
18
+ * 실시간 알림 수신을 위한 SSE(Server-Sent Events) 스트림 URL을 반환합니다.
19
+ *
20
+ * 이 엔드포인트는 `text/event-stream` 형식으로 데이터를 스트리밍합니다.
21
+ * 클라이언트는 `EventSource` API를 사용하여 연결해야 합니다.
22
+ *
23
+ * 참고:
24
+ * - 이 메서드는 HTTP 요청을 수행하지 않고, 연결 가능한 URL 문자열만 반환합니다.
25
+ * - 세션 기반 인증을 사용하므로, 브라우저의 `EventSource`가 쿠키를 전송하도록 설정해야 합니다.
26
+ *
27
+ * @returns SSE 연결을 위한 전체 URL 문자열
28
+ * @example
29
+ * const url = client.notification.getStreamUrl();
30
+ * const eventSource = new EventSource(url, { withCredentials: true });
31
+ *
32
+ * eventSource.onmessage = (event) => {
33
+ * const data = JSON.parse(event.data);
34
+ * console.log('Received notification:', data);
35
+ * };
36
+ *
37
+ * eventSource.onerror = (err) => {
38
+ * console.error('SSE Error:', err);
39
+ * eventSource.close();
40
+ * };
41
+ */
42
+ getStreamUrl() {
43
+ return this.rb.path('/stream').url();
44
+ }
45
+ }
46
+ //# sourceMappingURL=notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/endpoints/notification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,eAAe;IAG1B,YAAY,EAAkB;QAC5B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC;CACF"}
@@ -9,6 +9,7 @@ export interface BuilderOptions {
9
9
  fetch?: FetchLike;
10
10
  defaultHeaders?: Record<string, string>;
11
11
  credentials?: RequestCredentials;
12
+ accessToken?: string | (() => string | null);
12
13
  }
13
14
  export type HttpResponseSuccess<T> = {
14
15
  isSuccess: true;
@@ -29,6 +30,7 @@ export declare class RequestBuilder {
29
30
  private readonly fetchImpl;
30
31
  private readonly headers;
31
32
  private readonly credentials;
33
+ private readonly accessToken?;
32
34
  private readonly segments;
33
35
  private readonly queryParams;
34
36
  constructor(opts: BuilderOptions, segments?: string[], query?: URLSearchParams);
@@ -46,7 +48,7 @@ export declare class RequestBuilder {
46
48
  post<T>(body?: unknown): Promise<HttpResponse<T>>;
47
49
  patch<T>(body?: unknown): Promise<HttpResponse<T>>;
48
50
  delete<T>(body?: unknown): Promise<HttpResponse<T>>;
49
- private url;
51
+ url(): string;
50
52
  private send;
51
53
  }
52
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"http-builder.d.ts","sourceRoot":"","sources":["../src/http-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAaD,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;IACR,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;AAEzE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;gBAElC,IAAI,EAAE,cAAc,EAAE,QAAQ,GAAE,MAAM,EAAO,EAAE,KAAK,CAAC,EAAE,eAAe;IASlF;;;OAGG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc;IA4B/B;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc;IAmBjD,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIlC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIjD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIlD,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIzD,OAAO,CAAC,GAAG;YAMG,IAAI;CAoDnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAEzE"}
1
+ {"version":3,"file":"http-builder.d.ts","sourceRoot":"","sources":["../src/http-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9C;AAaD,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;IACR,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;AAEzE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAiC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;gBAElC,IAAI,EAAE,cAAc,EAAE,QAAQ,GAAE,MAAM,EAAO,EAAE,KAAK,CAAC,EAAE,eAAe;IAUlF;;;OAGG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc;IA6B/B;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc;IAmBjD,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIlC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIjD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIlD,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIlD,GAAG,IAAI,MAAM;YAMN,IAAI;CA6DnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAEzE"}
@@ -9,6 +9,7 @@ export class RequestBuilder {
9
9
  this.fetchImpl = opts.fetch ?? globalThis.fetch;
10
10
  this.headers = { Accept: 'application/json', ...(opts.defaultHeaders ?? {}) };
11
11
  this.credentials = opts.credentials ?? 'include';
12
+ this.accessToken = opts.accessToken;
12
13
  this.segments = segments;
13
14
  this.queryParams = query ?? new URLSearchParams();
14
15
  }
@@ -26,6 +27,7 @@ export class RequestBuilder {
26
27
  fetch: this.fetchImpl,
27
28
  defaultHeaders: this.headers,
28
29
  credentials: this.credentials,
30
+ accessToken: this.accessToken,
29
31
  }, [], new URLSearchParams(this.queryParams));
30
32
  }
31
33
  const segs = p.split('/').filter(Boolean);
@@ -75,6 +77,13 @@ export class RequestBuilder {
75
77
  }
76
78
  async send(method, body) {
77
79
  const headers = { ...this.headers };
80
+ // Access Token 주입
81
+ if (this.accessToken) {
82
+ const token = typeof this.accessToken === 'function' ? this.accessToken() : this.accessToken;
83
+ if (token) {
84
+ headers['Authorization'] = `Bearer ${token}`;
85
+ }
86
+ }
78
87
  const init = { method, headers, credentials: this.credentials };
79
88
  if (body !== undefined) {
80
89
  headers['Content-Type'] = 'application/json';
@@ -1 +1 @@
1
- {"version":3,"file":"http-builder.js","sourceRoot":"","sources":["../src/http-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-builder.js","sourceRoot":"","sources":["../src/http-builder.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,6 +14,7 @@ export { NoteApi } from './endpoints/note.js';
14
14
  export { AppleAuthApi } from './endpoints/auth.apple.js';
15
15
  export { SyncApi } from './endpoints/sync.js';
16
16
  export { AiApi } from './endpoints/ai.js';
17
+ export { NotificationApi } from './endpoints/notification.js';
17
18
  export type { ProblemDetails } from './types/problem.js';
18
19
  export type { MeResponseDto, UserProfileDto } from './types/me.js';
19
20
  export type { ConversationDto, ConversationCreateDto, ConversationUpdateDto, ConversationBulkCreateDto, } from './types/conversation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACzF,YAAY,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACzF,YAAY,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -15,5 +15,6 @@ export { NoteApi } from './endpoints/note.js';
15
15
  export { AppleAuthApi } from './endpoints/auth.apple.js';
16
16
  export { SyncApi } from './endpoints/sync.js';
17
17
  export { AiApi } from './endpoints/ai.js';
18
+ export { NotificationApi } from './endpoints/notification.js';
18
19
  export { openAgentChatStream } from './endpoints/agent.js';
19
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIrE,oCAAoC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AA6B1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIrE,oCAAoC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA6B9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"note.d.ts","sourceRoot":"","sources":["../../src/types/note.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAG,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
1
+ {"version":3,"file":"note.d.ts","sourceRoot":"","sources":["../../src/types/note.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,34 +1,39 @@
1
- {
2
- "name": "@taco_tsinghua/graphnode-sdk",
3
- "version": "0.1.14",
4
- "description": "GraphNode frontend SDK (cookie-based session)",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js",
12
- "require": "./dist/index.js"
13
- }
14
- },
15
- "files": [
16
- "dist",
17
- "README.md"],
18
- "sideEffects": false,
19
- "scripts": {
20
- "build": "tsc -p tsconfig.json",
21
- "prepublishOnly": "npm run build"
22
- },
23
- "engines": {
24
- "node": ">=18"
25
- },
26
- "license": "MIT",
27
- "publishConfig": {
28
- "access": "public"
29
- },
30
- "devDependencies": {
31
- "@types/node": "^24.10.0",
32
- "typescript": "^5.9.3"
33
- }
34
- }
1
+ {
2
+ "name": "@taco_tsinghua/graphnode-sdk",
3
+ "version": "0.1.17",
4
+ "description": "GraphNode frontend SDK (cookie-based session)",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "sideEffects": false,
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.json",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/TACO-FOR-ALL/GraphNode_BE.git"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^24.10.0",
37
+ "typescript": "^5.9.3"
38
+ }
39
+ }