@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.
- package/dist/client/assets/index-B2Y18oI5.css +1 -0
- package/dist/client/assets/index-CuXt1AzC.js +348 -0
- package/dist/client/index.html +2 -2
- package/dist/server/Api.d.ts +47 -2
- package/dist/server/Api.d.ts.map +1 -1
- package/dist/server/Api.js +49 -2
- package/dist/server/Api.js.map +1 -1
- package/dist/server/Server.d.ts.map +1 -1
- package/dist/server/Server.js +9 -8
- package/dist/server/Server.js.map +1 -1
- package/dist/server/handlers/config-live.d.ts.map +1 -1
- package/dist/server/handlers/config-live.js +48 -4
- package/dist/server/handlers/config-live.js.map +1 -1
- package/dist/server/handlers/events-live.d.ts +2 -2
- package/dist/server/handlers/events-live.d.ts.map +1 -1
- package/dist/server/handlers/events-live.js +23 -5
- package/dist/server/handlers/events-live.js.map +1 -1
- package/dist/server/handlers/index.d.ts +1 -0
- package/dist/server/handlers/index.d.ts.map +1 -1
- package/dist/server/handlers/index.js +1 -0
- package/dist/server/handlers/index.js.map +1 -1
- package/dist/server/handlers/notifications-live.d.ts +3 -0
- package/dist/server/handlers/notifications-live.d.ts.map +1 -0
- package/dist/server/handlers/notifications-live.js +65 -0
- package/dist/server/handlers/notifications-live.js.map +1 -0
- package/package.json +2 -2
- package/dist/client/assets/index-9fIdCzWC.css +0 -1
- package/dist/client/assets/index-CR6OSddv.js +0 -263
package/dist/client/index.html
CHANGED
|
@@ -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-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
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>
|
package/dist/server/Api.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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 {};
|
package/dist/server/Api.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/server/Api.js
CHANGED
|
@@ -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
|
package/dist/server/Api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/server/Api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/server/Api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9G,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,iDAAiD;AACjD,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,WAAW,EAAY,CAAC,UAAU,EAAE;IACvE,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,eAAe;AACf,MAAM,OAAO,QAAS,SAAQ,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;KACnD,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;KAC3E,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC1E,GAAG,CACF,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;KAChC,UAAU,CACT,MAAM,CAAC,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC,MAAM;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC,MAAM;IAC3B,iBAAiB,EAAE,MAAM,CAAC,MAAM;IAChC,OAAO,EAAE,OAAO;CACjB,CAAC,CACH;KACA,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;KACzB,QAAQ,CAAC,QAAQ,CAAC,CACtB;KACA,GAAG,CACF,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;KAClC,UAAU,CACT,MAAM,CAAC,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM;CACpB,CAAC,CACH;KACA,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;KACzB,QAAQ,CAAC,QAAQ,CAAC,CACtB;KACA,GAAG,CACF,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;KAC1C,UAAU,CACT,MAAM,CAAC,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC,MAAM;IAC5B,cAAc,EAAE,MAAM,CAAC,MAAM;IAC7B,OAAO,EAAE,OAAO;CACjB,CAAC,CACH;KACA,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;KAC/C,QAAQ,CAAC,QAAQ,CAAC,CACtB;KACA,MAAM,CAAC,UAAU,CAAC;CACnB;AAEF,aAAa;AACb,MAAM,OAAO,WAAY,SAAQ,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;KACzD,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACjE,MAAM,CAAC,aAAa,CAAC;CACtB;AAEF,mBAAmB;AACnB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC,KAAK,CACpB,MAAM,CAAC,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CACH;IACD,UAAU,EAAE,MAAM,CAAC,OAAO;IAC1B,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CAC5C,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,MAAM,EAAE,MAAM,CAAC,OAAO;CACvB,CAAC,CAAA;AAEF,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC;IACvD,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;CACpC,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC,KAAK,CACpB,MAAM,CAAC,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CACH;IACD,UAAU,EAAE,MAAM,CAAC,OAAO;CAC3B,CAAC,CAAA;AAEF,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,cAAc;CACvB,CAAC,CAAA;AAEF,MAAM,OAAO,WAAY,SAAQ,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;KACzD,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;KAChE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAC3F,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACzG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACrH,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAC/F,MAAM,CAAC,aAAa,CAAC;CACtB;AAEF,qBAAqB;AACrB,MAAM,OAAO,aAAc,SAAQ,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;KAC7D,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACvE,MAAM,CAAC,eAAe,CAAC;CACxB;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;IAC3D,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CACxC,CAAC,CAAA;AAEF,MAAM,OAAO,kBAAmB,SAAQ,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;KACvE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;KACxF,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACtE,GAAG,CACF,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;KAC3C,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;KACtD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;KACzB,QAAQ,CAAC,QAAQ,CAAC,CACtB;KACA,GAAG,CACF,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;KAC7C,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;KACrD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;KACzB,QAAQ,CAAC,QAAQ,CAAC,CACtB;KACA,MAAM,CAAC,oBAAoB,CAAC;CAC7B;AAEF,eAAe;AACf,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;KAC7D,GAAG,CAAC,QAAQ,CAAC;KACb,GAAG,CAAC,WAAW,CAAC;KAChB,GAAG,CAAC,WAAW,CAAC;KAChB,GAAG,CAAC,aAAa,CAAC;KAClB,GAAG,CAAC,kBAAkB,CAAC;CACxB"}
|
|
@@ -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;
|
|
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"}
|
package/dist/server/Server.js
CHANGED
|
@@ -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
|
|
71
|
-
// PRService with all dependencies
|
|
72
|
-
const PRServiceLive_ = PRService.PRServiceLive.pipe(Layer.
|
|
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":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,IAAI,EACL,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACnH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
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;
|
|
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 {
|
|
4
|
-
import {
|
|
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
|
|
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;
|
|
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;
|
|
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
|
|
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":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;
|
|
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.
|
|
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.
|
|
37
|
+
"@knpkv/codecommit-core": "^0.3.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@effect/vitest": "latest",
|