@knpkv/codecommit-core 0.18.0 → 0.20.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 +0 -2
- package/dist/AwsClient/AwsClientGated.js.map +1 -1
- package/dist/AwsClient/approvalRuleContent.d.ts +2 -1
- package/dist/AwsClient/approvalRuleContent.d.ts.map +1 -1
- package/dist/AwsClient/approvalRuleContent.js +25 -18
- package/dist/AwsClient/approvalRuleContent.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/getPullRequest.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequest.js +19 -10
- package/dist/AwsClient/getPullRequest.js.map +1 -1
- package/dist/AwsClient/getPullRequests.d.ts +30 -23
- package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequests.js +47 -32
- package/dist/AwsClient/getPullRequests.js.map +1 -1
- package/dist/AwsClient/index.d.ts +1 -10
- package/dist/AwsClient/index.d.ts.map +1 -1
- package/dist/AwsClient/index.js +0 -1
- package/dist/AwsClient/index.js.map +1 -1
- package/dist/AwsClient/internal.d.ts +11 -1
- package/dist/AwsClient/internal.d.ts.map +1 -1
- package/dist/AwsClient/internal.js +7 -0
- package/dist/AwsClient/internal.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/Database.d.ts +1 -1
- package/dist/CacheService/Database.d.ts.map +1 -1
- package/dist/CacheService/Database.js +6 -2
- package/dist/CacheService/Database.js.map +1 -1
- package/dist/CacheService/diff.d.ts +10 -0
- package/dist/CacheService/diff.d.ts.map +1 -1
- package/dist/CacheService/diff.js +12 -1
- package/dist/CacheService/diff.js.map +1 -1
- package/dist/CacheService/migrations/0022_pull_request_approval_unknown.d.ts +9 -0
- package/dist/CacheService/migrations/0022_pull_request_approval_unknown.d.ts.map +1 -0
- package/dist/CacheService/migrations/0022_pull_request_approval_unknown.js +8 -0
- package/dist/CacheService/migrations/0022_pull_request_approval_unknown.js.map +1 -0
- package/dist/CacheService/migrations/0023_pull_request_row_versions.d.ts +17 -0
- package/dist/CacheService/migrations/0023_pull_request_row_versions.d.ts.map +1 -0
- package/dist/CacheService/migrations/0023_pull_request_row_versions.js +37 -0
- package/dist/CacheService/migrations/0023_pull_request_row_versions.js.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/index.d.ts +34 -8
- package/dist/CacheService/repos/PullRequestRepo/index.d.ts.map +1 -1
- package/dist/CacheService/repos/PullRequestRepo/index.js +1 -1
- package/dist/CacheService/repos/PullRequestRepo/index.js.map +1 -1
- package/dist/CacheService/repos/PullRequestRepo/internal.d.ts +69 -2
- package/dist/CacheService/repos/PullRequestRepo/internal.d.ts.map +1 -1
- package/dist/CacheService/repos/PullRequestRepo/internal.js +73 -2
- package/dist/CacheService/repos/PullRequestRepo/internal.js.map +1 -1
- package/dist/CacheService/repos/PullRequestRepo/mutations.d.ts +39 -16
- package/dist/CacheService/repos/PullRequestRepo/mutations.d.ts.map +1 -1
- package/dist/CacheService/repos/PullRequestRepo/mutations.js +61 -92
- package/dist/CacheService/repos/PullRequestRepo/mutations.js.map +1 -1
- package/dist/CacheService/repos/PullRequestRepo/queries.d.ts +24 -0
- package/dist/CacheService/repos/PullRequestRepo/queries.d.ts.map +1 -1
- package/dist/CacheService/repos/PullRequestRepo/queries.js +10 -3
- package/dist/CacheService/repos/PullRequestRepo/queries.js.map +1 -1
- package/dist/CacheService/repos/PullRequestRepo/rowWrites.d.ts +131 -0
- package/dist/CacheService/repos/PullRequestRepo/rowWrites.d.ts.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo/rowWrites.js +214 -0
- package/dist/CacheService/repos/PullRequestRepo/rowWrites.js.map +1 -0
- package/dist/CacheService/repos/StatsRepo/internal.d.ts +0 -1
- package/dist/CacheService/repos/StatsRepo/internal.d.ts.map +1 -1
- package/dist/CacheService/repos/StatsRepo/internal.js.map +1 -1
- package/dist/CacheService/repos/StatsRepo/queries.d.ts.map +1 -1
- package/dist/CacheService/repos/StatsRepo/queries.js +2 -1
- package/dist/CacheService/repos/StatsRepo/queries.js.map +1 -1
- package/dist/CacheService/repos/StatsRepo/reviewerData.d.ts.map +1 -1
- package/dist/CacheService/repos/StatsRepo/reviewerData.js +1 -2
- package/dist/CacheService/repos/StatsRepo/reviewerData.js.map +1 -1
- package/dist/Domain.d.ts +153 -7
- package/dist/Domain.d.ts.map +1 -1
- package/dist/Domain.js +107 -1
- package/dist/Domain.js.map +1 -1
- package/dist/HealthScore.d.ts +1 -1
- package/dist/HealthScore.d.ts.map +1 -1
- package/dist/HealthScore.js +20 -5
- package/dist/HealthScore.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/internal.d.ts +17 -1
- package/dist/PRService/internal.d.ts.map +1 -1
- package/dist/PRService/internal.js +8 -0
- package/dist/PRService/internal.js.map +1 -1
- 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/refreshDiffs.d.ts.map +1 -1
- package/dist/PRService/refreshDiffs.js +8 -5
- package/dist/PRService/refreshDiffs.js.map +1 -1
- package/dist/PRService/refreshEnrich.d.ts.map +1 -1
- package/dist/PRService/refreshEnrich.js +26 -45
- package/dist/PRService/refreshEnrich.js.map +1 -1
- package/dist/PRService/refreshFetch.d.ts +3 -1
- package/dist/PRService/refreshFetch.d.ts.map +1 -1
- package/dist/PRService/refreshFetch.js +108 -74
- package/dist/PRService/refreshFetch.js.map +1 -1
- package/dist/PRService/refreshHistory.d.ts.map +1 -1
- package/dist/PRService/refreshHistory.js +19 -11
- 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 +43 -28
- package/dist/PRService/refreshResolve.js.map +1 -1
- package/dist/PRService/refreshScore.d.ts.map +1 -1
- package/dist/PRService/refreshScore.js +4 -2
- package/dist/PRService/refreshScore.js.map +1 -1
- package/dist/PRService/refreshSinglePR.d.ts.map +1 -1
- package/dist/PRService/refreshSinglePR.js +44 -25
- package/dist/PRService/refreshSinglePR.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AwsClientGated.d.ts","sourceRoot":"","sources":["../../src/AwsClient/AwsClientGated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAS,OAAO,EAAU,KAAK,EAA0B,MAAM,QAAQ,CAAA;AAG9E,OAAO,EAAE,YAAY,EAAyB,MAAM,kCAAkC,CAAA;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"AwsClientGated.d.ts","sourceRoot":"","sources":["../../src/AwsClient/AwsClientGated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAS,OAAO,EAAU,KAAK,EAA0B,MAAM,QAAQ,CAAA;AAG9E,OAAO,EAAE,YAAY,EAAyB,MAAM,kCAAkC,CAAA;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAuB,MAAM,YAAY,CAAA;;AAG3D,qBAAa,cAAe,SAAQ,mBAGQ;CAAG;AA4B/C,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAC1C,SAAS,EACT,KAAK,EACL,cAAc,GAAG,iBAAiB,GAAG,cAAc,GAAG,YAAY,CAiMnE,CAAA"}
|
|
@@ -115,8 +115,6 @@ export const AwsClientGatedLive = Layer.effect(AwsClient, Effect.gen(function* (
|
|
|
115
115
|
const nested = (p) => p.account;
|
|
116
116
|
return {
|
|
117
117
|
getPullRequests: (account, options) => gatedStream("getPullRequests", ({ account }) => `List PRs for ${account.profile}`, nested, ({ account, options }) => inner.getPullRequests(account, options))({ account, options }),
|
|
118
|
-
// The same provider read as getPullRequests, so the same permission and audit operation.
|
|
119
|
-
getPullRequestRefresh: (account, options) => gatedStream("getPullRequests", ({ account }) => `List PRs for ${account.profile}`, nested, ({ account, options }) => inner.getPullRequestRefresh(account, options))({ account, options }),
|
|
120
118
|
getCallerIdentity: gated("getCallerIdentity", (a) => `Get identity for ${a.profile}`, self, inner.getCallerIdentity),
|
|
121
119
|
createPullRequest: gated("createPullRequest", (p) => `Create PR on ${p.repositoryName}`, nested, inner.createPullRequest),
|
|
122
120
|
listBranches: gated("listBranches", (p) => `List branches in ${p.repositoryName}`, nested, inner.listBranches),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AwsClientGated.js","sourceRoot":"","sources":["../../src/AwsClient/AwsClientGated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAoB,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,YAAY,EAAyB,MAAM,kCAAkC,CAAA;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"AwsClientGated.js","sourceRoot":"","sources":["../../src/AwsClient/AwsClientGated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAoB,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,YAAY,EAAyB,MAAM,kCAAkC,CAAA;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAuB,MAAM,YAAY,CAAA;AAE3D,0FAA0F;AAC1F,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,OAAO,EAGhD,CAAC,uCAAuC,CAAC;CAAG;AAe/C,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;AAC9D,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;AACpD,MAAM,kBAAkB,GAAuB,gBAAgB,CAAA;AAC/D,MAAM,YAAY,GAAuB,SAAS,CAAA;AAElD,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,MAA4B,EAAE,EAAE,CACpE,IAAI,WAAW,CAAC;IACd,SAAS,EAAE,CAAC,CAAC,SAAS;IACtB,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,cAAc,CAAC;IAC/C,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,IAAI,qBAAqB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrE,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAI3B,KAAK,CAAC,MAAM,CACd,SAAS,EACT,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAA;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,YAAY,CAAA;IACpC,4DAA4D;IAE5D,yDAAyD;IACzD,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,CACf,MAAkB,EAClB,eAAoD,EACpD,UAAyB,EACJ,EAAE,CACvB,WAAW,CAAC,cAAc,EAAE,CAAC,IAAI,CAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACzB,OAAO;QACL,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACvB,QAAQ,CAAC,GAAG,CAAC;YACX,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;YACxC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU;SACX,CAAC,CACH,CACF;QACD,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,EACD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAChC,CAAA;IAEH,MAAM,UAAU,GAAG,CAAC,MAAkB,EAA+D,EAAE,CACrG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAA;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;QAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;YAC1C,EAAE,EAAE,QAAQ,GAAG,IAAI,KAAK,EAAE;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;QAEhE,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;YAChC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;YACxD,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YAChD,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;YACvC,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC/C,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC,CAAC,CAAA;IAEJ,MAAM,eAAe,GAAG,CACtB,MAAkB,EAC2C,EAAE,CAC/D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACxD,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC7B,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;YACvC,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC/C,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEJ,8EAA8E;IAE9E,8EAA8E;IAC9E,MAAM,KAAK,GAAG,CACZ,EAAU,EACV,GAA8B,EAC9B,IAA4D,EAC5D,MAAkD,EAClD,EAAE,CACJ,CAAC,MAAS,EAAoC,EAAE;QAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QACtB,MAAM,CAAC,GAAe,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;QAC1G,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAA;YAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACpC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAA;YAC1C,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,KAAK,CAAC,CAAA;YACnC,OAAO,MAAM,CAAA;QACf,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAClB,EAAU,EACV,GAA8B,EAC9B,IAA4D,EAC5D,MAAkD,EAClD,EAAE,CACJ,CAAC,MAAS,EAAoC,EAAE;QAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QACtB,MAAM,CAAC,GAAe,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;QAC1G,OAAO,MAAM,CAAC,MAAM,CAClB,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CACpB,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClD,EAAE;YACF,KAAK;SACN,CAAC,CAAC,CAAC,CACL,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACjB,MAAM,CAAC,KAAK,CACV,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CACtD,CACF,CACF,CACF,CACF,CACF,CAAA;IACH,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,CAAsC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAG,CAAC,CAAmD,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IAEjF,OAAO;QACL,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACpC,WAAW,CACT,iBAAiB,EACjB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,gBAAgB,OAAO,CAAC,OAAO,EAAE,EAClD,MAAM,EACN,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAClE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QACzB,iBAAiB,EAAE,KAAK,CACtB,mBAAmB,EACnB,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,EACtC,IAAI,EACJ,KAAK,CAAC,iBAAiB,CACxB;QACD,iBAAiB,EAAE,KAAK,CACtB,mBAAmB,EACnB,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,cAAc,EAAE,EACzC,MAAM,EACN,KAAK,CAAC,iBAAiB,CACxB;QACD,YAAY,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC;QAC9G,yBAAyB,EAAE,KAAK,CAC9B,2BAA2B,EAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,aAAa,EAAE,EAC5C,MAAM,EACN,KAAK,CAAC,yBAAyB,CAChC;QACD,sBAAsB,EAAE,KAAK,CAC3B,wBAAwB,EACxB,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,aAAa,EAAE,EAC7C,MAAM,EACN,KAAK,CAAC,sBAAsB,CAC7B;QACD,4BAA4B,EAAE,KAAK,CACjC,8BAA8B,EAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,aAAa,EAAE,EAC5C,MAAM,EACN,KAAK,CAAC,4BAA4B,CACnC;QACD,cAAc,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC;QAC5G,cAAc,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC;QAC5G,kBAAkB,EAAE,KAAK,CACvB,oBAAoB,EACpB,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,YAAY,CAAC,CAAC,aAAa,EAAE,EACtE,MAAM,EACN,KAAK,CAAC,kBAAkB,CACzB;QACD,kBAAkB,EAAE,KAAK,CACvB,oBAAoB,EACpB,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,YAAY,CAAC,CAAC,aAAa,EAAE,EACtE,MAAM,EACN,KAAK,CAAC,kBAAkB,CACzB;QACD,kBAAkB,EAAE,KAAK,CACvB,oBAAoB,EACpB,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,YAAY,CAAC,CAAC,aAAa,EAAE,EACtE,MAAM,EACN,KAAK,CAAC,kBAAkB,CACzB;KAC0B,CAAA;AAC/B,CAAC,CAAC,CACH,CAAA"}
|
|
@@ -8,7 +8,8 @@ interface ParsedRule {
|
|
|
8
8
|
* Parse AWS approval rule content JSON into pool members + required count.
|
|
9
9
|
* Format: {"Version":"2018-11-08","Statements":[{"Type":"Approvers","NumberOfApprovalsNeeded":N,"ApprovalPoolMembers":["arn:..."]}]}
|
|
10
10
|
*
|
|
11
|
-
* Falls back to defaults on
|
|
11
|
+
* Falls back to defaults on content it cannot read, and logs the schema error, which names the path
|
|
12
|
+
* that failed, so a rule shown with no pool can be traced.
|
|
12
13
|
*/
|
|
13
14
|
export declare const parseRuleContent: (content?: string) => Effect.Effect<ParsedRule>;
|
|
14
15
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvalRuleContent.d.ts","sourceRoot":"","sources":["../../src/AwsClient/approvalRuleContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"approvalRuleContent.d.ts","sourceRoot":"","sources":["../../src/AwsClient/approvalRuleContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAA;AA6BrD,UAAU,UAAU;IAClB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACnC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACvC;AASD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,aAAc,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAkBzE,CAAA"}
|
|
@@ -1,16 +1,25 @@
|
|
|
1
|
-
import { Effect,
|
|
1
|
+
import { Effect, Schema, SchemaGetter } from "effect";
|
|
2
2
|
import { normalizeAuthor } from "./internal.js";
|
|
3
3
|
// AWS returns NumberOfApprovalsNeeded as number or string. A malformed count
|
|
4
4
|
// must not discard ApprovalPoolMembers, so the count is coerced separately.
|
|
5
|
+
// AWS stores ApprovalPoolMembers as written, and a single member can come back as a bare string
|
|
6
|
+
// (an "anyone" rule written as ["*"] has been read back as "*"), so both forms are read as a list.
|
|
7
|
+
const PoolMembers = Schema.Union([
|
|
8
|
+
Schema.Array(Schema.String),
|
|
9
|
+
Schema.String.pipe(Schema.decodeTo(Schema.Array(Schema.String), {
|
|
10
|
+
decode: SchemaGetter.transform((member) => [member]),
|
|
11
|
+
encode: SchemaGetter.transform((members) => members[0] ?? "")
|
|
12
|
+
}))
|
|
13
|
+
]);
|
|
5
14
|
const RuleStatement = Schema.Struct({
|
|
6
15
|
NumberOfApprovalsNeeded: Schema.optional(Schema.Unknown),
|
|
7
|
-
ApprovalPoolMembers: Schema.optional(
|
|
16
|
+
ApprovalPoolMembers: Schema.optional(PoolMembers)
|
|
8
17
|
});
|
|
9
18
|
const RuleContent = Schema.Struct({
|
|
10
19
|
Statements: Schema.optional(Schema.Array(RuleStatement))
|
|
11
20
|
});
|
|
12
21
|
const RuleContentFromJson = Schema.fromJsonString(RuleContent);
|
|
13
|
-
const decodeRuleContent = Schema.
|
|
22
|
+
const decodeRuleContent = Schema.decodeUnknownEffect(RuleContentFromJson);
|
|
14
23
|
const ruleDefaults = { requiredApprovals: 1, poolMembers: [], poolMemberArns: [] };
|
|
15
24
|
const coerceApprovalCount = (raw) => {
|
|
16
25
|
const n = Number(raw ?? 1);
|
|
@@ -20,20 +29,18 @@ const coerceApprovalCount = (raw) => {
|
|
|
20
29
|
* Parse AWS approval rule content JSON into pool members + required count.
|
|
21
30
|
* Format: {"Version":"2018-11-08","Statements":[{"Type":"Approvers","NumberOfApprovalsNeeded":N,"ApprovalPoolMembers":["arn:..."]}]}
|
|
22
31
|
*
|
|
23
|
-
* Falls back to defaults on
|
|
32
|
+
* Falls back to defaults on content it cannot read, and logs the schema error, which names the path
|
|
33
|
+
* that failed, so a rule shown with no pool can be traced.
|
|
24
34
|
*/
|
|
25
|
-
export const parseRuleContent = (content) =>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
? Effect.logWarning("Failed to parse approval rule content", { content }).pipe(Effect.as(ruleDefaults))
|
|
37
|
-
: Effect.succeed(ruleDefaults)
|
|
38
|
-
});
|
|
35
|
+
export const parseRuleContent = (content) => decodeRuleContent(content ?? "{}").pipe(Effect.map((parsed) => {
|
|
36
|
+
const stmt = parsed.Statements?.[0];
|
|
37
|
+
const rawArns = [...(stmt?.ApprovalPoolMembers ?? [])];
|
|
38
|
+
return {
|
|
39
|
+
requiredApprovals: coerceApprovalCount(stmt?.NumberOfApprovalsNeeded),
|
|
40
|
+
poolMembers: rawArns.map(normalizeAuthor),
|
|
41
|
+
poolMemberArns: rawArns
|
|
42
|
+
};
|
|
43
|
+
}), Effect.catch((error) => content
|
|
44
|
+
? Effect.logWarning("Failed to parse approval rule content", { error: error.message }).pipe(Effect.as(ruleDefaults))
|
|
45
|
+
: Effect.succeed(ruleDefaults)));
|
|
39
46
|
//# sourceMappingURL=approvalRuleContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvalRuleContent.js","sourceRoot":"","sources":["../../src/AwsClient/approvalRuleContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"approvalRuleContent.js","sourceRoot":"","sources":["../../src/AwsClient/approvalRuleContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,6EAA6E;AAC7E,4EAA4E;AAC5E,gGAAgG;AAChG,mGAAmG;AACnG,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QAC3C,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KAC9D,CAAC,CACH;CACF,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,uBAAuB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACxD,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;CAClD,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;CACzD,CAAC,CAAA;AAEF,MAAM,mBAAmB,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;AAC9D,MAAM,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAA;AAQzE,MAAM,YAAY,GAAe,EAAE,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAA;AAE9F,MAAM,mBAAmB,GAAG,CAAgB,GAAkB,EAAU,EAAE;IACxE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAgB,EAA6B,EAAE,CAC9E,iBAAiB,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CACrC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAc,EAAE;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAA;IACtD,OAAO;QACL,iBAAiB,EAAE,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,CAAC;QACrE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACzC,cAAc,EAAE,OAAO;KACxB,CAAA;AACH,CAAC,CAAC,EACF,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,OAAO;IACL,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACzF,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CACxB;IACD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CACjC,CACF,CAAA"}
|
|
@@ -3,6 +3,8 @@ import { type AccountParams } from "./internal.js";
|
|
|
3
3
|
export interface CallerIdentity {
|
|
4
4
|
readonly username: string;
|
|
5
5
|
readonly accountId: string;
|
|
6
|
+
/** Raw STS Arn, e.g. `arn:aws:sts::123:assumed-role/Reviewers/alice`. */
|
|
7
|
+
readonly arn: string;
|
|
6
8
|
}
|
|
7
9
|
export declare const getCallerIdentity: (account: AccountParams) => Effect.Effect<CallerIdentity, import("./internal.js").AwsApiError | import("./internal.js").AwsCredentialError, import("../AwsClientConfig.ts").AwsClientConfig | import("effect/http/HttpClient").HttpClient>;
|
|
8
10
|
//# sourceMappingURL=getCallerIdentity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCallerIdentity.d.ts","sourceRoot":"","sources":["../../src/AwsClient/getCallerIdentity.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"getCallerIdentity.d.ts","sourceRoot":"","sources":["../../src/AwsClient/getCallerIdentity.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,KAAK,aAAa,EAAiD,MAAM,eAAe,CAAA;AAEjG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAiBD,eAAO,MAAM,iBAAiB,YAAa,aAAa,mNACsB,CAAA"}
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
* @internal
|
|
3
3
|
*/
|
|
4
4
|
import * as sts from "@distilled.cloud/aws/sts";
|
|
5
|
-
import { Effect } from "effect";
|
|
5
|
+
import { Effect, Schema } from "effect";
|
|
6
6
|
import { makeApiError, normalizeAuthor, withAwsContext } from "./internal.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/** STS may omit both fields; an identity without them is not resolved, so the lookup fails instead. */
|
|
8
|
+
const StsIdentity = Schema.Struct({ Account: Schema.NonEmptyString, Arn: Schema.NonEmptyString });
|
|
9
|
+
const decodeStsIdentity = Schema.decodeUnknownEffect(StsIdentity);
|
|
10
|
+
const callGetCallerIdentity = (account) => sts.getCallerIdentity({}).pipe(Effect.flatMap(decodeStsIdentity), Effect.map(({ Account, Arn }) => ({
|
|
11
|
+
username: normalizeAuthor(Arn),
|
|
12
|
+
accountId: Account,
|
|
13
|
+
arn: Arn
|
|
10
14
|
})), Effect.mapError((cause) => makeApiError("getCallerIdentity", account.profile, account.region, cause)));
|
|
11
15
|
export const getCallerIdentity = (account) => withAwsContext("getCallerIdentity", account, callGetCallerIdentity(account));
|
|
12
16
|
//# sourceMappingURL=getCallerIdentity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCallerIdentity.js","sourceRoot":"","sources":["../../src/AwsClient/getCallerIdentity.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,GAAG,MAAM,0BAA0B,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"getCallerIdentity.js","sourceRoot":"","sources":["../../src/AwsClient/getCallerIdentity.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,GAAG,MAAM,0BAA0B,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAsB,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AASjG,uGAAuG;AACvG,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;AACjG,MAAM,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAA;AAEjE,MAAM,qBAAqB,GAAG,CAAC,OAAsB,EAAE,EAAE,CACvD,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,IAAI,CAC5B,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EACjC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAkB,EAAE,CAAC,CAAC;IAChD,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC;IAC9B,SAAS,EAAE,OAAO;IAClB,GAAG,EAAE,GAAG;CACT,CAAC,CAAC,EACH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CACtG,CAAA;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAsB,EAAE,EAAE,CAC1D,cAAc,CAAC,mBAAmB,EAAE,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPullRequest.d.ts","sourceRoot":"","sources":["../../src/AwsClient/getPullRequest.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"getPullRequest.d.ts","sourceRoot":"","sources":["../../src/AwsClient/getPullRequest.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAA;AASrD,OAAO,EACL,KAAK,oBAAoB,EAGzB,iBAAiB,EAElB,MAAM,eAAe,CAAA;AA0GtB,eAAO,MAAM,cAAc,WAAY,oBAAoB,sNAKxD,CAAA"}
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
* ```
|
|
9
9
|
* codecommit.getPullRequest ─┬─► decodePullRequestDetail
|
|
10
10
|
* ├─► fetchApprovers → { names, arns }
|
|
11
|
-
* ├─►
|
|
11
|
+
* ├─► evaluateApproval → satisfiedNames, or approval unknown
|
|
12
12
|
* └─► fetchRepoAccountId → repo account ID
|
|
13
13
|
* ```
|
|
14
14
|
*
|
|
15
|
-
* - Shared: {@link buildApprovalRules}, {@link
|
|
15
|
+
* - Shared: {@link buildApprovalRules}, {@link evaluateApproval},
|
|
16
16
|
* {@link fetchRepoAccountId} from getPullRequests.ts
|
|
17
17
|
* - Runs inside {@link withAwsContext} (Credentials + Region + AwsClientConfig)
|
|
18
18
|
*
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
*/
|
|
26
26
|
import * as codecommit from "@distilled.cloud/aws/codecommit";
|
|
27
27
|
import { Effect, Schema, SchemaGetter } from "effect";
|
|
28
|
-
import { buildApprovalRules,
|
|
28
|
+
import { buildApprovalRules, evaluateApproval, fetchApprovers, fetchMergeStatus, fetchRepoAccountId, MissingPullRequestResponse } from "./getPullRequests.js";
|
|
29
29
|
import { makeApiError, normalizeAuthor, PullRequestDetail, withAwsContext } from "./internal.js";
|
|
30
30
|
const EpochFallback = new Date(0);
|
|
31
31
|
// Bidirectional Schema: raw AWS GetPullRequest response ↔ PullRequestDetail
|
|
@@ -94,21 +94,30 @@ const RawToPullRequestDetail = RawGetPullRequestResponse.pipe(Schema.decodeTo(Pu
|
|
|
94
94
|
const decodePullRequestDetail = (raw) => Schema.decodeUnknownEffect(RawToPullRequestDetail)(raw);
|
|
95
95
|
const callGetPullRequest = (params) => Effect.gen(function* () {
|
|
96
96
|
const resp = yield* codecommit.getPullRequest({ pullRequestId: params.pullRequestId });
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
// Approval unknown is only truthful about a pull request that was read.
|
|
98
|
+
if (resp.pullRequest === undefined) {
|
|
99
|
+
return yield* new MissingPullRequestResponse({ pullRequestId: params.pullRequestId });
|
|
100
|
+
}
|
|
101
|
+
const revisionId = resp.pullRequest.revisionId ?? "";
|
|
102
|
+
const repoName = resp.pullRequest.pullRequestTargets?.[0]?.repositoryName ?? "";
|
|
103
|
+
const [detail, approvers, evaluation, repoAccountId, isMergeable] = yield* Effect.all([
|
|
100
104
|
decodePullRequestDetail(resp),
|
|
101
105
|
fetchApprovers(params.pullRequestId, revisionId),
|
|
102
|
-
|
|
103
|
-
fetchRepoAccountId(repoName)
|
|
104
|
-
|
|
106
|
+
evaluateApproval(params.pullRequestId, revisionId),
|
|
107
|
+
fetchRepoAccountId(repoName),
|
|
108
|
+
// As the listing reads it, so a re-read writes the whole row, mergeability included.
|
|
109
|
+
fetchMergeStatus(repoName, resp.pullRequest.pullRequestTargets?.[0])
|
|
110
|
+
], { concurrency: 5 });
|
|
105
111
|
const approvalRules = yield* buildApprovalRules(resp.pullRequest?.approvalRules ?? [], evaluation.satisfiedNames);
|
|
106
112
|
return new PullRequestDetail({
|
|
107
113
|
...detail,
|
|
108
114
|
approvedBy: approvers.names,
|
|
109
115
|
approvedByArns: approvers.arns,
|
|
110
116
|
approvalRules,
|
|
111
|
-
repoAccountId: repoAccountId || undefined
|
|
117
|
+
repoAccountId: repoAccountId || undefined,
|
|
118
|
+
isMergeable,
|
|
119
|
+
isApproved: evaluation.isApproved,
|
|
120
|
+
approvalUnknown: evaluation.approvalUnknown
|
|
112
121
|
});
|
|
113
122
|
}).pipe(Effect.mapError((cause) => makeApiError("getPullRequest", params.account.profile, params.account.region, cause)));
|
|
114
123
|
export const getPullRequest = (params) => withAwsContext("getPullRequest", params.account, callGetPullRequest(params));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPullRequest.js","sourceRoot":"","sources":["../../src/AwsClient/getPullRequest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"getPullRequest.js","sourceRoot":"","sources":["../../src/AwsClient/getPullRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,14 +31,23 @@
|
|
|
31
31
|
* @internal
|
|
32
32
|
*/
|
|
33
33
|
import type { Credentials, Region } from "@distilled.cloud/aws";
|
|
34
|
+
import * as codecommit from "@distilled.cloud/aws/codecommit";
|
|
34
35
|
import { Effect, Schema, Stream } from "effect";
|
|
35
36
|
import { HttpClient } from "effect/http";
|
|
36
37
|
import { AwsClientConfig } from "../AwsClientConfig.js";
|
|
37
|
-
import { PullRequest } from "../Domain.js";
|
|
38
|
+
import { ApprovalUnknownReason, PullRequest } from "../Domain.js";
|
|
38
39
|
import type { AwsClientError } from "../Errors.js";
|
|
39
40
|
import { type AccountParams } from "./internal.js";
|
|
40
41
|
type AwsMethodEnv = AwsClientConfig | Credentials.Credentials | Region.Region | HttpClient.HttpClient;
|
|
41
42
|
type AwsStreamEnv = Credentials.Credentials | Region.Region | HttpClient.HttpClient;
|
|
43
|
+
declare const MissingPullRequestResponse_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
44
|
+
readonly _tag: "MissingPullRequestResponse";
|
|
45
|
+
} & Readonly<A>;
|
|
46
|
+
/** CodeCommit answered GetPullRequest without a pull request: nothing was read, so nothing can be reported about it. */
|
|
47
|
+
export declare class MissingPullRequestResponse extends MissingPullRequestResponse_base<{
|
|
48
|
+
readonly pullRequestId: string;
|
|
49
|
+
}> {
|
|
50
|
+
}
|
|
42
51
|
declare const ApprovalEvaluationError_base: Schema.Class<ApprovalEvaluationError, Schema.TaggedStruct<"ApprovalEvaluationError", {
|
|
43
52
|
readonly pullRequestId: Schema.String;
|
|
44
53
|
readonly revisionId: Schema.String;
|
|
@@ -60,6 +69,17 @@ export declare const fetchApprovalEvaluation: (pullRequestId: string, revisionId
|
|
|
60
69
|
readonly isApproved: boolean;
|
|
61
70
|
readonly satisfiedNames: Set<string>;
|
|
62
71
|
}, ApprovalEvaluationError, AwsMethodEnv>;
|
|
72
|
+
/** Why an evaluation failed, decided from the provider error's type, never its message text. */
|
|
73
|
+
export declare const approvalUnknownReasonOf: (error: ApprovalEvaluationError) => ApprovalUnknownReason;
|
|
74
|
+
/**
|
|
75
|
+
* Evaluate a revision's approval rules without failing: a failed evaluation leaves approval unknown,
|
|
76
|
+
* with no satisfied rules, and logs the provider's message.
|
|
77
|
+
*/
|
|
78
|
+
export declare const evaluateApproval: (pullRequestId: string, revisionId: string) => Effect.Effect<{
|
|
79
|
+
readonly isApproved: boolean;
|
|
80
|
+
readonly satisfiedNames: Set<string>;
|
|
81
|
+
readonly approvalUnknown: ApprovalUnknownReason | undefined;
|
|
82
|
+
}, ApprovalEvaluationError, AwsMethodEnv>;
|
|
63
83
|
/** Plain data shape matching ApprovalRule — avoids Schema.Class branding. */
|
|
64
84
|
export interface ApprovalRuleData {
|
|
65
85
|
readonly ruleName: string;
|
|
@@ -87,31 +107,18 @@ export declare const fetchApprovers: (pullRequestId: string, revisionId: string)
|
|
|
87
107
|
readonly names: Array<string>;
|
|
88
108
|
readonly arns: Array<string>;
|
|
89
109
|
}, never, AwsMethodEnv>;
|
|
90
|
-
export declare const fetchRepoAccountId: (repoName: string) => Effect.Effect<string | undefined, never, AwsStreamEnv>;
|
|
91
|
-
/**
|
|
92
|
-
* One pull request from a refresh: fetched in full, or read but with approval rules that could not be
|
|
93
|
-
* evaluated. A failed evaluation affects only that pull request, so a refresh carries on with the rest.
|
|
94
|
-
*/
|
|
95
|
-
export type PullRequestRefreshItem = {
|
|
96
|
-
readonly _tag: "Fetched";
|
|
97
|
-
readonly pullRequest: PullRequest;
|
|
98
|
-
} | {
|
|
99
|
-
readonly _tag: "EvaluationFailed";
|
|
100
|
-
readonly pullRequestId: string;
|
|
101
|
-
readonly repositoryName: string;
|
|
102
|
-
readonly error: ApprovalEvaluationError;
|
|
103
|
-
};
|
|
104
110
|
/**
|
|
105
|
-
*
|
|
106
|
-
* Any other failure (listing, reading, decoding) still fails the stream with an `AwsApiError`.
|
|
111
|
+
* Check PR merge status.
|
|
107
112
|
*/
|
|
108
|
-
export declare const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}) =>
|
|
113
|
+
export declare const fetchMergeStatus: (repoName: string, target?: {
|
|
114
|
+
destinationCommit?: string;
|
|
115
|
+
sourceCommit?: string;
|
|
116
|
+
}) => Effect.Effect<boolean, codecommit.GetMergeConflictsError, AwsClientConfig | Credentials.Credentials | HttpClient.HttpClient>;
|
|
117
|
+
export declare const fetchRepoAccountId: (repoName: string) => Effect.Effect<string | undefined, never, AwsStreamEnv>;
|
|
112
118
|
/**
|
|
113
|
-
* Stream every pull request of one account. A pull request whose approval rules cannot be evaluated
|
|
114
|
-
*
|
|
119
|
+
* Stream every pull request of one account. A pull request whose approval rules cannot be evaluated is
|
|
120
|
+
* still listed, with `approvalUnknown` set. Any other failure (listing, reading, decoding) fails the
|
|
121
|
+
* stream with an `AwsApiError`.
|
|
115
122
|
*/
|
|
116
123
|
export declare const getPullRequests: (account: AccountParams, options?: {
|
|
117
124
|
status?: "OPEN" | "CLOSED";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPullRequests.d.ts","sourceRoot":"","sources":["../../src/AwsClient/getPullRequests.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"getPullRequests.d.ts","sourceRoot":"","sources":["../../src/AwsClient/getPullRequests.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,16 @@ import * as DistilledRegion from "@distilled.cloud/aws/Region";
|
|
|
4
4
|
import { Data, Effect, Predicate, Schema, SchemaGetter, Stream } from "effect";
|
|
5
5
|
import { HttpClient } from "effect/http";
|
|
6
6
|
import { AwsClientConfig } from "../AwsClientConfig.js";
|
|
7
|
-
import {
|
|
7
|
+
import { isCredentialInvalidCause } from "../AwsCredentialErrors.js";
|
|
8
|
+
import { Account, ApprovalRule, ApprovalUnknownReason, codecommitConsoleUrl, normalizeAccountId, PullRequest } from "../Domain.js";
|
|
8
9
|
import { parseRuleContent } from "./approvalRuleContent.js";
|
|
9
|
-
import { acquireCredentials, makeApiError, normalizeAuthor, throttleRetry } from "./internal.js";
|
|
10
|
+
import { acquireCredentials, isThrottlingError, makeApiError, normalizeAuthor, throttleRetry } from "./internal.js";
|
|
10
11
|
const listPullRequestsPages = (input) => codecommit.listPullRequests.pages(input);
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
12
13
|
// Sub-helpers
|
|
13
14
|
// ---------------------------------------------------------------------------
|
|
14
|
-
|
|
15
|
+
/** CodeCommit answered GetPullRequest without a pull request: nothing was read, so nothing can be reported about it. */
|
|
16
|
+
export class MissingPullRequestResponse extends Data.TaggedError("MissingPullRequestResponse") {
|
|
15
17
|
}
|
|
16
18
|
const decodeAccount = Schema.decodeSync(Account);
|
|
17
19
|
const decodeApprovalRule = Schema.decodeSync(ApprovalRule);
|
|
@@ -50,6 +52,28 @@ export const fetchApprovalEvaluation = (pullRequestId, revisionId) => throttleRe
|
|
|
50
52
|
isApproved: r.evaluation?.approved ?? false,
|
|
51
53
|
satisfiedNames: new Set(r.evaluation?.approvalRulesSatisfied ?? [])
|
|
52
54
|
})), Effect.mapError((cause) => new ApprovalEvaluationError({ pullRequestId, revisionId, cause })));
|
|
55
|
+
/** Provider tags that mean the caller may not evaluate approval rules. */
|
|
56
|
+
const notPermittedTags = new Set(["AccessDeniedException", "AccessDenied", "NotAuthorized"]);
|
|
57
|
+
const tagOf = (cause, key) => Predicate.hasProperty(cause, key) && Predicate.isString(cause[key]) ? cause[key] : "";
|
|
58
|
+
/** Why an evaluation failed, decided from the provider error's type, never its message text. */
|
|
59
|
+
export const approvalUnknownReasonOf = (error) => isThrottlingError(error.cause)
|
|
60
|
+
? ApprovalUnknownReason.cases.Throttled.make({})
|
|
61
|
+
: notPermittedTags.has(tagOf(error.cause, "_tag")) ||
|
|
62
|
+
(tagOf(error.cause, "_tag") === "UnknownAwsError" && notPermittedTags.has(tagOf(error.cause, "errorTag")))
|
|
63
|
+
? ApprovalUnknownReason.cases.NotPermitted.make({})
|
|
64
|
+
: ApprovalUnknownReason.cases.ProviderFailed.make({});
|
|
65
|
+
/**
|
|
66
|
+
* Evaluate a revision's approval rules without failing: a failed evaluation leaves approval unknown,
|
|
67
|
+
* with no satisfied rules, and logs the provider's message.
|
|
68
|
+
*/
|
|
69
|
+
export const evaluateApproval = (pullRequestId, revisionId) => fetchApprovalEvaluation(pullRequestId, revisionId).pipe(Effect.map((evaluation) => ({ ...evaluation, approvalUnknown: undefined })),
|
|
70
|
+
// Credentials that stopped working are not an unknown approval: the failure stays typed, so the
|
|
71
|
+
// refresh marks the account signed out rather than listing it as signed in.
|
|
72
|
+
Effect.catchIf((error) => !isCredentialInvalidCause(error.cause), (error) => Effect.logWarning(error.message).pipe(Effect.as({
|
|
73
|
+
isApproved: false,
|
|
74
|
+
satisfiedNames: new Set(),
|
|
75
|
+
approvalUnknown: approvalUnknownReasonOf(error)
|
|
76
|
+
}))));
|
|
53
77
|
/**
|
|
54
78
|
* Build ApprovalRule data from getPullRequest's raw rules + evaluation satisfaction state.
|
|
55
79
|
* Filters out rules with empty names (phantom rules from missing AWS data).
|
|
@@ -71,7 +95,7 @@ const fetchPRDetails = (id, repoName) => Effect.gen(function* () {
|
|
|
71
95
|
return yield* new MissingPullRequestResponse({ pullRequestId: id });
|
|
72
96
|
const revisionId = pr.revisionId ?? "";
|
|
73
97
|
const [evaluation, isMergeable, approvers] = yield* Effect.all([
|
|
74
|
-
|
|
98
|
+
evaluateApproval(id, revisionId),
|
|
75
99
|
fetchMergeStatus(repoName, pr.pullRequestTargets?.[0]),
|
|
76
100
|
fetchApprovers(id, revisionId)
|
|
77
101
|
]);
|
|
@@ -80,6 +104,7 @@ const fetchPRDetails = (id, repoName) => Effect.gen(function* () {
|
|
|
80
104
|
...pr,
|
|
81
105
|
repoName,
|
|
82
106
|
isApproved: evaluation.isApproved,
|
|
107
|
+
approvalUnknown: evaluation.approvalUnknown,
|
|
83
108
|
isMergeable,
|
|
84
109
|
approvers: approvers.names,
|
|
85
110
|
approverArns: approvers.arns,
|
|
@@ -100,7 +125,7 @@ export const fetchApprovers = (pullRequestId, revisionId) => throttleRetry(codec
|
|
|
100
125
|
/**
|
|
101
126
|
* Check PR merge status.
|
|
102
127
|
*/
|
|
103
|
-
const fetchMergeStatus = (repoName, target) => {
|
|
128
|
+
export const fetchMergeStatus = (repoName, target) => {
|
|
104
129
|
if (target === undefined)
|
|
105
130
|
return Effect.succeed(true);
|
|
106
131
|
return throttleRetry(codecommit.getMergeConflicts({
|
|
@@ -128,6 +153,7 @@ const RawPullRequest = Schema.Struct({
|
|
|
128
153
|
}))),
|
|
129
154
|
repoName: Schema.String,
|
|
130
155
|
isApproved: Schema.Boolean,
|
|
156
|
+
approvalUnknown: Schema.optional(ApprovalUnknownReason),
|
|
131
157
|
isMergeable: Schema.Boolean,
|
|
132
158
|
approvers: Schema.Array(Schema.String),
|
|
133
159
|
approverArns: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultTypeKey(Effect.succeed([]))),
|
|
@@ -161,6 +187,7 @@ const RawToPullRequest = RawPullRequest.pipe(Schema.decodeTo(PullRequest, {
|
|
|
161
187
|
destinationBranch,
|
|
162
188
|
isMergeable: raw.isMergeable,
|
|
163
189
|
isApproved: raw.isApproved,
|
|
190
|
+
...(raw.approvalUnknown !== undefined && { approvalUnknown: raw.approvalUnknown }),
|
|
164
191
|
approvedBy: raw.approvers,
|
|
165
192
|
approvedByArns: raw.approverArns,
|
|
166
193
|
commentedBy: [],
|
|
@@ -181,6 +208,7 @@ const RawToPullRequest = RawPullRequest.pipe(Schema.decodeTo(PullRequest, {
|
|
|
181
208
|
}],
|
|
182
209
|
repoName: pr.repositoryName,
|
|
183
210
|
isApproved: pr.isApproved,
|
|
211
|
+
approvalUnknown: pr.approvalUnknown,
|
|
184
212
|
isMergeable: pr.isMergeable,
|
|
185
213
|
approvers: pr.approvedBy ?? [],
|
|
186
214
|
approverArns: pr.approvedByArns ?? [],
|
|
@@ -198,11 +226,15 @@ const decodePullRequest = (raw) => Schema.decodeUnknownEffect(RawToPullRequest)(
|
|
|
198
226
|
const listAllRepositories = () => codecommit.listRepositories.pages({}).pipe(Stream.flatMap((page) => Stream.fromIterable(page.repositories ?? [])), Stream.map((repo) => repo.repositoryName ?? ""));
|
|
199
227
|
export const fetchRepoAccountId = (repoName) => codecommit.getRepository({ repositoryName: repoName }).pipe(Effect.map((r) => normalizeAccountId(r.repositoryMetadata?.accountId)), Effect.tapError((e) => Effect.logWarning("fetchRepoAccountId failed", e)), Effect.catch(() => Effect.void.pipe(Effect.as(undefined))));
|
|
200
228
|
const listPullRequestIds = (repoName, status) => listPullRequestsPages({ repositoryName: repoName, pullRequestStatus: status }).pipe(Stream.flatMap((page) => Stream.fromIterable(page.pullRequestIds ?? [])), Stream.map((id) => ({ id, repoName })));
|
|
229
|
+
// ---------------------------------------------------------------------------
|
|
230
|
+
// Main
|
|
231
|
+
// ---------------------------------------------------------------------------
|
|
201
232
|
/**
|
|
202
|
-
* Stream every pull request of one account
|
|
203
|
-
* Any other failure (listing, reading, decoding)
|
|
233
|
+
* Stream every pull request of one account. A pull request whose approval rules cannot be evaluated is
|
|
234
|
+
* still listed, with `approvalUnknown` set. Any other failure (listing, reading, decoding) fails the
|
|
235
|
+
* stream with an `AwsApiError`.
|
|
204
236
|
*/
|
|
205
|
-
export const
|
|
237
|
+
export const getPullRequests = (account, options) => {
|
|
206
238
|
const pullRequestsEffect = Effect.gen(function* () {
|
|
207
239
|
const config = yield* AwsClientConfig;
|
|
208
240
|
const httpClient = yield* HttpClient.HttpClient;
|
|
@@ -219,33 +251,16 @@ export const getPullRequestRefresh = (account, options) => {
|
|
|
219
251
|
const repositories = options?.repositoryName === undefined
|
|
220
252
|
? listAllRepositories()
|
|
221
253
|
: Stream.make(options.repositoryName);
|
|
222
|
-
|
|
223
|
-
// has already spent its own retries, and its message can still read like throttling.
|
|
224
|
-
const read = (id, repoName) => throttleRetry(fetchPRDetails(id, repoName).pipe(Effect.map((pr) => ({ _tag: "Read", pr })), Effect.catchTag("ApprovalEvaluationError", (error) => Effect.succeed({
|
|
225
|
-
_tag: "EvaluationFailed",
|
|
226
|
-
pullRequestId: id,
|
|
227
|
-
repositoryName: repoName,
|
|
228
|
-
error
|
|
229
|
-
}))));
|
|
230
|
-
const stream = repositories.pipe(Stream.flatMap((repoName) => listPullRequestIds(repoName, status), { concurrency: 2 }), Stream.mapEffect(({ id, repoName }) => read(id, repoName), { concurrency: 3 }),
|
|
254
|
+
const stream = repositories.pipe(Stream.flatMap((repoName) => listPullRequestIds(repoName, status), { concurrency: 2 }), Stream.mapEffect(({ id, repoName }) => throttleRetry(fetchPRDetails(id, repoName)), { concurrency: 3 }),
|
|
231
255
|
// Serial, as before: one GetRepository per repository, cached before the next pull request asks.
|
|
232
|
-
Stream.mapEffect((
|
|
233
|
-
|
|
234
|
-
:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
repoAccountId: repoAcct
|
|
239
|
-
})), Effect.map((pullRequest) => ({ _tag: "Fetched", pullRequest })))), Stream.mapError((cause) => makeApiError("getPullRequests", account.profile, account.region, cause)));
|
|
256
|
+
Stream.mapEffect((pr) => getRepoAccount(pr.repoName).pipe(Effect.flatMap((repoAcct) => decodePullRequest({
|
|
257
|
+
...pr,
|
|
258
|
+
accountProfile: account.profile,
|
|
259
|
+
accountRegion: account.region,
|
|
260
|
+
repoAccountId: repoAcct
|
|
261
|
+
})))), Stream.mapError((cause) => makeApiError("getPullRequests", account.profile, account.region, cause)));
|
|
240
262
|
return stream.pipe(Stream.provide(DistilledCredentials.fromCredentials(credentials, account.region)), Stream.provideService(HttpClient.HttpClient, httpClient), Stream.provideService(DistilledRegion.Region, Effect.succeed(account.region)), Stream.timeout(config.streamTimeout));
|
|
241
263
|
});
|
|
242
264
|
return Stream.unwrap(pullRequestsEffect);
|
|
243
265
|
};
|
|
244
|
-
/**
|
|
245
|
-
* Stream every pull request of one account. A pull request whose approval rules cannot be evaluated
|
|
246
|
-
* fails the stream, because a listing without its approval state would misreport it as pending.
|
|
247
|
-
*/
|
|
248
|
-
export const getPullRequests = (account, options) => getPullRequestRefresh(account, options).pipe(Stream.mapEffect((item) => item._tag === "Fetched"
|
|
249
|
-
? Effect.succeed(item.pullRequest)
|
|
250
|
-
: Effect.fail(makeApiError("getPullRequests", account.profile, account.region, item.error))));
|
|
251
266
|
//# sourceMappingURL=getPullRequests.js.map
|