@knpkv/codecommit-web 0.3.0 → 0.4.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 (41) hide show
  1. package/dist/client/assets/index-BYI4sUt8.js +370 -0
  2. package/dist/client/assets/index-YklnGGqZ.css +1 -0
  3. package/dist/client/index.html +2 -2
  4. package/dist/main.js +3 -6
  5. package/dist/main.js.map +1 -1
  6. package/dist/server/Api.d.ts +114 -20
  7. package/dist/server/Api.d.ts.map +1 -1
  8. package/dist/server/Api.js +111 -15
  9. package/dist/server/Api.js.map +1 -1
  10. package/dist/server/Server.d.ts +3 -2
  11. package/dist/server/Server.d.ts.map +1 -1
  12. package/dist/server/Server.js +76 -30
  13. package/dist/server/Server.js.map +1 -1
  14. package/dist/server/handlers/accounts-live.js +1 -1
  15. package/dist/server/handlers/accounts-live.js.map +1 -1
  16. package/dist/server/handlers/config-live.d.ts.map +1 -1
  17. package/dist/server/handlers/config-live.js +43 -22
  18. package/dist/server/handlers/config-live.js.map +1 -1
  19. package/dist/server/handlers/events-live.d.ts +2 -2
  20. package/dist/server/handlers/events-live.d.ts.map +1 -1
  21. package/dist/server/handlers/events-live.js +52 -29
  22. package/dist/server/handlers/events-live.js.map +1 -1
  23. package/dist/server/handlers/index.d.ts +1 -0
  24. package/dist/server/handlers/index.d.ts.map +1 -1
  25. package/dist/server/handlers/index.js +1 -0
  26. package/dist/server/handlers/index.js.map +1 -1
  27. package/dist/server/handlers/notifications-live.d.ts +2 -2
  28. package/dist/server/handlers/notifications-live.d.ts.map +1 -1
  29. package/dist/server/handlers/notifications-live.js +45 -34
  30. package/dist/server/handlers/notifications-live.js.map +1 -1
  31. package/dist/server/handlers/prs-live.d.ts +2 -2
  32. package/dist/server/handlers/prs-live.d.ts.map +1 -1
  33. package/dist/server/handlers/prs-live.js +16 -15
  34. package/dist/server/handlers/prs-live.js.map +1 -1
  35. package/dist/server/handlers/subscriptions-live.d.ts +3 -0
  36. package/dist/server/handlers/subscriptions-live.d.ts.map +1 -0
  37. package/dist/server/handlers/subscriptions-live.js +12 -0
  38. package/dist/server/handlers/subscriptions-live.js.map +1 -0
  39. package/package.json +7 -3
  40. package/dist/client/assets/index-B2Y18oI5.css +0 -1
  41. package/dist/client/assets/index-CuXt1AzC.js +0 -348
@@ -1,8 +1,9 @@
1
- import { Layer } from "effect";
1
+ import { Config, Effect, Layer } from "effect";
2
2
  export declare const makeServer: (options: {
3
3
  port: number;
4
4
  hostname?: string;
5
5
  }) => Layer.Layer<never, never, never>;
6
6
  export declare const makeCodeCommitServer: (port: number) => Layer.Layer<never, never, never>;
7
- export declare const CodeCommitServerLive: Layer.Layer<never, never, never>;
7
+ export declare const Port: Config.Config<number>;
8
+ export declare const CodeCommitServerLive: Effect.Effect<never, never, never>;
8
9
  //# sourceMappingURL=Server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AAUA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAA;AAkJtC,eAAO,MAAM,UAAU,GAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,qCAIpE,CAAA;AAEH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,qCAAyB,CAAA;AAG1E,eAAO,MAAM,oBAAoB,kCAA6B,CAAA"}
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,MAAM,EAAY,MAAM,EAAE,KAAK,EAA0B,MAAM,QAAQ,CAAA;AAoNhF,eAAO,MAAM,UAAU,GAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,qCAOpE,CAAA;AAEH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,qCAAyB,CAAA;AAE1E,eAAO,MAAM,IAAI,uBAAwD,CAAA;AAoBzE,eAAO,MAAM,oBAAoB,oCAW/B,CAAA"}
@@ -1,10 +1,10 @@
1
- import { FetchHttpClient, FileSystem, HttpLayerRouter, HttpServerRequest, HttpServerResponse, Path } from "@effect/platform";
1
+ import { Etag, FetchHttpClient, FileSystem, HttpLayerRouter, HttpPlatform, HttpServerRequest, HttpServerResponse, Path } from "@effect/platform";
2
2
  import { BunContext, BunFileSystem, BunHttpServer } from "@effect/platform-bun";
