@usine/github 0.1.1 → 0.2.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.
Files changed (71) hide show
  1. package/README.md +31 -55
  2. package/dist/access.d.ts +30 -8
  3. package/dist/access.d.ts.map +1 -1
  4. package/dist/access.js +31 -8
  5. package/dist/access.js.map +1 -1
  6. package/dist/credentials.d.ts +6 -6
  7. package/dist/credentials.d.ts.map +1 -1
  8. package/dist/credentials.js +6 -6
  9. package/dist/credentials.js.map +1 -1
  10. package/dist/error.d.ts +28 -10
  11. package/dist/error.d.ts.map +1 -1
  12. package/dist/error.js +32 -7
  13. package/dist/error.js.map +1 -1
  14. package/dist/github-app.d.ts +12 -9
  15. package/dist/github-app.d.ts.map +1 -1
  16. package/dist/github-app.js +43 -29
  17. package/dist/github-app.js.map +1 -1
  18. package/dist/graphql.d.ts +11 -0
  19. package/dist/graphql.d.ts.map +1 -0
  20. package/dist/graphql.js +47 -0
  21. package/dist/graphql.js.map +1 -0
  22. package/dist/http.d.ts +9 -3
  23. package/dist/http.d.ts.map +1 -1
  24. package/dist/http.js +26 -8
  25. package/dist/http.js.map +1 -1
  26. package/dist/installation.d.ts +17 -9
  27. package/dist/installation.d.ts.map +1 -1
  28. package/dist/installation.js +17 -9
  29. package/dist/installation.js.map +1 -1
  30. package/dist/item-history.d.ts +57 -0
  31. package/dist/item-history.d.ts.map +1 -0
  32. package/dist/item-history.js +190 -0
  33. package/dist/item-history.js.map +1 -0
  34. package/dist/item-writer.d.ts +2 -2
  35. package/dist/item-writer.d.ts.map +1 -1
  36. package/dist/item-writer.js +1 -1
  37. package/dist/item-writer.js.map +1 -1
  38. package/dist/jwt.d.ts +3 -3
  39. package/dist/jwt.d.ts.map +1 -1
  40. package/dist/jwt.js +4 -4
  41. package/dist/jwt.js.map +1 -1
  42. package/dist/label-writer.d.ts +2 -2
  43. package/dist/label-writer.d.ts.map +1 -1
  44. package/dist/label-writer.js +2 -2
  45. package/dist/label-writer.js.map +1 -1
  46. package/dist/local-secrets.d.ts +2 -2
  47. package/dist/local-secrets.d.ts.map +1 -1
  48. package/dist/local-secrets.js +6 -6
  49. package/dist/local-secrets.js.map +1 -1
  50. package/dist/polling/content.js +2 -2
  51. package/dist/polling/detection.d.ts +9 -9
  52. package/dist/polling/detection.d.ts.map +1 -1
  53. package/dist/polling/detection.js +9 -9
  54. package/dist/polling/detection.js.map +1 -1
  55. package/dist/polling/labels.d.ts +5 -5
  56. package/dist/polling/labels.d.ts.map +1 -1
  57. package/dist/polling/labels.js +5 -5
  58. package/dist/polling/labels.js.map +1 -1
  59. package/dist/polling/payload.d.ts +10 -6
  60. package/dist/polling/payload.d.ts.map +1 -1
  61. package/dist/polling/payload.js +15 -11
  62. package/dist/polling/payload.js.map +1 -1
  63. package/dist/polling/polling.d.ts +18 -6
  64. package/dist/polling/polling.d.ts.map +1 -1
  65. package/dist/polling/polling.js +59 -52
  66. package/dist/polling/polling.js.map +1 -1
  67. package/dist/polling/queries.d.ts +6 -1
  68. package/dist/polling/queries.d.ts.map +1 -1
  69. package/dist/polling/queries.js +16 -0
  70. package/dist/polling/queries.js.map +1 -1
  71. package/package.json +8 -3
@@ -1,37 +1,45 @@
1
+ import { LoopPermissions } from "@usine/core/loop";
1
2
  import { RepositoryName } from "@usine/core/repository";
2
3
  import { Schema } from "effect";
3
4
  const PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
4
- /** The numeric identity of an installation of the factory's GitHub App. */
5
+ /** The ID of an installation of the factory's GitHub App. */
5
6
  export const InstallationId = PositiveInt.pipe(Schema.brand("GitHubInstallationId"));
6
- /** GitHub's numeric repository identity, used to restrict installation tokens. */
7
+ /** GitHub's numeric repository ID, used to restrict installation tokens. */
7
8
  export const RepositoryId = PositiveInt.pipe(Schema.brand("GitHubRepositoryId"));
8
- /** The discovered App installation and the account that owns it. */
9
+ /**
10
+ * The App's URL name. GitHub's GraphQL API reports the App's own changes with a `Bot` actor
11
+ * whose login is this slug; the REST login adds `[bot]`.
12
+ */
13
+ export const AppSlug = Schema.NonEmptyString.pipe(Schema.brand("GitHubAppSlug"));
14
+ /** The App installation, its owner account, and the App's slug. */
9
15
  export class Installation extends Schema.Class("@usine/github/Installation")({
10
16
  id: InstallationId,
11
17
  accountLogin: Schema.NonEmptyString,
18
+ appSlug: AppSlug,
12
19
  }) {
13
20
  }
