@knpkv/codecommit-web 0.2.0 → 0.3.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.
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>codecommit</title>
7
- <script type="module" crossorigin src="/assets/index-CR6OSddv.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-9fIdCzWC.css">
7
+ <script type="module" crossorigin src="/assets/index-CuXt1AzC.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-B2Y18oI5.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
@@ -41,13 +41,58 @@ declare const ConfigGroup_base: HttpApiGroup.HttpApiGroup<"config", HttpApiEndpo
41
41
  }[];
42
42
  readonly autoDetect: boolean;
43
43
  readonly currentUser?: string | undefined;
44
- }, never, never, never>, never, never, false>;
44
+ }, never, never, never> | HttpApiEndpoint.HttpApiEndpoint<"path", "GET", never, never, never, never, {
45
+ readonly path: string;
46
+ readonly exists: boolean;
47
+ }, ApiError, never, never> | HttpApiEndpoint.HttpApiEndpoint<"validate", "GET", never, never, never, never, {
48
+ readonly status: "valid" | "missing" | "corrupted";
49
+ readonly path: string;
50
+ readonly errors: readonly string[];
51
+ }, ApiError, never, never> | HttpApiEndpoint.HttpApiEndpoint<"save", "POST", never, never, {
52
+ readonly accounts: readonly {
53
+ readonly profile: string;
54
+ readonly regions: readonly string[];
55
+ readonly enabled: boolean;
56
+ }[];
57
+ readonly autoDetect: boolean;
58
+ }, never, string, ApiError, never, never> | HttpApiEndpoint.HttpApiEndpoint<"reset", "POST", never, never, never, never, {
59
+ readonly backupPath?: string | undefined;
60
+ readonly config: {
61
+ readonly accounts: readonly {
62
+ readonly profile: string;
63
+ readonly regions: readonly string[];
64
+ readonly enabled: boolean;
65
+ }[];
66
+ readonly autoDetect: boolean;
67
+ readonly currentUser?: string | undefined;
68
+ };
69
+ }, ApiError, never, never>, never, never, false>;
45
70
  export declare class ConfigGroup extends ConfigGroup_base {
46
71
  }
47
72
  declare const AccountsGroup_base: HttpApiGroup.HttpApiGroup<"accounts", HttpApiEndpoint.HttpApiEndpoint<"list", "GET", never, never, never, never, import("effect/Chunk").Chunk<Account>, never, never, never>, never, never, false>;
48
73
  export declare class AccountsGroup extends AccountsGroup_base {
49
74
  }
50
- declare const CodeCommitApi_base: HttpApi.HttpApi<"CodeCommitApi", typeof PrsGroup | typeof EventsGroup | typeof ConfigGroup | typeof AccountsGroup, import("@effect/platform/HttpApiError").HttpApiDecodeError, never>;
75
+ export declare const NotificationItemResponse: Schema.Struct<{
76
+ type: Schema.Literal<["error", "info", "warning", "success"]>;
77
+ title: typeof Schema.String;
78
+ message: typeof Schema.String;
79
+ timestamp: typeof Schema.String;
80
+ profile: Schema.optional<typeof Schema.String>;
81
+ }>;
82
+ declare const NotificationsGroup_base: HttpApiGroup.HttpApiGroup<"notifications", HttpApiEndpoint.HttpApiEndpoint<"list", "GET", never, never, never, never, readonly {
83
+ readonly title: string;
84
+ readonly type: "error" | "info" | "warning" | "success";
85
+ readonly message: string;
86
+ readonly timestamp: string;
87
+ readonly profile?: string | undefined;
88
+ }[], never, never, never> | HttpApiEndpoint.HttpApiEndpoint<"clear", "POST", never, never, never, never, string, never, never, never> | HttpApiEndpoint.HttpApiEndpoint<"ssoLogin", "POST", never, never, {
89
+ readonly profile: string & import("effect/Brand").Brand<"AwsProfileName">;
90
+ }, never, string, ApiError, never, never> | HttpApiEndpoint.HttpApiEndpoint<"ssoLogout", "POST", never, never, {
91
+ readonly profile: string;
92
+ }, never, string, ApiError, never, never>, never, never, false>;
93
+ export declare class NotificationsGroup extends NotificationsGroup_base {
94
+ }
95
+ declare const CodeCommitApi_base: HttpApi.HttpApi<"CodeCommitApi", typeof PrsGroup | typeof EventsGroup | typeof ConfigGroup | typeof AccountsGroup | typeof NotificationsGroup, import("@effect/platform/HttpApiError").HttpApiDecodeError, never>;
51
96
  export declare class CodeCommitApi extends CodeCommitApi_base {
52
97
  }
