sonamu 0.11.16 → 0.13.0
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/dist/_virtual/_rolldown/runtime.js +1 -2
- package/dist/ai/agents/agent.js +2 -3
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +1 -2
- package/dist/ai/providers/rtzr/error.js +2 -3
- package/dist/ai/providers/rtzr/model.js +1 -2
- package/dist/ai/providers/rtzr/options.js +1 -2
- package/dist/ai/providers/rtzr/provider.js +1 -2
- package/dist/ai/providers/rtzr/utils.js +1 -2
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.d.ts +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +9 -9
- package/dist/api/code-converters.js +6 -5
- package/dist/api/config.d.ts +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +2 -3
- package/dist/api/context.d.ts +2 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +2 -3
- package/dist/api/http-validator.js +2 -3
- package/dist/api/index.js +8 -3
- package/dist/api/secret.js +1 -2
- package/dist/api/sonamu.d.ts +3 -5
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +30 -24
- package/dist/api/validator.js +1 -2
- package/dist/api/websocket-helpers.js +2 -3
- package/dist/auth/audit-log/builders.js +1 -2
- package/dist/auth/audit-log/client-ip.js +2 -3
- package/dist/auth/audit-log/events.js +1 -2
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +2 -3
- package/dist/auth/audit-log-ingestor.js +2 -3
- package/dist/auth/auth-generator.js +2 -3
- package/dist/auth/better-auth-entities.js +1 -2
- package/dist/auth/better-auth-request.js +2 -3
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +2 -3
- package/dist/auth/plugins/entity-definitions/admin.js +1 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
- package/dist/auth/plugins/entity-definitions/index.js +1 -2
- package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
- package/dist/auth/plugins/entity-definitions/organization.js +1 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
- package/dist/auth/plugins/entity-definitions/sso.js +1 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
- package/dist/auth/plugins/entity-definitions/username.js +1 -2
- package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.js +2 -3
- package/dist/auth/plugins/wrappers/anonymous.js +2 -3
- package/dist/auth/plugins/wrappers/api-key.js +2 -3
- package/dist/auth/plugins/wrappers/jwt.js +2 -3
- package/dist/auth/plugins/wrappers/organization.js +2 -3
- package/dist/auth/plugins/wrappers/passkey.js +2 -3
- package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/sso.js +1 -2
- package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.d.ts +39 -5
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +5 -5
- package/dist/bin/compiler-policy.js +2 -3
- package/dist/bin/fixture.js +7 -5
- package/dist/bin/hmr-hook-register.js +1 -2
- package/dist/bin/migrate-targets.js +2 -3
- package/dist/bin/test-command.js +2 -3
- package/dist/bin/ts-loader-register.js +2 -3
- package/dist/bin/ts-loader-registration.js +2 -3
- package/dist/bin/typecheck-web.js +2 -3
- package/dist/cache/cache-manager.js +1 -2
- package/dist/cache/decorator.js +2 -3
- package/dist/cache/drivers.js +1 -2
- package/dist/cache/index.js +2 -3
- package/dist/cache-control/cache-control.js +1 -2
- package/dist/code-formatting/index.js +2 -3
- package/dist/code-formatting/oxfmt.js +2 -3
- package/dist/code-formatting/oxlint.js +2 -3
- package/dist/compress/compress.js +1 -2
- package/dist/compress/index.js +2 -2
- package/dist/compress/types.d.ts +1 -1
- package/dist/compress/types.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +2 -3
- package/dist/database/_batch_update.js +1 -2
- package/dist/database/base-model.js +4 -4
- package/dist/database/db.js +4 -4
- package/dist/database/knex.js +2 -3
- package/dist/database/puri-wrapper.js +2 -3
- package/dist/database/puri.js +23 -22
- package/dist/database/puri.types.js +1 -2
- package/dist/database/transaction-context.js +1 -2
- package/dist/database/upsert-builder.js +2 -3
- package/dist/dict/en.js +2 -3
- package/dist/dict/index.js +3 -3
- package/dist/dict/ko.js +2 -3
- package/dist/dict/rc-keys.js +1 -2
- package/dist/dict/sd.js +2 -3
- package/dist/dict/sonamu-dictionary.js +7 -6
- package/dist/dict/utils.js +2 -3
- package/dist/entity/entity-manager.d.ts +66 -66
- package/dist/entity/entity-manager.js +4 -4
- package/dist/entity/entity-template-cone.js +2 -3
- package/dist/entity/entity.js +21 -18
- package/dist/env.js +1 -2
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +2 -3
- package/dist/filter/index.js +3 -2
- package/dist/filter/types.js +1 -2
- package/dist/filter/utils.js +7 -6
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -6
- package/dist/logger/category.js +2 -3
- package/dist/logger/configure.js +5 -5
- package/dist/migration/code-generation.js +23 -16
- package/dist/migration/index-where-predicate.js +2 -3
- package/dist/migration/migration-set.js +2 -3
- package/dist/migration/migrator.js +2 -3
- package/dist/migration/postgresql-schema-reader.js +6 -9
- package/dist/migration/slack-confirm.js +2 -3
- package/dist/naite/naite-reporter.js +2 -3
- package/dist/naite/naite.js +10 -8
- package/dist/runtime-type.js +2 -3
- package/dist/ssr/hmr-opt-out.js +1 -2
- package/dist/ssr/index.js +7 -4
- package/dist/ssr/registry.js +1 -2
- package/dist/ssr/renderer.js +2 -3
- package/dist/storage/base-file.js +1 -2
- package/dist/storage/buffered-file.js +2 -3
- package/dist/storage/drivers.js +1 -2
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +1 -2
- package/dist/storage/storage-manager.js +2 -3
- package/dist/storage/uploaded-file.js +2 -3
- package/dist/stream/__tests__/ws-test-helpers.d.ts +108 -0
- package/dist/stream/__tests__/ws-test-helpers.d.ts.map +1 -0
- package/dist/stream/__tests__/ws-test-helpers.js +259 -0
- package/dist/stream/index.d.ts +1 -0
- package/dist/stream/index.d.ts.map +1 -1
- package/dist/stream/index.js +15 -4
- package/dist/stream/sse.js +1 -2
- package/dist/stream/ws-audience-resolver.d.ts +8 -5
- package/dist/stream/ws-audience-resolver.d.ts.map +1 -1
- package/dist/stream/ws-audience-resolver.js +17 -15
- package/dist/stream/ws-audience.js +1 -2
- package/dist/stream/ws-cluster-bus.d.ts +9 -4
- package/dist/stream/ws-cluster-bus.d.ts.map +1 -1
- package/dist/stream/ws-cluster-bus.js +2 -3
- package/dist/stream/ws-core.d.ts +10 -0
- package/dist/stream/ws-core.d.ts.map +1 -1
- package/dist/stream/ws-delivery.d.ts +30 -4
- package/dist/stream/ws-delivery.d.ts.map +1 -1
- package/dist/stream/ws-delivery.js +200 -54
- package/dist/stream/ws-frame.d.ts +15 -0
- package/dist/stream/ws-frame.d.ts.map +1 -0
- package/dist/stream/ws-frame.js +28 -0
- package/dist/stream/ws-local-connection-store.d.ts +4 -4
- package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
- package/dist/stream/ws-local-connection-store.js +3 -4
- package/dist/stream/ws-presence-index.d.ts +36 -0
- package/dist/stream/ws-presence-index.d.ts.map +1 -0
- package/dist/stream/ws-presence-index.js +176 -0
- package/dist/stream/ws-presence-store.d.ts +39 -39
- package/dist/stream/ws-presence-store.d.ts.map +1 -1
- package/dist/stream/ws-presence-store.js +23 -154
- package/dist/stream/ws-registry.d.ts +45 -17
- package/dist/stream/ws-registry.d.ts.map +1 -1
- package/dist/stream/ws-registry.js +170 -62
- package/dist/stream/ws-session-id.d.ts +14 -0
- package/dist/stream/ws-session-id.d.ts.map +1 -0
- package/dist/stream/ws-session-id.js +36 -0
- package/dist/stream/ws-telemetry-memory.js +3 -4
- package/dist/stream/ws-telemetry-trace.js +1 -2
- package/dist/stream/ws-telemetry.js +2 -3
- package/dist/stream/ws.d.ts +20 -10
- package/dist/stream/ws.d.ts.map +1 -1
- package/dist/stream/ws.js +60 -38
- package/dist/syncer/api-parser.js +2 -3
- package/dist/syncer/checksum.js +4 -4
- package/dist/syncer/code-generator.js +4 -4
- package/dist/syncer/entity-operations.js +2 -3
- package/dist/syncer/event-batcher.js +1 -2
- package/dist/syncer/file-copy.js +2 -3
- package/dist/syncer/file-patterns.js +2 -3
- package/dist/syncer/file-tracking.js +2 -3
- package/dist/syncer/filesystem-dependencies.js +1 -2
- package/dist/syncer/index.js +8 -2
- package/dist/syncer/module-loader.js +8 -6
- package/dist/syncer/syncer-actions.js +8 -7
- package/dist/syncer/syncer.js +13 -8
- package/dist/syncer/watcher.js +2 -3
- package/dist/tasks/decorator.js +1 -2
- package/dist/tasks/step-wrapper.js +2 -3
- package/dist/tasks/workflow-manager.js +2 -3
- package/dist/template/entity-converter.js +17 -16
- package/dist/template/helpers.js +2 -3
- package/dist/template/implementations/entity.template.js +2 -3
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +2 -3
- package/dist/template/implementations/generated_http.template.js +6 -6
- package/dist/template/implementations/generated_sso.template.js +2 -3
- package/dist/template/implementations/http_validators.template.js +2 -3
- package/dist/template/implementations/init_types.template.js +2 -3
- package/dist/template/implementations/model.template.js +4 -4
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +2 -3
- package/dist/template/implementations/sd.template.js +2 -3
- package/dist/template/implementations/services.template.js +2 -3
- package/dist/template/implementations/view_form.template.js +12 -9
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +19 -17
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +9 -3
- package/dist/template/template-manager.js +2 -3
- package/dist/template/template-types.js +1 -2
- package/dist/template/template.js +2 -3
- package/dist/template/zod-converter.js +54 -47
- package/dist/testing/_relation-graph.js +2 -3
- package/dist/testing/bootstrap.js +2 -3
- package/dist/testing/data-explorer.js +2 -3
- package/dist/testing/dev-test-routes.js +2 -3
- package/dist/testing/dev-vitest-manager.js +15 -12
- package/dist/testing/faker-mappings.js +1 -2
- package/dist/testing/filesystem.js +2 -3
- package/dist/testing/fixture-generator.js +2 -3
- package/dist/testing/fixture-loader.js +1 -2
- package/dist/testing/fixture-manager.js +12 -9
- package/dist/testing/global-setup.js +5 -5
- package/dist/testing/index.js +6 -3
- package/dist/testing/naite-vitest-reporter.js +1 -2
- package/dist/testing/parallel-db-manager.js +2 -3
- package/dist/testing/vitest-helpers.js +2 -3
- package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
- package/dist/tooling/cdd-service.js +1 -2
- package/dist/tooling/cli-tooling.js +1 -2
- package/dist/tooling/fixture-service.js +1 -2
- package/dist/tooling/index.js +1 -2
- package/dist/tooling/test-run-client.js +2 -3
- package/dist/tsdown.api.config.js +1 -2
- package/dist/types/types.js +2 -3
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +4 -5
- package/dist/ui/ai-client.d.ts +2 -2
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +9 -8
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +11 -8
- package/dist/ui/async-route.js +1 -2
- package/dist/ui/cdd-service.js +22 -21
- package/dist/ui/migrations-api.js +6 -5
- package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
- package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +1 -2
- package/dist/utils/class-name.js +1 -2
- package/dist/utils/console-util.js +1 -2
- package/dist/utils/controller.js +2 -3
- package/dist/utils/esm-utils.js +1 -2
- package/dist/utils/fs-utils.js +2 -3
- package/dist/utils/lodash-able.js +1 -2
- package/dist/utils/model.js +1 -2
- package/dist/utils/object-utils.js +2 -3
- package/dist/utils/path-utils.js +2 -3
- package/dist/utils/process-utils.js +2 -3
- package/dist/utils/runtime-value.js +1 -2
- package/dist/utils/sql-parser.js +2 -3
- package/dist/utils/type-utils.js +8 -8
- package/dist/utils/utils.js +2 -3
- package/dist/utils/zod-error.js +2 -3
- package/dist/vector/chunking.js +1 -2
- package/dist/vector/config.js +1 -2
- package/dist/vector/embedding.js +4 -4
- package/package.json +63 -63
- package/src/ai/agents/agent.ts +1 -1
- package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
- package/src/api/__tests__/sonamu.websocket-routes.test.ts +234 -0
- package/src/api/__tests__/sonamu.websocket.test.ts +241 -24
- package/src/api/config.ts +1 -1
- package/src/api/context.ts +2 -8
- package/src/api/sonamu.ts +46 -28
- package/src/auth/audit-log/plugin.ts +2 -0
- package/src/compress/types.ts +1 -1
- package/src/exceptions/error-handler.ts +3 -2
- package/src/index.ts +1 -0
- package/src/stream/__tests__/ws-contracts.test.ts +483 -265
- package/src/stream/__tests__/ws-multinode.test.ts +326 -0
- package/src/stream/__tests__/ws-registry-async.test.ts +855 -0
- package/src/stream/__tests__/ws-test-helpers.ts +360 -0
- package/src/stream/__tests__/ws.test.ts +342 -145
- package/src/stream/index.ts +1 -0
- package/src/stream/ws-audience-resolver.ts +21 -19
- package/src/stream/ws-cluster-bus.ts +12 -4
- package/src/stream/ws-core.ts +14 -0
- package/src/stream/ws-delivery.ts +321 -97
- package/src/stream/ws-frame.ts +39 -0
- package/src/stream/ws-local-connection-store.ts +10 -9
- package/src/stream/ws-presence-index.ts +273 -0
- package/src/stream/ws-presence-store.ts +64 -284
- package/src/stream/ws-registry.ts +272 -85
- package/src/stream/ws-session-id.ts +39 -0
- package/src/stream/ws.ts +91 -50
- package/src/template/implementations/model.template.ts +3 -3
- package/src/template/implementations/view_list.template.ts +12 -13
- package/src/ui/ai-api.ts +4 -2
- package/src/ui/ai-client.ts +2 -2
- package/src/ui/api.ts +58 -62
- package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
- package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
package/src/api/sonamu.ts
CHANGED
|
@@ -9,7 +9,12 @@ import { dispose as logtapeDispose } from "@logtape/logtape";
|
|
|
9
9
|
import { type Auth, type BetterAuthOptions } from "better-auth";
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
import { type FSWatcher } from "chokidar";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
type FastifyBaseLogger,
|
|
14
|
+
type FastifyInstance,
|
|
15
|
+
type FastifyReply,
|
|
16
|
+
type FastifyRequest,
|
|
17
|
+
} from "fastify";
|
|
13
18
|
import mime, { lookup as mimeLookup } from "mime-types";
|
|
14
19
|
import { type WebSocket } from "ws";
|
|
15
20
|
import { type ZodObject } from "zod";
|
|
@@ -470,14 +475,17 @@ class SonamuClass {
|
|
|
470
475
|
const options = this.config.server;
|
|
471
476
|
const { default: fastify } = await import("fastify");
|
|
472
477
|
const { getLogTapeFastifyLogger } = await import("@logtape/fastify");
|
|
478
|
+
// Fastify 5는 logger 옵션에 설정 객체만 받고, 로거 인스턴스는 loggerInstance로 넘겨야 한다
|
|
479
|
+
// SAFETY: LogTape 어댑터는 pino 호환 메서드 집합(trace~fatal, silent, child)을 제공하며 Fastify 4에서도 같은 객체를 logger로 넘겨 동작했다.
|
|
480
|
+
const loggerInstance: FastifyBaseLogger | undefined =
|
|
481
|
+
this.config.logging !== false
|
|
482
|
+
? (getLogTapeFastifyLogger({
|
|
483
|
+
category: this.config.logging?.fastifyCategory ?? ["fastify"],
|
|
484
|
+
}) as FastifyBaseLogger)
|
|
485
|
+
: undefined;
|
|
473
486
|
const server = fastify({
|
|
474
487
|
...options.fastify,
|
|
475
|
-
|
|
476
|
-
this.config.logging !== false
|
|
477
|
-
? getLogTapeFastifyLogger({
|
|
478
|
-
category: this.config.logging?.fastifyCategory ?? ["fastify"],
|
|
479
|
-
})
|
|
480
|
-
: undefined,
|
|
488
|
+
loggerInstance,
|
|
481
489
|
});
|
|
482
490
|
this.server = server;
|
|
483
491
|
this.websocketRuntime = new WebSocketRuntime(options.websocket);
|
|
@@ -714,13 +722,14 @@ class SonamuClass {
|
|
|
714
722
|
// 등록된 API와 일치하지 않는 요청에 대한 fallback입니다.
|
|
715
723
|
throw new NotFoundException(SD("error.api.notFound"));
|
|
716
724
|
},
|
|
717
|
-
wsHandler: async (
|
|
718
|
-
await this.handleDevWebSocketRequest(
|
|
725
|
+
wsHandler: async (socket, request) => {
|
|
726
|
+
await this.handleDevWebSocketRequest(socket, request, config);
|
|
719
727
|
},
|
|
720
728
|
});
|
|
721
729
|
|
|
730
|
+
// HEAD는 위 GET catch-all이 exposeHeadRoutes로 자동 노출하므로 중복 선언하면 Fastify 5가 FST_ERR_DUPLICATED_ROUTE를 던진다
|
|
722
731
|
server.route({
|
|
723
|
-
method: ["
|
|
732
|
+
method: ["POST", "PUT", "DELETE", "PATCH"],
|
|
724
733
|
url: `${this.config.api.route.prefix}/*`,
|
|
725
734
|
handler: async (request, reply) => {
|
|
726
735
|
const handler = await this.handleDevApiRequest(request, config);
|
|
@@ -784,13 +793,14 @@ class SonamuClass {
|
|
|
784
793
|
}
|
|
785
794
|
throw new NotFoundException(SD("error.api.notFound"));
|
|
786
795
|
},
|
|
787
|
-
wsHandler: async (
|
|
788
|
-
await this.handleDevWebSocketRequest(
|
|
796
|
+
wsHandler: async (socket, request) => {
|
|
797
|
+
await this.handleDevWebSocketRequest(socket, request, config);
|
|
789
798
|
},
|
|
790
799
|
});
|
|
791
800
|
|
|
801
|
+
// HEAD는 위 GET catch-all이 exposeHeadRoutes로 자동 노출하므로 중복 선언하면 Fastify 5가 FST_ERR_DUPLICATED_ROUTE를 던진다
|
|
792
802
|
server.route({
|
|
793
|
-
method: ["
|
|
803
|
+
method: ["POST", "PUT", "DELETE", "PATCH"],
|
|
794
804
|
url: `${this.config.api.route.prefix}/*`,
|
|
795
805
|
handler: async (request, reply) => {
|
|
796
806
|
const result = await this.handleDevApiRequest(request, config);
|
|
@@ -1331,6 +1341,16 @@ class SonamuClass {
|
|
|
1331
1341
|
this.aotHttpValidatorRegistry = nextAotRegistry;
|
|
1332
1342
|
this.preparedApis = nextApis;
|
|
1333
1343
|
this.preparedModels = nextModels;
|
|
1344
|
+
|
|
1345
|
+
// @websocket route의 outEvents를 api.path 키로 route table에 반영한다.
|
|
1346
|
+
// 발행 노드가 route별로 한 번 인코딩한 frame을 원격 노드가 그대로 보내므로, HMR 뒤에도 최신 스키마를 써야 한다
|
|
1347
|
+
this.websocketRuntimeValue?.replaceRoutes(
|
|
1348
|
+
nextApis.flatMap((api) =>
|
|
1349
|
+
api.websocketOptions
|
|
1350
|
+
? [{ routeKey: api.path, outEvents: api.websocketOptions.outEvents }]
|
|
1351
|
+
: [],
|
|
1352
|
+
),
|
|
1353
|
+
);
|
|
1334
1354
|
}
|
|
1335
1355
|
|
|
1336
1356
|
// WS path를 일반 HTTP GET으로 호출한 경우 426 + Upgrade 헤더로 명시적으로 websocket 접속을 유도함
|
|
@@ -1370,7 +1390,7 @@ class SonamuClass {
|
|
|
1370
1390
|
}
|
|
1371
1391
|
|
|
1372
1392
|
const handler = this.createWebSocketHandler(matchedApi, config);
|
|
1373
|
-
await handler(
|
|
1393
|
+
await handler(socket, request);
|
|
1374
1394
|
}
|
|
1375
1395
|
|
|
1376
1396
|
// WS route 핸들러의 실행 순서를 고정함:
|
|
@@ -1383,15 +1403,10 @@ class SonamuClass {
|
|
|
1383
1403
|
}
|
|
1384
1404
|
|
|
1385
1405
|
private createWebSocketHandler(api: ExtendedApi, config: SonamuFastifyConfig) {
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
socket: WebSocket;
|
|
1389
|
-
},
|
|
1390
|
-
request: FastifyRequest,
|
|
1391
|
-
): Promise<void> => {
|
|
1392
|
-
const socket = connection.socket;
|
|
1406
|
+
// @fastify/websocket 11부터 wsHandler는 connection 래퍼 대신 ws.WebSocket을 직접 전달한다
|
|
1407
|
+
return async (socket: WebSocket, request: FastifyRequest): Promise<void> => {
|
|
1393
1408
|
let wsContext: WebSocketContext<object, object> | null = null;
|
|
1394
|
-
let rawWs: ReturnType<WebSocketRuntime["registerConnection"]
|
|
1409
|
+
let rawWs: Awaited<ReturnType<WebSocketRuntime["registerConnection"]>> | null = null;
|
|
1395
1410
|
let preRegisterPhase: "guard" | "query" | "register" | "handler" = "guard";
|
|
1396
1411
|
let traceContext: WebSocketTelemetryConnectionContext = {};
|
|
1397
1412
|
|
|
@@ -1403,7 +1418,9 @@ class SonamuClass {
|
|
|
1403
1418
|
preRegisterPhase = "query";
|
|
1404
1419
|
const reqBody = await this.parseWebSocketRequestParams(api, request);
|
|
1405
1420
|
preRegisterPhase = "register";
|
|
1406
|
-
|
|
1421
|
+
// 등록(store 반영 포함)이 끝난 뒤에 context/guard를 진행한다. 리스너는 등록 중에도 붙어 있어 close를 놓치지 않는다
|
|
1422
|
+
rawWs = await this.websocketRuntime.registerConnection(socket, {
|
|
1423
|
+
routeKey: api.path,
|
|
1407
1424
|
outEvents: api.websocketOptions!.outEvents,
|
|
1408
1425
|
inEvents: api.websocketOptions!.inEvents,
|
|
1409
1426
|
namespace: api.websocketOptions!.namespace,
|
|
@@ -1427,7 +1444,8 @@ class SonamuClass {
|
|
|
1427
1444
|
});
|
|
1428
1445
|
});
|
|
1429
1446
|
|
|
1430
|
-
|
|
1447
|
+
// 활성화가 store에 반영된 뒤 handler를 실행해 handler 안의 publish가 이 연결을 대상으로 잡게 한다
|
|
1448
|
+
await this.websocketRuntime.activateConnection(rawWs.id);
|
|
1431
1449
|
preRegisterPhase = "handler";
|
|
1432
1450
|
|
|
1433
1451
|
const { ApiParamType } = await import("../types/types");
|
|
@@ -1604,16 +1622,16 @@ class SonamuClass {
|
|
|
1604
1622
|
return ws.waitForClose();
|
|
1605
1623
|
},
|
|
1606
1624
|
join(roomId) {
|
|
1607
|
-
ws.join(roomId);
|
|
1625
|
+
return ws.join(roomId);
|
|
1608
1626
|
},
|
|
1609
1627
|
leave(roomId) {
|
|
1610
|
-
ws.leave(roomId);
|
|
1628
|
+
return ws.leave(roomId);
|
|
1611
1629
|
},
|
|
1612
1630
|
setUserId(userId) {
|
|
1613
|
-
ws.setUserId(userId);
|
|
1631
|
+
return ws.setUserId(userId);
|
|
1614
1632
|
},
|
|
1615
1633
|
clearUserId() {
|
|
1616
|
-
ws.clearUserId();
|
|
1634
|
+
return ws.clearUserId();
|
|
1617
1635
|
},
|
|
1618
1636
|
};
|
|
1619
1637
|
}
|
|
@@ -85,6 +85,8 @@ const getOrganizationTriggerInfo = (user: { id?: string } | null | undefined): B
|
|
|
85
85
|
type BetterAuthRequestCtx = GenericEndpointContext & {
|
|
86
86
|
context: GenericEndpointContext["context"] & {
|
|
87
87
|
location?: BuilderLocation | null;
|
|
88
|
+
// after hook에서 dispatch가 채우는 응답값. better-auth 1.6.2x부터 GenericEndpointContext 타입에서 빠졌지만 HookEndpointContext에는 남아 있다.
|
|
89
|
+
returned?: unknown;
|
|
88
90
|
};
|
|
89
91
|
};
|
|
90
92
|
|
package/src/compress/types.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type CompressOptions = {
|
|
|
14
14
|
/** 압축을 적용할 최소 바이트 크기 (기본값: 1024) */
|
|
15
15
|
threshold?: number;
|
|
16
16
|
/** 사용할 인코딩 우선순위 (기본값: ["br", "gzip", "deflate"]) */
|
|
17
|
-
encodings?: ("br" | "gzip" | "deflate" | "identity")[];
|
|
17
|
+
encodings?: ("zstd" | "br" | "gzip" | "deflate" | "identity")[];
|
|
18
18
|
/** 압축할 Content-Type 필터 */
|
|
19
19
|
customTypes?: RegExp | ((contentType: string) => boolean);
|
|
20
20
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type FastifyInstance } from "fastify";
|
|
1
|
+
import { type FastifyError, type FastifyInstance } from "fastify";
|
|
2
2
|
import type z from "zod";
|
|
3
3
|
|
|
4
4
|
import { isObjectValue, isStringValue } from "../utils/runtime-value";
|
|
@@ -19,7 +19,8 @@ function isZodIssuePayload<Value>(payload: Value): payload is Value & z.core.$Zo
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export function setupErrorHandler(server: FastifyInstance) {
|
|
22
|
-
|
|
22
|
+
// Fastify 5는 error 타입 기본값이 unknown이므로 기존 FastifyError 계약을 명시한다
|
|
23
|
+
server.setErrorHandler<FastifyError>((error, request, reply) => {
|
|
23
24
|
error.statusCode ??= 400;
|
|
24
25
|
|
|
25
26
|
if (isSoException(error) && isZodIssuePayload(error.payload)) {
|
package/src/index.ts
CHANGED
|
@@ -39,6 +39,7 @@ export * from "./stream/ws-audience";
|
|
|
39
39
|
export * from "./stream/ws-cluster-bus";
|
|
40
40
|
export * from "./stream/ws-core";
|
|
41
41
|
export * from "./stream/ws-presence-store";
|
|
42
|
+
export * from "./stream/ws-session-id";
|
|
42
43
|
export * from "./stream/ws";
|
|
43
44
|
export * from "./stream/ws-registry";
|
|
44
45
|
export * from "./tasks/decorator";
|