@spfn/core 0.2.0-beta.6 → 0.2.0-beta.64

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.
Files changed (73) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +181 -1281
  3. package/dist/authz/index.d.ts +34 -0
  4. package/dist/authz/index.js +415 -0
  5. package/dist/authz/index.js.map +1 -0
  6. package/dist/{boss-DI1r4kTS.d.ts → boss-gXhgctn6.d.ts} +40 -0
  7. package/dist/cache/index.js +42 -30
  8. package/dist/cache/index.js.map +1 -1
  9. package/dist/codegen/index.d.ts +55 -8
  10. package/dist/codegen/index.js +183 -7
  11. package/dist/codegen/index.js.map +1 -1
  12. package/dist/config/index.d.ts +585 -6
  13. package/dist/config/index.js +116 -5
  14. package/dist/config/index.js.map +1 -1
  15. package/dist/db/index.d.ts +270 -4
  16. package/dist/db/index.js +404 -60
  17. package/dist/db/index.js.map +1 -1
  18. package/dist/define-middleware-DuXD8Hvu.d.ts +167 -0
  19. package/dist/env/index.d.ts +26 -2
  20. package/dist/env/index.js +15 -5
  21. package/dist/env/index.js.map +1 -1
  22. package/dist/env/loader.d.ts +26 -19
  23. package/dist/env/loader.js +32 -25
  24. package/dist/env/loader.js.map +1 -1
  25. package/dist/errors/index.d.ts +10 -0
  26. package/dist/errors/index.js +20 -2
  27. package/dist/errors/index.js.map +1 -1
  28. package/dist/event/index.d.ts +33 -3
  29. package/dist/event/index.js +24 -3
  30. package/dist/event/index.js.map +1 -1
  31. package/dist/event/sse/client.d.ts +42 -3
  32. package/dist/event/sse/client.js +128 -45
  33. package/dist/event/sse/client.js.map +1 -1
  34. package/dist/event/sse/index.d.ts +12 -5
  35. package/dist/event/sse/index.js +271 -32
  36. package/dist/event/sse/index.js.map +1 -1
  37. package/dist/event/ws/client.d.ts +59 -0
  38. package/dist/event/ws/client.js +273 -0
  39. package/dist/event/ws/client.js.map +1 -0
  40. package/dist/event/ws/index.d.ts +94 -0
  41. package/dist/event/ws/index.js +272 -0
  42. package/dist/event/ws/index.js.map +1 -0
  43. package/dist/job/index.d.ts +2 -2
  44. package/dist/job/index.js +155 -42
  45. package/dist/job/index.js.map +1 -1
  46. package/dist/logger/index.d.ts +5 -0
  47. package/dist/logger/index.js +14 -0
  48. package/dist/logger/index.js.map +1 -1
  49. package/dist/middleware/index.d.ts +243 -2
  50. package/dist/middleware/index.js +1323 -13
  51. package/dist/middleware/index.js.map +1 -1
  52. package/dist/nextjs/index.d.ts +2 -2
  53. package/dist/nextjs/index.js +77 -31
  54. package/dist/nextjs/index.js.map +1 -1
  55. package/dist/nextjs/server.d.ts +53 -23
  56. package/dist/nextjs/server.js +197 -66
  57. package/dist/nextjs/server.js.map +1 -1
  58. package/dist/route/index.d.ts +138 -146
  59. package/dist/route/index.js +238 -22
  60. package/dist/route/index.js.map +1 -1
  61. package/dist/security/index.d.ts +83 -0
  62. package/dist/security/index.js +173 -0
  63. package/dist/security/index.js.map +1 -0
  64. package/dist/server/index.d.ts +450 -17
  65. package/dist/server/index.js +1756 -277
  66. package/dist/server/index.js.map +1 -1
  67. package/dist/{router-Di7ENoah.d.ts → token-manager-jKD_EsSE.d.ts} +121 -1
  68. package/dist/{types-D_N_U-Py.d.ts → types-7Mhoxnnt.d.ts} +21 -1
  69. package/dist/types-BFB72jbM.d.ts +282 -0
  70. package/dist/types-DVjf37yO.d.ts +205 -0
  71. package/docs/file-upload.md +717 -0
  72. package/package.json +235 -208
  73. package/dist/types-B-e_f2dQ.d.ts +0 -121
