@shivaedev/github 0.8.6 → 0.9.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 (61) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +47 -3
  3. package/dist/GitHub.d.ts +100 -17
  4. package/dist/GitHub.d.ts.map +1 -1
  5. package/dist/GitHub.js +4 -1
  6. package/dist/GitHub.js.map +1 -1
  7. package/dist/GitHubToken.d.ts +2 -2
  8. package/dist/GitHubToken.d.ts.map +1 -1
  9. package/dist/GitHubToken.js +1 -1
  10. package/dist/GitHubToken.js.map +1 -1
  11. package/dist/appTokens.d.ts +6 -0
  12. package/dist/appTokens.d.ts.map +1 -0
  13. package/dist/appTokens.js +64 -0
  14. package/dist/appTokens.js.map +1 -0
  15. package/dist/artifacts.d.ts +1 -1
  16. package/dist/authenticatedRequest.d.ts +1 -1
  17. package/dist/authenticatedRequest.d.ts.map +1 -1
  18. package/dist/authenticatedRequest.js +3 -2
  19. package/dist/authenticatedRequest.js.map +1 -1
  20. package/dist/cache.d.ts +2 -0
  21. package/dist/cache.d.ts.map +1 -1
  22. package/dist/cache.js +3 -0
  23. package/dist/cache.js.map +1 -1
  24. package/dist/checkRuns.d.ts +116 -11
  25. package/dist/checkRuns.d.ts.map +1 -1
  26. package/dist/checkRuns.js +39 -18
  27. package/dist/checkRuns.js.map +1 -1
  28. package/dist/githubApp.d.ts +2 -4
  29. package/dist/githubApp.d.ts.map +1 -1
  30. package/dist/githubApp.js +5 -55
  31. package/dist/githubApp.js.map +1 -1
  32. package/dist/installationClients.d.ts +185 -0
  33. package/dist/installationClients.d.ts.map +1 -0
  34. package/dist/installationClients.js +28 -0
  35. package/dist/installationClients.js.map +1 -0
  36. package/dist/json.d.ts.map +1 -1
  37. package/dist/json.js +4 -0
  38. package/dist/json.js.map +1 -1
  39. package/dist/representations.d.ts +4 -4
  40. package/dist/representations.d.ts.map +1 -1
  41. package/dist/representations.js +1 -1
  42. package/dist/representations.js.map +1 -1
  43. package/dist/requests.d.ts +2 -2
  44. package/dist/requests.d.ts.map +1 -1
  45. package/dist/requests.js +11 -9
  46. package/dist/requests.js.map +1 -1
  47. package/dist/status.d.ts +1 -1
  48. package/dist/status.d.ts.map +1 -1
  49. package/dist/stickyComments.d.ts +1 -1
  50. package/package.json +7 -7
  51. package/src/GitHub.ts +15 -1
  52. package/src/GitHubToken.ts +4 -2
  53. package/src/appTokens.ts +92 -0
  54. package/src/authenticatedRequest.ts +3 -1
  55. package/src/cache.ts +5 -0
  56. package/src/checkRuns.ts +58 -18
  57. package/src/githubApp.ts +6 -80
  58. package/src/installationClients.ts +44 -0
  59. package/src/json.ts +4 -0
  60. package/src/representations.ts +2 -2
  61. package/src/requests.ts +11 -9