53
98
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/server/Api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAyB,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;;;;;;AAG/B,qBAAa,QAAS,SAAQ,aAE5B;CAAG;;;;;;;;;;;;;;;;;;;;;AAGL,qBAAa,QAAS,SAAQ,aAyCT;CACnB;;AAGF,qBAAa,WAAY,SAAQ,gBAET;CACtB;;;;;;;;;;AAeF,qBAAa,WAAY,SAAQ,gBAET;CACtB;;AAGF,qBAAa,aAAc,SAAQ,kBAET;CACxB;;AAGF,qBAAa,aAAc,SAAQ,kBAId;CACnB"}
1
+ {"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/server/Api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAyC,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9G,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;;;;;;AAG/B,qBAAa,QAAS,SAAQ,aAE5B;CAAG;;;;;;;;;;;;;;;;;;;;;AAGL,qBAAa,QAAS,SAAQ,aAyCT;CACnB;;AAGF,qBAAa,WAAY,SAAQ,gBAET;CACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CF,qBAAa,WAAY,SAAQ,gBAMT;CACtB;;AAGF,qBAAa,aAAc,SAAQ,kBAET;CACxB;AAGF,eAAO,MAAM,wBAAwB;;;;;;EAMnC,CAAA;;;;;;;;;;;;AAEF,qBAAa,kBAAmB,SAAQ,uBAeT;CAC7B;;AAGF,qBAAa,aAAc,SAAQ,kBAKT;CACxB"}
@@ -1,5 +1,5 @@
1
1
  import { HttpApi, HttpApiEndpoint, HttpApiGroup } from "@effect/platform";
2
- import { Account, PRCommentLocationJson, PullRequest } from "@knpkv/codecommit-core/Domain.js";
2
+ import { Account, AwsProfileName, PRCommentLocationJson, PullRequest } from "@knpkv/codecommit-core/Domain.js";
3
3
  import { Schema } from "effect";
4
4
  // API error returned to clients for AWS failures
