@cartanova/qgrid-cli 1.7.3 → 1.8.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.
Files changed (61) hide show
  1. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +45 -32
  2. package/bundle/dist/application/qgrid/qgrid.frame.js +7 -22
  3. package/bundle/dist/application/qgrid/qgrid.types.js +10 -3
  4. package/bundle/dist/application/qgrid/token-subscriber.js +149 -0
  5. package/bundle/dist/application/qgrid/token-trigger-setup.js +69 -0
  6. package/bundle/dist/application/sonamu.generated.sso.js +1 -1
  7. package/bundle/dist/application/token/token.types.js +1 -1
  8. package/bundle/dist/i18n/sd.generated.js +2 -2
  9. package/bundle/dist/migrations/20260410171405_create__request_logs.js +1 -1
  10. package/bundle/dist/migrations/20260410171406_create__tokens.js +1 -1
  11. package/bundle/dist/migrations/20260411120624_alter_tokens_alter2.js +1 -1
  12. package/bundle/dist/migrations/20260415134649_alter_request_logs_alter1.js +1 -1
  13. package/bundle/dist/migrations/20260421223627_alter_request_logs_add1_alter1.js +1 -1
  14. package/bundle/dist/migrations/20260423180818_alter_request_logs_add1_alter1.js +1 -1
  15. package/bundle/dist/migrations/20260423182017_alter_request_logs_add2_drop1_alter1.js +1 -1
  16. package/bundle/dist/migrations/20260423183613_alter_request_logs_add1_alter1.js +1 -1
  17. package/bundle/dist/sonamu.config.js +22 -36
  18. package/bundle/dist/testing/setup-mocks.js +1 -1
  19. package/bundle/dist/utils/subset-loaders.js +1 -1
  20. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +68 -32
  21. package/bundle/src/application/qgrid/qgrid.frame.ts +8 -25
  22. package/bundle/src/application/qgrid/qgrid.types.ts +9 -0
  23. package/bundle/src/application/qgrid/token-subscriber.ts +176 -0
  24. package/bundle/src/application/qgrid/token-trigger-setup.ts +80 -0
  25. package/bundle/src/application/request-log/request-log.entity.json +3 -1
  26. package/bundle/src/application/sonamu.generated.sso.ts +5 -5
  27. package/bundle/src/application/token/token.types.ts +1 -1
  28. package/bundle/src/i18n/sd.generated.ts +1 -1
  29. package/bundle/src/migrations/20260410171405_create__request_logs.ts +1 -1
  30. package/bundle/src/migrations/20260410171406_create__tokens.ts +1 -1
  31. package/bundle/src/migrations/20260411120624_alter_tokens_alter2.ts +1 -1
  32. package/bundle/src/migrations/20260415134649_alter_request_logs_alter1.ts +1 -1
  33. package/bundle/src/migrations/20260421223627_alter_request_logs_add1_alter1.ts +1 -1
  34. package/bundle/src/migrations/20260423180818_alter_request_logs_add1_alter1.ts +1 -1
  35. package/bundle/src/migrations/20260423182017_alter_request_logs_add2_drop1_alter1.ts +1 -1
  36. package/bundle/src/migrations/20260423183613_alter_request_logs_add1_alter1.ts +1 -1
  37. package/bundle/src/sonamu.config.ts +33 -39
  38. package/bundle/src/testing/setup-mocks.ts +1 -1
  39. package/bundle/src/typings/fastify.d.ts +1 -1
  40. package/bundle/src/typings/sonamu.d.ts +3 -2
  41. package/bundle/src/utils/subset-loaders.ts +1 -1
  42. package/bundle/web-dist/client/assets/{index-DUmwX7rR.js → index-DzEE3oyG.js} +3 -3
  43. package/bundle/web-dist/client/assets/{logs-ci_3vzTT.js → logs-Bn56eAAL.js} +1 -1
  44. package/bundle/web-dist/client/assets/{routes-Ch5LFN0K.js → routes-BCEPwpzm.js} +1 -1
  45. package/bundle/web-dist/client/assets/{sd.generated-CIOZewtL.js → sd.generated-C9WnMJm4.js} +1 -1
  46. package/bundle/web-dist/client/assets/{services.generated-BrB-RELO.js → services.generated-CWN1-bYW.js} +1 -1
  47. package/bundle/web-dist/client/assets/{show-D3N15Krg.js → show-Ch7LEdBK.js} +1 -1
  48. package/bundle/web-dist/client/assets/tokens-DPvuQIs2.js +1 -0
  49. package/bundle/web-dist/client/index.html +2 -2
  50. package/bundle/web-dist/server/assets/{copy-CKCGxwII.js → copy-SIUvcEcZ.js} +1 -1
  51. package/bundle/web-dist/server/assets/{lazyRouteComponent-BlvOfJIF.js → lazyRouteComponent-CcyhCAoL.js} +2 -2
  52. package/bundle/web-dist/server/assets/{logs-CDacVwTQ.js → logs-D1ezT2IS.js} +3 -3
  53. package/bundle/web-dist/server/assets/{routes-BLm-zF86.js → routes-CtTFrsIz.js} +2 -2
  54. package/bundle/web-dist/server/assets/{sd.generated-CIg_jf8e.js → sd.generated-CkiEsOwK.js} +1 -1
  55. package/bundle/web-dist/server/assets/{services.generated-wCfUuY7Z.js → services.generated-D4asAlWb.js} +1 -1
  56. package/bundle/web-dist/server/assets/{shim-Dq_Izqnc.js → shim-BYpcQGN1.js} +1 -1
  57. package/bundle/web-dist/server/assets/{show-DjJyZunM.js → show-Bz0If-L7.js} +4 -4
  58. package/bundle/web-dist/server/assets/{tokens-rQIIgqMo.js → tokens-BBBfLC7N.js} +11 -4
  59. package/bundle/web-dist/server/entry-server.generated.js +7 -7
  60. package/package.json +1 -1
  61. package/bundle/web-dist/client/assets/tokens-BAlIaa6X.js +0 -1