package/dist/cache.js CHANGED
@@ -1,3 +1,6 @@
1
+ export function revalidatedResponse(cached, response) {
2
+ return { ...cached, etag: response.headers.etag ?? cached.etag, response };
3
+ }
1
4
  export function responseCache() {
2
5
  const entries = new Map();
3
6
  return {
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,aAAa;IAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAClD,OAAO;QACN,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACtC,GAAG,CAAC,GAAW,EAAE,KAAqB;YACrC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,mBAAmB,CAAC,MAAsB,EAAE,QAA+C;IAC1G,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,aAAa;IAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAClD,OAAO;QACN,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACtC,GAAG,CAAC,GAAW,EAAE,KAAqB;YACrC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Effect, Schema } from "effect";
1
+ import { Effect, Option, Schema } from "effect";
2
2
  import type { Representations } from "#representations.ts";
3
3
  export declare const CheckRunOutput: Schema.Struct<{
4
4
  readonly summary: Schema.String;
@@ -6,9 +6,22 @@ export declare const CheckRunOutput: Schema.Struct<{
6
6
  readonly title: Schema.String;
7
7
  }>;
8
8
  export declare const CheckRunConclusion: Schema.Literals<readonly ["action_required", "cancelled", "failure", "neutral", "success", "skipped", "stale", "timed_out"]>;
9
- export declare const CheckRunStatus: Schema.Literals<readonly ["queued", "in_progress", "completed"]>;
10
- export declare const CreateCheckRun: Schema.encodeKeys<Schema.Struct<{
9
+ export declare const CheckRunStatus: Schema.Literals<readonly ["queued", "in_progress", "completed", "waiting", "requested", "pending"]>;
10
+ export declare const CreateCheckRun: Schema.Union<readonly [Schema.encodeKeys<Schema.Struct<{
11
+ readonly detailsUrl: Schema.optional<Schema.String>;
12
+ readonly headSha: Schema.String;
13
+ readonly name: Schema.String;
14
+ readonly output: Schema.optional<Schema.Struct<{
15
+ readonly summary: Schema.String;
16
+ readonly text: Schema.optional<Schema.String>;
17
+ readonly title: Schema.String;
18
+ }>>;
11
19
  readonly conclusion: Schema.optional<Schema.Literals<readonly ["action_required", "cancelled", "failure", "neutral", "success", "skipped", "stale", "timed_out"]>>;
20
+ readonly status: Schema.Literals<readonly ["queued", "in_progress"]>;
21
+ }>, {
22
+ readonly detailsUrl: "details_url";
23
+ readonly headSha: "head_sha";
24
+ }>, Schema.encodeKeys<Schema.Struct<{
12
25
  readonly detailsUrl: Schema.optional<Schema.String>;
13
26
  readonly headSha: Schema.String;
14
27
  readonly name: Schema.String;
@@ -17,11 +30,12 @@ export declare const CreateCheckRun: Schema.encodeKeys<Schema.Struct<{
17
30
  readonly text: Schema.optional<Schema.String>;
18
31
  readonly title: Schema.String;
19
32
  }>>;
20
- readonly status: Schema.Literals<readonly ["queued", "in_progress", "completed"]>;
33
+ readonly conclusion: Schema.Literals<readonly ["action_required", "cancelled", "failure", "neutral", "success", "skipped", "stale", "timed_out"]>;
34
+ readonly status: Schema.Literal<"completed">;
21
35
  }>, {
22
36
  readonly detailsUrl: "details_url";
23
37
  readonly headSha: "head_sha";
24
- }>;
38
+ }>]>;
25
39
  export declare const UpdateCheckRun: Schema.Union<readonly [Schema.encodeKeys<Schema.Struct<{
26
40
  readonly detailsUrl: Schema.optional<Schema.String>;
27
41
  readonly output: Schema.optional<Schema.Struct<{
@@ -45,6 +59,9 @@ export declare const UpdateCheckRun: Schema.Union<readonly [Schema.encodeKeys<Sc
45
59
  readonly detailsUrl: "details_url";
46
60
  }>]>;
47
61
  export declare const CheckRun: Schema.encodeKeys<Schema.Struct<{
62
+ readonly app: Schema.optional<Schema.NullOr<Schema.Struct<{
63
+ readonly id: Schema.Number;
64
+ }>>>;
48
65
  readonly conclusion: Schema.NullOr<Schema.Literals<readonly ["action_required", "cancelled", "failure", "neutral", "success", "skipped", "stale", "timed_out"]>>;
49
66
  readonly detailsUrl: Schema.NullOr<Schema.String>;
50
67
  readonly headSha: Schema.String;
@@ -55,14 +72,33 @@ export declare const CheckRun: Schema.encodeKeys<Schema.Struct<{
55
72
  readonly text: Schema.NullOr<Schema.String>;
56
73
  readonly title: Schema.NullOr<Schema.String>;
57
74
  }>;
58
- readonly status: Schema.Literals<readonly ["queued", "in_progress", "completed"]>;
75
+ readonly status: Schema.Literals<readonly ["queued", "in_progress", "completed", "waiting", "requested", "pending"]>;
59
76
  }>, {
60
77
  readonly detailsUrl: "details_url";
61
78
  readonly headSha: "head_sha";
62
79
  }>;
80
+ export declare const FindCheckRun: Schema.Union<readonly [Schema.Struct<{
81
+ readonly appId: Schema.optional<Schema.Number>;
82
+ readonly headSha: Schema.String;
83
+ readonly name: Schema.String;
84
+ }>, Schema.Struct<{
85
+ readonly appId: Schema.Number;
86
+ readonly headSha: Schema.String;
87
+ readonly name: Schema.optional<Schema.String>;
88
+ }>]>;
63
89
  export declare function checkRuns(client: Representations): {
64
90
  createCheckRun: (owner: string, repo: string, input: {
91
+ readonly detailsUrl?: string | undefined;
92
+ readonly headSha: string;
93
+ readonly name: string;
94
+ readonly output?: {
95
+ readonly summary: string;
96
+ readonly text?: string | undefined;
97
+ readonly title: string;
98
+ } | undefined;
65
99
  readonly conclusion?: "action_required" | "cancelled" | "failure" | "neutral" | "skipped" | "stale" | "success" | "timed_out" | undefined;
100
+ readonly status: "in_progress" | "queued";
101
+ } | {
66
102
  readonly detailsUrl?: string | undefined;
67
103
  readonly headSha: string;
68
104
  readonly name: string;
@@ -71,8 +107,36 @@ export declare function checkRuns(client: Representations): {
71
107
  readonly text?: string | undefined;
72
108
  readonly title: string;
73
109
  } | undefined;
74
- readonly status: "completed" | "in_progress" | "queued";
110
+ readonly conclusion: "action_required" | "cancelled" | "failure" | "neutral" | "skipped" | "stale" | "success" | "timed_out";
111
+ readonly status: "completed";
75
112
  }) => Effect.Effect<{
113
+ readonly app?: {
114
+ readonly id: number;
115
+ } | null | undefined;
116
+ readonly conclusion: "action_required" | "cancelled" | "failure" | "neutral" | "skipped" | "stale" | "success" | "timed_out" | null;
117
+ readonly detailsUrl: string | null;
118
+ readonly headSha: string;
119
+ readonly id: number;
120
+ readonly name: string;
121
+ readonly output: {
122
+ readonly summary: string | null;
123
+ readonly text: string | null;
124
+ readonly title: string | null;
125
+ };
126
+ readonly status: "completed" | "in_progress" | "pending" | "queued" | "requested" | "waiting";
127
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("effect/http/HttpBody").HttpBodyError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | Schema.SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
128
+ findLatestCheckRun: (owner: string, repo: string, input: {
129
+ readonly appId?: number | undefined;
130
+ readonly headSha: string;
131
+ readonly name: string;
132
+ } | {
133
+ readonly appId: number;
134
+ readonly headSha: string;
135
+ readonly name?: string | undefined;
136
+ }) => Effect.Effect<Option.Option<{
137
+ readonly app?: {
138
+ readonly id: number;
139
+ } | null | undefined;
76
140
  readonly conclusion: "action_required" | "cancelled" | "failure" | "neutral" | "skipped" | "stale" | "success" | "timed_out" | null;
77
141
  readonly detailsUrl: string | null;
78
142
  readonly headSha: string;
@@ -83,8 +147,8 @@ export declare function checkRuns(client: Representations): {
83
147
  readonly text: string | null;
84
148
  readonly title: string | null;
85
149
  };
86
- readonly status: "completed" | "in_progress" | "queued";
87
- }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("effect/http/HttpBody").HttpBodyError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | Schema.SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
150
+ readonly status: "completed" | "in_progress" | "pending" | "queued" | "requested" | "waiting";
151
+ }>, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("effect/Cause").NoSuchElementError | import("@shivaedev/http/errors.ts").PaginationLinkError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | Schema.SchemaError | import("@shivaedev/errors/taxonomy.ts").ServiceUnavailable | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
88
152
  updateCheckRun: (owner: string, repo: string, id: number, input: {
89
153
  readonly detailsUrl?: string | undefined;
90
154
  readonly output?: {
@@ -103,6 +167,47 @@ export declare function checkRuns(client: Representations): {
103
167
  } | undefined;
104
168
  readonly status: "completed";
105
169
  }) => Effect.Effect<{
170
+ readonly app?: {
171
+ readonly id: number;
172
+ } | null | undefined;
173
+ readonly conclusion: "action_required" | "cancelled" | "failure" | "neutral" | "skipped" | "stale" | "success" | "timed_out" | null;
174
+ readonly detailsUrl: string | null;
175
+ readonly headSha: string;
176
+ readonly id: number;
177
+ readonly name: string;
178
+ readonly output: {
179
+ readonly summary: string | null;
180
+ readonly text: string | null;
181
+ readonly title: string | null;
182
+ };
183
+ readonly status: "completed" | "in_progress" | "pending" | "queued" | "requested" | "waiting";
184
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("effect/http/HttpBody").HttpBodyError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | Schema.SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
185
+ upsertCheckRun: (owner: string, repo: string, input: {
186
+ readonly detailsUrl?: string | undefined;
187
+ readonly headSha: string;
188
+ readonly name: string;
189
+ readonly output?: {
190
+ readonly summary: string;
191
+ readonly text?: string | undefined;
192
+ readonly title: string;
193
+ } | undefined;
194
+ readonly conclusion?: "action_required" | "cancelled" | "failure" | "neutral" | "skipped" | "stale" | "success" | "timed_out" | undefined;
195
+ readonly status: "in_progress" | "queued";
196
+ } | {
197
+ readonly detailsUrl?: string | undefined;
198
+ readonly headSha: string;
199
+ readonly name: string;
200
+ readonly output?: {
201
+ readonly summary: string;
202
+ readonly text?: string | undefined;
203
+ readonly title: string;
204
+ } | undefined;
205
+ readonly conclusion: "action_required" | "cancelled" | "failure" | "neutral" | "skipped" | "stale" | "success" | "timed_out";
206
+ readonly status: "completed";
207
+ }, appId?: number | undefined) => Effect.Effect<{
208
+ readonly app?: {
209
+ readonly id: number;
210
+ } | null | undefined;
106
211
  readonly conclusion: "action_required" | "cancelled" | "failure" | "neutral" | "skipped" | "stale" | "success" | "timed_out" | null;
107
212
  readonly detailsUrl: string | null;
108
213
  readonly headSha: string;
@@ -113,7 +218,7 @@ export declare function checkRuns(client: Representations): {
113
218
  readonly text: string | null;
114
219
  readonly title: string | null;
115
220
  };
116
- readonly status: "completed" | "in_progress" | "queued";
117
- }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("effect/http/HttpBody").HttpBodyError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | Schema.SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
221
+ readonly status: "completed" | "in_progress" | "pending" | "queued" | "requested" | "waiting";
222
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("effect/http/HttpBody").HttpBodyError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("effect/Cause").NoSuchElementError | import("@shivaedev/http/errors.ts").PaginationLinkError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | Schema.SchemaError | import("@shivaedev/errors/taxonomy.ts").ServiceUnavailable | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
118
223
  };
119
224
  //# sourceMappingURL=checkRuns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkRuns.d.ts","sourceRoot":"","sources":["../src/checkRuns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,eAAO,MAAM,cAAc;;;;EAIzB,CAAC;AAEH,eAAO,MAAM,kBAAkB,8HAAsH,CAAC;AACtJ,eAAO,MAAM,cAAc,kEAA0D,CAAC;AAEtF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;EAOmD,CAAC;AAE/E,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;IAYzB,CAAC;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;EAQyD,CAAC;AAE/E,wBAAgB,SAAS,CAAC,MAAM,EAAE,eAAe;IAE/C,cAAc;;;;;;;;;;;;;;;;;;;;;;;;IAKd,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMf"}
1
+ {"version":3,"file":"checkRuns.d.ts","sourceRoot":"","sources":["../src/checkRuns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,eAAO,MAAM,cAAc;;;;EAIzB,CAAC;AAEH,eAAO,MAAM,kBAAkB,8HAAsH,CAAC;AACtJ,eAAO,MAAM,cAAc,qGAA6F,CAAC;AAQzH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;IAYzB,CAAC;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;EASyD,CAAC;AAI/E,eAAO,MAAM,YAAY;;;;;;;;IAGvB,CAAC;AAEH,wBAAgB,SAAS,CAAC,MAAM,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuChD"}
package/dist/checkRuns.js CHANGED
@@ -1,19 +1,21 @@
1
- import { Effect, Schema } from "effect";
1
+ import { Effect, Option, Schema, Stream } from "effect";
2
2
  export const CheckRunOutput = Schema.Struct({
3
3
  summary: Schema.String,
4
4
  text: Schema.optional(Schema.String),
5
5
  title: Schema.String,
6
6
  });
7
7
  export const CheckRunConclusion = Schema.Literals(["action_required", "cancelled", "failure", "neutral", "success", "skipped", "stale", "timed_out"]);
8
- export const CheckRunStatus = Schema.Literals(["queued", "in_progress", "completed"]);
9
- export const CreateCheckRun = Schema.Struct({
10
- conclusion: Schema.optional(CheckRunConclusion),
8
+ export const CheckRunStatus = Schema.Literals(["queued", "in_progress", "completed", "waiting", "requested", "pending"]);
9
+ const createFields = {
11
10
  detailsUrl: Schema.optional(Schema.String),
12
11
  headSha: Schema.String,
13
12
  name: Schema.String,
14
13
  output: Schema.optional(CheckRunOutput),
15
- status: CheckRunStatus,
16
- }).pipe(Schema.encodeKeys({ detailsUrl: "details_url", headSha: "head_sha" }));
14
+ };
15
+ export const CreateCheckRun = Schema.Union([
16
+ Schema.Struct({ ...createFields, conclusion: Schema.optional(CheckRunConclusion), status: Schema.Literals(["queued", "in_progress"]) }).pipe(Schema.encodeKeys({ detailsUrl: "details_url", headSha: "head_sha" })),
17
+ Schema.Struct({ ...createFields, conclusion: CheckRunConclusion, status: Schema.Literal("completed") }).pipe(Schema.encodeKeys({ detailsUrl: "details_url", headSha: "head_sha" })),
18
+ ]);
17
19
  export const UpdateCheckRun = Schema.Union([
18
20
  Schema.Struct({
19
21
  detailsUrl: Schema.optional(Schema.String),
@@ -28,6 +30,7 @@ export const UpdateCheckRun = Schema.Union([
28
30
  }).pipe(Schema.encodeKeys({ detailsUrl: "details_url" })),
29
31
  ]);
30
32
  export const CheckRun = Schema.Struct({
33
+ app: Schema.optional(Schema.NullOr(Schema.Struct({ id: Schema.Number }))),
31
34
  conclusion: Schema.NullOr(CheckRunConclusion),
32
35
  detailsUrl: Schema.NullOr(Schema.String),
33
36
  headSha: Schema.String,
@@ -36,18 +39,36 @@ export const CheckRun = Schema.Struct({
36
39
  output: Schema.Struct({ summary: Schema.NullOr(Schema.String), text: Schema.NullOr(Schema.String), title: Schema.NullOr(Schema.String) }),
37
40
  status: CheckRunStatus,
38
41
  }).pipe(Schema.encodeKeys({ detailsUrl: "details_url", headSha: "head_sha" }));
42
+ const CheckRunPage = Schema.Struct({ checkRuns: Schema.Array(CheckRun) }).pipe(Schema.encodeKeys({ checkRuns: "check_runs" }));
43
+ export const FindCheckRun = Schema.Union([
44
+ Schema.Struct({ appId: Schema.optional(Schema.Number), headSha: Schema.String, name: Schema.String }),
45
+ Schema.Struct({ appId: Schema.Number, headSha: Schema.String, name: Schema.optional(Schema.String) }),
46
+ ]);
39
47
  export function checkRuns(client) {
40
- return {
41
- createCheckRun: Effect.fn("GitHub.createCheckRun")(function* (owner, repo, input) {
42
- const body = yield* Schema.encodeEffect(CreateCheckRun)(input);
43
- const response = yield* client.write("POST", `/repos/${owner}/${repo}/check-runs`, body);
44
- return yield* response.decode(CheckRun);
45
- }),
46
- updateCheckRun: Effect.fn("GitHub.updateCheckRun")(function* (owner, repo, id, input) {
47
- const body = yield* Schema.encodeEffect(UpdateCheckRun)(input);
48
- const response = yield* client.write("PATCH", `/repos/${owner}/${repo}/check-runs/${id}`, body);
49
- return yield* response.decode(CheckRun);
50
- }),
51
- };
48
+ const createCheckRun = Effect.fn("GitHub.createCheckRun")(function* (owner, repo, input) {
49
+ const body = yield* Schema.encodeEffect(CreateCheckRun)(input);
50
+ const response = yield* client.write("POST", `/repos/${owner}/${repo}/check-runs`, body);
51
+ return yield* response.decode(CheckRun);
52
+ });
53
+ const updateCheckRun = Effect.fn("GitHub.updateCheckRun")(function* (owner, repo, id, input) {
54
+ const body = yield* Schema.encodeEffect(UpdateCheckRun)(input);
55
+ const response = yield* client.write("PATCH", `/repos/${owner}/${repo}/check-runs/${id}`, body);
56
+ return yield* response.decode(CheckRun);
57
+ });
58
+ const findLatestCheckRun = Effect.fn("GitHub.findLatestCheckRun")(function* (owner, repo, input) {
59
+ const { headSha, name, appId } = yield* Schema.decodeUnknownEffect(FindCheckRun)(input);
60
+ const query = new URLSearchParams({ filter: "all", "per_page": "100" });
61
+ if (name !== undefined) {
62
+ query.set("check_name", name);
63
+ }
64
+ const pages = yield* client.list(`/repos/${owner}/${repo}/commits/${encodeURIComponent(headSha)}/check-runs?${query}`);
65
+ return yield* pages.pipe(Stream.mapEffect((page) => page.decode(CheckRunPage)), Stream.flatMap((page) => Stream.fromIterable(page.checkRuns)), Stream.filter((run) => (name === undefined || run.name === name) && (appId === undefined || run.app?.id === appId)), Stream.runFold(() => Option.none(), (latest, run) => (Option.isNone(latest) || run.id > latest.value.id ? Option.some(run) : latest)));
66
+ });
67
+ const upsertCheckRun = Effect.fn("GitHub.upsertCheckRun")(function* (owner, repo, input, appId) {
68
+ yield* Schema.encodeEffect(CreateCheckRun)(input);
69
+ const existing = yield* findLatestCheckRun(owner, repo, { appId, headSha: input.headSha, name: input.name });
70
+ return yield* Option.isSome(existing) ? updateCheckRun(owner, repo, existing.value.id, input) : createCheckRun(owner, repo, input);
71
+ });
72
+ return { createCheckRun, findLatestCheckRun, updateCheckRun, upsertCheckRun };
52
73
  }
53
74
  //# sourceMappingURL=checkRuns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkRuns.js","sourceRoot":"","sources":["../src/checkRuns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkRuns.js","sourceRoot":"","sources":["../src/checkRuns.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  import { Layer } from "effect";
2
- import { HttpClient } from "effect/http";
3
- import { type AppCredentials } from "#appJwt.ts";
4
- import { GitHubToken } from "#GitHubToken.ts";
2
+ import type { AppCredentials } from "#appJwt.ts";
5
3
  export interface InstallationScope {
6
4
  readonly permissions?: Readonly<Record<string, "read" | "write" | "admin">>;
7
5
  readonly repositories?: readonly string[];
@@ -20,5 +18,5 @@ export type GitHubAppOptions = AppCredentials & ({
20
18
  readonly repository?: never;
21
19
  readonly scope?: never;
22
20
  });
23
- export declare function githubApp(options: GitHubAppOptions): Layer.Layer<GitHubToken, never, HttpClient.HttpClient>;
21
+ export declare function githubApp(options: GitHubAppOptions): Layer.Layer<"@shivaedev/github/GitHubApp" | import("./GitHubToken.ts").GitHubToken, never, import("effect/http/HttpClient").HttpClient>;
24
22
  //# sourceMappingURL=githubApp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"githubApp.d.ts","sourceRoot":"","sources":["../src/githubApp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,EAA4B,MAAM,QAAQ,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,KAAK,cAAc,EAAU,MAAM,YAAY,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC5C,CACG;IAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAC3F;IAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAClH,CAAC;AAOH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,0DAqClD"}
1
+ {"version":3,"file":"githubApp.d.ts","sourceRoot":"","sources":["../src/githubApp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC5C,CACG;IAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAC3F;IAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAClH,CAAC;AAEH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,2IAGlD"}
package/dist/githubApp.js CHANGED
@@ -1,58 +1,8 @@
1
- import { Cache, Clock, Context, Effect, Exit, Layer, Option, Redacted, Schema } from "effect";
2
- import { HttpClient, HttpClientRequest } from "effect/http";
3
- import { readBoundedJson } from "@shivaedev/http/body.ts";
4
- import { filterStatus } from "@shivaedev/http/filterStatus.ts";
5
- import { appJwt } from "#appJwt.ts";
6
- import { GitHubAppError } from "#errors.ts";
7
- import { GitHubConfig } from "#GitHubConfig.ts";
8
- import { GitHubToken } from "#GitHubToken.ts";
9
- import { TokenRefresh } from "#TokenRefresh.ts";
10
- const Installation = Schema.Struct({ id: Schema.Number });
11
- const AccessToken = Schema.Struct({ expiresAt: Schema.DateFromString, token: Schema.RedactedFromValue(Schema.String) }).pipe(Schema.encodeKeys({ expiresAt: "expires_at" }));
1
+ import { Layer } from "effect";
2
+ import { appTokens } from "#appTokens.ts";
3
+ import { GitHubApp, GitHubAppCredentials } from "#installationClients.ts";
12
4
  export function githubApp(options) {
13
- return Layer.effectContext(Effect.gen(function* () {
14
- if (!("installationId" in options || "owner" in options)) {
15
- return Context.make(GitHubToken, Effect.map(appJwt(options), Option.some)).pipe(Context.add(TokenRefresh, undefined));
16
- }
17
- const client = yield* HttpClient.HttpClient;
18
- const { apiUrl } = yield* GitHubConfig;
19
- const clock = yield* Clock.Clock;
20
- let installationId = "installationId" in options ? options.installationId : undefined;
21
- const request = appRequests(client, apiUrl);
22
- const exchange = Effect.gen(function* () {
23
- const jwt = yield* appJwt(options);
24
- if (installationId === undefined && "owner" in options && options.owner !== undefined) {
25
- const path = `/repos/${encodeURIComponent(options.owner)}/${encodeURIComponent(options.repository)}/installation`;
26
- installationId = (yield* request("GET", path, jwt, Installation)).id;
27
- }
28
- return yield* request("POST", `/app/installations/${installationId}/access_tokens`, jwt, AccessToken, {
29
- permissions: options.scope?.permissions,
30
- repositories: options.scope?.repositories,
31
- "repository_ids": options.scope?.repositoryIds,
32
- });
33
- });
34
- const cache = yield* Cache.makeWith((_) => exchange, {
35
- capacity: 1,
36
- timeToLive: (exit) => (Exit.isSuccess(exit) ? Math.max(0, exit.value.expiresAt.getTime() - clock.currentTimeMillisUnsafe() - 300_000) : 0),
37
- });
38
- return Context.make(GitHubToken, Effect.map(Cache.get(cache, undefined), ({ token }) => Option.some(token))).pipe(Context.add(TokenRefresh, (rejected) => Cache.invalidateWhen(cache, undefined, ({ token }) => Option.isSome(rejected) && token === rejected.value)));
39
- }));
40
- }
41
- function appRequests(client, apiUrl) {
42
- const checked = filterStatus(client);
43
- return Effect.fnUntraced(function* (method, path, jwt, schema, body) {
44
- let input = HttpClientRequest.make(method)(new URL(path, apiUrl).href, {
45
- headers: { Accept: "application/vnd.github+json", Authorization: `Bearer ${Redacted.value(jwt)}`, "X-GitHub-Api-Version": "2022-11-28" },
46
- });
47
- if (body !== undefined) {
48
- input = yield* HttpClientRequest.bodyJson(input, body).pipe(Effect.mapError((cause) => new GitHubAppError({ reason: "encode" }, { cause })));
49
- }
50
- const response = yield* checked
51
- .execute(input)
52
- .pipe(Effect.mapError((cause) => cause._tag === "HttpClientError"
53
- ? new GitHubAppError({ reason: "transport" }, { cause })
54
- : new GitHubAppError({ reason: "status", status: cause.status })));
55
- return yield* readBoundedJson(response, 64 * 1024, schema).pipe(Effect.mapError((cause) => new GitHubAppError({ reason: cause._tag === "HttpClientError" ? "transport" : "response" }, { cause })));
56
- });
5
+ const authentication = appTokens(options);
6
+ return Layer.merge(authentication, GitHubApp.layer.pipe(Layer.provide(Layer.succeed(GitHubAppCredentials)({ credentials: options }))));
57
7
  }
58
8
  //# sourceMappingURL=githubApp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"githubApp.js","sourceRoot":"","sources":["../src/githubApp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"githubApp.js","sourceRoot":"","sources":["../src/githubApp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAe1E,MAAM,UAAU,SAAS,CAAC,OAAyB;IAClD,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACxI,CAAC"}