14
- /** Token access to every repository covered by the installation. */
21
+ /** A token scope that covers every repository of the installation. */
15
22
  export class InstallationWide extends Schema.TaggedClass("@usine/github/TokenScope/InstallationWide")("InstallationWide", {}) {
16
23
  }
17
- /** Token access restricted to the repository assigned to one Attempt. */
24
+ /** A token scope restricted to one Attempt's repository, at the Loop's permission level (`WORKER_TOKEN_PERMISSIONS`). */
18
25
  export class SingleRepository extends Schema.TaggedClass("@usine/github/TokenScope/SingleRepository")("SingleRepository", {
19
26
  repository: RepositoryName,
20
27
  repositoryId: RepositoryId,
28
+ permissions: LoopPermissions,
21
29
  }) {
22
30
  }
23
- /** The repository coverage requested when minting an installation token. */
31
+ /** The repository scope requested when minting an installation token. */
24
32
  export const TokenScope = Schema.Union([InstallationWide, SingleRepository]);
25
- /** A redacted installation credential with its expiry and permitted repository scope. */
33
+ /** A redacted installation token with its expiry and repository scope. */
26
34
  export class InstallationToken extends Schema.Class("@usine/github/InstallationToken")({
27
35
  value: Schema.Redacted(Schema.NonEmptyString, { disallowJsonEncode: true }),
28
36
  expiresAt: Schema.DateTimeUtc,
29
37
  scope: TokenScope,
30
38
  }) {
31
39
  }
32
- /** Why App installation discovery could not select one usable installation. */
40
+ /** The reason installation discovery couldn't select one usable installation. */
33
41
  export const InstallationDiscoveryReason = Schema.Literals(["missing", "multiple", "suspended"]);