@@ -5,23 +5,27 @@ import { getPrettyFormatter } from "@logtape/pretty";
5
5
  import dotenv from "dotenv";
6
6
  import { CachePresets, defineConfig } from "sonamu";
7
7
  import { drivers as cacheDrivers, store } from "sonamu/cache";
8
- import { drivers } from "sonamu/storage";
9
8
 
10
9
  dotenv.config({ path: path.join(import.meta.dirname, "../.env") });
11
10
 
12
11
  const host = process.env.HOST ?? "localhost";
13
12
  const port = Number(process.env.PORT ?? 44900);
14
13
 
14
+ const connConfig = {
15
+ host: process.env.QGRID_DB_HOST ?? "localhost",
16
+ port: Number(process.env.QGRID_DB_PORT ?? 44901),
17
+ user: process.env.QGRID_DB_USER ?? "postgres",
18
+ password: process.env.QGRID_DB_PASSWORD ?? "postgres",
19
+ database: process.env.QGRID_DB_NAME ?? "qgrid",
20
+ };
21
+
15
22
  export default defineConfig({
16
23
  projectName: process.env.PROJECT_NAME ?? "SonamuProject",
17
24
  database: {
18
25
  name: process.env.QGRID_DB_NAME ?? "qgrid",
19
26
  defaultOptions: {
20
27
  connection: {
21
- host: process.env.QGRID_DB_HOST ?? "localhost",
22
- port: Number(process.env.QGRID_DB_PORT ?? 44901),
23
- user: process.env.QGRID_DB_USER ?? "postgres",
24
- password: process.env.QGRID_DB_PASSWORD ?? "postgres",
28
+ ...connConfig,
25
29
  keepAlive: true,
26
30
  keepAliveInitialDelayMillis: 10000,
27
31
  },
@@ -164,31 +168,6 @@ export default defineConfig({
164
168
  }
165
169
  },
166
170
  },
167
- storage: {
168
- drivers: {
169
- fs: drivers.fs({
170
- location: path.join(import.meta.dirname, "/../public/uploaded"),
171
- visibility: "public",
172
- urlBuilder: {
173
- async generateURL(key) {
174
- return `/api/public/uploaded/${key}`;
175
- },
176
- async generateSignedURL(key) {
177
- return `/api/public/uploaded/${key}`;
178
- },
179
- },
180
- }),
181
- s3: drivers.s3({
182
- credentials: {
183
- accessKeyId: process.env.AWS_ACCESS_KEY_ID ?? "",
184
- secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY ?? "",
185
- },
186
- region: process.env.S3_REGION ?? "ap-northeast-2",
187
- bucket: process.env.S3_BUCKET ?? "sonamu_default_bucket",
188
- visibility: "private",
189
- }),
190
- },
191
- },
192
171
  cache: {
193
172
  default: "main",
194
173
  stores: {
@@ -216,19 +195,34 @@ export default defineConfig({
216
195
  }
217
196
 
218
197
  const { QgridDispatcher } = await import("./application/qgrid/qgrid.dispatcher");
198
+ const { ensureTokensTrigger } = await import("./application/qgrid/token-trigger-setup");
199
+ const { TokenSubscriber } = await import("./application/qgrid/token-subscriber");
200
+
201
+ let triggerReady = true;
219
202
  try {
220
- const { TokenModel } = await import("./application/token/token.model");
221
- const entries = await TokenModel.findActive("A");
222
- for (const e of entries) QgridDispatcher.addToken(e.token, e.name);
223
- console.log(
224
- `🌲 Server listening on http://${host}:${port} (${QgridDispatcher.tokens.size} tokens loaded)`,
225
- );
203
+ await ensureTokensTrigger(connConfig);
226
204
  } catch (e) {
227
- console.warn(`⚠ Dispatcher init failed: ${(e as Error).message}`);
228
- console.log(`🌲 Server listening on http://${host}:${port} (no tokens)`);
205
+ triggerReady = false;
206
+ console.warn(
207
+ `⚠ Token trigger setup failed: ${(e as Error).message}. Continuing with LISTEN/reconcile.`,
208
+ );
229
209
  }
210
+
211
+ const subscriber = new TokenSubscriber(connConfig, QgridDispatcher);
212
+ QgridDispatcher.subscriber = subscriber;
213
+
214
+ const started = await subscriber.start();
215
+ const tokenInfo = started
216
+ ? `${QgridDispatcher.tokens.size} active tokens, LISTEN active`
217
+ : `degraded — token sync retry scheduled`;
218
+ const triggerInfo = triggerReady ? "" : ", trigger setup failed";
219
+ console.log(`🌲 Server listening on http://${host}:${port} (${tokenInfo}${triggerInfo})`);
230
220
  },
231
- onShutdown: () => {
221
+ onShutdown: async () => {
222
+ const { QgridDispatcher } = await import("./application/qgrid/qgrid.dispatcher");
223
+ if (QgridDispatcher.subscriber) {
224
+ await QgridDispatcher.subscriber.stop();
225
+ }
232
226
  console.log("graceful shutdown");
233
227
  },
234
228
  onError: (error, _request, reply) => {
@@ -1,4 +1,4 @@
1
- import type { PathLike } from "fs";
1
+ import { type PathLike } from "fs";
2
2
 
3
3
  // import { Naite } from "sonamu";
4
4
  import { vi } from "vitest";
@@ -1,7 +1,7 @@
1
1
  /** biome-ignore-all lint/correctness/noUnusedImports: d.ts */
2
2
  import type fastify from "fastify";
3
3
 
4
- import type { UserSubsetSS } from "../application/sonamu.generated";
4
+ import { type UserSubsetSS } from "../application/sonamu.generated";
5
5
 
6
6
  declare module "fastify" {
7
7
  export interface PassportUser extends UserSubsetSS {}
@@ -1,6 +1,5 @@
1
1
  /** biome-ignore-all lint/correctness/noUnusedImports: d.ts */
2
-
3
- import {} from "sonamu";
2
+ /* oxlint-disable no-empty-imports */
4
3
 
5
4
  declare module "sonamu" {
6
5
  export interface ContextExtend {
@@ -15,3 +14,5 @@ declare module "sonamu" {
15
14
  // CustomGuardKey: true
16
15
  }
17
16
  }
17
+
18
+ export {};
@@ -1,4 +1,4 @@
1
- import type { SubsetQuery } from "sonamu";
1
+ import { type SubsetQuery } from "sonamu";
2
2
 
3
3
  export function getSubsetLoaders(subsets: string[], subsetQueries: Record<string, SubsetQuery>) {
4
4
  return subsets.reduce(