5
5
  export class ApiError extends Schema.TaggedError()("ApiError", {
@@ -53,8 +53,33 @@ const ConfigResponse = Schema.Struct({
53
53
  autoDetect: Schema.Boolean,
54
54
  currentUser: Schema.optional(Schema.String)
55
55
  });
56
+ const ConfigPathResponse = Schema.Struct({
57
+ path: Schema.String,
58
+ exists: Schema.Boolean
59
+ });
60
+ const ConfigValidationResponse = Schema.Struct({
61
+ status: Schema.Literal("valid", "missing", "corrupted"),
62
+ path: Schema.String,
63
+ errors: Schema.Array(Schema.String)
64
+ });
65
+ const ConfigSavePayload = Schema.Struct({
66
+ accounts: Schema.Array(Schema.Struct({
67
+ profile: Schema.String,
68
+ regions: Schema.Array(Schema.String),
69
+ enabled: Schema.Boolean
70
+ })),
71
+ autoDetect: Schema.Boolean
72
+ });
73
+ const ConfigResetResponse = Schema.Struct({
74
+ backupPath: Schema.optional(Schema.String),
75
+ config: ConfigResponse
76
+ });
56
77
  export class ConfigGroup extends HttpApiGroup.make("config")
57
78
  .add(HttpApiEndpoint.get("list", "/").addSuccess(ConfigResponse))
79
+ .add(HttpApiEndpoint.get("path", "/path").addSuccess(ConfigPathResponse).addError(ApiError))
80
+ .add(HttpApiEndpoint.get("validate", "/validate").addSuccess(ConfigValidationResponse).addError(ApiError))
81
+ .add(HttpApiEndpoint.post("save", "/save").setPayload(ConfigSavePayload).addSuccess(Schema.String).addError(ApiError))
82
+ .add(HttpApiEndpoint.post("reset", "/reset").addSuccess(ConfigResetResponse).addError(ApiError))
58
83
  .prefix("/api/config") {
59
84
  }
60
85
  // Accounts endpoints
@@ -62,11 +87,33 @@ export class AccountsGroup extends HttpApiGroup.make("accounts")
62
87
  .add(HttpApiEndpoint.get("list", "/").addSuccess(Schema.Chunk(Account)))
63
88
  .prefix("/api/accounts") {
64
89
  }
90
+ // Notifications endpoints
91
+ export const NotificationItemResponse = Schema.Struct({
92
+ type: Schema.Literal("error", "info", "warning", "success"),
93
+ title: Schema.String,
94
+ message: Schema.String,
95
+ timestamp: Schema.String,
96
+ profile: Schema.optional(Schema.String)
97
+ });
98
+ export class NotificationsGroup extends HttpApiGroup.make("notifications")
99
+ .add(HttpApiEndpoint.get("list", "/").addSuccess(Schema.Array(NotificationItemResponse)))
100
+ .add(HttpApiEndpoint.post("clear", "/clear").addSuccess(Schema.String))
101
+ .add(HttpApiEndpoint.post("ssoLogin", "/sso-login")
102
+ .setPayload(Schema.Struct({ profile: AwsProfileName }))
103
+ .addSuccess(Schema.String)
104
+ .addError(ApiError))
105
+ .add(HttpApiEndpoint.post("ssoLogout", "/sso-logout")
106
+ .setPayload(Schema.Struct({ profile: Schema.String }))
107
+ .addSuccess(Schema.String)
108
+ .addError(ApiError))
109
+ .prefix("/api/notifications") {
110
+ }
65
111
  // Combined API
66
112
  export class CodeCommitApi extends HttpApi.make("CodeCommitApi")
67
113
  .add(PrsGroup)
68
114
  .add(EventsGroup)
69
115
  .add(ConfigGroup)
70
- .add(AccountsGroup) {
116
+ .add(AccountsGroup)
117
+ .add(NotificationsGroup) {
71
118
  }
72
119
  //# sourceMappingURL=Api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/server/Api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/server/Api.ts"],"names":[],"mappings":"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"}
@@ -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;AAgJtC,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":"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"}
@@ -4,7 +4,7 @@ import { AwsClient, AwsClientConfig, ConfigService, NotificationsService, PRServ
4
4
  import { Effect, Layer } from "effect";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { CodeCommitApi } from "./Api.js";
7
- import { AccountsLive, ConfigLive, EventsLive, PrsLive } from "./handlers/index.js";
7
+ import { AccountsLive, ConfigLive, EventsLive, NotificationsLive, PrsLive } from "./handlers/index.js";
8
8
  // MIME types for common files
9
9
  const mimeTypes = {
10
10
  ".html": "text/html",
@@ -61,18 +61,20 @@ const serveStatic = Effect.gen(function* () {
61
61
  return HttpServerResponse.text("Not Found", { status: 404 });
62
62
  });
63
63
  // API handlers layer
64
- const HandlersLive = Layer.mergeAll(PrsLive, ConfigLive, AccountsLive, EventsLive);
64
+ const HandlersLive = Layer.mergeAll(PrsLive, ConfigLive, AccountsLive, EventsLive, NotificationsLive);
65
65
  // Platform dependencies
66
66
  const PlatformLive = Layer.mergeAll(Path.layer, BunFileSystem.layer, FetchHttpClient.layer);
67
67
  // Base services - ConfigService needs Platform
68
68
  const ConfigLive_ = ConfigService.ConfigServiceLive.pipe(Layer.provide(PlatformLive));
69
+ // NotificationsService — single shared instance
70
+ const NotificationsLive_ = NotificationsService.NotificationsServiceLive;
69
71
  // PRService dependencies
70
- const PRServiceDeps = Layer.mergeAll(AwsClient.AwsClientLive, NotificationsService.NotificationsServiceLive).pipe(Layer.provideMerge(ConfigLive_), Layer.provide(AwsClientConfig.Default), Layer.provide(PlatformLive));
71
- // PRService with all dependencies
72
- const PRServiceLive_ = PRService.PRServiceLive.pipe(Layer.provide(PRServiceDeps));
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
74
+ const PRServiceLive_ = PRService.PRServiceLive.pipe(Layer.provideMerge(PRServiceDeps));
73
75
  // AwsClient for handlers that call AWS directly (e.g., createPR)
74
76
  const AwsClientLive_ = AwsClient.AwsClientLive.pipe(Layer.provide(FetchHttpClient.layer), Layer.provide(AwsClientConfig.Default));
75
- // All services needed by handlers
77
+ // All services needed by handlers — NotificationsService flows through PRServiceDeps via provideMerge
76
78
  const AllServicesLive = Layer.mergeAll(PRServiceLive_, ConfigLive_, AwsClientLive_);
77
79
  // Fork initial PR refresh when services are built
78
80
  const InitialRefresh = Layer.effectDiscard(Effect.gen(function* () {
@@ -87,8 +89,7 @@ const StaticRouter = HttpLayerRouter.use((router) => router.add("GET", "/*", ser
87
89
  const AllRoutes = Layer.mergeAll(ApiLive, StaticRouter).pipe(Layer.provide(HttpLayerRouter.cors({
88
90
  allowedOrigins: ["*"],
89
91
  allowedMethods: ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"],
90
- allowedHeaders: ["Content-Type", "Authorization"],
91
- credentials: true
92
+ allowedHeaders: ["Content-Type", "Authorization"]
92
93
  })));
93
94
  export const makeServer = (options) => HttpLayerRouter.serve(AllRoutes).pipe(Layer.provide(BunHttpServer.layer({ ...options, idleTimeout: 255 })), Layer.provide(BunContext.layer));
94
95
  export const makeCodeCommitServer = (port) => makeServer({ port });
@@ -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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"}
@@ -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;AAIjE,eAAO,MAAM,UAAU,qKAqBlB,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,qKA+ElB,CAAA"}
@@ -1,11 +1,13 @@
1
- import { HttpApiBuilder } from "@effect/platform";
1
+ import { FileSystem, HttpApiBuilder } from "@effect/platform";
2
2
  import { ConfigService, PRService } from "@knpkv/codecommit-core";
3
- import { Effect, SubscriptionRef } from "effect";
4
- import { CodeCommitApi } from "../Api.js";
3
+ import { AwsProfileName, AwsRegion } from "@knpkv/codecommit-core/Domain.js";
4
+ import { Effect, Schema, SubscriptionRef } from "effect";
5
+ import { ApiError, CodeCommitApi } from "../Api.js";
5
6
  export const ConfigLive = HttpApiBuilder.group(CodeCommitApi, "config", (handlers) => Effect.gen(function* () {
6
7
  const configService = yield* ConfigService.ConfigService;
7
8
  const prService = yield* PRService.PRService;
8
- return handlers.handle("list", () => Effect.gen(function* () {
9
+ return handlers
10
+ .handle("list", () => Effect.gen(function* () {
9
11
  const config = yield* configService.load.pipe(Effect.catchAll(() => Effect.succeed({ accounts: [], autoDetect: true })));
10
12
  const state = yield* SubscriptionRef.get(prService.state);
11
13
  return {
@@ -17,6 +19,48 @@ export const ConfigLive = HttpApiBuilder.group(CodeCommitApi, "config", (handler
17
19
  autoDetect: config.autoDetect,
18
20
  currentUser: state.currentUser
19
21
  };
22
+ }))
23
+ .handle("path", () => Effect.gen(function* () {
24
+ const fs = yield* FileSystem.FileSystem;
25
+ const path = yield* configService.getConfigPath.pipe(Effect.catchAll((e) => Effect.fail(new ApiError({ message: e.message }))));
26
+ const exists = yield* fs.exists(path).pipe(Effect.catchAll(() => Effect.succeed(false)));
27
+ return { path, exists };
28
+ }).pipe(Effect.catchTag("ApiError", Effect.fail)))
29
+ .handle("validate", () => Effect.gen(function* () {
30
+ const result = yield* configService.validate.pipe(Effect.catchAll((e) => Effect.fail(new ApiError({ message: e.message }))));
31
+ return { status: result.status, path: result.path, errors: result.errors };
32
+ }).pipe(Effect.catchTag("ApiError", Effect.fail)))
33
+ .handle("save", ({ payload }) => Effect.gen(function* () {
34
+ const decodeProfile = Schema.decodeSync(AwsProfileName);
35
+ const decodeRegion = Schema.decodeSync(AwsRegion);
36
+ 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));
45
+ return "ok";
46
+ }))
47
+ .handle("reset", () => Effect.gen(function* () {
48
+ 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));
51
+ const state = yield* SubscriptionRef.get(prService.state);
52
+ return {
53
+ backupPath,
54
+ config: {
55
+ accounts: config.accounts.map((a) => ({
56
+ profile: a.profile,
57
+ regions: a.regions,
58
+ enabled: a.enabled
59
+ })),
60
+ autoDetect: config.autoDetect,
61
+ currentUser: state.currentUser
62
+ }
63
+ };
20
64
  }));
21
65
  }));
22
66
  //# 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,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,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,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAClC,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,CAAA;AACP,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 { PRService } from "@knpkv/codecommit-core";
2
- export declare const EventsLive: import("effect/Layer").Layer<import("@effect/platform/HttpApiGroup").ApiGroup<"CodeCommitApi", "events">, never, PRService.PRService>;
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>;
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,SAAS,EAAE,MAAM,wBAAwB,CAAA;AA+BlD,eAAO,MAAM,UAAU,uIA8BlB,CAAA"}
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,8 +1,8 @@
1
1
  import { HttpApiBuilder, HttpServerResponse } from "@effect/platform";
2
- import { PRService } from "@knpkv/codecommit-core";
2
+ import { NotificationsService, PRService } from "@knpkv/codecommit-core";
3
3
  import { AppStatus, PullRequest } from "@knpkv/codecommit-core/Domain.js";
4
- import { Duration, Effect, Schedule, Schema, Stream } from "effect";
5
- import { CodeCommitApi } from "../Api.js";
4
+ import { Duration, Effect, Schedule, Schema, Stream, SubscriptionRef } from "effect";
5
+ import { CodeCommitApi, NotificationItemResponse } from "../Api.js";
6
6
  const AccountState = Schema.Struct({
7
7
  profile: Schema.String,
8
8
  region: Schema.String,
@@ -15,7 +15,8 @@ const SsePayload = Schema.Struct({
15
15
  statusDetail: Schema.optional(Schema.String),
16
16
  error: Schema.optional(Schema.String),
17
17
  lastUpdated: Schema.optional(Schema.DateFromSelf),
18
- currentUser: Schema.optional(Schema.String)
18
+ currentUser: Schema.optional(Schema.String),
19
+ notifications: Schema.Array(NotificationItemResponse)
19
20
  });
20
21
  const encode = Schema.encode(SsePayload);
21
22
  const encoder = new TextEncoder();
@@ -23,7 +24,24 @@ const encoder = new TextEncoder();
23
24
  const keepalive = Stream.schedule(Stream.succeed(encoder.encode(":\n\n")), Schedule.spaced(Duration.seconds(30)));
24
25
  export const EventsLive = HttpApiBuilder.group(CodeCommitApi, "events", (handlers) => Effect.gen(function* () {
25
26
  const prService = yield* PRService.PRService;
26
- const stateStream = prService.state.changes.pipe(Stream.mapEffect((state) => encode(state).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")))))));
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")))))));
27
45
  return handlers.handleRaw("stream", () => Effect.succeed(HttpServerResponse.stream(Stream.merge(stateStream, keepalive), {
28
46
  headers: {
29
47
  "content-type": "text/event-stream",
@@ -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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"}
@@ -1,5 +1,6 @@
1
1
  export { AccountsLive } from "./accounts-live.js";
2
2
  export { ConfigLive } from "./config-live.js";
3
3
  export { EventsLive } from "./events-live.js";
4
+ export { NotificationsLive } from "./notifications-live.js";
4
5
  export { PrsLive } from "./prs-live.js";
5
6
  //# 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,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"}
@@ -1,5 +1,6 @@
1
1
  export { AccountsLive } from "./accounts-live.js";
2
2
  export { ConfigLive } from "./config-live.js";
3
3
  export { EventsLive } from "./events-live.js";
4
+ export { NotificationsLive } from "./notifications-live.js";
4
5
  export { PrsLive } from "./prs-live.js";
5
6
  //# 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,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"}
@@ -0,0 +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>;
3
+ //# sourceMappingURL=notifications-live.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,65 @@
1
+ import { Command, HttpApiBuilder } from "@effect/platform";
2
+ import { NotificationsService } from "@knpkv/codecommit-core";
3
+ import { Duration, Effect, SubscriptionRef } from "effect";
4
+ import { ApiError, CodeCommitApi } from "../Api.js";
5
+ // Limit concurrent SSO commands to 1
6
+ const ssoSemaphore = Effect.unsafeMakeSemaphore(1);
7
+ const SSO_TIMEOUT = Duration.minutes(3);
8
+ export const NotificationsLive = HttpApiBuilder.group(CodeCommitApi, "notifications", (handlers) => Effect.gen(function* () {
9
+ const notificationsService = yield* NotificationsService.NotificationsService;
10
+ return handlers
11
+ .handle("list", () => Effect.gen(function* () {
12
+ const state = yield* SubscriptionRef.get(notificationsService.state);
13
+ return state.items.map((item) => ({
14
+ type: item.type,
15
+ title: item.title,
16
+ message: item.message,
17
+ timestamp: item.timestamp.toISOString(),
18
+ ...(item.profile ? { profile: item.profile } : {})
19
+ }));
20
+ }))
21
+ .handle("clear", () => Effect.gen(function* () {
22
+ yield* notificationsService.clear;
23
+ return "ok";
24
+ }))
25
+ .handle("ssoLogin", ({ payload }) => Effect.gen(function* () {
26
+ yield* notificationsService.add({
27
+ type: "info",
28
+ title: payload.profile,
29
+ message: `Starting SSO login for ${payload.profile}...`,
30
+ profile: payload.profile
31
+ });
32
+ const cmd = Command.make("aws", "sso", "login", "--profile", payload.profile).pipe(Command.stdout("inherit"), Command.stderr("inherit"));
33
+ yield* Effect.forkDaemon(ssoSemaphore.withPermits(1)(Command.exitCode(cmd).pipe(Effect.timeout(SSO_TIMEOUT), Effect.tap(() => notificationsService.add({
34
+ type: "success",
35
+ title: payload.profile,
36
+ message: `SSO login successful for ${payload.profile}`,
37
+ profile: payload.profile
38
+ })), Effect.catchAll((e) => notificationsService.add({
39
+ type: "error",
40
+ title: "SSO Login Failed",
41
+ message: e instanceof Error ? e.message : String(e),
42
+ profile: payload.profile
43
+ })))));
44
+ return "ok";
45
+ }).pipe(Effect.mapError(() => new ApiError({ message: "Failed to start SSO login" }))))
46
+ .handle("ssoLogout", () => Effect.gen(function* () {
47
+ yield* notificationsService.add({
48
+ type: "info",
49
+ title: "SSO Logout",
50
+ message: "Logging out all SSO sessions..."
51
+ });
52
+ const cmd = Command.make("aws", "sso", "logout").pipe(Command.stdout("inherit"), Command.stderr("inherit"));
53
+ yield* Effect.forkDaemon(ssoSemaphore.withPermits(1)(Command.exitCode(cmd).pipe(Effect.timeout(SSO_TIMEOUT), Effect.tap(() => notificationsService.add({
54
+ type: "success",
55
+ title: "SSO Logout",
56
+ message: "All SSO sessions logged out"
57
+ })), Effect.catchAll((e) => notificationsService.add({
58
+ type: "error",
59
+ title: "SSO Logout Failed",
60
+ message: e instanceof Error ? e.message : String(e)
61
+ })))));
62
+ return "ok";
63
+ }).pipe(Effect.mapError(() => new ApiError({ message: "Failed to start SSO logout" }))));
64
+ }));
65
+ //# sourceMappingURL=notifications-live.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-live.js","sourceRoot":"","sources":["../../../src/server/handlers/notifications-live.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knpkv/codecommit-web",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Web server and frontend for CodeCommit PR browser",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -34,7 +34,7 @@
34
34
  "tailwind-merge": "^3.4.0",
35
35
  "tailwindcss": "^4.1.18",
36
36
  "tw-animate-css": "^1.4.0",
37
- "@knpkv/codecommit-core": "^0.2.0"
37
+ "@knpkv/codecommit-core": "^0.3.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@effect/vitest": "latest",