@knpkv/codecommit-core 0.5.0 → 0.6.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/AwsClient/AwsClientGated.d.ts +27 -0
- package/dist/AwsClient/AwsClientGated.d.ts.map +1 -0
- package/dist/AwsClient/AwsClientGated.js +105 -0
- package/dist/AwsClient/AwsClientGated.js.map +1 -0
- package/dist/AwsClient/getDifferences.d.ts +16 -0
- package/dist/AwsClient/getDifferences.d.ts.map +1 -0
- package/dist/AwsClient/getDifferences.js +22 -0
- package/dist/AwsClient/getDifferences.js.map +1 -0
- package/dist/AwsClient/getPullRequest.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequest.js +26 -5
- package/dist/AwsClient/getPullRequest.js.map +1 -1
- package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequests.js +29 -11
- package/dist/AwsClient/getPullRequests.js.map +1 -1
- package/dist/AwsClient/index.d.ts +21 -13
- package/dist/AwsClient/index.d.ts.map +1 -1
- package/dist/AwsClient/index.js +3 -1
- package/dist/AwsClient/index.js.map +1 -1
- package/dist/AwsClient/internal.d.ts +23 -0
- package/dist/AwsClient/internal.d.ts.map +1 -1
- package/dist/AwsClient/internal.js +4 -1
- package/dist/AwsClient/internal.js.map +1 -1
- package/dist/CacheService/Database.d.ts.map +1 -1
- package/dist/CacheService/Database.js +13 -1
- package/dist/CacheService/Database.js.map +1 -1
- package/dist/CacheService/EventsHub.d.ts +44 -4
- package/dist/CacheService/EventsHub.d.ts.map +1 -1
- package/dist/CacheService/EventsHub.js.map +1 -1
- package/dist/CacheService/index.d.ts +3 -2
- package/dist/CacheService/index.d.ts.map +1 -1
- package/dist/CacheService/index.js +2 -1
- package/dist/CacheService/index.js.map +1 -1
- package/dist/CacheService/migrations/0007_stats_columns.d.ts +5 -0
- package/dist/CacheService/migrations/0007_stats_columns.d.ts.map +1 -0
- package/dist/CacheService/migrations/0007_stats_columns.js +13 -0
- package/dist/CacheService/migrations/0007_stats_columns.js.map +1 -0
- package/dist/CacheService/migrations/0008_merged_by.d.ts +5 -0
- package/dist/CacheService/migrations/0008_merged_by.d.ts.map +1 -0
- package/dist/CacheService/migrations/0008_merged_by.js +4 -0
- package/dist/CacheService/migrations/0008_merged_by.js.map +1 -0
- package/dist/CacheService/migrations/0009_approved_by.d.ts +5 -0
- package/dist/CacheService/migrations/0009_approved_by.d.ts.map +1 -0
- package/dist/CacheService/migrations/0009_approved_by.js +4 -0
- package/dist/CacheService/migrations/0009_approved_by.js.map +1 -0
- package/dist/CacheService/migrations/0010_commented_by.d.ts +5 -0
- package/dist/CacheService/migrations/0010_commented_by.d.ts.map +1 -0
- package/dist/CacheService/migrations/0010_commented_by.js +4 -0
- package/dist/CacheService/migrations/0010_commented_by.js.map +1 -0
- package/dist/CacheService/migrations/0011_audit_log.d.ts +5 -0
- package/dist/CacheService/migrations/0011_audit_log.d.ts.map +1 -0
- package/dist/CacheService/migrations/0011_audit_log.js +19 -0
- package/dist/CacheService/migrations/0011_audit_log.js.map +1 -0
- package/dist/CacheService/migrations/0012_audit_log_indexes.d.ts +5 -0
- package/dist/CacheService/migrations/0012_audit_log_indexes.d.ts.map +1 -0
- package/dist/CacheService/migrations/0012_audit_log_indexes.js +7 -0
- package/dist/CacheService/migrations/0012_audit_log_indexes.js.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/index.d.ts +132 -0
- package/dist/CacheService/repos/PullRequestRepo/index.d.ts.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/index.js +35 -0
- package/dist/CacheService/repos/PullRequestRepo/index.js.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/internal.d.ts +72 -0
- package/dist/CacheService/repos/PullRequestRepo/internal.d.ts.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/internal.js +69 -0
- package/dist/CacheService/repos/PullRequestRepo/internal.js.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/mutations.d.ts +24 -0
- package/dist/CacheService/repos/PullRequestRepo/mutations.d.ts.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/mutations.js +94 -0
- package/dist/CacheService/repos/PullRequestRepo/mutations.js.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/queries.d.ts +113 -0
- package/dist/CacheService/repos/PullRequestRepo/queries.d.ts.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/queries.js +89 -0
- package/dist/CacheService/repos/PullRequestRepo/queries.js.map +1 -0
- package/dist/CacheService/repos/StatsRepo/index.d.ts +93 -0
- package/dist/CacheService/repos/StatsRepo/index.d.ts.map +1 -0
- package/dist/CacheService/repos/StatsRepo/index.js +41 -0
- package/dist/CacheService/repos/StatsRepo/index.js.map +1 -0
- package/dist/CacheService/repos/StatsRepo/internal.d.ts +120 -0
- package/dist/CacheService/repos/StatsRepo/internal.d.ts.map +1 -0
- package/dist/CacheService/repos/StatsRepo/internal.js +34 -0
- package/dist/CacheService/repos/StatsRepo/internal.js.map +1 -0
- package/dist/CacheService/repos/StatsRepo/queries.d.ts +42 -0
- package/dist/CacheService/repos/StatsRepo/queries.d.ts.map +1 -0
- package/dist/CacheService/repos/StatsRepo/queries.js +182 -0
- package/dist/CacheService/repos/StatsRepo/queries.js.map +1 -0
- package/dist/CacheService/repos/StatsRepo/reviewerData.d.ts +47 -0
- package/dist/CacheService/repos/StatsRepo/reviewerData.d.ts.map +1 -0
- package/dist/CacheService/repos/StatsRepo/reviewerData.js +172 -0
- package/dist/CacheService/repos/StatsRepo/reviewerData.js.map +1 -0
- package/dist/DateUtils.d.ts +28 -0
- package/dist/DateUtils.d.ts.map +1 -1
- package/dist/DateUtils.js +69 -1
- package/dist/DateUtils.js.map +1 -1
- package/dist/Domain.d.ts +13 -3
- package/dist/Domain.d.ts.map +1 -1
- package/dist/Domain.js +6 -5
- package/dist/Domain.js.map +1 -1
- package/dist/Errors.d.ts +14 -1
- package/dist/Errors.d.ts.map +1 -1
- package/dist/Errors.js +10 -0
- package/dist/Errors.js.map +1 -1
- package/dist/PRService/index.d.ts +3 -3
- package/dist/PRService/index.d.ts.map +1 -1
- package/dist/PRService/index.js +1 -1
- package/dist/PRService/index.js.map +1 -1
- package/dist/PRService/internal.d.ts +24 -2
- package/dist/PRService/internal.d.ts.map +1 -1
- package/dist/PRService/internal.js +23 -8
- package/dist/PRService/internal.js.map +1 -1
- package/dist/PRService/refresh.d.ts +1 -1
- package/dist/PRService/refresh.d.ts.map +1 -1
- package/dist/PRService/refresh.js +2 -0
- package/dist/PRService/refresh.js.map +1 -1
- package/dist/PRService/refreshDiffs.d.ts +16 -0
- package/dist/PRService/refreshDiffs.d.ts.map +1 -0
- package/dist/PRService/refreshDiffs.js +54 -0
- package/dist/PRService/refreshDiffs.js.map +1 -0
- package/dist/PRService/refreshEnrich.d.ts +1 -1
- package/dist/PRService/refreshEnrich.d.ts.map +1 -1
- package/dist/PRService/refreshEnrich.js +3 -1
- package/dist/PRService/refreshEnrich.js.map +1 -1
- package/dist/PRService/refreshFetch.d.ts +1 -1
- package/dist/PRService/refreshFetch.d.ts.map +1 -1
- package/dist/PRService/refreshFetch.js +12 -3
- package/dist/PRService/refreshFetch.js.map +1 -1
- package/dist/PRService/refreshHistory.d.ts +19 -0
- package/dist/PRService/refreshHistory.d.ts.map +1 -0
- package/dist/PRService/refreshHistory.js +110 -0
- package/dist/PRService/refreshHistory.js.map +1 -0
- package/dist/PRService/refreshResolve.d.ts +1 -1
- package/dist/PRService/refreshResolve.d.ts.map +1 -1
- package/dist/PRService/refreshResolve.js +1 -1
- package/dist/PRService/refreshResolve.js.map +1 -1
- package/dist/PRService/refreshScore.d.ts +1 -1
- package/dist/PRService/refreshScore.d.ts.map +1 -1
- package/dist/PRService/refreshScore.js +1 -1
- package/dist/PRService/refreshScore.js.map +1 -1
- package/dist/PRService/refreshSinglePR.d.ts +1 -1
- package/dist/PRService/refreshSinglePR.d.ts.map +1 -1
- package/dist/PRService/refreshSinglePR.js +4 -3
- package/dist/PRService/refreshSinglePR.js.map +1 -1
- package/dist/PermissionService/AuditLog.d.ts +62 -0
- package/dist/PermissionService/AuditLog.d.ts.map +1 -0
- package/dist/PermissionService/AuditLog.js +113 -0
- package/dist/PermissionService/AuditLog.js.map +1 -0
- package/dist/PermissionService/PermissionGate.d.ts +47 -0
- package/dist/PermissionService/PermissionGate.d.ts.map +1 -0
- package/dist/PermissionService/PermissionGate.js +14 -0
- package/dist/PermissionService/PermissionGate.js.map +1 -0
- package/dist/PermissionService/PermissionGateLive.d.ts +41 -0
- package/dist/PermissionService/PermissionGateLive.d.ts.map +1 -0
- package/dist/PermissionService/PermissionGateLive.js +83 -0
- package/dist/PermissionService/PermissionGateLive.js.map +1 -0
- package/dist/PermissionService/index.d.ts +39 -0
- package/dist/PermissionService/index.d.ts.map +1 -0
- package/dist/PermissionService/index.js +87 -0
- package/dist/PermissionService/index.js.map +1 -0
- package/dist/PermissionService/operations.d.ts +40 -0
- package/dist/PermissionService/operations.d.ts.map +1 -0
- package/dist/PermissionService/operations.js +38 -0
- package/dist/PermissionService/operations.js.map +1 -0
- package/dist/StatsService/WeeklyStats.d.ts +174 -0
- package/dist/StatsService/WeeklyStats.d.ts.map +1 -0
- package/dist/StatsService/WeeklyStats.js +110 -0
- package/dist/StatsService/WeeklyStats.js.map +1 -0
- package/dist/StatsService/index.d.ts +45 -0
- package/dist/StatsService/index.d.ts.map +1 -0
- package/dist/StatsService/index.js +145 -0
- package/dist/StatsService/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/CacheService/repos/PullRequestRepo.d.ts +0 -112
- package/dist/CacheService/repos/PullRequestRepo.d.ts.map +0 -1
- package/dist/CacheService/repos/PullRequestRepo.js +0 -146
- package/dist/CacheService/repos/PullRequestRepo.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshResolve.js","sourceRoot":"","sources":["../../src/PRService/refreshResolve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"refreshResolve.js","sourceRoot":"","sources":["../../src/PRService/refreshResolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Phase 5: Calculate and store health scores.
|
|
4
4
|
*/
|
|
5
5
|
import { Effect } from "effect";
|
|
6
|
-
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo.js";
|
|
6
|
+
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo/index.js";
|
|
7
7
|
import { type PRState } from "./internal.js";
|
|
8
8
|
export declare const calculateHealthScores: (state: PRState) => Effect.Effect<void, never, PullRequestRepo>;
|
|
9
9
|
//# sourceMappingURL=refreshScore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshScore.d.ts","sourceRoot":"","sources":["../../src/PRService/refreshScore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmB,MAAM,EAAmB,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"refreshScore.d.ts","sourceRoot":"","sources":["../../src/PRService/refreshScore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmB,MAAM,EAAmB,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAA;AAEhF,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5D,eAAO,MAAM,qBAAqB,GAChC,OAAO,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,eAAe,CAuBzC,CAAA"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Phase 5: Calculate and store health scores.
|
|
4
4
|
*/
|
|
5
5
|
import { Clock, DateTime, Effect, SubscriptionRef } from "effect";
|
|
6
|
-
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo.js";
|
|
6
|
+
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo/index.js";
|
|
7
7
|
import { scoreTotalOr } from "../HealthScore.js";
|
|
8
8
|
import { decodeCachedPR } from "./internal.js";
|
|
9
9
|
export const calculateHealthScores = (state) => Effect.gen(function* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshScore.js","sourceRoot":"","sources":["../../src/PRService/refreshScore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"refreshScore.js","sourceRoot":"","sources":["../../src/PRService/refreshScore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAgB,MAAM,eAAe,CAAA;AAE5D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAc,EAC+B,EAAE,CAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IAErC,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,GAAG,CAAC;QACJ,YAAY,EAAE,2BAA2B;KAC1C,CAAC,CAAC,CAAA;IAEH,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzF,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAA;IACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;IACjE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,SAAS,EACT,CAAC,GAAG,EAAE,EAAE;QACN,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC3C,OAAO,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,IAAI,CACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CACnC,CAAA;IACH,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -5,7 +5,7 @@ import { Effect } from "effect";
|
|
|
5
5
|
import { AwsClient } from "../AwsClient/index.js";
|
|
6
6
|
import { CommentRepo } from "../CacheService/repos/CommentRepo.js";
|
|
7
7
|
import { NotificationRepo } from "../CacheService/repos/NotificationRepo.js";
|
|
8
|
-
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo.js";
|
|
8
|
+
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo/index.js";
|
|
9
9
|
import { SubscriptionRepo } from "../CacheService/repos/SubscriptionRepo.js";
|
|
10
10
|
import { ConfigService } from "../ConfigService/index.js";
|
|
11
11
|
import { type PRState } from "./internal.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshSinglePR.d.ts","sourceRoot":"","sources":["../../src/PRService/refreshSinglePR.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAS,MAAM,EAA2B,MAAM,QAAQ,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"refreshSinglePR.d.ts","sourceRoot":"","sources":["../../src/PRService/refreshSinglePR.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAS,MAAM,EAA2B,MAAM,QAAQ,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAA;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAA;AAqB9D,eAAO,MAAM,mBAAmB,GAC9B,OAAO,OAAO,wNAsGV,CAAA"}
|
|
@@ -6,9 +6,10 @@ import { AwsClient } from "../AwsClient/index.js";
|
|
|
6
6
|
import { diffComments, diffPR } from "../CacheService/diff.js";
|
|
7
7
|
import { CommentRepo } from "../CacheService/repos/CommentRepo.js";
|
|
8
8
|
import { NotificationRepo } from "../CacheService/repos/NotificationRepo.js";
|
|
9
|
-
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo.js";
|
|
9
|
+
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo/index.js";
|
|
10
10
|
import { SubscriptionRepo } from "../CacheService/repos/SubscriptionRepo.js";
|
|
11
11
|
import { ConfigService } from "../ConfigService/index.js";
|
|
12
|
+
import { codecommitConsoleUrl } from "../Domain.js";
|
|
12
13
|
import { countAllComments } from "./internal.js";
|
|
13
14
|
/** Resolve profile/region from any cached PR with matching awsAccountId, or from config */
|
|
14
15
|
const resolveAccountFromCache = (prRepo, awsAccountId) => Effect.gen(function* () {
|
|
@@ -77,8 +78,8 @@ export const makeRefreshSinglePR = (state) => Effect.fn("PRService.refreshSingle
|
|
|
77
78
|
isMergeable: cached ? (cached.isMergeable ? 1 : 0) : detail.status === "MERGED" ? 1 : 0,
|
|
78
79
|
isApproved: cached ? (cached.isApproved ? 1 : 0) : detail.status === "MERGED" ? 1 : 0,
|
|
79
80
|
commentCount: countAllComments(locs),
|
|
80
|
-
link: cached?.link ?? pr?.link
|
|
81
|
-
|
|
81
|
+
link: cached?.link ?? pr?.link ?? codecommitConsoleUrl(account.region, detail.repositoryName, prId),
|
|
82
|
+
approvedBy: cached?.approvedBy ?? []
|
|
82
83
|
};
|
|
83
84
|
// Diff for subscribed PRs
|
|
84
85
|
const isSubscribed = yield* subscriptionRepo.isSubscribed(awsAccountId, prId).pipe(Effect.catchAll(() => Effect.succeed(false)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshSinglePR.js","sourceRoot":"","sources":["../../src/PRService/refreshSinglePR.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"refreshSinglePR.js","sourceRoot":"","sources":["../../src/PRService/refreshSinglePR.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title AuditLogRepo — records every AWS API call
|
|
3
|
+
*
|
|
4
|
+
* Every call through the permission gate gets recorded — allowed, denied,
|
|
5
|
+
* or timed out.
|
|
6
|
+
*
|
|
7
|
+
* Design constraints:
|
|
8
|
+
* - MUST never block API calls (catchAll on write failures at call site)
|
|
9
|
+
* - MUST handle high volume (~17 ops per refresh × every 5min)
|
|
10
|
+
* - MUST auto-prune (150k entries/month without pruning)
|
|
11
|
+
* - MUST support filtered queries (for the audit log UI page)
|
|
12
|
+
*
|
|
13
|
+
* `durationMs` is null when the API call was denied/timed out (never ran).
|
|
14
|
+
* When present, it reflects actual AWS API latency — not permission prompt wait.
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*/
|
|
18
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
|
19
|
+
import { Effect, Schema } from "effect";
|
|
20
|
+
import { CacheError } from "../CacheService/CacheError.js";
|
|
21
|
+
export declare const AuditLogEntry: Schema.Struct<{
|
|
22
|
+
id: typeof Schema.Number;
|
|
23
|
+
timestamp: typeof Schema.String;
|
|
24
|
+
operation: typeof Schema.String;
|
|
25
|
+
accountProfile: typeof Schema.String;
|
|
26
|
+
region: typeof Schema.String;
|
|
27
|
+
permissionState: Schema.Literal<["allowed", "always_allowed", "denied", "timed_out"]>;
|
|
28
|
+
context: typeof Schema.String;
|
|
29
|
+
durationMs: Schema.NullOr<typeof Schema.Number>;
|
|
30
|
+
}>;
|
|
31
|
+
export type AuditLogEntry = typeof AuditLogEntry.Type;
|
|
32
|
+
export type NewAuditLogEntry = Omit<AuditLogEntry, "id">;
|
|
33
|
+
export interface PaginatedAuditLog {
|
|
34
|
+
readonly items: ReadonlyArray<AuditLogEntry>;
|
|
35
|
+
readonly total: number;
|
|
36
|
+
readonly nextCursor?: number;
|
|
37
|
+
}
|
|
38
|
+
declare const AuditLogRepo_base: Effect.Service.Class<AuditLogRepo, "AuditLogRepo", {
|
|
39
|
+
readonly dependencies: readonly [import("effect/Layer").Layer<SqlClient.SqlClient | import("@effect/sql-libsql/LibsqlClient").LibsqlClient, import("@effect/sql/SqlError").SqlError | import("effect/ConfigError").ConfigError | import("@effect/sql/Migrator").MigrationError, import("@effect/platform/FileSystem").FileSystem>];
|
|
40
|
+
readonly effect: Effect.Effect<{
|
|
41
|
+
log: (entry: NewAuditLogEntry) => Effect.Effect<void, CacheError, never>;
|
|
42
|
+
findAll: (opts?: {
|
|
43
|
+
readonly limit?: number | undefined;
|
|
44
|
+
readonly offset?: number | undefined;
|
|
45
|
+
readonly operation?: string | undefined;
|
|
46
|
+
readonly accountProfile?: string | undefined;
|
|
47
|
+
readonly permissionState?: string | undefined;
|
|
48
|
+
readonly from?: string | undefined;
|
|
49
|
+
readonly to?: string | undefined;
|
|
50
|
+
readonly search?: string | undefined;
|
|
51
|
+
}) => Effect.Effect<PaginatedAuditLog, CacheError>;
|
|
52
|
+
prune: (retentionDays: number) => Effect.Effect<number, CacheError>;
|
|
53
|
+
exportAll: (opts?: {
|
|
54
|
+
readonly from?: string | undefined;
|
|
55
|
+
readonly to?: string | undefined;
|
|
56
|
+
}) => Effect.Effect<ReadonlyArray<AuditLogEntry>, CacheError>;
|
|
57
|
+
}, never, SqlClient.SqlClient>;
|
|
58
|
+
}>;
|
|
59
|
+
export declare class AuditLogRepo extends AuditLogRepo_base {
|
|
60
|
+
}
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=AuditLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditLog.d.ts","sourceRoot":"","sources":["../../src/PermissionService/AuditLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAG1D,eAAO,MAAM,aAAa;;;;;;;;;EASxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;AAExD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;;;;qBA6BkB,gBAAgB;yBAQZ;YACf,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC5C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAClC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SACrC,KAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC;+BAuDzB,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;2BAY9C;YACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAClC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SACjC,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;;;AA5GjE,qBAAa,YAAa,SAAQ,iBA8HhC;CAAG"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title AuditLogRepo — records every AWS API call
|
|
3
|
+
*
|
|
4
|
+
* Every call through the permission gate gets recorded — allowed, denied,
|
|
5
|
+
* or timed out.
|
|
6
|
+
*
|
|
7
|
+
* Design constraints:
|
|
8
|
+
* - MUST never block API calls (catchAll on write failures at call site)
|
|
9
|
+
* - MUST handle high volume (~17 ops per refresh × every 5min)
|
|
10
|
+
* - MUST auto-prune (150k entries/month without pruning)
|
|
11
|
+
* - MUST support filtered queries (for the audit log UI page)
|
|
12
|
+
*
|
|
13
|
+
* `durationMs` is null when the API call was denied/timed out (never ran).
|
|
14
|
+
* When present, it reflects actual AWS API latency — not permission prompt wait.
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*/
|
|
18
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
|
19
|
+
import * as SqlSchema from "@effect/sql/SqlSchema";
|
|
20
|
+
import { Effect, Schema } from "effect";
|
|
21
|
+
import { CacheError } from "../CacheService/CacheError.js";
|
|
22
|
+
import { DatabaseLive } from "../CacheService/Database.js";
|
|
23
|
+
export const AuditLogEntry = Schema.Struct({
|
|
24
|
+
id: Schema.Number,
|
|
25
|
+
timestamp: Schema.String,
|
|
26
|
+
operation: Schema.String,
|
|
27
|
+
accountProfile: Schema.String,
|
|
28
|
+
region: Schema.String,
|
|
29
|
+
permissionState: Schema.Literal("allowed", "always_allowed", "denied", "timed_out"),
|
|
30
|
+
context: Schema.String,
|
|
31
|
+
durationMs: Schema.NullOr(Schema.Number)
|
|
32
|
+
});
|
|
33
|
+
const cacheError = (op) => (effect) => effect.pipe(Effect.mapError((cause) => new CacheError({ operation: `AuditLogRepo.${op}`, cause })), Effect.withSpan(`AuditLogRepo.${op}`, { captureStackTrace: false }));
|
|
34
|
+
export class AuditLogRepo extends Effect.Service()("AuditLogRepo", {
|
|
35
|
+
dependencies: [DatabaseLive],
|
|
36
|
+
effect: Effect.gen(function* () {
|
|
37
|
+
const sql = yield* SqlClient.SqlClient;
|
|
38
|
+
const findAll_ = SqlSchema.findAll({
|
|
39
|
+
Result: AuditLogEntry,
|
|
40
|
+
Request: Schema.Struct({
|
|
41
|
+
limit: Schema.Number,
|
|
42
|
+
offset: Schema.Number
|
|
43
|
+
}),
|
|
44
|
+
execute: (req) => sql `SELECT * FROM audit_log ORDER BY id DESC LIMIT ${req.limit} OFFSET ${req.offset}`
|
|
45
|
+
});
|
|
46
|
+
const countAll = SqlSchema.single({
|
|
47
|
+
Result: Schema.Struct({ count: Schema.Number }),
|
|
48
|
+
Request: Schema.Void,
|
|
49
|
+
execute: () => sql `SELECT count(*) as count FROM audit_log`
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
log: (entry) => sql `INSERT INTO audit_log (timestamp, operation, account_profile, region, permission_state, context, duration_ms)
|
|
53
|
+
VALUES (${entry.timestamp}, ${entry.operation}, ${entry.accountProfile}, ${entry.region}, ${entry.permissionState}, ${entry.context}, ${entry.durationMs})`
|
|
54
|
+
.pipe(Effect.asVoid, cacheError("log")),
|
|
55
|
+
findAll: (opts) => {
|
|
56
|
+
// Clamp numeric params to prevent injection via malformed input
|
|
57
|
+
const limit = Math.max(1, Math.min(200, Math.floor(opts?.limit ?? 50)));
|
|
58
|
+
const offset = Math.max(0, Math.floor(opts?.offset ?? 0));
|
|
59
|
+
// For filtered queries, build dynamic SQL
|
|
60
|
+
if (opts?.operation || opts?.accountProfile || opts?.permissionState || opts?.from || opts?.to || opts?.search) {
|
|
61
|
+
const conditions = [];
|
|
62
|
+
if (opts?.operation)
|
|
63
|
+
conditions.push(`operation = '${opts.operation.replace(/'/g, "''")}'`);
|
|
64
|
+
if (opts?.accountProfile) {
|
|
65
|
+
conditions.push(`account_profile = '${opts.accountProfile.replace(/'/g, "''")}'`);
|
|
66
|
+
}
|
|
67
|
+
if (opts?.permissionState) {
|
|
68
|
+
conditions.push(`permission_state = '${opts.permissionState.replace(/'/g, "''")}'`);
|
|
69
|
+
}
|
|
70
|
+
if (opts?.from)
|
|
71
|
+
conditions.push(`timestamp >= '${opts.from.replace(/'/g, "''")}'`);
|
|
72
|
+
if (opts?.to)
|
|
73
|
+
conditions.push(`timestamp <= '${opts.to.replace(/'/g, "''")}'`);
|
|
74
|
+
if (opts?.search) {
|
|
75
|
+
const escaped = opts.search.replace(/'/g, "''");
|
|
76
|
+
conditions.push(`(operation LIKE '%${escaped}%' OR context LIKE '%${escaped}%')`);
|
|
77
|
+
}
|
|
78
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
79
|
+
return Effect.all([
|
|
80
|
+
sql.unsafe(`SELECT * FROM audit_log ${where} ORDER BY id DESC LIMIT ${limit} OFFSET ${offset}`).pipe(Effect.map((rows) => rows.map((r) => r))),
|
|
81
|
+
sql.unsafe(`SELECT count(*) as count FROM audit_log ${where}`).pipe(Effect.map((rows) => rows[0]?.count ?? 0))
|
|
82
|
+
]).pipe(Effect.map(([items, total]) => ({
|
|
83
|
+
items,
|
|
84
|
+
total,
|
|
85
|
+
...(items.length === limit ? { nextCursor: offset + limit } : {})
|
|
86
|
+
})), cacheError("findAll"));
|
|
87
|
+
}
|
|
88
|
+
return Effect.all([
|
|
89
|
+
findAll_({ limit, offset }),
|
|
90
|
+
countAll(undefined)
|
|
91
|
+
]).pipe(Effect.map(([items, { count }]) => ({
|
|
92
|
+
items,
|
|
93
|
+
total: count,
|
|
94
|
+
...(items.length === limit ? { nextCursor: offset + limit } : {})
|
|
95
|
+
})), cacheError("findAll"));
|
|
96
|
+
},
|
|
97
|
+
prune: (retentionDays) => {
|
|
98
|
+
const days = Math.max(1, Math.floor(retentionDays));
|
|
99
|
+
return sql.unsafe(`DELETE FROM audit_log WHERE timestamp < datetime('now', '-${days} days')`).pipe(
|
|
100
|
+
// DELETE returns no rows — use changes() to get actual deleted count
|
|
101
|
+
Effect.flatMap(() => sql `SELECT changes() as n`), Effect.map((rows) => rows[0]?.n ?? 0), cacheError("prune"));
|
|
102
|
+
},
|
|
103
|
+
exportAll: (opts) => {
|
|
104
|
+
if (opts?.from && opts?.to) {
|
|
105
|
+
return sql.unsafe(`SELECT * FROM audit_log WHERE timestamp >= '${opts.from.replace(/'/g, "''")}' AND timestamp <= '${opts.to.replace(/'/g, "''")}' ORDER BY id DESC`).pipe(Effect.map((rows) => rows.map((r) => r)), cacheError("exportAll"));
|
|
106
|
+
}
|
|
107
|
+
return sql.unsafe("SELECT * FROM audit_log ORDER BY id DESC").pipe(Effect.map((rows) => rows.map((r) => r)), cacheError("exportAll"));
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
})
|
|
111
|
+
}) {
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=AuditLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditLog.js","sourceRoot":"","sources":["../../src/PermissionService/AuditLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title PermissionGate — abstract "ask the user" interface
|
|
3
|
+
*
|
|
4
|
+
* Context.Tag (not Effect.Service) so different environments can
|
|
5
|
+
* provide different implementations:
|
|
6
|
+
* - Web: Deferred + SSE push (PermissionGateLive.ts)
|
|
7
|
+
* - TUI: stdin prompt (future)
|
|
8
|
+
* - Test: auto-allow Layer
|
|
9
|
+
*
|
|
10
|
+
* Only exposes `request` — the caller's view. The concrete implementation
|
|
11
|
+
* (PermissionGateLive) adds `resolve` and `getFirstPending` for the
|
|
12
|
+
* HTTP handler and SSE builder.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import type { Effect } from "effect";
|
|
17
|
+
import { Context, Schema } from "effect";
|
|
18
|
+
import type { PermissionDeniedError } from "../Errors.js";
|
|
19
|
+
declare const PermissionPrompt_base: Schema.Class<PermissionPrompt, {
|
|
20
|
+
id: typeof Schema.String;
|
|
21
|
+
operation: typeof Schema.String;
|
|
22
|
+
category: Schema.Literal<["read", "write"]>;
|
|
23
|
+
context: typeof Schema.String;
|
|
24
|
+
}, Schema.Struct.Encoded<{
|
|
25
|
+
id: typeof Schema.String;
|
|
26
|
+
operation: typeof Schema.String;
|
|
27
|
+
category: Schema.Literal<["read", "write"]>;
|
|
28
|
+
context: typeof Schema.String;
|
|
29
|
+
}>, never, {
|
|
30
|
+
readonly id: string;
|
|
31
|
+
} & {
|
|
32
|
+
readonly operation: string;
|
|
33
|
+
} & {
|
|
34
|
+
readonly context: string;
|
|
35
|
+
} & {
|
|
36
|
+
readonly category: "read" | "write";
|
|
37
|
+
}, {}, {}>;
|
|
38
|
+
export declare class PermissionPrompt extends PermissionPrompt_base {
|
|
39
|
+
}
|
|
40
|
+
export type PermissionResponse = "allow_once" | "always_allow" | "deny";
|
|
41
|
+
declare const PermissionGate_base: Context.TagClass<PermissionGate, "@knpkv/codecommit-core/PermissionGate", {
|
|
42
|
+
readonly request: (prompt: PermissionPrompt) => Effect.Effect<PermissionResponse, PermissionDeniedError>;
|
|
43
|
+
}>;
|
|
44
|
+
export declare class PermissionGate extends PermissionGate_base {
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=PermissionGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionGate.d.ts","sourceRoot":"","sources":["../../src/PermissionService/PermissionGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;;;;;;;;;;;;;;;;;;;;AAGzD,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;AAEL,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,CAAA;;sBAOjD,CAAC,MAAM,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;;AAH5G,qBAAa,cAAe,SAAQ,mBAKjC;CAAG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Context, Schema } from "effect";
|
|
2
|
+
// UUID correlates the SSE prompt → client modal → POST response
|
|
3
|
+
export class PermissionPrompt extends Schema.Class("PermissionPrompt")({
|
|
4
|
+
id: Schema.String,
|
|
5
|
+
operation: Schema.String,
|
|
6
|
+
category: Schema.Literal("read", "write"),
|
|
7
|
+
context: Schema.String
|
|
8
|
+
}) {
|
|
9
|
+
}
|
|
10
|
+
// Blocks the calling fiber until user responds or 30s timeout.
|
|
11
|
+
// Returns the response, or fails with PermissionDeniedError.
|
|
12
|
+
export class PermissionGate extends Context.Tag("@knpkv/codecommit-core/PermissionGate")() {
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=PermissionGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionGate.js","sourceRoot":"","sources":["../../src/PermissionService/PermissionGate.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGxC,gEAAgE;AAChE,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,KAAK,CAAmB,kBAAkB,CAAC,CAAC;IACvF,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAIL,+DAA+D;AAC/D,6DAA6D;AAC7D,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,EAKrF;CAAG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title PermissionGateLive — Deferred-based prompt flow
|
|
3
|
+
*
|
|
4
|
+
* One `Deferred<PermissionResponse>` per prompt.
|
|
5
|
+
*
|
|
6
|
+
* Flow:
|
|
7
|
+
* 1. API call fiber creates Deferred, stores in pending Map
|
|
8
|
+
* 2. Publishes PermissionRequired → SSE rebuilds payload with prompt
|
|
9
|
+
* 3. Fiber blocks on Deferred.await (up to 30s)
|
|
10
|
+
* 4. User clicks modal → POST /api/permissions/respond
|
|
11
|
+
* 5. HTTP handler calls resolve() → Deferred.succeed → fiber unblocks
|
|
12
|
+
* 6. Publishes PermissionResolved → SSE removes prompt from payload
|
|
13
|
+
*
|
|
14
|
+
* Multi-tab: Deferred.succeed is idempotent — first responder wins,
|
|
15
|
+
* second tab's POST is a no-op. Both see prompt disappear via SSE.
|
|
16
|
+
*
|
|
17
|
+
* Separate Effect.Service tag (not just PermissionGate) because the
|
|
18
|
+
* HTTP handler and SSE builder need `resolve` and `getFirstPending`
|
|
19
|
+
* which the abstract interface doesn't expose.
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import { Effect, Layer } from "effect";
|
|
24
|
+
import { EventsHub } from "../CacheService/EventsHub.js";
|
|
25
|
+
import { PermissionDeniedError } from "../Errors.js";
|
|
26
|
+
import { PermissionGate, type PermissionPrompt, type PermissionResponse } from "./PermissionGate.js";
|
|
27
|
+
export interface PermissionGateLive {
|
|
28
|
+
readonly request: (prompt: PermissionPrompt) => Effect.Effect<PermissionResponse, PermissionDeniedError>;
|
|
29
|
+
readonly resolve: (promptId: string, response: PermissionResponse) => Effect.Effect<void>;
|
|
30
|
+
readonly getFirstPending: () => Effect.Effect<PermissionPrompt | undefined>;
|
|
31
|
+
}
|
|
32
|
+
export declare const PermissionGateLiveTag: Effect.Service.Class<PermissionGateLive, "PermissionGateLive", {
|
|
33
|
+
readonly dependencies: readonly [Layer.Layer<EventsHub, never, never>];
|
|
34
|
+
readonly effect: Effect.Effect<{
|
|
35
|
+
request: (prompt: PermissionPrompt) => Effect.Effect<PermissionResponse, PermissionDeniedError>;
|
|
36
|
+
resolve: (promptId: string, response: PermissionResponse) => Effect.Effect<void>;
|
|
37
|
+
getFirstPending: () => Effect.Effect<PermissionPrompt | undefined>;
|
|
38
|
+
}, never, EventsHub>;
|
|
39
|
+
}>;
|
|
40
|
+
export declare const PermissionGateLiveLayer: Layer.Layer<PermissionGate, never, PermissionGateLive>;
|
|
41
|
+
//# sourceMappingURL=PermissionGateLive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionGateLive.d.ts","sourceRoot":"","sources":["../../src/PermissionService/PermissionGateLive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAY,MAAM,EAAE,KAAK,EAAO,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,SAAS,EAAc,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAOpG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAA;IACxG,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzF,QAAQ,CAAC,eAAe,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;CAC5E;AAED,eAAO,MAAM,qBAAqB;;;0BAWL,gBAAgB,KAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;4BAqCzE,MAAM,YAAY,kBAAkB,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;+BAUzD,MAAM,CAAC,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC;;EAUzE,CAAA;AAKF,eAAO,MAAM,uBAAuB,wDAGnC,CAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title PermissionGateLive — Deferred-based prompt flow
|
|
3
|
+
*
|
|
4
|
+
* One `Deferred<PermissionResponse>` per prompt.
|
|
5
|
+
*
|
|
6
|
+
* Flow:
|
|
7
|
+
* 1. API call fiber creates Deferred, stores in pending Map
|
|
8
|
+
* 2. Publishes PermissionRequired → SSE rebuilds payload with prompt
|
|
9
|
+
* 3. Fiber blocks on Deferred.await (up to 30s)
|
|
10
|
+
* 4. User clicks modal → POST /api/permissions/respond
|
|
11
|
+
* 5. HTTP handler calls resolve() → Deferred.succeed → fiber unblocks
|
|
12
|
+
* 6. Publishes PermissionResolved → SSE removes prompt from payload
|
|
13
|
+
*
|
|
14
|
+
* Multi-tab: Deferred.succeed is idempotent — first responder wins,
|
|
15
|
+
* second tab's POST is a no-op. Both see prompt disappear via SSE.
|
|
16
|
+
*
|
|
17
|
+
* Separate Effect.Service tag (not just PermissionGate) because the
|
|
18
|
+
* HTTP handler and SSE builder need `resolve` and `getFirstPending`
|
|
19
|
+
* which the abstract interface doesn't expose.
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import { Deferred, Effect, Layer, Ref } from "effect";
|
|
24
|
+
import { EventsHub, RepoChange } from "../CacheService/EventsHub.js";
|
|
25
|
+
import { PermissionDeniedError } from "../Errors.js";
|
|
26
|
+
import { PermissionGate } from "./PermissionGate.js";
|
|
27
|
+
export const PermissionGateLiveTag = Effect.Service()("PermissionGateLive", {
|
|
28
|
+
// EventsHub needed to publish PermissionRequired/Resolved events
|
|
29
|
+
// that trigger SSE payload rebuilds
|
|
30
|
+
dependencies: [EventsHub.Default],
|
|
31
|
+
effect: Effect.gen(function* () {
|
|
32
|
+
const hub = yield* EventsHub;
|
|
33
|
+
// Map<promptId, { deferred, prompt }>. Concurrent-safe via Ref.
|
|
34
|
+
// Multiple prompts can be pending simultaneously (e.g. initial
|
|
35
|
+
// refresh triggers getCallerIdentity + listRepositories at once).
|
|
36
|
+
const pending = yield* Ref.make(new Map());
|
|
37
|
+
const request = (prompt) => Effect.gen(function* () {
|
|
38
|
+
const deferred = yield* Deferred.make();
|
|
39
|
+
yield* Ref.update(pending, (m) => new Map(m).set(prompt.id, { deferred, prompt }));
|
|
40
|
+
yield* hub.publish(RepoChange.PermissionRequired());
|
|
41
|
+
const response = yield* Deferred.await(deferred).pipe(Effect.timeout("30 seconds"), Effect.catchTag("TimeoutException", () => {
|
|
42
|
+
return Effect.gen(function* () {
|
|
43
|
+
yield* Ref.update(pending, (m) => {
|
|
44
|
+
const n = new Map(m);
|
|
45
|
+
n.delete(prompt.id);
|
|
46
|
+
return n;
|
|
47
|
+
});
|
|
48
|
+
yield* hub.publish(RepoChange.PermissionResolved());
|
|
49
|
+
return yield* new PermissionDeniedError({ operation: prompt.operation, reason: "timeout" });
|
|
50
|
+
});
|
|
51
|
+
}));
|
|
52
|
+
yield* Ref.update(pending, (m) => {
|
|
53
|
+
const n = new Map(m);
|
|
54
|
+
n.delete(prompt.id);
|
|
55
|
+
return n;
|
|
56
|
+
});
|
|
57
|
+
yield* hub.publish(RepoChange.PermissionResolved());
|
|
58
|
+
if (response === "deny") {
|
|
59
|
+
return yield* new PermissionDeniedError({ operation: prompt.operation, reason: "denied" });
|
|
60
|
+
}
|
|
61
|
+
return response;
|
|
62
|
+
});
|
|
63
|
+
// Called by POST /api/permissions/respond handler.
|
|
64
|
+
// Deferred.succeed is idempotent — second call is a no-op.
|
|
65
|
+
// This is how multi-tab "first responder wins" works.
|
|
66
|
+
const resolve = (promptId, response) => Ref.get(pending).pipe(Effect.flatMap((m) => {
|
|
67
|
+
const entry = m.get(promptId);
|
|
68
|
+
return entry ? Deferred.succeed(entry.deferred, response) : Effect.void;
|
|
69
|
+
}));
|
|
70
|
+
// For SSE payload builder — shows one prompt at a time (FIFO).
|
|
71
|
+
// Remaining prompts queue behind; they'll surface as each resolves.
|
|
72
|
+
const getFirstPending = () => Ref.get(pending).pipe(Effect.map((m) => {
|
|
73
|
+
const first = m.values().next();
|
|
74
|
+
return first.done ? undefined : first.value.prompt;
|
|
75
|
+
}));
|
|
76
|
+
return { request, resolve, getFirstPending };
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
// Bridge: concrete service → abstract Context.Tag.
|
|
80
|
+
// Handlers use PermissionGateLiveTag (for resolve/getFirstPending),
|
|
81
|
+
// AwsClientGated uses PermissionGate (for request only).
|
|
82
|
+
export const PermissionGateLiveLayer = Layer.effect(PermissionGate, Effect.map(PermissionGateLiveTag, (live) => ({ request: live.request })));
|
|
83
|
+
//# sourceMappingURL=PermissionGateLive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionGateLive.js","sourceRoot":"","sources":["../../src/PermissionService/PermissionGateLive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title PermissionService — permission state management
|
|
3
|
+
*
|
|
4
|
+
* Ref<Config> backed by `~/.codecommit/permissions.json`.
|
|
5
|
+
*
|
|
6
|
+
* On construction (Layer build time), reads the file
|
|
7
|
+
* into a Ref. All subsequent `check()` calls are O(1) Ref lookups — no disk
|
|
8
|
+
* I/O. Only `set()` mutates the Ref AND writes to disk (atomic: tmp → rename).
|
|
9
|
+
*
|
|
10
|
+
* Key invariant: an operation missing from the file defaults to `"allow"`,
|
|
11
|
+
* which means "prompt the user". A fresh install with empty permissions.json
|
|
12
|
+
* prompts for every API call — zero-trust by default.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { FileSystem } from "@effect/platform";
|
|
17
|
+
import { Effect, Schema } from "effect";
|
|
18
|
+
import { allOperations, getOperationMeta, type OperationName, registerOperation } from "./operations.js";
|
|
19
|
+
export type { BuiltinOperation, OperationMeta, OperationName } from "./operations.js";
|
|
20
|
+
export { allOperations, getOperationMeta, registerOperation };
|
|
21
|
+
export declare const PermissionState: Schema.Literal<["always_allow", "allow", "deny"]>;
|
|
22
|
+
export type PermissionState = typeof PermissionState.Type;
|
|
23
|
+
declare const PermissionService_base: Effect.Service.Class<PermissionService, "PermissionService", {
|
|
24
|
+
readonly effect: Effect.Effect<{
|
|
25
|
+
check: (operation: OperationName) => Effect.Effect<PermissionState>;
|
|
26
|
+
set: (operation: OperationName, state: PermissionState) => Effect.Effect<void>;
|
|
27
|
+
getAll: () => Effect.Effect<Record<string, PermissionState>>;
|
|
28
|
+
resetAll: () => Effect.Effect<void>;
|
|
29
|
+
isAuditEnabled: () => Effect.Effect<boolean>;
|
|
30
|
+
getAuditRetention: () => Effect.Effect<number>;
|
|
31
|
+
setAudit: (opts: {
|
|
32
|
+
enabled?: boolean | undefined;
|
|
33
|
+
retentionDays?: number | undefined;
|
|
34
|
+
}) => Effect.Effect<void>;
|
|
35
|
+
}, never, FileSystem.FileSystem>;
|
|
36
|
+
}>;
|
|
37
|
+
export declare class PermissionService extends PermissionService_base {
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/PermissionService/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAU,MAAM,EAAO,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExG,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAA;AAK7D,eAAO,MAAM,eAAe,mDAAkD,CAAA;AAC9E,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;;;2BA6D3B,aAAa,KAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;yBAGhD,aAAa,SAAS,eAAe,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;sBAShE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;wBAG5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;8BAMb,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;iCAEnB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;yBAI3C;YAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAAE,KAC1E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;AAzC1B,qBAAa,iBAAkB,SAAQ,sBAuDrC;CAAG"}
|