3
- import { AwsClient, AwsClientConfig, ConfigService, NotificationsService, PRService } from "@knpkv/codecommit-core";
4
- import { Effect, Layer } from "effect";
3
+ import { AwsClient, AwsClientConfig, CacheService, ConfigService, PRService } from "@knpkv/codecommit-core";
4
+ import { Config, Duration, Effect, Layer, Option, Predicate, Ref } from "effect";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { CodeCommitApi } from "./Api.js";
7
- import { AccountsLive, ConfigLive, EventsLive, NotificationsLive, PrsLive } from "./handlers/index.js";
7
+ import { AccountsLive, ConfigLive, EventsLive, NotificationsLive, PrsLive, SubscriptionsLive } from "./handlers/index.js";
8
8
  // MIME types for common files
9
9
  const mimeTypes = {
10
10
  ".html": "text/html",
@@ -14,7 +14,11 @@ const mimeTypes = {
14
14
  ".png": "image/png",
15
15
  ".jpg": "image/jpeg",
16
16
  ".svg": "image/svg+xml",
17
- ".ico": "image/x-icon"
17
+ ".ico": "image/x-icon",
18
+ ".wasm": "application/wasm",
19
+ ".map": "application/json",
20
+ ".woff2": "font/woff2",
21
+ ".ttf": "font/ttf"
18
22
  };
19
23
  // Static file serving — async Effect FileSystem, no sync node:fs
20
24
  const serveStatic = Effect.gen(function* () {
@@ -22,11 +26,7 @@ const serveStatic = Effect.gen(function* () {
22
26
  const fileSystem = yield* FileSystem.FileSystem;
23
27
  const path = yield* Path.Path;
24
28
  const url = new URL(req.url, "http://localhost");
25
- let filePath = url.pathname;
26
- // Security check
27
- if (filePath.includes("..")) {
28
- return HttpServerResponse.text("Forbidden", { status: 403 });
29
- }
29
+ let filePath = decodeURIComponent(url.pathname);
30
30
  // Remove leading slash
31
31
  if (filePath.startsWith("/")) {
32
32
  filePath = filePath.slice(1);
@@ -36,7 +36,11 @@ const serveStatic = Effect.gen(function* () {
36
36
  }
37
37
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
38
38
  const staticDir = path.resolve(__dirname, "../../dist/client");
39
- const fullPath = path.join(staticDir, filePath);
39
+ const fullPath = path.resolve(staticDir, filePath);
40
+ // Path traversal guard — resolved path must stay within staticDir
41
+ if (!fullPath.startsWith(staticDir)) {
42
+ return HttpServerResponse.text("Forbidden", { status: 403 });
43
+ }
40
44
  if (yield* fileSystem.exists(fullPath)) {
41
45
  const stat = yield* fileSystem.stat(fullPath);
42
46
  if (stat.type === "File") {
@@ -61,38 +65,80 @@ const serveStatic = Effect.gen(function* () {
61
65
  return HttpServerResponse.text("Not Found", { status: 404 });
62
66
  });
63
67
  // API handlers layer
64
- const HandlersLive = Layer.mergeAll(PrsLive, ConfigLive, AccountsLive, EventsLive, NotificationsLive);
68
+ const HandlersLive = Layer.mergeAll(PrsLive, ConfigLive, AccountsLive, EventsLive, NotificationsLive, SubscriptionsLive);
65
69
  // Platform dependencies
66
70
  const PlatformLive = Layer.mergeAll(Path.layer, BunFileSystem.layer, FetchHttpClient.layer);
67
- // Base services - ConfigService needs Platform
68
- const ConfigLive_ = ConfigService.ConfigServiceLive.pipe(Layer.provide(PlatformLive));
69
- // NotificationsServicesingle shared instance
70
- const NotificationsLive_ = NotificationsService.NotificationsServiceLive;
71
+ // Base services - ConfigService needs Platform + EventsHub
72
+ const ConfigLive_ = ConfigService.ConfigServiceLive.pipe(Layer.provide(PlatformLive), Layer.provide(CacheService.EventsHub.Default));
73
+ // Cache repos + EventsHub each auto-wires DatabaseLive via Effect.Service dependencies
74
+ // EventsHub.Default is shared across all repos via layer memoization
75
+ // orDie scoped to cache layers only: DB/migration errors become defects here
76
+ const ReposLive = Layer.mergeAll(CacheService.PullRequestRepo.Default, CacheService.CommentRepo.Default, CacheService.NotificationRepo.Default, CacheService.SubscriptionRepo.Default, CacheService.SyncMetadataRepo.Default, CacheService.EventsHub.Default).pipe(Layer.orDie);
71
77
  // PRService dependencies
72
- const PRServiceDeps = Layer.mergeAll(AwsClient.AwsClientLive).pipe(Layer.provideMerge(ConfigLive_), Layer.provideMerge(NotificationsLive_), Layer.provide(AwsClientConfig.Default), Layer.provide(PlatformLive));
73
- // PRService with all dependencies — provideMerge so NotificationsService flows to AllServicesLive
78
+ const PRServiceDeps = Layer.mergeAll(AwsClient.AwsClientLive, ReposLive).pipe(Layer.provideMerge(ConfigLive_), Layer.provide(AwsClientConfig.Default), Layer.provide(PlatformLive));
79
+ // PRService with all dependencies
74
80
  const PRServiceLive_ = PRService.PRServiceLive.pipe(Layer.provideMerge(PRServiceDeps));
75
81
  // AwsClient for handlers that call AWS directly (e.g., createPR)
76
82
  const AwsClientLive_ = AwsClient.AwsClientLive.pipe(Layer.provide(FetchHttpClient.layer), Layer.provide(AwsClientConfig.Default));
77
- // All services needed by handlers — NotificationsService flows through PRServiceDeps via provideMerge
83
+ // All services needed by handlers
78
84
  const AllServicesLive = Layer.mergeAll(PRServiceLive_, ConfigLive_, AwsClientLive_);
79
- // Fork initial PR refresh when services are built
80
- const InitialRefresh = Layer.effectDiscard(Effect.gen(function* () {
85
+ // Fork auto-refresh loop: initial refresh + recurring based on config
86
+ const AutoRefresh = Layer.effectDiscard(Effect.gen(function* () {
81
87
  const prService = yield* PRService.PRService;
82
- yield* Effect.forkDaemon(prService.refresh.pipe(Effect.tap(() => Effect.logInfo("Initial PR refresh complete"))));
88
+ const configService = yield* ConfigService.ConfigService;
89
+ const refreshIteration = Effect.gen(function* () {
90
+ const config = yield* configService.load.pipe(Effect.catchAll(() => Effect.succeed({ autoRefresh: true, refreshIntervalSeconds: 300 })));
91
+ if (config.autoRefresh) {
92
+ yield* Effect.sleep(Duration.seconds(config.refreshIntervalSeconds));
93
+ yield* prService.refresh;
94
+ yield* Effect.logInfo("Auto-refresh complete");
95
+ }
96
+ else {
97
+ yield* Effect.sleep(Duration.seconds(30));
98
+ }
99
+ }).pipe(Effect.catchAllCause((cause) => Effect.logError("Auto-refresh failed", cause).pipe(Effect.zipRight(Effect.sleep(Duration.seconds(10))))));
100
+ yield* Effect.forkDaemon(Effect.gen(function* () {
101
+ yield* prService.refresh;
102
+ yield* Effect.logInfo("Initial PR refresh complete");
103
+ return yield* Effect.forever(refreshIteration);
104
+ }));
83
105
  }));
84
- // API router with handlers — InitialRefresh shares AllServicesLive with handlers
85
- const ApiLive = Layer.merge(HttpLayerRouter.addHttpApi(CodeCommitApi).pipe(Layer.provide(HandlersLive)), InitialRefresh).pipe(Layer.provide(AllServicesLive), Layer.provide(FetchHttpClient.layer));
106
+ // API router with handlers — AutoRefresh shares AllServicesLive with handlers
107
+ const ApiLive = Layer.merge(HttpLayerRouter.addHttpApi(CodeCommitApi).pipe(Layer.provide(HandlersLive)), AutoRefresh).pipe(Layer.provide(AllServicesLive), Layer.provide(FetchHttpClient.layer));
86
108
  // Static file router - catches all non-API routes
87
109
  const StaticRouter = HttpLayerRouter.use((router) => router.add("GET", "/*", serveStatic));
88
- // Combined routes with CORS
89
- const AllRoutes = Layer.mergeAll(ApiLive, StaticRouter).pipe(Layer.provide(HttpLayerRouter.cors({
90
- allowedOrigins: ["*"],
110
+ const AllowedOrigins = Config.string("ALLOWED_ORIGINS").pipe(Config.map((s) => s.split(",")), Config.withDefault(["http://localhost:3000", "http://127.0.0.1:3000"]));
111
+ // CORS layer via Effect Config — consistent with Port config
112
+ const CorsLive = Layer.unwrapEffect(Effect.map(AllowedOrigins, (allowedOrigins) => HttpLayerRouter.cors({
113
+ allowedOrigins,
91
114
  allowedMethods: ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"],
92
115
  allowedHeaders: ["Content-Type", "Authorization"]
93
116
  })));
94
- export const makeServer = (options) => HttpLayerRouter.serve(AllRoutes).pipe(Layer.provide(BunHttpServer.layer({ ...options, idleTimeout: 255 })), Layer.provide(BunContext.layer));
117
+ // Combined routes with CORS orDie for remaining service construction errors
118
+ const AllRoutes = Layer.mergeAll(ApiLive, StaticRouter).pipe(Layer.provide(CorsLive), Layer.orDie);
119
+ // HttpPlatform + Etag — required by addHttpApi for OpenAPI/multipart support
120
+ const HttpPlatformLive = HttpPlatform.layer.pipe(Layer.provide(BunFileSystem.layer));
121
+ export const makeServer = (options) => HttpLayerRouter.serve(AllRoutes).pipe(
122
+ // idleTimeout: 0 disables idle detection — required for long-lived SSE connections
123
+ Layer.provide(BunHttpServer.layer({ ...options, idleTimeout: 0 })), Layer.provide(BunContext.layer), Layer.provide(Etag.layer), Layer.provide(HttpPlatformLive));
95
124
  export const makeCodeCommitServer = (port) => makeServer({ port });
96
- // Default export
97
- export const CodeCommitServerLive = makeCodeCommitServer(3000);
125
+ export const Port = Config.integer("PORT").pipe(Config.withDefault(3000));
126
+ const updatePortOnConflict = (portRef, retriesRef) => (self) => self.pipe(Effect.catchSomeDefect((defect) => Predicate.isError(defect) && defect.message.includes("port")
127
+ ? Option.some(Effect.gen(function* () {
128
+ const remaining = yield* Ref.getAndUpdate(retriesRef, (r) => r - 1);
129
+ if (remaining <= 0)
130
+ return yield* Effect.die(defect);
131
+ const p = yield* Ref.getAndUpdate(portRef, (prev) => prev + 1);
132
+ yield* Effect.logWarning(`Port ${p} in use, trying ${p + 1}`);
133
+ }))
134
+ : Option.none()));
135
+ export const CodeCommitServerLive = Effect.gen(function* () {
136
+ const portRef = yield* Ref.make(yield* Port.pipe(Effect.orDie));
137
+ const retriesRef = yield* Ref.make(10);
138
+ return yield* Effect.forever(Effect.gen(function* () {
139
+ const p = yield* Ref.get(portRef);
140
+ yield* Effect.logInfo(`Starting server on http://localhost:${p}`);
141
+ return yield* Layer.launch(makeCodeCommitServer(p));
142
+ }).pipe(updatePortOnConflict(portRef, retriesRef)));
143
+ });
98
144
  //# sourceMappingURL=Server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export const AccountsLive = HttpApiBuilder.group(CodeCommitApi, "accounts", (han
9
9
  const accounts = state.accounts
10
10
  .filter((a) => a.enabled)
11
11
  .map((a) => new Domain.Account({
12
- id: a.profile,
12
+ profile: a.profile,
13
13
  region: a.region
14
14
  }));
15
15
  return Chunk.fromIterable(accounts);
@@ -1 +1 @@
1
- {"version":3,"file":"accounts-live.js","sourceRoot":"","sources":["../../../src/server/handlers/accounts-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CACvF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IAE5C,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,IAAI,MAAM,CAAC,OAAO,CAAC;YACjB,EAAE,EAAE,CAAC,CAAC,OAAO;YACb,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CACH,CAAA;QACH,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC,CAAC,CAAC,CAAA;AACP,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"accounts-live.js","sourceRoot":"","sources":["../../../src/server/handlers/accounts-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CACvF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IAE5C,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,IAAI,MAAM,CAAC,OAAO,CAAC;YACjB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CACH,CAAA;QACH,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC,CAAC,CAAC,CAAA;AACP,CAAC,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/config-live.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKjE,eAAO,MAAM,UAAU,qKA+ElB,CAAA"}
1
+ {"version":3,"file":"config-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/config-live.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKjE,eAAO,MAAM,UAAU,qKA4GlB,CAAA"}
@@ -1,14 +1,14 @@
1
1
  import { FileSystem, HttpApiBuilder } from "@effect/platform";
2
2
  import { ConfigService, PRService } from "@knpkv/codecommit-core";
3
3
  import { AwsProfileName, AwsRegion } from "@knpkv/codecommit-core/Domain.js";
4
- import { Effect, Schema, SubscriptionRef } from "effect";
4
+ import { Config, Effect, Option, Schema, SubscriptionRef } from "effect";
5
5
  import { ApiError, CodeCommitApi } from "../Api.js";
6
6
  export const ConfigLive = HttpApiBuilder.group(CodeCommitApi, "config", (handlers) => Effect.gen(function* () {
7
7
  const configService = yield* ConfigService.ConfigService;
8
8
  const prService = yield* PRService.PRService;
9
9
  return handlers
10
10
  .handle("list", () => Effect.gen(function* () {
11
- const config = yield* configService.load.pipe(Effect.catchAll(() => Effect.succeed({ accounts: [], autoDetect: true })));
11
+ const config = yield* configService.load.pipe(Effect.catchAll(() => Effect.succeed({ accounts: [], autoDetect: true, autoRefresh: true, refreshIntervalSeconds: 300 })));
12
12
  const state = yield* SubscriptionRef.get(prService.state);
13
13
  return {
14
14
  accounts: config.accounts.map((a) => ({
@@ -17,37 +17,56 @@ export const ConfigLive = HttpApiBuilder.group(CodeCommitApi, "config", (handler
17
17
  enabled: a.enabled
18
18
  })),
19
19
  autoDetect: config.autoDetect,
20
+ autoRefresh: config.autoRefresh,
21
+ refreshIntervalSeconds: config.refreshIntervalSeconds,
20
22
  currentUser: state.currentUser
21
23
  };
22
- }))
24
+ }).pipe(Effect.orDie))
23
25
  .handle("path", () => Effect.gen(function* () {
24
26
  const fs = yield* FileSystem.FileSystem;
25
- const path = yield* configService.getConfigPath.pipe(Effect.catchAll((e) => Effect.fail(new ApiError({ message: e.message }))));
27
+ const path = yield* configService.getConfigPath;
26
28
  const exists = yield* fs.exists(path).pipe(Effect.catchAll(() => Effect.succeed(false)));
27
- return { path, exists };
28
- }).pipe(Effect.catchTag("ApiError", Effect.fail)))
29
+ const modifiedAt = exists
30
+ ? yield* fs.stat(path).pipe(Effect.map((s) => Option.map(s.mtime, (d) => new Date(Number(d)).toISOString()).pipe(Option.getOrUndefined)), Effect.catchAll(() => Effect.succeed(undefined)))
31
+ : undefined;
32
+ return { path, exists, modifiedAt };
33
+ }).pipe(Effect.mapError((e) => new ApiError({ message: e.message }))))
34
+ .handle("database", () => Effect.gen(function* () {
35
+ const fs = yield* FileSystem.FileSystem;
36
+ const home = yield* Config.string("HOME").pipe(Config.orElse(() => Config.string("USERPROFILE")));
37
+ const path = `${home}/.codecommit/cache.db`;
38
+ const exists = yield* fs.exists(path).pipe(Effect.catchAll(() => Effect.succeed(false)));
39
+ const stat = exists
40
+ ? yield* fs.stat(path).pipe(Effect.map((s) => ({
41
+ size: Number(s.size),
42
+ modifiedAt: Option.map(s.mtime, (d) => new Date(Number(d)).toISOString()).pipe(Option.getOrUndefined)
43
+ })), Effect.catchAll(() => Effect.succeed(undefined)))
44
+ : undefined;
45
+ return { path, sizeBytes: stat?.size ?? 0, exists, modifiedAt: stat?.modifiedAt };
46
+ }).pipe(Effect.mapError((e) => new ApiError({ message: String(e) }))))
29
47
  .handle("validate", () => Effect.gen(function* () {
30
- const result = yield* configService.validate.pipe(Effect.catchAll((e) => Effect.fail(new ApiError({ message: e.message }))));
48
+ const result = yield* configService.validate;
31
49
  return { status: result.status, path: result.path, errors: result.errors };
32
- }).pipe(Effect.catchTag("ApiError", Effect.fail)))
50
+ }).pipe(Effect.mapError((e) => new ApiError({ message: e.message }))))
33
51
  .handle("save", ({ payload }) => Effect.gen(function* () {
34
- const decodeProfile = Schema.decodeSync(AwsProfileName);
35
- const decodeRegion = Schema.decodeSync(AwsRegion);
52
+ const accounts = yield* Effect.forEach(payload.accounts, (a) => Effect.all({
53
+ profile: Schema.decode(AwsProfileName)(a.profile),
54
+ regions: Effect.forEach(a.regions, (r) => Schema.decode(AwsRegion)(r)),
55
+ enabled: Effect.succeed(a.enabled)
56
+ }));
36
57
  yield* configService.save({
37
- accounts: payload.accounts.map((a) => ({
38
- profile: decodeProfile(a.profile),
39
- regions: a.regions.map((r) => decodeRegion(r)),
40
- enabled: a.enabled
41
- })),
42
- autoDetect: payload.autoDetect
43
- }).pipe(Effect.mapError((e) => new ApiError({ message: e.message })));
44
- yield* prService.refresh.pipe(Effect.catchAll(() => Effect.void));
58
+ accounts,
59
+ autoDetect: payload.autoDetect,
60
+ autoRefresh: payload.autoRefresh,
61
+ refreshIntervalSeconds: payload.refreshIntervalSeconds
62
+ });
63
+ yield* prService.refresh.pipe(Effect.catchAll((e) => Effect.logWarning("refresh after config save failed", e)));
45
64
  return "ok";
46
- }))
65
+ }).pipe(Effect.mapError((e) => new ApiError({ message: String(e) }))))
47
66
  .handle("reset", () => Effect.gen(function* () {
48
67
  const backupPath = yield* configService.backup.pipe(Effect.map((p) => p), Effect.catchAll(() => Effect.succeed(undefined)));
49
- const config = yield* configService.reset.pipe(Effect.mapError((e) => new ApiError({ message: String(e) })));
50
- yield* prService.refresh.pipe(Effect.catchAll(() => Effect.void));
68
+ const config = yield* configService.reset;
69
+ yield* prService.refresh.pipe(Effect.catchAll((e) => Effect.logWarning("refresh after config reset failed", e)));
51
70
  const state = yield* SubscriptionRef.get(prService.state);
52
71
  return {
53
72
  backupPath,
@@ -58,9 +77,11 @@ export const ConfigLive = HttpApiBuilder.group(CodeCommitApi, "config", (handler
58
77
  enabled: a.enabled
59
78
  })),
60
79
  autoDetect: config.autoDetect,
80
+ autoRefresh: config.autoRefresh,
81
+ refreshIntervalSeconds: config.refreshIntervalSeconds,
61
82
  currentUser: state.currentUser
62
83
  }
63
84
  };
64
- }));
85
+ }).pipe(Effect.mapError((e) => new ApiError({ message: String(e) }))));
65
86
  }));
66
87
  //# sourceMappingURL=config-live.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-live.js","sourceRoot":"","sources":["../../../src/server/handlers/config-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEnD,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CACnF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,aAAa,CAAA;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IAE5C,OAAO,QAAQ;SACZ,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAC3C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAC1E,CAAA;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACzD,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAA;IACH,CAAC,CAAC,CAAC;SACJ,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAC1E,CAAA;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACxF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACnD,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CACvB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAC1E,CAAA;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;IAC5E,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACnD,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC9B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;QACvD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QACjD,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC9C,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAC7D,CAAA;QACD,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACjE,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAC;SACJ,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,CACpB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CACjD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,CAAC,EACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAA+B,CAAC,CAAC,CACvE,CAAA;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC7D,CAAA;QACD,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACjE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACzD,OAAO;YACL,UAAU;YACV,MAAM,EAAE;gBACN,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACpC,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC,CAAC;gBACH,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B;SACF,CAAA;IACH,CAAC,CAAC,CAAC,CAAA;AACT,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"config-live.js","sourceRoot":"","sources":["../../../src/server/handlers/config-live.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { NotificationsService, PRService } from "@knpkv/codecommit-core";
2
- export declare const EventsLive: import("effect/Layer").Layer<import("@effect/platform/HttpApiGroup").ApiGroup<"CodeCommitApi", "events">, never, NotificationsService.NotificationsService | PRService.PRService>;
1
+ import { CacheService, PRService } from "@knpkv/codecommit-core";
2
+ export declare const EventsLive: import("effect/Layer").Layer<import("@effect/platform/HttpApiGroup").ApiGroup<"CodeCommitApi", "events">, never, CacheService.EventsHub | CacheService.NotificationRepo | CacheService.PullRequestRepo | PRService.PRService>;
3
3
  //# sourceMappingURL=events-live.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/events-live.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAgCxE,eAAO,MAAM,UAAU,mLAmDlB,CAAA"}
1
+ {"version":3,"file":"events-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/events-live.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAoChE,eAAO,MAAM,UAAU,+NAmFlB,CAAA"}
@@ -1,8 +1,8 @@
1
1
  import { HttpApiBuilder, HttpServerResponse } from "@effect/platform";
2
- import { NotificationsService, PRService } from "@knpkv/codecommit-core";
2
+ import { CacheService, PRService } from "@knpkv/codecommit-core";
3
3
  import { AppStatus, PullRequest } from "@knpkv/codecommit-core/Domain.js";
4
- import { Duration, Effect, Schedule, Schema, Stream, SubscriptionRef } from "effect";
5
- import { CodeCommitApi, NotificationItemResponse } from "../Api.js";
4
+ import { Duration, Effect, Ref, Schedule, Schema, Stream, SubscriptionRef } from "effect";
5
+ import { CodeCommitApi, NotificationResponse } from "../Api.js";
6
6
  const AccountState = Schema.Struct({
7
7
  profile: Schema.String,
8
8
  region: Schema.String,
@@ -16,7 +16,11 @@ const SsePayload = Schema.Struct({
16
16
  error: Schema.optional(Schema.String),
17
17
  lastUpdated: Schema.optional(Schema.DateFromSelf),
18
18
  currentUser: Schema.optional(Schema.String),
19
- notifications: Schema.Array(NotificationItemResponse)
19
+ unreadNotificationCount: Schema.Number,
20
+ notifications: Schema.Struct({
21
+ items: Schema.Array(NotificationResponse),
22
+ nextCursor: Schema.optional(Schema.Number)
23
+ })
20
24
  });
21
25
  const encode = Schema.encode(SsePayload);
22
26
  const encoder = new TextEncoder();
@@ -24,30 +28,49 @@ const encoder = new TextEncoder();
24
28
  const keepalive = Stream.schedule(Stream.succeed(encoder.encode(":\n\n")), Schedule.spaced(Duration.seconds(30)));
25
29
  export const EventsLive = HttpApiBuilder.group(CodeCommitApi, "events", (handlers) => Effect.gen(function* () {
26
30
  const prService = yield* PRService.PRService;
27
- const notificationsService = yield* NotificationsService.NotificationsService;
28
- // Merge both change streams — emit combined state on either change
29
- const prChanges = prService.state.changes.pipe(Stream.map(() => "pr"));
30
- const notifChanges = notificationsService.state.changes.pipe(Stream.map(() => "notif"));
31
- const combined = Stream.merge(prChanges, notifChanges);
32
- const stateStream = combined.pipe(Stream.mapEffect(() => Effect.all({
33
- prState: SubscriptionRef.get(prService.state),
34
- notifState: SubscriptionRef.get(notificationsService.state)
35
- })), Stream.mapEffect(({ notifState, prState }) => encode({
36
- ...prState,
37
- notifications: notifState.items.map((item) => ({
38
- type: item.type,
39
- title: item.title,
40
- message: item.message,
41
- timestamp: item.timestamp.toISOString(),
42
- ...(item.profile ? { profile: item.profile } : {})
43
- }))
44
- }).pipe(Effect.map((payload) => encoder.encode(`data: ${JSON.stringify(payload)}\n\n`)), Effect.catchAll((e) => Effect.logWarning("SSE encode failed", e).pipe(Effect.map(() => encoder.encode(":\n\n")))))));
45
- return handlers.handleRaw("stream", () => Effect.succeed(HttpServerResponse.stream(Stream.merge(stateStream, keepalive), {
46
- headers: {
47
- "content-type": "text/event-stream",
48
- "cache-control": "no-cache",
49
- "connection": "keep-alive"
50
- }
51
- })));
31
+ const prRepo = yield* CacheService.PullRequestRepo;
32
+ const notificationRepo = yield* CacheService.NotificationRepo;
33
+ const hub = yield* CacheService.EventsHub;
34
+ // Cache unread count + notifications — re-query on relevant triggers
35
+ const initialCount = yield* notificationRepo.unreadCount().pipe(Effect.catchAll(() => Effect.succeed(0)));
36
+ const lastUnreadRef = yield* Ref.make(initialCount);
37
+ const initialNotifications = yield* notificationRepo.findAll({ limit: 20 }).pipe(Effect.catchAll(() => Effect.succeed({ items: [] })));
38
+ const lastNotificationsRef = yield* Ref.make(initialNotifications);
39
+ // Build full SSE payload reused for initial event + change events
40
+ const buildPayload = () => Effect.gen(function* () {
41
+ const prState = yield* SubscriptionRef.get(prService.state);
42
+ const pullRequests = yield* prRepo.findAll().pipe(Effect.map((rows) => rows.map((row) => PRService.decodeCachedPR(row))), Effect.catchAllCause(() => SubscriptionRef.get(prService.state).pipe(Effect.map((s) => s.pullRequests))));
43
+ const unreadCount = yield* notificationRepo.unreadCount().pipe(Effect.tap((c) => Ref.set(lastUnreadRef, c)), Effect.catchAllCause(() => Ref.get(lastUnreadRef)));
44
+ const notifications = yield* notificationRepo.findAll({ limit: 20 }).pipe(Effect.tap((p) => Ref.set(lastNotificationsRef, p)), Effect.catchAllCause(() => Ref.get(lastNotificationsRef)));
45
+ const payload = yield* encode({
46
+ accounts: prState.accounts,
47
+ status: prState.status,
48
+ pullRequests,
49
+ statusDetail: prState.statusDetail,
50
+ error: prState.error,
51
+ lastUpdated: prState.lastUpdated,
52
+ currentUser: prState.currentUser,
53
+ unreadNotificationCount: unreadCount,
54
+ notifications
55
+ });
56
+ return encoder.encode(`data: ${JSON.stringify(payload)}\n\n`);
57
+ }).pipe(Effect.catchAllCause((cause) => Effect.logWarning("SSE payload failed", cause).pipe(Effect.map(() => encoder.encode(":\n\n")))));
58
+ return handlers.handleRaw("stream", () => Effect.gen(function* () {
59
+ // Eagerly build initial snapshot before stream starts
60
+ const initialChunk = yield* buildPayload();
61
+ // Watch SubscriptionRef changes directly (no bridge daemon)
62
+ const stateChanges = prService.state.changes;
63
+ // Repo changes via hub (PR upserts, notification adds, etc.)
64
+ const repoChanges = hub.subscribe;
65
+ const changes = Stream.merge(stateChanges, repoChanges).pipe(Stream.debounce(Duration.millis(200)), Stream.mapEffect(() => buildPayload()));
66
+ // merge (not concat) so subscriptions start immediately — no missed events
67
+ return HttpServerResponse.stream(Stream.merge(Stream.concat(Stream.make(initialChunk), changes), keepalive), {
68
+ headers: {
69
+ "content-type": "text/event-stream",
70
+ "cache-control": "no-cache",
71
+ "connection": "keep-alive"
72
+ }
73
+ });
74
+ }));
52
75
  }));
53
76
  //# sourceMappingURL=events-live.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events-live.js","sourceRoot":"","sources":["../../../src/server/handlers/events-live.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events-live.js","sourceRoot":"","sources":["../../../src/server/handlers/events-live.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,5 @@ export { ConfigLive } from "./config-live.js";
3
3
  export { EventsLive } from "./events-live.js";
4
4
  export { NotificationsLive } from "./notifications-live.js";
5
5
  export { PrsLive } from "./prs-live.js";
6
+ export { SubscriptionsLive } from "./subscriptions-live.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -3,4 +3,5 @@ export { ConfigLive } from "./config-live.js";
3
3
  export { EventsLive } from "./events-live.js";
4
4
  export { NotificationsLive } from "./notifications-live.js";
5
5
  export { PrsLive } from "./prs-live.js";
6
+ export { SubscriptionsLive } from "./subscriptions-live.js";
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1,3 +1,3 @@
1
- import { NotificationsService } from "@knpkv/codecommit-core";
2
- export declare const NotificationsLive: import("effect/Layer").Layer<import("@effect/platform/HttpApiGroup").ApiGroup<"CodeCommitApi", "notifications">, never, NotificationsService.NotificationsService | import("@effect/platform/CommandExecutor").CommandExecutor>;
1
+ import { AwsClient, CacheService, PRService } from "@knpkv/codecommit-core";
2
+ export declare const NotificationsLive: import("effect/Layer").Layer<import("@effect/platform/HttpApiGroup").ApiGroup<"CodeCommitApi", "notifications">, never, AwsClient.AwsClient | CacheService.NotificationRepo | PRService.PRService | import("@effect/platform/CommandExecutor").CommandExecutor>;
3
3
  //# sourceMappingURL=notifications-live.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifications-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/notifications-live.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAQ7D,eAAO,MAAM,iBAAiB,iOAsG7B,CAAA"}
1
+ {"version":3,"file":"notifications-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/notifications-live.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAO3E,eAAO,MAAM,iBAAiB,iQA2I7B,CAAA"}