package/package.json CHANGED
@@ -1,210 +1,237 @@
1
1
  {
2
- "name": "@spfn/core",
3
- "version": "0.2.0-beta.6",
4
- "description": "SPFN Framework Core - File-based routing, transactions, repository pattern",
5
- "type": "module",
6
- "exports": {
7
- "./client": {
8
- "types": "./dist/client/index.d.ts",
9
- "import": "./dist/client/index.js",
10
- "require": "./dist/client/index.js"
11
- },
12
- "./nextjs": {
13
- "types": "./dist/nextjs/index.d.ts",
14
- "import": "./dist/nextjs/index.js",
15
- "require": "./dist/nextjs/index.js"
16
- },
17
- "./nextjs/server": {
18
- "types": "./dist/nextjs/server.d.ts",
19
- "import": "./dist/nextjs/server.js",
20
- "require": "./dist/nextjs/server.js"
21
- },
22
- "./route": {
23
- "types": "./dist/route/index.d.ts",
24
- "import": "./dist/route/index.js",
25
- "require": "./dist/route/index.js"
26
- },
27
- "./route/types": {
28
- "types": "./dist/route/types.d.ts",
29
- "import": "./dist/route/types.js",
30
- "require": "./dist/route/types.js"
31
- },
32
- "./db": {
33
- "types": "./dist/db/index.d.ts",
34
- "import": "./dist/db/index.js",
35
- "require": "./dist/db/index.js"
36
- },
37
- "./server": {
38
- "types": "./dist/server/index.d.ts",
39
- "import": "./dist/server/index.js",
40
- "require": "./dist/server/index.js"
41
- },
42
- "./errors": {
43
- "types": "./dist/errors/index.d.ts",
44
- "import": "./dist/errors/index.js",
45
- "require": "./dist/errors/index.js"
46
- },
47
- "./middleware": {
48
- "types": "./dist/middleware/index.d.ts",
49
- "import": "./dist/middleware/index.js",
50
- "require": "./dist/middleware/index.js"
51
- },
52
- "./cache": {
53
- "types": "./dist/cache/index.d.ts",
54
- "import": "./dist/cache/index.js",
55
- "require": "./dist/cache/index.js"
56
- },
57
- "./codegen": {
58
- "types": "./dist/codegen/index.d.ts",
59
- "import": "./dist/codegen/index.js",
60
- "require": "./dist/codegen/index.js"
61
- },
62
- "./env": {
63
- "types": "./dist/env/index.d.ts",
64
- "import": "./dist/env/index.js",
65
- "require": "./dist/env/index.js"
66
- },
67
- "./env/loader": {
68
- "types": "./dist/env/loader.d.ts",
69
- "import": "./dist/env/loader.js",
70
- "require": "./dist/env/loader.js"
71
- },
72
- "./logger": {
73
- "types": "./dist/logger/index.d.ts",
74
- "import": "./dist/logger/index.js",
75
- "require": "./dist/logger/index.js"
76
- },
77
- "./config": {
78
- "types": "./dist/config/index.d.ts",
79
- "import": "./dist/config/index.js",
80
- "require": "./dist/config/index.js"
81
- },
82
- "./job": {
83
- "types": "./dist/job/index.d.ts",
84
- "import": "./dist/job/index.js",
85
- "require": "./dist/job/index.js"
86
- },
87
- "./event": {
88
- "types": "./dist/event/index.d.ts",
89
- "import": "./dist/event/index.js",
90
- "require": "./dist/event/index.js"
91
- },
92
- "./event/sse": {
93
- "types": "./dist/event/sse/index.d.ts",
94
- "import": "./dist/event/sse/index.js",
95
- "require": "./dist/event/sse/index.js"
96
- },
97
- "./event/sse/client": {
98
- "types": "./dist/event/sse/client.d.ts",
99
- "import": "./dist/event/sse/client.js",
100
- "require": "./dist/event/sse/client.js"
101
- }
102
- },
103
- "keywords": [
104
- "spfn",
105
- "nextjs",
106
- "backend",
107
- "framework",
108
- "typescript",
109
- "type-safe",
110
- "api",
111
- "rest-api",
112
- "crud",
113
- "database",
114
- "orm",
115
- "drizzle-orm",
116
- "postgres",
117
- "redis",
118
- "hono",
119
- "fullstack",
120
- "server",
121
- "scalable",
122
- "auto-generated",
123
- "file-based-routing",
124
- "transaction",
125
- "repository-pattern"
126
- ],
127
- "author": "Ray Im <rayim@inflike.com>",
128
- "license": "MIT",
129
- "repository": {
130
- "type": "git",
131
- "url": "https://github.com/spfn/spfn.git",
132
- "directory": "packages/core"
133
- },
134
- "bugs": {
135
- "url": "https://github.com/spfn/spfn/issues"
136
- },
137
- "homepage": "https://github.com/spfn/spfn/tree/main/packages/core#readme",
138
- "engines": {
139
- "node": ">=18.18.0"
140
- },
141
- "dependencies": {
142
- "@hono/node-server": "^1.0.0",
143
- "@sinclair/typebox": "^0.34.0",
144
- "chalk": "^5.6.2",
145
- "chokidar": "^4.0.3",
146
- "dotenv": "^17.2.3",
147
- "drizzle-orm": "^0.45.0",
148
- "drizzle-typebox": "^0.1.0",
149
- "hono": "^4.10.6",
150
- "jiti": "^2.6.1",
151
- "micromatch": "^4.0.8",
152
- "pg-boss": "^11.1.2",
153
- "postgres": "^3.4.0",
154
- "typescript": "^5.3.3",
155
- "zod": "^4.1.11"
156
- },
157
- "optionalDependencies": {
158
- "ioredis": "^5.4.1"
159
- },
160
- "devDependencies": {
161
- "@types/micromatch": "^4.0.9",
162
- "@types/node": "^20.11.0",
163
- "@vitest/coverage-v8": "^4.0.6",
164
- "drizzle-kit": "^0.31.6",
165
- "madge": "^8.0.0",
166
- "next": "^16.0.0",
167
- "tsup": "^8.5.0",
168
- "vitest": "^4.0.6"
169
- },
170
- "peerDependencies": {
171
- "next": "^15.0.0 || ^16.0.0"
172
- },
173
- "peerDependenciesMeta": {
174
- "next": {
175
- "optional": true
2
+ "name": "@spfn/core",
3
+ "version": "0.2.0-beta.64",
4
+ "description": "SPFN Framework Core - File-based routing, transactions, repository pattern",
5
+ "type": "module",
6
+ "exports": {
7
+ "./client": {
8
+ "types": "./dist/client/index.d.ts",
9
+ "import": "./dist/client/index.js",
10
+ "require": "./dist/client/index.js"
11
+ },
12
+ "./nextjs": {
13
+ "types": "./dist/nextjs/index.d.ts",
14
+ "import": "./dist/nextjs/index.js",
15
+ "require": "./dist/nextjs/index.js"
16
+ },
17
+ "./nextjs/server": {
18
+ "types": "./dist/nextjs/server.d.ts",
19
+ "import": "./dist/nextjs/server.js",
20
+ "require": "./dist/nextjs/server.js"
21
+ },
22
+ "./route": {
23
+ "types": "./dist/route/index.d.ts",
24
+ "import": "./dist/route/index.js",
25
+ "require": "./dist/route/index.js"
26
+ },
27
+ "./route/types": {
28
+ "types": "./dist/route/types.d.ts",
29
+ "import": "./dist/route/types.js",
30
+ "require": "./dist/route/types.js"
31
+ },
32
+ "./db": {
33
+ "types": "./dist/db/index.d.ts",
34
+ "import": "./dist/db/index.js",
35
+ "require": "./dist/db/index.js"
36
+ },
37
+ "./server": {
38
+ "types": "./dist/server/index.d.ts",
39
+ "import": "./dist/server/index.js",
40
+ "require": "./dist/server/index.js"
41
+ },
42
+ "./errors": {
43
+ "types": "./dist/errors/index.d.ts",
44
+ "import": "./dist/errors/index.js",
45
+ "require": "./dist/errors/index.js"
46
+ },
47
+ "./middleware": {
48
+ "types": "./dist/middleware/index.d.ts",
49
+ "import": "./dist/middleware/index.js",
50
+ "require": "./dist/middleware/index.js"
51
+ },
52
+ "./security": {
53
+ "types": "./dist/security/index.d.ts",
54
+ "import": "./dist/security/index.js",
55
+ "require": "./dist/security/index.js"
56
+ },
57
+ "./authz": {
58
+ "types": "./dist/authz/index.d.ts",
59
+ "import": "./dist/authz/index.js",
60
+ "require": "./dist/authz/index.js"
61
+ },
62
+ "./cache": {
63
+ "types": "./dist/cache/index.d.ts",
64
+ "import": "./dist/cache/index.js",
65
+ "require": "./dist/cache/index.js"
66
+ },
67
+ "./codegen": {
68
+ "types": "./dist/codegen/index.d.ts",
69
+ "import": "./dist/codegen/index.js",
70
+ "require": "./dist/codegen/index.js"
71
+ },
72
+ "./env": {
73
+ "types": "./dist/env/index.d.ts",
74
+ "import": "./dist/env/index.js",
75
+ "require": "./dist/env/index.js"
76
+ },
77
+ "./env/loader": {
78
+ "types": "./dist/env/loader.d.ts",
79
+ "import": "./dist/env/loader.js",
80
+ "require": "./dist/env/loader.js"
81
+ },
82
+ "./logger": {
83
+ "types": "./dist/logger/index.d.ts",
84
+ "import": "./dist/logger/index.js",
85
+ "require": "./dist/logger/index.js"
86
+ },
87
+ "./config": {
88
+ "types": "./dist/config/index.d.ts",
89
+ "import": "./dist/config/index.js",
90
+ "require": "./dist/config/index.js"
91
+ },
92
+ "./job": {
93
+ "types": "./dist/job/index.d.ts",
94
+ "import": "./dist/job/index.js",
95
+ "require": "./dist/job/index.js"
96
+ },
97
+ "./event": {
98
+ "types": "./dist/event/index.d.ts",
99
+ "import": "./dist/event/index.js",
100
+ "require": "./dist/event/index.js"
101
+ },
102
+ "./event/sse": {
103
+ "types": "./dist/event/sse/index.d.ts",
104
+ "import": "./dist/event/sse/index.js",
105
+ "require": "./dist/event/sse/index.js"
106
+ },
107
+ "./event/sse/client": {
108
+ "types": "./dist/event/sse/client.d.ts",
109
+ "import": "./dist/event/sse/client.js",
110
+ "require": "./dist/event/sse/client.js"
111
+ },
112
+ "./event/ws": {
113
+ "types": "./dist/event/ws/index.d.ts",
114
+ "import": "./dist/event/ws/index.js",
115
+ "require": "./dist/event/ws/index.js"
116
+ },
117
+ "./event/ws/client": {
118
+ "types": "./dist/event/ws/client.d.ts",
119
+ "import": "./dist/event/ws/client.js",
120
+ "require": "./dist/event/ws/client.js"
121
+ }
122
+ },
123
+ "scripts": {
124
+ "build": "pnpm check:circular && tsup",
125
+ "prepack": "node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"",
126
+ "dev": "tsup",
127
+ "test": "vitest run",
128
+ "test:watch": "vitest",
129
+ "test:coverage": "vitest run --coverage",
130
+ "test:logger": "vitest run src/logger",
131
+ "test:errors": "vitest run src/errors",
132
+ "test:codegen": "vitest run src/codegen",
133
+ "test:route": "vitest run src/route",
134
+ "test:client": "vitest run src/client",
135
+ "test:middleware": "vitest run src/middleware",
136
+ "test:env": "vitest run src/env",
137
+ "test:cache": "vitest run src/cache --config vitest.integration.config.ts",
138
+ "test:db": "vitest run src/db --config vitest.integration.config.ts",
139
+ "test:server": "vitest run src/server --config vitest.integration.config.ts",
140
+ "docker:test:up": "docker compose -f docker-compose.test.yml up -d",
141
+ "docker:test:down": "docker compose -f docker-compose.test.yml down",
142
+ "docker:test:logs": "docker compose -f docker-compose.test.yml logs -f",
143
+ "check:circular": "madge --circular --extensions ts src/",
144
+ "type-check": "tsc --noEmit",
145
+ "publish:alpha": "npm publish --access public --tag alpha",
146
+ "publish:beta": "npm publish --access public --tag beta",
147
+ "publish:latest": "npm publish --access public"
148
+ },
149
+ "keywords": [
150
+ "spfn",
151
+ "nextjs",
152
+ "backend",
153
+ "framework",
154
+ "typescript",
155
+ "type-safe",
156
+ "api",
157
+ "rest-api",
158
+ "crud",
159
+ "database",
160
+ "orm",
161
+ "drizzle-orm",
162
+ "postgres",
163
+ "redis",
164
+ "hono",
165
+ "fullstack",
166
+ "server",
167
+ "scalable",
168
+ "auto-generated",
169
+ "file-based-routing",
170
+ "transaction",
171
+ "repository-pattern"
172
+ ],
173
+ "author": "Ray Im <rayim@fxy.global>",
174
+ "license": "MIT",
175
+ "repository": {
176
+ "type": "git",
177
+ "url": "https://github.com/spfn/spfn.git",
178
+ "directory": "packages/core"
179
+ },
180
+ "bugs": {
181
+ "url": "https://github.com/spfn/spfn/issues"
182
+ },
183
+ "homepage": "https://github.com/spfn/spfn/tree/main/packages/core#readme",
184
+ "engines": {
185
+ "node": ">=18.18.0"
186
+ },
187
+ "dependencies": {
188
+ "@hono/node-server": "^1.19.13",
189
+ "@sinclair/typebox": "^0.34.0",
190
+ "chalk": "^5.6.2",
191
+ "chokidar": "^4.0.3",
192
+ "dotenv": "^17.2.3",
193
+ "drizzle-orm": "^0.45.2",
194
+ "drizzle-typebox": "^0.1.0",
195
+ "hono": "^4.12.25",
196
+ "jiti": "^2.6.1",
197
+ "micromatch": "^4.0.8",
198
+ "pg-boss": "^11.1.2",
199
+ "postgres": "^3.4.0",
200
+ "typescript": "^5.3.3",
201
+ "undici": "^7.28.0",
202
+ "zod": "^4.1.11"
203
+ },
204
+ "optionalDependencies": {
205
+ "ioredis": "^5.4.1",
206
+ "ws": "^8.21.0"
207
+ },
208
+ "devDependencies": {
209
+ "@types/micromatch": "^4.0.9",
210
+ "@types/node": "^20.11.0",
211
+ "@types/ws": "^8.18.1",
212
+ "@vitest/coverage-v8": "^4.0.6",
213
+ "drizzle-kit": "^0.31.6",
214
+ "madge": "^8.0.0",
215
+ "next": "^16.0.0",
216
+ "tsup": "^8.5.0",
217
+ "vitest": "^4.0.6"
218
+ },
219
+ "peerDependencies": {
220
+ "next": "^15.0.0 || ^16.0.0"
221
+ },
222
+ "peerDependenciesMeta": {
223
+ "next": {
224
+ "optional": true
225
+ }
226
+ },
227
+ "files": [
228
+ "dist",
229
+ "docs",
230
+ "README.md",
231
+ "LICENSE"
232
+ ],
233
+ "publishConfig": {
234
+ "access": "public",
235
+ "tag": "beta"
176
236
  }
177
- },
178
- "files": [
179
- "dist",
180
- "docs",
181
- "README.md",
182
- "LICENSE"
183
- ],
184
- "publishConfig": {
185
- "access": "public",
186
- "tag": "beta"
187
- },
188
- "scripts": {
189
- "build": "pnpm check:circular && tsup",
190
- "dev": "tsup",
191
- "test": "vitest run",
192
- "test:watch": "vitest",
193
- "test:coverage": "vitest run --config vitest.unit.config.ts --coverage",
194
- "test:logger": "vitest run src/logger",
195
- "test:errors": "vitest run src/errors",
196
- "test:codegen": "vitest run src/codegen",
197
- "test:route": "vitest run src/route",
198
- "test:client": "vitest run src/client",
199
- "test:middleware": "vitest run src/middleware",
200
- "test:env": "vitest run src/env",
201
- "test:cache": "vitest run src/cache --config vitest.integration.config.ts",
202
- "test:db": "vitest run src/db --config vitest.integration.config.ts",
203
- "test:server": "vitest run src/server --config vitest.integration.config.ts",
204
- "docker:test:up": "docker compose -f docker-compose.test.yml up -d",
205
- "docker:test:down": "docker compose -f docker-compose.test.yml down",
206
- "docker:test:logs": "docker compose -f docker-compose.test.yml logs -f",
207
- "check:circular": "madge --circular --extensions ts src/",
208
- "type-check": "tsc --noEmit"
209
- }
210
- }
237
+ }
@@ -1,121 +0,0 @@
1
- import { E as EventRouterDef, I as InferEventNames, b as InferEventPayload } from './router-Di7ENoah.js';
2
-
3
- /**
4
- * SSE Types
5
- *
6
- * Type definitions for Server-Sent Events
7
- */
8
-
9
- /**
10
- * SSE message sent from server
11
- */
12
- interface SSEMessage<TEvent extends string = string, TPayload = unknown> {
13
- /** Event name */
14
- event: TEvent;
15
- /** Event payload */
16
- data: TPayload;
17
- /** Optional message ID for reconnection */
18
- id?: string;
19
- }
20
- /**
21
- * SSE Handler configuration
22
- */
23
- interface SSEHandlerConfig {
24
- /**
25
- * Keep-alive ping interval in milliseconds
26
- * @default 30000
27
- */
28
- pingInterval?: number;
29
- /**
30
- * Custom headers for SSE response
31
- */
32
- headers?: Record<string, string>;
33
- }
34
- /**
35
- * SSE Client configuration
36
- */
37
- interface SSEClientConfig {
38
- /**
39
- * Backend API host URL
40
- * @default NEXT_PUBLIC_SPFN_API_URL || 'http://localhost:8790'
41
- * @example 'http://localhost:8790'
42
- * @example 'https://api.example.com'
43
- */
44
- host?: string;
45
- /**
46
- * SSE endpoint pathname
47
- * @default '/events/stream'
48
- */
49
- pathname?: string;
50
- /**
51
- * Full URL (overrides host + pathname)
52
- * @deprecated Use host and pathname instead
53
- * @example 'http://localhost:8790/events/stream'
54
- */
55
- url?: string;
56
- /**
57
- * Auto reconnect on disconnect
58
- * @default true
59
- */
60
- reconnect?: boolean;
61
- /**
62
- * Reconnect delay in milliseconds
63
- * @default 3000
64
- */
65
- reconnectDelay?: number;
66
- /**
67
- * Maximum reconnect attempts (0 = infinite)
68
- * @default 0
69
- */
70
- maxReconnectAttempts?: number;
71
- /**
72
- * Include credentials (cookies) in request
73
- * @default false
74
- */
75
- withCredentials?: boolean;
76
- }
77
- /**
78
- * Event handler function
79
- */
80
- type SSEEventHandler<TPayload> = (payload: TPayload) => void;
81
- /**
82
- * Event handlers map for EventRouter
83
- */
84
- type SSEEventHandlers<TRouter extends EventRouterDef<any>> = {
85
- [K in InferEventNames<TRouter>]?: SSEEventHandler<InferEventPayload<TRouter, K>>;
86
- };
87
- /**
88
- * Subscription options
89
- */
90
- interface SSESubscribeOptions<TRouter extends EventRouterDef<any>> {
91
- /**
92
- * Events to subscribe
93
- */
94
- events: InferEventNames<TRouter>[];
95
- /**
96
- * Event handlers
97
- */
98
- handlers: SSEEventHandlers<TRouter>;
99
- /**
100
- * Called when connection opens
101
- */
102
- onOpen?: () => void;
103
- /**
104
- * Called on connection error
105
- */
106
- onError?: (error: Event) => void;
107
- /**
108
- * Called when reconnecting
109
- */
110
- onReconnect?: (attempt: number) => void;
111
- }
112
- /**
113
- * SSE connection state
114
- */
115
- type SSEConnectionState = 'connecting' | 'open' | 'closed' | 'error';
116
- /**
117
- * Unsubscribe function
118
- */
119
- type SSEUnsubscribe = () => void;
120
-
121
- export type { SSEHandlerConfig as S, SSEMessage as a, SSEClientConfig as b, SSEEventHandler as c, SSEEventHandlers as d, SSESubscribeOptions as e, SSEConnectionState as f, SSEUnsubscribe as g };