@knpkv/codecommit-core 0.17.1 → 0.19.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.map +1 -1
- package/dist/AwsClient/AwsClientGated.js +2 -0
- package/dist/AwsClient/AwsClientGated.js.map +1 -1
- package/dist/AwsClient/getCallerIdentity.d.ts +2 -0
- package/dist/AwsClient/getCallerIdentity.d.ts.map +1 -1
- package/dist/AwsClient/getCallerIdentity.js +8 -4
- package/dist/AwsClient/getCallerIdentity.js.map +1 -1
- package/dist/AwsClient/getPullRequests.d.ts +41 -2
- package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequests.js +50 -12
- package/dist/AwsClient/getPullRequests.js.map +1 -1
- package/dist/AwsClient/index.d.ts +10 -0
- package/dist/AwsClient/index.d.ts.map +1 -1
- package/dist/AwsClient/index.js +1 -0
- package/dist/AwsClient/index.js.map +1 -1
- package/dist/AwsClientConfig/internal/ProfileCredentialProvider.d.ts +2 -17
- package/dist/AwsClientConfig/internal/ProfileCredentialProvider.d.ts.map +1 -1
- package/dist/AwsClientConfig/internal/ProfileCredentialProvider.js +2 -6
- package/dist/AwsClientConfig/internal/ProfileCredentialProvider.js.map +1 -1
- package/dist/AwsClientConfig.js +1 -1
- package/dist/AwsClientConfig.js.map +1 -1
- package/dist/AwsCredentialErrors.d.ts +8 -0
- package/dist/AwsCredentialErrors.d.ts.map +1 -0
- package/dist/AwsCredentialErrors.js +40 -0
- package/dist/AwsCredentialErrors.js.map +1 -0
- package/dist/AwsProfileCredentials.d.ts +23 -0
- package/dist/AwsProfileCredentials.d.ts.map +1 -0
- package/dist/AwsProfileCredentials.js +29 -0
- package/dist/AwsProfileCredentials.js.map +1 -0
- package/dist/CacheService/repos/NotificationRepo.d.ts +3 -0
- package/dist/CacheService/repos/NotificationRepo.d.ts.map +1 -1
- package/dist/CacheService/repos/NotificationRepo.js +22 -4
- package/dist/CacheService/repos/NotificationRepo.js.map +1 -1
- package/dist/Domain.d.ts +92 -0
- package/dist/Domain.d.ts.map +1 -1
- package/dist/Domain.js +52 -0
- package/dist/Domain.js.map +1 -1
- package/dist/IdentityLifecycle.d.ts +288 -0
- package/dist/IdentityLifecycle.d.ts.map +1 -0
- package/dist/IdentityLifecycle.js +125 -0
- package/dist/IdentityLifecycle.js.map +1 -0
- package/dist/PRService/refresh.d.ts.map +1 -1
- package/dist/PRService/refresh.js +2 -1
- package/dist/PRService/refresh.js.map +1 -1
- package/dist/PRService/refreshFetch.d.ts +2 -0
- package/dist/PRService/refreshFetch.d.ts.map +1 -1
- package/dist/PRService/refreshFetch.js +93 -14
- package/dist/PRService/refreshFetch.js.map +1 -1
- package/dist/PRService/refreshHistory.d.ts.map +1 -1
- package/dist/PRService/refreshHistory.js +2 -1
- package/dist/PRService/refreshHistory.js.map +1 -1
- package/dist/PRService/refreshResolve.d.ts +10 -0
- package/dist/PRService/refreshResolve.d.ts.map +1 -1
- package/dist/PRService/refreshResolve.js +51 -29
- package/dist/PRService/refreshResolve.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
* @internal
|
|
3
3
|
* Phases 1+2: Load cached PRs, resolve config/identity/subscriptions.
|
|
4
4
|
*/
|
|
5
|
-
import { Clock, DateTime, Effect, Option, Ref, Schema, SubscriptionRef } from "effect";
|
|
5
|
+
import { Clock, DateTime, Effect, Match, Option, Ref, Result, Schema, SubscriptionRef } from "effect";
|
|
6
6
|
import { AwsClient } from "../AwsClient/index.js";
|
|
7
|
+
import { isThrottlingError } from "../AwsClient/internal.js";
|
|
7
8
|
import { NotificationRepo } from "../CacheService/repos/NotificationRepo.js";
|
|
8
9
|
import { PullRequestRepo } from "../CacheService/repos/PullRequestRepo/index.js";
|
|
9
10
|
import { SubscriptionRepo } from "../CacheService/repos/SubscriptionRepo.js";
|
|
10
11
|
import { ConfigService } from "../ConfigService/index.js";
|
|
11
12
|
import { AwsRegion } from "../Domain.js";
|
|
13
|
+
import { applyIdentityEvent, IdentityEvent, startRefresh } from "../IdentityLifecycle.js";
|
|
12
14
|
import { decodeCachedPR } from "./internal.js";
|
|
13
15
|
import { enabledProfilesOf, retainEnabledAccountRows } from "./visibility.js";
|
|
14
16
|
export const subscriptionKey = (awsAccountId, pullRequestId, repositoryName, accountRegion) => `${awsAccountId}:${pullRequestId}:${repositoryName ?? ""}:${accountRegion ?? ""}`;
|
|
@@ -31,29 +33,40 @@ const loadingStatus = "loading";
|
|
|
31
33
|
const idleStatus = "idle";
|
|
32
34
|
const accountRegion = (region) => region === undefined ? emptyAwsRegion : decodeAwsRegion(region);
|
|
33
35
|
const primaryRegion = (account) => account.regions[0] ?? defaultAwsRegion;
|
|
34
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Why an identity lookup failed, decided by the error's type alone. Every AWS client error has a
|
|
38
|
+
* reason and there is no default branch, so a new error type fails to compile until it gets one.
|
|
39
|
+
*/
|
|
40
|
+
export const unresolvedReasonOf = (error) => Match.valueTags(error, {
|
|
41
|
+
AwsCredentialError: () => ({ _tag: "CredentialsUnavailable" }),
|
|
42
|
+
// The identity adapter wraps exhausted throttling in AwsApiError, so its cause decides.
|
|
43
|
+
AwsApiError: (apiError) => isThrottlingError(apiError.cause) ? { _tag: "Throttled" } : { _tag: "StsRejected" },
|
|
44
|
+
AwsThrottleError: () => ({ _tag: "Throttled" })
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* Look up the caller in one account: record its AWS account id, and apply the outcome as an identity
|
|
48
|
+
* event of this refresh's generation.
|
|
49
|
+
*/
|
|
50
|
+
const resolveIdentity = (state, generation, accountIdRef, account) => Effect.gen(function* () {
|
|
35
51
|
const awsClient = yield* AwsClient;
|
|
36
52
|
const notificationRepo = yield* NotificationRepo;
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
yield* notificationRepo.addSystem({
|
|
53
|
+
const region = primaryRegion(account);
|
|
54
|
+
const lookup = yield* awsClient.getCallerIdentity({ profile: account.profile, region }).pipe(Effect.result);
|
|
55
|
+
if (Result.isFailure(lookup)) {
|
|
56
|
+
// The identity is applied first, so a notification that fails to persist cannot leave it stale.
|
|
57
|
+
const reason = unresolvedReasonOf(lookup.failure);
|
|
58
|
+
yield* SubscriptionRef.update(state, (s) => applyIdentityEvent(s, IdentityEvent.LookupFailed({ generation, profile: account.profile, reason })));
|
|
59
|
+
return yield* notificationRepo.addSystem({
|
|
44
60
|
type: "error",
|
|
45
61
|
title: `${account.profile} (${region})`,
|
|
46
62
|
message: "Failed to get caller identity — session may have expired",
|
|
47
63
|
profile: account.profile,
|
|
48
64
|
deduplicate: true
|
|
49
|
-
});
|
|
50
|
-
if (clearCurrentUser !== undefined)
|
|
51
|
-
yield* clearCurrentUser;
|
|
52
|
-
return;
|
|
65
|
+
}).pipe(Effect.catch((error) => Effect.logWarning("caller identity notification failed", error)));
|
|
53
66
|
}
|
|
67
|
+
const identity = lookup.success;
|
|
54
68
|
yield* Ref.update(accountIdRef, (m) => new Map(m).set(account.profile, identity.accountId));
|
|
55
|
-
|
|
56
|
-
yield* updateCurrentUser(identity.username);
|
|
69
|
+
yield* SubscriptionRef.update(state, (s) => applyIdentityEvent(s, IdentityEvent.LookupSucceeded({ generation, profile: account.profile, identity })));
|
|
57
70
|
});
|
|
58
71
|
export const resolveAccounts = (state) => Effect.gen(function* () {
|
|
59
72
|
const configService = yield* ConfigService;
|
|
@@ -84,30 +97,39 @@ export const resolveAccounts = (state) => Effect.gen(function* () {
|
|
|
84
97
|
});
|
|
85
98
|
yield* SubscriptionRef.update(state, (s) => ({ ...s, accounts: accountsState }));
|
|
86
99
|
const enabledAccounts = config.accounts.filter((a) => a.enabled);
|
|
100
|
+
// Disabled profiles' identities go now; a newer refresh, login or logout makes this one's events stale.
|
|
101
|
+
const generation = yield* SubscriptionRef.modify(state, (s) => startRefresh(s, enabledAccounts.map((account) => account.profile)));
|
|
102
|
+
const finishResolution = SubscriptionRef.update(state, (s) => applyIdentityEvent(s, IdentityEvent.ResolutionFinished({ generation })));
|
|
87
103
|
if (enabledAccounts.length === 0) {
|
|
88
104
|
const now = yield* Clock.currentTimeMillis;
|
|
89
|
-
yield*
|
|
105
|
+
yield* finishResolution;
|
|
106
|
+
yield* SubscriptionRef.update(state,
|
|
107
|
+
// No account was refreshed, so none of the last refresh's unevaluated pull requests still apply.
|
|
108
|
+
(s) => ({
|
|
109
|
+
...s,
|
|
110
|
+
status: idleStatus,
|
|
111
|
+
lastUpdated: DateTime.toDate(DateTime.makeUnsafe(now)),
|
|
112
|
+
unevaluatedPullRequests: []
|
|
113
|
+
}));
|
|
90
114
|
return undefined;
|
|
91
115
|
}
|
|
92
116
|
// --- Phase 2: Resolve AWS account IDs ---
|
|
117
|
+
// Each account's outcome is applied as soon as its own lookup completes, so a failed account is
|
|
118
|
+
// never shown with its old identity while slower accounts are still resolving.
|
|
93
119
|
const accountIdRef = yield* Ref.make(new Map());
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return undefined;
|
|
97
|
-
const firstRegion = primaryRegion(firstAccount);
|
|
98
|
-
yield* resolveIdentity(accountIdRef, firstAccount, firstRegion, {
|
|
99
|
-
clearCurrentUser: SubscriptionRef.update(state, ({ currentUser: _, ...rest }) => rest),
|
|
100
|
-
updateCurrentUser: (username) => SubscriptionRef.update(state, (s) => ({ ...s, currentUser: username }))
|
|
101
|
-
});
|
|
102
|
-
yield* Effect.forEach(remainingAccounts, (account) => {
|
|
103
|
-
const region = primaryRegion(account);
|
|
104
|
-
return resolveIdentity(accountIdRef, account, region);
|
|
105
|
-
}, { concurrency: 3, discard: true });
|
|
120
|
+
yield* Effect.forEach(enabledAccounts, (account) => resolveIdentity(state, generation, accountIdRef, account), { concurrency: 3, discard: true });
|
|
121
|
+
yield* finishResolution;
|
|
106
122
|
const accountIdMap = yield* Ref.get(accountIdRef);
|
|
107
123
|
// Load subscriptions for diff
|
|
108
124
|
const subscriptions = yield* subscriptionRepo.findAll().pipe(Effect.catchIf(() => true, () => Effect.succeed([])));
|
|
109
125
|
const subscribedRef = yield* Ref.make(new Set(subscriptions.map((s) => subscriptionKey(s.awsAccountId, s.pullRequestId, s.repositoryName, s.accountRegion))));
|
|
110
126
|
const currentUser = (yield* SubscriptionRef.get(state)).currentUser;
|
|
111
|
-
return {
|
|
127
|
+
return {
|
|
128
|
+
accountIdMap,
|
|
129
|
+
currentUser,
|
|
130
|
+
enabledAccounts,
|
|
131
|
+
identityGeneration: generation,
|
|
132
|
+
subscribedRef
|
|
133
|
+
};
|
|
112
134
|
});
|
|
113
135
|
//# sourceMappingURL=refreshResolve.js.map
|
|
@@ -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,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"refreshResolve.js","sourceRoot":"","sources":["../../src/PRService/refreshResolve.ts"],"names":[],"mappings":"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"}
|