34
- /** The App has no unambiguous active installation to use for repository access. */
42
+ /** The error when the App has no single active installation. */
35
43
  export class InstallationDiscoveryError extends Schema.TaggedError("@usine/github/InstallationDiscoveryError")("InstallationDiscoveryError", {
36
44
  reason: InstallationDiscoveryReason,
37
45
  message: Schema.NonEmptyString,
@@ -1 +1 @@
1
- {"version":3,"file":"installation.js","sourceRoot":"","sources":["../src/installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAGrF,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAGjF,oEAAoE;AACpE,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,KAAK,CAAe,4BAA4B,CAAC,CAAC;IACzF,EAAE,EAAE,cAAc;IAClB,YAAY,EAAE,MAAM,CAAC,cAAc;CACpC,CAAC;CAAG;AAEL,oEAAoE;AACpE,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,2CAA2C,CAC5C,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAAG;AAE5B,yEAAyE;AACzE,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,2CAA2C,CAC5C,CAAC,kBAAkB,EAAE;IACpB,UAAU,EAAE,cAAc;IAC1B,YAAY,EAAE,YAAY;CAC3B,CAAC;CAAG;AAEL,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAG7E,yFAAyF;AACzF,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,KAAK,CACjD,iCAAiC,CAClC,CAAC;IACA,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC3E,SAAS,EAAE,MAAM,CAAC,WAAW;IAC7B,KAAK,EAAE,UAAU;CAClB,CAAC;CAAG;AAEL,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAGjG,mFAAmF;AACnF,MAAM,OAAO,0BAA2B,SAAQ,MAAM,CAAC,WAAW,CAChE,0CAA0C,CAC3C,CAAC,4BAA4B,EAAE;IAC9B,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG"}
1
+ {"version":3,"file":"installation.js","sourceRoot":"","sources":["../src/installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,6DAA6D;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAGrF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAGjF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;AAGjF,mEAAmE;AACnE,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,KAAK,CAAe,4BAA4B,CAAC,CAAC;IACzF,EAAE,EAAE,cAAc;IAClB,YAAY,EAAE,MAAM,CAAC,cAAc;IACnC,OAAO,EAAE,OAAO;CACjB,CAAC;CAAG;AAEL,sEAAsE;AACtE,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,2CAA2C,CAC5C,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAAG;AAE5B,yHAAyH;AACzH,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,2CAA2C,CAC5C,CAAC,kBAAkB,EAAE;IACpB,UAAU,EAAE,cAAc;IAC1B,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,eAAe;CAC7B,CAAC;CAAG;AAEL,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAG7E,0EAA0E;AAC1E,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,KAAK,CACjD,iCAAiC,CAClC,CAAC;IACA,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC3E,SAAS,EAAE,MAAM,CAAC,WAAW;IAC7B,KAAK,EAAE,UAAU;CAClB,CAAC;CAAG;AAEL,iFAAiF;AACjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAGjG,gEAAgE;AAChE,MAAM,OAAO,0BAA2B,SAAQ,MAAM,CAAC,WAAW,CAChE,0CAA0C,CAC3C,CAAC,4BAA4B,EAAE;IAC9B,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG"}
@@ -0,0 +1,57 @@
1
+ import { ItemNumber } from "@usine/core/item";
2
+ import { RepositoryName } from "@usine/core/repository";
3
+ import { Context, DateTime, Effect, Layer, Schema } from "effect";
4
+ import { HttpClient } from "effect/unstable/http";
5
+ import { GitHubItemNotFoundError, type GitHubAppError } from "./error.ts";
6
+ import { GitHubApp } from "./github-app.ts";
7
+ import { RepositoryLabel } from "./polling/labels.ts";
8
+ declare const LabelAdded_base: Schema.Class<LabelAdded, Schema.TaggedStruct<"LabelAdded", {
9
+ readonly at: Schema.DateTimeUtc;
10
+ readonly label: typeof RepositoryLabel;
11
+ }>, {}>;
12
+ /** A label the App added to the Item; `label` is its current GitHub definition. */
13
+ export declare class LabelAdded extends LabelAdded_base {
14
+ }
15
+ declare const LabelRemoved_base: Schema.Class<LabelRemoved, Schema.TaggedStruct<"LabelRemoved", {
16
+ readonly at: Schema.DateTimeUtc;
17
+ readonly label: typeof RepositoryLabel;
18
+ }>, {}>;
19
+ /** A label the App removed from the Item; `label` is its current GitHub definition. */
20
+ export declare class LabelRemoved extends LabelRemoved_base {
21
+ }
22
+ declare const Commented_base: Schema.Class<Commented, Schema.TaggedStruct<"Commented", {
23
+ readonly at: Schema.DateTimeUtc;
24
+ readonly url: Schema.NonEmptyString;
25
+ }>, {}>;
26
+ /** A comment the App posted on the Item; `url` links to it. */
27
+ export declare class Commented extends Commented_base {
28
+ }
29
+ /** The state of a submitted pull request review. */
30
+ export declare const ReviewState: Schema.Literals<readonly ["APPROVED", "CHANGES_REQUESTED", "COMMENTED", "DISMISSED"]>;
31
+ export type ReviewState = typeof ReviewState.Type;
32
+ declare const Reviewed_base: Schema.Class<Reviewed, Schema.TaggedStruct<"Reviewed", {
33
+ readonly at: Schema.DateTimeUtc;
34
+ readonly url: Schema.NonEmptyString;
35
+ readonly state: Schema.Literals<readonly ["APPROVED", "CHANGES_REQUESTED", "COMMENTED", "DISMISSED"]>;
36
+ }>, {}>;
37
+ /** A review the App submitted on the pull request; `url` links to it. */
38
+ export declare class Reviewed extends Reviewed_base {
39
+ }
40
+ /** A change the App made on an issue or pull request, with GitHub's timestamp. */
41
+ export declare const ItemChange: Schema.Union<readonly [typeof LabelAdded, typeof LabelRemoved, typeof Commented, typeof Reviewed]>;
42
+ export type ItemChange = typeof ItemChange.Type;
43
+ declare const GitHubItemHistory_base: Context.ServiceClass<GitHubItemHistory, "@usine/github/GitHubItemHistory", {
44
+ /**
45
+ * Returns the labels the App added or removed, its comments, and its submitted reviews on one
46
+ * issue or pull request at or after `since`, oldest first. Labels have their current name,
47
+ * color, and description. Fails with `GitHubItemNotFoundError` if the repository responds but
48
+ * has no such Item.
49
+ */
50
+ readonly appChanges: (repository: RepositoryName, item: ItemNumber, since: DateTime.Utc) => Effect.Effect<ReadonlyArray<ItemChange>, GitHubAppError | GitHubItemNotFoundError>;
51
+ }>;
52
+ /** The App's changes on an Item, read from the Item's GitHub timeline. */
53
+ export declare class GitHubItemHistory extends GitHubItemHistory_base {
54
+ static readonly layer: Layer.Layer<GitHubItemHistory, never, GitHubApp | HttpClient.HttpClient>;
55
+ }
56
+ export { GitHubItemNotFoundError } from "./error.ts";
57
+ //# sourceMappingURL=item-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-history.d.ts","sourceRoot":"","sources":["../src/item-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,eAAe,EAA6C,MAAM,qBAAqB,CAAC;;;;;AAKjG,mFAAmF;AACnF,qBAAa,UAAW,SAAQ,eAG/B;CAAG;;;;;AAEJ,uFAAuF;AACvF,qBAAa,YAAa,SAAQ,iBAGjC;CAAG;;;;;AAEJ,+DAA+D;AAC/D,qBAAa,SAAU,SAAQ,cAG9B;CAAG;AAEJ,oDAAoD;AACpD,eAAO,MAAM,WAAW,uFAKtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;;;;;;AAElD,yEAAyE;AACzE,qBAAa,QAAS,SAAQ,aAI5B;CAAG;AAEL,kFAAkF;AAClF,eAAO,MAAM,UAAU,oGAAgE,CAAC;AACxF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;;IAoH5C;;;;;OAKG;yBACkB,CACnB,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,QAAQ,CAAC,GAAG,KAChB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,uBAAuB,CAAC;;AAd3F,0EAA0E;AAC1E,qBAAa,iBAAkB,SAAQ,sBAeD;IACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CAiF3F;CACL;AAED,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,190 @@
1
+ import { ItemNumber } from "@usine/core/item";
2
+ import { RepositoryName, splitRepositoryName } from "@usine/core/repository";
3
+ import { Context, DateTime, Effect, Layer, Option, Schema } from "effect";
4
+ import { HttpClient } from "effect/unstable/http";
5
+ import { GitHubItemNotFoundError } from "./error.js";
6
+ import { GitHubApp } from "./github-app.js";
7
+ import { queryGraphql } from "./graphql.js";
8
+ import { invalidResponse } from "./http.js";
9
+ import { RepositoryLabel, RepositoryLabelColor, RepositoryLabelName } from "./polling/labels.js";
10
+ /** The maximum timeline pages per walk; more changes since `since` fail instead of returning partial results. */
11
+ const MAX_TIMELINE_PAGES = 10;
12
+ /** A label the App added to the Item; `label` is its current GitHub definition. */
13
+ export class LabelAdded extends Schema.TaggedClass("@usine/github/LabelAdded")("LabelAdded", { at: Schema.DateTimeUtc, label: RepositoryLabel }) {
14
+ }
15
+ /** A label the App removed from the Item; `label` is its current GitHub definition. */
16
+ export class LabelRemoved extends Schema.TaggedClass("@usine/github/LabelRemoved")("LabelRemoved", { at: Schema.DateTimeUtc, label: RepositoryLabel }) {
17
+ }
18
+ /** A comment the App posted on the Item; `url` links to it. */
19
+ export class Commented extends Schema.TaggedClass("@usine/github/Commented")("Commented", { at: Schema.DateTimeUtc, url: Schema.NonEmptyString }) {
20
+ }
21
+ /** The state of a submitted pull request review. */
22
+ export const ReviewState = Schema.Literals([
23
+ "APPROVED",
24
+ "CHANGES_REQUESTED",
25
+ "COMMENTED",
26
+ "DISMISSED",
27
+ ]);
28
+ /** A review the App submitted on the pull request; `url` links to it. */
29
+ export class Reviewed extends Schema.TaggedClass("@usine/github/Reviewed")("Reviewed", {
30
+ at: Schema.DateTimeUtc,
31
+ url: Schema.NonEmptyString,
32
+ state: ReviewState,
33
+ }) {
34
+ }
35
+ /** A change the App made on an issue or pull request, with GitHub's timestamp. */
36
+ export const ItemChange = Schema.Union([LabelAdded, LabelRemoved, Commented, Reviewed]);
37
+ const LABEL_AND_COMMENT_NODES = `
38
+ __typename
39
+ ... on LabeledEvent { createdAt actor { __typename login } label { name color description } }
40
+ ... on UnlabeledEvent { createdAt actor { __typename login } label { name color description } }
41
+ ... on IssueComment { createdAt url author { __typename login } }`;
42
+ const ITEM_TIMELINE_QUERY = `
43
+ query UsineItemTimeline($owner: String!, $name: String!, $number: Int!, $since: DateTime!, $after: String) {
44
+ repository(owner: $owner, name: $name) {
45
+ issueOrPullRequest(number: $number) {
46
+ ... on Issue {
47
+ timelineItems(first: 100, after: $after, since: $since, itemTypes: [LABELED_EVENT, UNLABELED_EVENT, ISSUE_COMMENT]) {
48
+ pageInfo { hasNextPage endCursor }
49
+ nodes {${LABEL_AND_COMMENT_NODES}
50
+ }
51
+ }
52
+ }
53
+ ... on PullRequest {
54
+ timelineItems(first: 100, after: $after, since: $since, itemTypes: [LABELED_EVENT, UNLABELED_EVENT, ISSUE_COMMENT, PULL_REQUEST_REVIEW]) {
55
+ pageInfo { hasNextPage endCursor }
56
+ nodes {${LABEL_AND_COMMENT_NODES}
57
+ ... on PullRequestReview { createdAt submittedAt url state author { __typename login } }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ `;
65
+ const Actor = Schema.NullOr(Schema.Struct({ __typename: Schema.String, login: Schema.String }));
66
+ const TimelineLabel = Schema.Struct({
67
+ name: RepositoryLabelName,
68
+ color: RepositoryLabelColor,
69
+ description: Schema.NullOr(Schema.String),
70
+ });
71
+ const LabelEventNode = (tag) => Schema.Struct({
72
+ __typename: Schema.Literal(tag),
73
+ createdAt: Schema.DateTimeUtcFromString,
74
+ actor: Actor,
75
+ label: TimelineLabel,
76
+ });
77
+ const TimelineNode = Schema.Union([
78
+ LabelEventNode("LabeledEvent"),
79
+ LabelEventNode("UnlabeledEvent"),
80
+ Schema.Struct({
81
+ __typename: Schema.Literal("IssueComment"),
82
+ createdAt: Schema.DateTimeUtcFromString,
83
+ url: Schema.NonEmptyString,
84
+ author: Actor,
85
+ }),
86
+ Schema.Struct({
87
+ __typename: Schema.Literal("PullRequestReview"),
88
+ createdAt: Schema.DateTimeUtcFromString,
89
+ submittedAt: Schema.NullOr(Schema.DateTimeUtcFromString),
90
+ url: Schema.NonEmptyString,
91
+ state: Schema.Literals([...ReviewState.literals, "PENDING"]),
92
+ author: Actor,
93
+ }),
94
+ ]);
95
+ const TimelineData = Schema.Struct({
96
+ repository: Schema.OptionFromNullOr(Schema.Struct({
97
+ issueOrPullRequest: Schema.OptionFromNullOr(Schema.Struct({
98
+ timelineItems: Schema.Struct({
99
+ pageInfo: Schema.Struct({
100
+ hasNextPage: Schema.Boolean,
101
+ endCursor: Schema.NullOr(Schema.String),
102
+ }),
103
+ nodes: Schema.Array(Schema.NullOr(TimelineNode)),
104
+ }),
105
+ })),
106
+ })),
107
+ });
108
+ const appChange = (slug, node) => {
109
+ const byApp = (actor) => actor !== null && actor.__typename === "Bot" && actor.login === slug;
110
+ const label = (from) => new RepositoryLabel({
111
+ name: from.name,
112
+ color: from.color,
113
+ description: Option.fromNullishOr(from.description),
114
+ });
115
+ switch (node.__typename) {
116
+ case "LabeledEvent":
117
+ return byApp(node.actor)
118
+ ? [new LabelAdded({ at: node.createdAt, label: label(node.label) })]
119
+ : [];
120
+ case "UnlabeledEvent":
121
+ return byApp(node.actor)
122
+ ? [new LabelRemoved({ at: node.createdAt, label: label(node.label) })]
123
+ : [];
124
+ case "IssueComment":
125
+ return byApp(node.author) ? [new Commented({ at: node.createdAt, url: node.url })] : [];
126
+ case "PullRequestReview": {
127
+ const state = node.state;
128
+ // A pending review is a draft visible only to its author and hasn't changed anything on GitHub.
129
+ if (!byApp(node.author) || state === "PENDING")
130
+ return [];
131
+ return [new Reviewed({ at: node.submittedAt ?? node.createdAt, url: node.url, state })];
132
+ }
133
+ }
134
+ };
135
+ /** The App's changes on an Item, read from the Item's GitHub timeline. */
136
+ export class GitHubItemHistory extends Context.Service()("@usine/github/GitHubItemHistory") {
137
+ static layer = Layer.effect(GitHubItemHistory, Effect.gen(function* () {
138
+ const app = yield* GitHubApp;
139
+ const http = yield* HttpClient.HttpClient;
140
+ const timelinePage = Effect.fn("GitHubItemHistory.timelinePage")(function* (repository, item, since, after) {
141
+ const token = yield* app.installationToken();
142
+ const { name, owner } = splitRepositoryName(repository);
143
+ const data = yield* queryGraphql(http, token, "fetch-item-timeline", ITEM_TIMELINE_QUERY, { owner, name, number: item, since, after }, TimelineData);
144
+ if (Option.isNone(data.repository))
145
+ return yield* invalidResponse("fetch-item-timeline", `repository "${repository}" is null: deleted, renamed, or no longer accessible`);
146
+ const found = data.repository.value.issueOrPullRequest;
147
+ if (Option.isNone(found))
148
+ return yield* new GitHubItemNotFoundError({
149
+ operation: "fetch-item-timeline",
150
+ item,
151
+ message: `Issue or pull request ${repository}#${item} was not found on GitHub. It was deleted or transferred, or the GitHub App can no longer read it.`,
152
+ });
153
+ const { pageInfo, nodes } = found.value.timelineItems;
154
+ if (!pageInfo.hasNextPage)
155
+ return { nodes, next: Option.none() };
156
+ if (pageInfo.endCursor === null)
157
+ return yield* invalidResponse("fetch-item-timeline", "GitHub returned hasNextPage for the timeline without an endCursor");
158
+ return { nodes, next: Option.some(pageInfo.endCursor) };
159
+ });
160
+ const appChanges = Effect.fn("GitHubItemHistory.appChanges")(function* (repository, item, since) {
161
+ yield* Effect.annotateCurrentSpan({ repository, item });
162
+ const { appSlug } = yield* app.installation();
163
+ const sinceIso = DateTime.formatIso(since);
164
+ const nodes = [];
165
+ let next = Option.none();
166
+ let pages = 0;
167
+ do {
168
+ const page = yield* timelinePage(repository, item, sinceIso, Option.getOrNull(next));
169
+ nodes.push(...page.nodes);
170
+ next = page.next;
171
+ pages += 1;
172
+ } while (Option.isSome(next) && pages < MAX_TIMELINE_PAGES);
173
+ if (Option.isSome(next))
174
+ return yield* invalidResponse("fetch-item-timeline", `the timeline of ${repository}#${item} since ${sinceIso} has more than ${MAX_TIMELINE_PAGES} pages`);
175
+ const changes = nodes.flatMap((node) => (node === null ? [] : appChange(appSlug, node)));
176
+ yield* Effect.logDebug("Read the App's changes from an Item timeline", {
177
+ repository,
178
+ item,
179
+ since: sinceIso,
180
+ pages,
181
+ timelineItems: nodes.length,
182
+ appChanges: changes.length,
183
+ });
184
+ return changes;
185
+ });
186
+ return { appChanges };
187
+ }));
188
+ }
189
+ export { GitHubItemNotFoundError } from "./error.js";
190
+ //# sourceMappingURL=item-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-history.js","sourceRoot":"","sources":["../src/item-history.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,11 @@ declare const ItemLabelMutation_base: Schema.Class<ItemLabelMutation, Schema.Str
8
8
  readonly add: Schema.$Array<Schema.NonEmptyString>;
9
9
  readonly remove: Schema.$Array<Schema.NonEmptyString>;
10
10
  }>, {}>;
11
- /** Labels to add and remove on one Item. Labels outside these two sets are left alone. */
11
+ /** The labels to add and remove on one Item; other labels are unchanged. */
12
12
  export declare class ItemLabelMutation extends ItemLabelMutation_base {
13
13
  }
14
14
  declare const GitHubItemWriter_base: Context.ServiceClass<GitHubItemWriter, "@usine/github/GitHubItemWriter", {
15
- /** Adds and removes only the named labels and keeps every other applied label. */
15
+ /** Adds and removes only the listed labels and keeps every other applied label. */
16
16
  readonly updateLabels: (repository: RepositoryName, item: ItemNumber, mutation: ItemLabelMutation) => Effect.Effect<ReadonlyArray<string>, GitHubAppError>;
17
17
  }>;
18
18
  /** Label writes on GitHub Items, used when the Board moves a card between lanes. */
@@ -1 +1 @@
1
- {"version":3,"file":"item-writer.d.ts","sourceRoot":"","sources":["../src/item-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAS,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAyC,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;;;;;AAKjD,0FAA0F;AAC1F,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;;IAcD,kFAAkF;2BAC3D,CACrB,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,iBAAiB,KACxB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;;AAT7D,oFAAoF;AACpF,qBAAa,gBAAiB,SAAQ,qBAUD;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CA4E1F;CACL"}
1
+ {"version":3,"file":"item-writer.d.ts","sourceRoot":"","sources":["../src/item-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAS,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAyC,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;;;;;AAKjD,4EAA4E;AAC5E,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;;IAcD,mFAAmF;2BAC5D,CACrB,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,iBAAiB,KACxB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;;AAT7D,oFAAoF;AACpF,qBAAa,gBAAiB,SAAQ,qBAUD;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CA4E1F;CACL"}
@@ -6,7 +6,7 @@ import { GitHubApp } from "./github-app.js";
6
6
  import { API_ROOT, authorized, invalidResponse, statusError, transportError } from "./http.js";
7
7
  const LabelResponse = Schema.Array(Schema.Struct({ name: Schema.NonEmptyString }));
8
8
  const LabelNames = Schema.Array(Schema.NonEmptyString).check(Schema.isUnique());
9
- /** Labels to add and remove on one Item. Labels outside these two sets are left alone. */
9
+ /** The labels to add and remove on one Item; other labels are unchanged. */
10
10
  export class ItemLabelMutation extends Schema.Class("@usine/github/ItemLabelMutation")({
11
11
  add: LabelNames.check(Schema.isNonEmpty()),
12
12
  remove: LabelNames,
@@ -1 +1 @@
1
- {"version":3,"file":"item-writer.js","sourceRoot":"","sources":["../src/item-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"item-writer.js","sourceRoot":"","sources":["../src/item-writer.ts"],"names":[],"mappings":"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"}
package/dist/jwt.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { Effect, Redacted } from "effect";
2
2
  import { AppAuthenticationError, type AppCredentials } from "./credentials.ts";
3
- /** Signs an App JWT with `iat` backdated a minute for clock skew and `exp` under GitHub's ten-minute cap. */
3
+ /** A function that signs an App JWT with `iat` one minute in the past for clock skew and `exp` under GitHub's ten-minute limit. */
4
4
  type AppJwtSigner = () => Effect.Effect<Redacted.Redacted<string>>;
5
5
  /**
6
- * Imports the App private key once with WebCrypto RS256. A key that cannot be
7
- * imported fails here, when the layer is built, not on the first request.
6
+ * Imports the App private key once with WebCrypto RS256. Fails when the layer is built if the
7
+ * key can't be imported.
8
8
  */
9
9
  export declare const appJwtSigner: (credentials: AppCredentials) => Effect.Effect<AppJwtSigner, AppAuthenticationError, never>;
10
10
  export {};
package/dist/jwt.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAoE/E,6GAA6G;AAC7G,KAAK,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,YAAY,6FA6BvB,CAAC"}
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAoE/E,mIAAmI;AACnI,KAAK,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,YAAY,6FA6BvB,CAAC"}
package/dist/jwt.js CHANGED
@@ -22,7 +22,7 @@ const derLength = (length) => {
22
22
  return new Uint8Array([0x80 | bytes.length, ...bytes]);
23
23
  };
24
24
  const der = (tag, value) => concat(new Uint8Array([tag]), derLength(value.length), value);
25
- /** WebCrypto imports PKCS#8 keys only, and GitHub downloads PKCS#1, so wrap the key. */
25
+ /** Wraps a PKCS#1 key as PKCS#8, because WebCrypto imports only PKCS#8 and GitHub provides PKCS#1. */
26
26
  const wrapPkcs1AsPkcs8 = (pkcs1) => der(0x30, concat(new Uint8Array([0x02, 0x01, 0x00]), RSA_ALGORITHM_IDENTIFIER, der(0x04, pkcs1)));
27
27
  const decodePem = (pem) => {
28
28
  const pkcs1 = pem.includes("-----BEGIN RSA PRIVATE KEY-----");
@@ -47,14 +47,14 @@ const toArrayBuffer = (value) => {
47
47
  return buffer;
48
48
  };
49
49
  /**
50
- * Imports the App private key once with WebCrypto RS256. A key that cannot be
51
- * imported fails here, when the layer is built, not on the first request.
50
+ * Imports the App private key once with WebCrypto RS256. Fails when the layer is built if the
51
+ * key can't be imported.
52
52
  */
53
53
  export const appJwtSigner = Effect.fn("AppJwt.import")(function* (credentials) {
54
54
  const key = yield* Effect.tryPromise({
55
55
  try: async () => crypto.subtle.importKey("pkcs8", toArrayBuffer(decodePem(Redacted.value(credentials.privateKey))), { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, false, ["sign"]),
56
56
  catch: () => new AppAuthenticationError({
57
- message: "The GitHub App private key is not an RSA private key WebCrypto can import",
57
+ message: "Could not import the GitHub App private key as an RSA private key",
58
58
  }),
59
59
  });
60
60
  const sign = Effect.fn("AppJwt.sign")(function* () {
package/dist/jwt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"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"}
@@ -9,13 +9,13 @@ declare const NewRepositoryLabel_base: Schema.Class<NewRepositoryLabel, Schema.S
9
9
  readonly color: Schema.Option<Schema.brand<Schema.String, "GitHubRepositoryLabelColor">>;
10
10
  readonly description: Schema.Option<Schema.String>;
11
11
  }>, {}>;
12
- /** One label definition as GitHub's create-label endpoint accepts it. */
12
+ /** A label definition in the format of GitHub's create-label endpoint. */
13
13
  export declare class NewRepositoryLabel extends NewRepositoryLabel_base {
14
14
  }
15
15
  declare const GitHubLabelWriter_base: Context.ServiceClass<GitHubLabelWriter, "@usine/github/GitHubLabelWriter", {
16
16
  readonly create: (repository: RepositoryName, label: NewRepositoryLabel) => Effect.Effect<RepositoryLabel, GitHubAppError>;
17
17
  }>;
18
- /** Creates repository labels under the App installation token. */
18
+ /** The service that creates repository labels with the App installation token. */
19
19
  export declare class GitHubLabelWriter extends GitHubLabelWriter_base {
20
20
  static readonly layer: Layer.Layer<GitHubLabelWriter, never, GitHubApp | HttpClient.HttpClient>;
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"label-writer.d.ts","sourceRoot":"","sources":["../src/label-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAS,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvE,OAAO,EAAE,UAAU,EAAyC,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,eAAe,EAA6C,MAAM,qBAAqB,CAAC;;;;;;AAEjG,yEAAyE;AACzE,qBAAa,kBAAmB,SAAQ,uBAMtC;CAAG;;qBAuBgB,CACf,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,kBAAkB,KACtB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;;AAPvD,kEAAkE;AAClE,qBAAa,iBAAkB,SAAQ,sBAQD;IACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CA4C3F;CACL"}
1
+ {"version":3,"file":"label-writer.d.ts","sourceRoot":"","sources":["../src/label-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAS,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvE,OAAO,EAAE,UAAU,EAAyC,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,eAAe,EAA6C,MAAM,qBAAqB,CAAC;;;;;;AAEjG,0EAA0E;AAC1E,qBAAa,kBAAmB,SAAQ,uBAMtC;CAAG;;qBAuBgB,CACf,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,kBAAkB,KACtB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;;AAPvD,kFAAkF;AAClF,qBAAa,iBAAkB,SAAQ,sBAQD;IACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CA4C3F;CACL"}
@@ -4,7 +4,7 @@ import { HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstab
4
4
  import { GitHubApp } from "./github-app.js";
5
5
  import { API_ROOT, authorized, invalidResponse, statusError, transportError } from "./http.js";
6
6
  import { RepositoryLabel, RepositoryLabelColor, RepositoryLabelName } from "./polling/labels.js";
7
- /** One label definition as GitHub's create-label endpoint accepts it. */
7
+ /** A label definition in the format of GitHub's create-label endpoint. */
8
8
  export class NewRepositoryLabel extends Schema.Class("@usine/github/NewRepositoryLabel")({
9
9
  name: RepositoryLabelName,
10
10
  color: Schema.Option(RepositoryLabelColor),
@@ -20,7 +20,7 @@ const labelsUrl = (repository) => {
20
20
  const { name, owner } = splitRepositoryName(repository);
21
21
  return `${API_ROOT}/repos/${encodeURIComponent(owner)}/${encodeURIComponent(name)}/labels`;
22
22
  };
23
- /** Creates repository labels under the App installation token. */
23
+ /** The service that creates repository labels with the App installation token. */
24
24
  export class GitHubLabelWriter extends Context.Service()("@usine/github/GitHubLabelWriter") {
25
25
  static layer = Layer.effect(GitHubLabelWriter, Effect.gen(function* () {
26
26
  const app = yield* GitHubApp;
@@ -1 +1 @@
1
- {"version":3,"file":"label-writer.js","sourceRoot":"","sources":["../src/label-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"label-writer.js","sourceRoot":"","sources":["../src/label-writer.ts"],"names":[],"mappings":"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"}
@@ -19,8 +19,8 @@ export declare class SecretsFileError extends SecretsFileError_base {
19
19
  export declare const LocalSecretsError: Schema.Union<readonly [typeof EnvironmentCredentialsError, typeof SecretsFileError]>;
20
20
  export type LocalSecretsError = typeof LocalSecretsError.Type;
21
21
  /**
22
- * Loads the orchestrator's App credentials. An environment variable wins over
23
- * its file field, and the file is not read when both variables are set.
22
+ * Loads the orchestrator's App credentials. An environment variable overrides its file field,
23
+ * and the file isn't read if both variables are set.
24
24
  */
25
25
  export declare const loadLocalCredentials: (root: string & import("effect/Brand").Brand<"InstanceDirectory">) => Effect.Effect<AppCredentials, EnvironmentCredentialsError | SecretsFileError, FileSystem.FileSystem | Path.Path>;
26
26
  export declare const localSecretsLayer: (root: InstanceDirectory) => Layer.Layer<GitHubCredentials, LocalSecretsError, FileSystem.FileSystem | Path.Path>;
@@ -1 +1 @@
1
- {"version":3,"file":"local-secrets.d.ts","sourceRoot":"","sources":["../src/local-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAU,MAAM,EAAE,UAAU,EAAE,KAAK,EAAU,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjF,OAAO,EAAE,cAAc,EAAS,iBAAiB,EAAsB,MAAM,kBAAkB,CAAC;AAEhG,eAAO,MAAM,uBAAuB,2BAA2B,CAAC;;;;AAEhE,qBAAa,2BAA4B,SAAQ,gCAI/C;CAAG;AAEL,eAAO,MAAM,iBAAiB,4DAAoD,CAAC;AACnF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;;;;;;AAE9D,qBAAa,gBAAiB,SAAQ,qBAMpC;CAAG;AAEL,eAAO,MAAM,iBAAiB,sFAAgE,CAAC;AAC/F,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;AAwC9D;;;GAGG;AACH,eAAO,MAAM,oBAAoB,wLAoB/B,CAAC;AAEH,eAAO,MAAM,iBAAiB,SACtB,iBAAiB,KACtB,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CACzB,CAAC"}
1
+ {"version":3,"file":"local-secrets.d.ts","sourceRoot":"","sources":["../src/local-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAU,MAAM,EAAE,UAAU,EAAE,KAAK,EAAU,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjF,OAAO,EAAE,cAAc,EAAS,iBAAiB,EAAsB,MAAM,kBAAkB,CAAC;AAEhG,eAAO,MAAM,uBAAuB,2BAA2B,CAAC;;;;AAEhE,qBAAa,2BAA4B,SAAQ,gCAI/C;CAAG;AAEL,eAAO,MAAM,iBAAiB,4DAAoD,CAAC;AACnF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;;;;;;AAE9D,qBAAa,gBAAiB,SAAQ,qBAMpC;CAAG;AAEL,eAAO,MAAM,iBAAiB,sFAAgE,CAAC;AAC/F,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;AA0C9D;;;GAGG;AACH,eAAO,MAAM,oBAAoB,wLAoB/B,CAAC;AAEH,eAAO,MAAM,iBAAiB,SACtB,iBAAiB,KACtB,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CACzB,CAAC"}
@@ -15,7 +15,7 @@ export class SecretsFileError extends Schema.TaggedError("@usine/github/SecretsF
15
15
  }
16
16
  export const LocalSecretsError = Schema.Union([EnvironmentCredentialsError, SecretsFileError]);
17
17
  const AppIdFromString = Schema.FiniteFromString.pipe(Schema.decodeTo(AppId));
18
- /** Each variable may be absent on its own. A present but invalid one is an error, not a fallback to the file. */
18
+ /** Each variable is optional; a set but invalid one is an error, not a fallback to the file. */
19
19
  const environment = Config.all({
20
20
  appId: Config.option(Config.schema(AppIdFromString, "USINE_GITHUB_APP_ID")),
21
21
  privateKey: Config.option(Config.schema(RedactedPrivateKey, "USINE_GITHUB_PRIVATE_KEY")),
@@ -30,18 +30,18 @@ const readSecretsFile = Effect.fn("GitHubCredentials.readSecretsFile")(function*
30
30
  const unreadable = () => fail("read", `Could not read GitHub App secrets at ${secretsPath}`);
31
31
  const info = yield* fileSystem.stat(secretsPath).pipe(Effect.mapError(unreadable));
32
32
  if (info.type !== "File" || (info.mode & 0o777) !== 0o600) {
33
- return yield* fail("permissions", `GitHub App secrets must be a regular 0600 file: ${secretsPath}`);
33
+ return yield* fail("permissions", `${secretsPath} must be a regular file with mode 0600. Run chmod 600 ${secretsPath}.`);
34
34
  }
35
35
  const source = yield* fileSystem.readFileString(secretsPath).pipe(Effect.mapError(unreadable));
36
- return yield* decodeCredentialsFile(source, { onExcessProperty: "error" }).pipe(Effect.mapError(() => fail("parse", `GitHub App secrets are invalid at ${secretsPath}`)));
36
+ return yield* decodeCredentialsFile(source, { onExcessProperty: "error" }).pipe(Effect.mapError(() => fail("parse", `${secretsPath} is invalid. It must be JSON with only app_id and private_key.`)));
37
37
  });
38
38
  /**
39
- * Loads the orchestrator's App credentials. An environment variable wins over
40
- * its file field, and the file is not read when both variables are set.
39
+ * Loads the orchestrator's App credentials. An environment variable overrides its file field,
40
+ * and the file isn't read if both variables are set.
41
41
  */
42
42
  export const loadLocalCredentials = Effect.fn("GitHubCredentials.loadLocal")(function* (root) {
43
43
  const env = yield* environment.pipe(Effect.mapError(() => new EnvironmentCredentialsError({
44
- message: "USINE_GITHUB_APP_ID and USINE_GITHUB_PRIVATE_KEY must contain valid GitHub App credentials",
44
+ message: "USINE_GITHUB_APP_ID or USINE_GITHUB_PRIVATE_KEY is invalid. Set USINE_GITHUB_APP_ID to the numeric App ID and USINE_GITHUB_PRIVATE_KEY to the App's PEM private key.",
45
45
  })));
46
46
  if (Option.isSome(env.appId) && Option.isSome(env.privateKey)) {
47
47
  return new AppCredentials({ appId: env.appId.value, privateKey: env.privateKey.value });
@@ -1 +1 @@
1
- {"version":3,"file":"local-secrets.js","sourceRoot":"","sources":["../src/local-secrets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-secrets.js","sourceRoot":"","sources":["../src/local-secrets.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Schema } from "effect";
2
2
  /**
3
- * Timestamp fields in the payload schemas in payload.ts. Add each new timestamp
4
- * field here so changes to it remain outside the content hash (ADR 0007).
3
+ * The timestamp fields in the payload.ts schemas, excluded from the content hash (ADR 0007).
4
+ * Add each new timestamp field here.
5
5
  */
6
6
  const TIMESTAMP_FIELDS = new Set([
7
7
  "closedAt",