@knpkv/codecommit-web 0.11.4 → 0.14.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/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/dist/client/assets/index-DQUoxciG.js +90 -0
- package/dist/client/assets/index-NJaNHeOS.css +1 -0
- package/dist/client/assets/pr-review-workspace-C0TVEp1y.js +22 -0
- package/dist/client/assets/pr-review-workspace-mH4SV5xO.css +1 -0
- package/dist/client/index.html +2 -2
- package/dist/main.js +9 -3
- package/dist/main.js.map +1 -1
- package/dist/server/Api.d.ts +1333 -114
- package/dist/server/Api.d.ts.map +1 -1
- package/dist/server/Api.js +251 -6
- package/dist/server/Api.js.map +1 -1
- package/dist/server/Server.d.ts +13 -7
- package/dist/server/Server.d.ts.map +1 -1
- package/dist/server/Server.js +45 -13
- package/dist/server/Server.js.map +1 -1
- package/dist/server/handlers/accounts-live.d.ts +1 -1
- package/dist/server/handlers/accounts-live.d.ts.map +1 -1
- package/dist/server/handlers/audit-live.d.ts +1 -1
- package/dist/server/handlers/audit-live.d.ts.map +1 -1
- package/dist/server/handlers/config-live.d.ts +9 -1
- package/dist/server/handlers/config-live.d.ts.map +1 -1
- package/dist/server/handlers/config-live.js +33 -10
- package/dist/server/handlers/config-live.js.map +1 -1
- package/dist/server/handlers/events-live.d.ts +1 -1
- package/dist/server/handlers/events-live.d.ts.map +1 -1
- package/dist/server/handlers/notifications-live.d.ts +1 -1
- package/dist/server/handlers/notifications-live.d.ts.map +1 -1
- package/dist/server/handlers/notifications-live.js +3 -3
- package/dist/server/handlers/notifications-live.js.map +1 -1
- package/dist/server/handlers/permissions-live.d.ts +1 -1
- package/dist/server/handlers/permissions-live.d.ts.map +1 -1
- package/dist/server/handlers/prs-live.d.ts +79 -2
- package/dist/server/handlers/prs-live.d.ts.map +1 -1
- package/dist/server/handlers/prs-live.js +117 -7
- package/dist/server/handlers/prs-live.js.map +1 -1
- package/dist/server/handlers/sandbox-live.d.ts +1 -1
- package/dist/server/handlers/sandbox-live.d.ts.map +1 -1
- package/dist/server/handlers/sandbox-live.js +5 -1
- package/dist/server/handlers/sandbox-live.js.map +1 -1
- package/dist/server/handlers/stats-live.d.ts +1 -1
- package/dist/server/handlers/stats-live.d.ts.map +1 -1
- package/dist/server/handlers/subscriptions-live.d.ts +1 -1
- package/dist/server/handlers/subscriptions-live.d.ts.map +1 -1
- package/dist/server/internal/BackgroundWorkers.d.ts +1 -1
- package/dist/server/internal/BackgroundWorkers.d.ts.map +1 -1
- package/dist/server/internal/BackgroundWorkers.js +43 -5
- package/dist/server/internal/BackgroundWorkers.js.map +1 -1
- package/dist/server/internal/OwnerSessionSecurity.d.ts +46 -0
- package/dist/server/internal/OwnerSessionSecurity.d.ts.map +1 -0
- package/dist/server/internal/OwnerSessionSecurity.js +143 -0
- package/dist/server/internal/OwnerSessionSecurity.js.map +1 -0
- package/dist/server/internal/PermissionedReadClient.d.ts +27 -0
- package/dist/server/internal/PermissionedReadClient.d.ts.map +1 -0
- package/dist/server/internal/PermissionedReadClient.js +132 -0
- package/dist/server/internal/PermissionedReadClient.js.map +1 -0
- package/dist/server/review/PullRequestReview.d.ts +394 -0
- package/dist/server/review/PullRequestReview.d.ts.map +1 -0
- package/dist/server/review/PullRequestReview.js +714 -0
- package/dist/server/review/PullRequestReview.js.map +1 -0
- package/dist/server/review/RelayFindingPublisher.d.ts +39 -0
- package/dist/server/review/RelayFindingPublisher.d.ts.map +1 -0
- package/dist/server/review/RelayFindingPublisher.js +78 -0
- package/dist/server/review/RelayFindingPublisher.js.map +1 -0
- package/dist/server/review/ReviewPromptBudget.d.ts +10 -0
- package/dist/server/review/ReviewPromptBudget.d.ts.map +1 -0
- package/dist/server/review/ReviewPromptBudget.js +11 -0
- package/dist/server/review/ReviewPromptBudget.js.map +1 -0
- package/dist/server/review/ReviewSkillCatalog.d.ts +34 -0
- package/dist/server/review/ReviewSkillCatalog.d.ts.map +1 -0
- package/dist/server/review/ReviewSkillCatalog.js +204 -0
- package/dist/server/review/ReviewSkillCatalog.js.map +1 -0
- package/dist/tooling/authenticated-dev-proxy.d.ts +15 -0
- package/dist/tooling/authenticated-dev-proxy.d.ts.map +1 -0
- package/dist/tooling/authenticated-dev-proxy.js +19 -0
- package/dist/tooling/authenticated-dev-proxy.js.map +1 -0
- package/dist/tooling/authenticated-dev-proxy.test.d.ts +2 -0
- package/dist/tooling/authenticated-dev-proxy.test.d.ts.map +1 -0
- package/dist/tooling/authenticated-dev-proxy.test.js +26 -0
- package/dist/tooling/authenticated-dev-proxy.test.js.map +1 -0
- package/dist/tooling/production-prototype-boundary.d.ts.map +1 -1
- package/package.json +31 -24
- package/dist/client/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/client/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/client/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/client/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
- package/dist/client/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
- package/dist/client/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
- package/dist/client/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
- package/dist/client/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/client/assets/index-DHUFjL8d.css +0 -1
- package/dist/client/assets/index-DvOqBYkk.js +0 -90
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Clock, Context, Crypto, Effect, Layer, Redacted, Ref, Schema } from "effect";
|
|
2
|
+
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
|
|
3
|
+
import { ForbiddenApiError, OwnerSessionAuth, UnauthorizedApiError } from "../Api.js";
|
|
4
|
+
export class OwnerSessionSecrets extends Context.Service()("@knpkv/codecommit-web/OwnerSessionSecrets") {
|
|
5
|
+
}
|
|
6
|
+
export class UnsafeServerHostnameError extends Schema.TaggedError()("UnsafeServerHostnameError", { hostname: Schema.String, message: Schema.String }) {
|
|
7
|
+
}
|
|
8
|
+
const safeMethods = new Set(["GET", "HEAD", "OPTIONS"]);
|
|
9
|
+
export const isLoopbackHostname = (hostname) => hostname === "127.0.0.1" || hostname === "localhost" || hostname === "::1" || hostname === "[::1]";
|
|
10
|
+
export const requireLoopbackHostname = Effect.fn("OwnerSessionSecurity.requireLoopbackHostname")(function* (hostname) {
|
|
11
|
+
if (!isLoopbackHostname(hostname)) {
|
|
12
|
+
return yield* new UnsafeServerHostnameError({
|
|
13
|
+
hostname,
|
|
14
|
+
message: "CodeCommit web may only listen on a loopback hostname"
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return hostname;
|
|
18
|
+
});
|
|
19
|
+
export const makeOwnerSessionSecrets = Effect.fn("OwnerSessionSecurity.makeSecrets")(function* () {
|
|
20
|
+
const cryptoService = yield* Crypto.Crypto;
|
|
21
|
+
const [ownerToken, csrfToken, bootstrapToken] = yield* Effect.all([
|
|
22
|
+
cryptoService.randomUUIDv4,
|
|
23
|
+
cryptoService.randomUUIDv4,
|
|
24
|
+
cryptoService.randomUUIDv4
|
|
25
|
+
]);
|
|
26
|
+
const bootstrapAvailable = yield* Ref.make(true);
|
|
27
|
+
return OwnerSessionSecrets.of({
|
|
28
|
+
ownerToken: Redacted.make(ownerToken),
|
|
29
|
+
csrfToken: Redacted.make(csrfToken),
|
|
30
|
+
bootstrapToken: Redacted.make(bootstrapToken),
|
|
31
|
+
bootstrapAvailable,
|
|
32
|
+
bootstrapExpiresAtMillis: yield* Ref.make(undefined)
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
export const activateOwnerSessionBootstrap = Effect.fn("OwnerSessionSecurity.activateBootstrap")(function* (secrets) {
|
|
36
|
+
const now = yield* Clock.currentTimeMillis;
|
|
37
|
+
yield* Ref.set(secrets.bootstrapExpiresAtMillis, now + 60_000);
|
|
38
|
+
});
|
|
39
|
+
export const ownerSessionOrigin = (hostname, port) => {
|
|
40
|
+
const urlHostname = hostname === "::1" ? "[::1]" : hostname;
|
|
41
|
+
return `http://${urlHostname}:${port}/`;
|
|
42
|
+
};
|
|
43
|
+
export const ownerSessionUrl = (hostname, port, secrets) => ownerSessionUrlForOrigin(ownerSessionOrigin(hostname, port), secrets);
|
|
44
|
+
export const ownerSessionUrlForOrigin = (origin, secrets) => {
|
|
45
|
+
const bootstrapToken = encodeURIComponent(Redacted.value(secrets.bootstrapToken));
|
|
46
|
+
return `${origin.replace(/\/+$/u, "")}/#bootstrap_token=${bootstrapToken}`;
|
|
47
|
+
};
|
|
48
|
+
export const requireLoopbackOrigin = Effect.fn("OwnerSessionSecurity.requireLoopbackOrigin")(function* (origin) {
|
|
49
|
+
const url = yield* Effect.try({
|
|
50
|
+
try: () => new URL(origin),
|
|
51
|
+
catch: () => new UnsafeServerHostnameError({
|
|
52
|
+
hostname: origin,
|
|
53
|
+
message: "CodeCommit public origin must be a valid loopback HTTP origin"
|
|
54
|
+
})
|
|
55
|
+
});
|
|
56
|
+
if (url.protocol !== "http:" || !isLoopbackHostname(url.hostname) || url.pathname !== "/" || url.search || url.hash) {
|
|
57
|
+
return yield* new UnsafeServerHostnameError({
|
|
58
|
+
hostname: origin,
|
|
59
|
+
message: "CodeCommit public origin must be an HTTP loopback origin without a path, query, or fragment"
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return url.origin;
|
|
63
|
+
});
|
|
64
|
+
export const ownerSessionCookie = (secrets) => `cc_owner=${Redacted.value(secrets.ownerToken)}; HttpOnly; Path=/api; SameSite=Strict`;
|
|
65
|
+
export const authorizeOwnerRequest = Effect.fn("OwnerSessionSecurity.authorizeRequest")(function* (request, secrets) {
|
|
66
|
+
if (request.credential !== Redacted.value(secrets.ownerToken)) {
|
|
67
|
+
return yield* new UnauthorizedApiError({ message: "Missing or invalid owner session" });
|
|
68
|
+
}
|
|
69
|
+
const sameOrigin = request.host !== undefined && request.origin === `http://${request.host}`;
|
|
70
|
+
if (request.origin !== undefined && !sameOrigin) {
|
|
71
|
+
return yield* new ForbiddenApiError({ message: "Request origin does not match the CodeCommit server" });
|
|
72
|
+
}
|
|
73
|
+
// Safe reads intentionally allow non-browser callers without Origin or CSRF
|
|
74
|
+
// headers; every read still requires the process-scoped owner credential.
|
|
75
|
+
if (safeMethods.has(request.method.toUpperCase()))
|
|
76
|
+
return;
|
|
77
|
+
if (!sameOrigin) {
|
|
78
|
+
return yield* new ForbiddenApiError({ message: "Mutation origin does not match the CodeCommit server" });
|
|
79
|
+
}
|
|
80
|
+
if (request.csrfToken !== Redacted.value(secrets.csrfToken)) {
|
|
81
|
+
return yield* new ForbiddenApiError({ message: "Missing or invalid CSRF token" });
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
export const authorizeBootstrapRequest = Effect.fn("OwnerSessionSecurity.authorizeBootstrap")(function* (request, secrets) {
|
|
85
|
+
if (request.authorization !== `Bearer ${Redacted.value(secrets.bootstrapToken)}`) {
|
|
86
|
+
return yield* new UnauthorizedApiError({ message: "Missing or invalid bootstrap token" });
|
|
87
|
+
}
|
|
88
|
+
if (request.host === undefined || request.origin !== `http://${request.host}`) {
|
|
89
|
+
return yield* new ForbiddenApiError({ message: "Bootstrap origin does not match the CodeCommit server" });
|
|
90
|
+
}
|
|
91
|
+
const expiresAt = yield* Ref.get(secrets.bootstrapExpiresAtMillis);
|
|
92
|
+
if (expiresAt === undefined) {
|
|
93
|
+
return yield* new UnauthorizedApiError({ message: "Bootstrap token is not active" });
|
|
94
|
+
}
|
|
95
|
+
const now = yield* Clock.currentTimeMillis;
|
|
96
|
+
if (now >= expiresAt) {
|
|
97
|
+
return yield* new UnauthorizedApiError({ message: "Bootstrap token has expired" });
|
|
98
|
+
}
|
|
99
|
+
const available = yield* Ref.getAndSet(secrets.bootstrapAvailable, false);
|
|
100
|
+
if (!available) {
|
|
101
|
+
return yield* new UnauthorizedApiError({ message: "Bootstrap token has already been used" });
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
export const ownerSessionAuthLayer = Layer.effect(OwnerSessionAuth, Effect.gen(function* () {
|
|
105
|
+
const secrets = yield* OwnerSessionSecrets;
|
|
106
|
+
return OwnerSessionAuth.of({
|
|
107
|
+
ownerCookie: Effect.fn("OwnerSessionSecurity.ownerCookie")(function* (httpEffect, { credential }) {
|
|
108
|
+
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
109
|
+
yield* authorizeOwnerRequest({
|
|
110
|
+
credential: Redacted.value(credential),
|
|
111
|
+
csrfToken: request.headers["x-csrf-token"],
|
|
112
|
+
host: request.headers.host,
|
|
113
|
+
method: request.method,
|
|
114
|
+
origin: request.headers.origin
|
|
115
|
+
}, secrets);
|
|
116
|
+
return yield* httpEffect;
|
|
117
|
+
})
|
|
118
|
+
});
|
|
119
|
+
}));
|
|
120
|
+
export const OwnerSessionBootstrapRouter = HttpRouter.use((router) => router.add("POST", "/auth/bootstrap", Effect.gen(function* () {
|
|
121
|
+
const secrets = yield* OwnerSessionSecrets;
|
|
122
|
+
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
123
|
+
const authorization = authorizeBootstrapRequest({
|
|
124
|
+
authorization: request.headers.authorization,
|
|
125
|
+
host: request.headers.host,
|
|
126
|
+
origin: request.headers.origin
|
|
127
|
+
}, secrets);
|
|
128
|
+
const result = yield* Effect.result(authorization);
|
|
129
|
+
if (result._tag === "Failure") {
|
|
130
|
+
const error = result.failure;
|
|
131
|
+
return HttpServerResponse.text(error.message, {
|
|
132
|
+
status: error._tag === "UnauthorizedApiError" ? 401 : 403
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return yield* HttpServerResponse.json({ csrfToken: Redacted.value(secrets.csrfToken) }, {
|
|
136
|
+
status: 200,
|
|
137
|
+
headers: {
|
|
138
|
+
"cache-control": "no-store",
|
|
139
|
+
"set-cookie": ownerSessionCookie(secrets)
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
})));
|
|
143
|
+
//# sourceMappingURL=OwnerSessionSecurity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OwnerSessionSecurity.js","sourceRoot":"","sources":["../../../src/server/internal/OwnerSessionSecurity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AuditLogRepo } from "@knpkv/codecommit-core/PermissionService/AuditLog.js";
|
|
2
|
+
import { PermissionService } from "@knpkv/codecommit-core/PermissionService/index.js";
|
|
3
|
+
import { PermissionGate } from "@knpkv/codecommit-core/PermissionService/PermissionGate.js";
|
|
4
|
+
import * as ReadClient from "@knpkv/codecommit-core/ReadClient.js";
|
|
5
|
+
import { Context, Effect, Stream } from "effect";
|
|
6
|
+
declare const InnerCodeCommitReadClient_base: Context.ServiceClass<InnerCodeCommitReadClient, "@knpkv/codecommit-web/InnerCodeCommitReadClient", ReadClient.CodeCommitReadClientService>;
|
|
7
|
+
/** Holds the decoded provider client before permission enforcement. */
|
|
8
|
+
export declare class InnerCodeCommitReadClient extends InnerCodeCommitReadClient_base {
|
|
9
|
+
}
|
|
10
|
+
/** Construct a read client that checks permission and audits before every provider call. */
|
|
11
|
+
export declare const makePermissionedReadClient: (inner: ReadClient.CodeCommitReadClientService) => Effect.Effect<{
|
|
12
|
+
discoverAccount: (request: {
|
|
13
|
+
readonly profile: string & import("effect/Brand").Brand<"AwsProfileName">;
|
|
14
|
+
readonly region: string & import("effect/Brand").Brand<"AwsRegion">;
|
|
15
|
+
}) => Effect.Effect<ReadClient.CodeCommitAccountIdentity, ReadClient.CodeCommitReadError, never>;
|
|
16
|
+
listRepositoriesPage: (request: ReadClient.ListRepositoriesProviderPageRequest) => Effect.Effect<ReadClient.CodeCommitRepositoryPage, ReadClient.CodeCommitReadError, never>;
|
|
17
|
+
getBlob: (request: ReadClient.GetBlobProviderRequest) => Effect.Effect<ReadClient.CodeCommitBlobContent, ReadClient.CodeCommitReadError, never>;
|
|
18
|
+
listPullRequestIdsPage: (request: Omit<ReadClient.ListPullRequestsProviderPageRequest, "maximumResults">) => Effect.Effect<ReadClient.CodeCommitPullRequestIdsPage, ReadClient.CodeCommitReadError, never>;
|
|
19
|
+
listPullRequestsPage: (request: Omit<ReadClient.ListPullRequestsProviderPageRequest, "maximumResults">) => Effect.Effect<ReadClient.CodeCommitPullRequestPage, ReadClient.CodeCommitReadError>;
|
|
20
|
+
streamPullRequests: (request: Omit<ReadClient.ListPullRequestsProviderPageRequest, "maximumResults" | "nextToken">) => Stream.Stream<ReadClient.CodeCommitPullRequestRevision, ReadClient.CodeCommitReadError>;
|
|
21
|
+
getPullRequest: (request: ReadClient.GetPullRequestProviderRequest) => Effect.Effect<ReadClient.CodeCommitPullRequestRevision, ReadClient.CodeCommitReadError, never>;
|
|
22
|
+
getRepositoryIdentity: (request: ReadClient.GetRepositoryProviderRequest) => Effect.Effect<ReadClient.CodeCommitRepositoryIdentity, ReadClient.CodeCommitReadError, never>;
|
|
23
|
+
getChangedFilesPage: (request: Omit<ReadClient.GetDifferencesProviderPageRequest, "maximumResults">) => Effect.Effect<ReadClient.CodeCommitChangedFilesPage, ReadClient.CodeCommitReadError, never>;
|
|
24
|
+
streamChangedFiles: (request: Omit<ReadClient.GetDifferencesProviderPageRequest, "maximumResults" | "nextToken">) => Stream.Stream<ReadClient.CodeCommitChangedFile, ReadClient.CodeCommitReadError>;
|
|
25
|
+
}, never, AuditLogRepo | PermissionGate | PermissionService>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=PermissionedReadClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionedReadClient.d.ts","sourceRoot":"","sources":["../../../src/server/internal/PermissionedReadClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAyB,MAAM,sDAAsD,CAAA;AAC1G,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAA;AAErF,OAAO,EAAE,cAAc,EAAE,MAAM,4DAA4D,CAAA;AAC3F,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAClE,OAAO,EAAS,OAAO,EAAE,MAAM,EAAkB,MAAM,EAAE,MAAM,QAAQ,CAAA;;AAiBvE,uEAAuE;AACvE,qBAAa,yBAA0B,SAAQ,8BAGO;CAAG;AAUzD,4FAA4F;AAC5F,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;4DAsMrC,CAAA"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/** Permission and audit boundary for Schema-decoded CodeCommit provider reads. @module */
|
|
2
|
+
import { AwsApiError, PermissionDeniedError } from "@knpkv/codecommit-core/Errors.js";
|
|
3
|
+
import { AuditLogRepo } from "@knpkv/codecommit-core/PermissionService/AuditLog.js";
|
|
4
|
+
import { PermissionService } from "@knpkv/codecommit-core/PermissionService/index.js";
|
|
5
|
+
import { getOperationMeta } from "@knpkv/codecommit-core/PermissionService/operations.js";
|
|
6
|
+
import { PermissionGate } from "@knpkv/codecommit-core/PermissionService/PermissionGate.js";
|
|
7
|
+
import * as ReadClient from "@knpkv/codecommit-core/ReadClient.js";
|
|
8
|
+
import { Clock, Context, Effect, Option, Random, Stream } from "effect";
|
|
9
|
+
const MAXIMUM_CHANGED_FILE_PAGE_REQUESTS = 1_001;
|
|
10
|
+
/** Holds the decoded provider client before permission enforcement. */
|
|
11
|
+
export class InnerCodeCommitReadClient extends Context.Service()("@knpkv/codecommit-web/InnerCodeCommitReadClient") {
|
|
12
|
+
}
|
|
13
|
+
const deniedError = (params, reason) => new AwsApiError({
|
|
14
|
+
operation: params.operation,
|
|
15
|
+
profile: params.account.profile,
|
|
16
|
+
region: params.account.region,
|
|
17
|
+
cause: new PermissionDeniedError({ operation: params.operation, reason })
|
|
18
|
+
});
|
|
19
|
+
/** Construct a read client that checks permission and audits before every provider call. */
|
|
20
|
+
export const makePermissionedReadClient = Effect.fn("PermissionedReadClient.make")(function* (inner) {
|
|
21
|
+
const permissions = yield* PermissionService;
|
|
22
|
+
const permissionGate = yield* PermissionGate;
|
|
23
|
+
const auditLog = yield* AuditLogRepo;
|
|
24
|
+
const audit = (params, permissionState, durationMs) => permissions.isAuditEnabled().pipe(Effect.flatMap((enabled) => enabled
|
|
25
|
+
? Clock.currentTimeMillis.pipe(Effect.flatMap((now) => auditLog.log({
|
|
26
|
+
timestamp: new Date(now).toISOString(),
|
|
27
|
+
operation: params.operation,
|
|
28
|
+
accountProfile: params.account.profile,
|
|
29
|
+
region: params.account.region,
|
|
30
|
+
permissionState,
|
|
31
|
+
context: params.context,
|
|
32
|
+
durationMs
|
|
33
|
+
})))
|
|
34
|
+
: Effect.void), Effect.ignore);
|
|
35
|
+
const check = (params) => Effect.gen(function* () {
|
|
36
|
+
const state = yield* permissions.check(params.operation);
|
|
37
|
+
if (state === "always_allow")
|
|
38
|
+
return "always_allowed";
|
|
39
|
+
if (state === "deny") {
|
|
40
|
+
yield* audit(params, "denied", null);
|
|
41
|
+
return yield* deniedError(params, "denied");
|
|
42
|
+
}
|
|
43
|
+
const now = yield* Clock.currentTimeMillis;
|
|
44
|
+
const nonce = yield* Random.nextIntBetween(0, 999_999_999);
|
|
45
|
+
const response = yield* permissionGate.request({
|
|
46
|
+
id: `gate-${now}-${nonce}`,
|
|
47
|
+
operation: params.operation,
|
|
48
|
+
category: getOperationMeta(params.operation).category,
|
|
49
|
+
context: params.context
|
|
50
|
+
}).pipe(Effect.catchTag("PermissionDeniedError", (error) => Effect.gen(function* () {
|
|
51
|
+
if (error.reason === "denied") {
|
|
52
|
+
yield* permissions.set(params.operation, "deny");
|
|
53
|
+
yield* audit(params, "denied", null);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
yield* audit(params, "timed_out", null);
|
|
57
|
+
}
|
|
58
|
+
return yield* deniedError(params, error.reason);
|
|
59
|
+
})));
|
|
60
|
+
if (response === "always_allow") {
|
|
61
|
+
yield* permissions.set(params.operation, "always_allow");
|
|
62
|
+
return "always_allowed";
|
|
63
|
+
}
|
|
64
|
+
if (response === "deny") {
|
|
65
|
+
yield* permissions.set(params.operation, "deny");
|
|
66
|
+
yield* audit(params, "denied", null);
|
|
67
|
+
return yield* deniedError(params, "denied");
|
|
68
|
+
}
|
|
69
|
+
return "allowed";
|
|
70
|
+
});
|
|
71
|
+
const gated = (operation, context, account, method) => (request) => {
|
|
72
|
+
const params = { operation, context: context(request), account: account(request) };
|
|
73
|
+
return Effect.gen(function* () {
|
|
74
|
+
const permissionState = yield* check(params);
|
|
75
|
+
const startedAt = yield* Clock.currentTimeMillis;
|
|
76
|
+
return yield* method(request).pipe(Effect.ensuring(Clock.currentTimeMillis.pipe(Effect.flatMap((completedAt) => audit(params, permissionState, completedAt - startedAt)))));
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
const self = (account) => account;
|
|
80
|
+
const nested = (request) => request.account;
|
|
81
|
+
const listPullRequestIdsPage = gated("listPullRequests", (request) => `List pull requests in ${request.repositoryName}`, nested, inner.listPullRequestIdsPage);
|
|
82
|
+
const getPullRequest = gated("getPullRequest", (request) => `Fetch PR #${request.pullRequestId}`, nested, inner.getPullRequest);
|
|
83
|
+
const listPullRequestsPage = (request) => Effect.gen(function* () {
|
|
84
|
+
const page = yield* listPullRequestIdsPage(request);
|
|
85
|
+
const pullRequests = yield* Effect.forEach(page.pullRequestIds, (pullRequestId) => getPullRequest({ account: request.account, pullRequestId }));
|
|
86
|
+
return new ReadClient.CodeCommitPullRequestPage({ pullRequests, nextToken: page.nextToken });
|
|
87
|
+
});
|
|
88
|
+
const getChangedFilesPage = gated("getDifferences", (request) => `Read differences in ${request.repositoryName}`, nested, inner.getChangedFilesPage);
|
|
89
|
+
const initialPageToken = () => null;
|
|
90
|
+
const streamPullRequests = (request) => Stream.paginate(initialPageToken(), (nextToken) => listPullRequestsPage({ ...request, nextToken }).pipe(Effect.map((page) => [
|
|
91
|
+
page.pullRequests,
|
|
92
|
+
page.nextToken === null ? Option.none() : Option.some(page.nextToken)
|
|
93
|
+
])));
|
|
94
|
+
const streamChangedFiles = (request) => Stream.paginate({ nextToken: null, pageRequests: 0, seenTokens: new Set() }, Effect.fn("PermissionedReadClient.changedFilesPage")(function* (state) {
|
|
95
|
+
if (state.pageRequests >= MAXIMUM_CHANGED_FILE_PAGE_REQUESTS) {
|
|
96
|
+
return yield* new ReadClient.CodeCommitMalformedResponseError({
|
|
97
|
+
operation: "GetDifferences",
|
|
98
|
+
diagnosticCode: "page-request-limit"
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const page = yield* getChangedFilesPage({ ...request, nextToken: state.nextToken });
|
|
102
|
+
if (page.nextToken === null)
|
|
103
|
+
return [page.files, Option.none()];
|
|
104
|
+
if (state.seenTokens.has(page.nextToken)) {
|
|
105
|
+
return yield* new ReadClient.CodeCommitMalformedResponseError({
|
|
106
|
+
operation: "GetDifferences",
|
|
107
|
+
diagnosticCode: "repeated-page-token"
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return [
|
|
111
|
+
page.files,
|
|
112
|
+
Option.some({
|
|
113
|
+
nextToken: page.nextToken,
|
|
114
|
+
pageRequests: state.pageRequests + 1,
|
|
115
|
+
seenTokens: new Set([...state.seenTokens, page.nextToken])
|
|
116
|
+
})
|
|
117
|
+
];
|
|
118
|
+
}));
|
|
119
|
+
return {
|
|
120
|
+
discoverAccount: gated("getCallerIdentity", (account) => `Discover account for ${account.profile}`, self, inner.discoverAccount),
|
|
121
|
+
listRepositoriesPage: gated("listRepositories", (request) => `List repositories for ${request.account.profile}`, nested, inner.listRepositoriesPage),
|
|
122
|
+
getBlob: gated("getBlob", (request) => `Read immutable blob in ${request.repositoryName}`, nested, inner.getBlob),
|
|
123
|
+
listPullRequestIdsPage,
|
|
124
|
+
listPullRequestsPage,
|
|
125
|
+
streamPullRequests,
|
|
126
|
+
getPullRequest,
|
|
127
|
+
getRepositoryIdentity: gated("getRepository", (request) => `Read repository identity for ${request.repositoryName}`, nested, inner.getRepositoryIdentity),
|
|
128
|
+
getChangedFilesPage,
|
|
129
|
+
streamChangedFiles
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=PermissionedReadClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionedReadClient.js","sourceRoot":"","sources":["../../../src/server/internal/PermissionedReadClient.ts"],"names":[],"mappings":"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"}
|