@homeflare/alchemy 0.28.0 → 0.29.1

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 (221) hide show
  1. package/README.md +2 -0
  2. package/dist/caddy/admin-address.d.ts +27 -0
  3. package/dist/caddy/admin-address.d.ts.map +1 -0
  4. package/dist/caddy/admin-calls.d.ts +25 -28
  5. package/dist/caddy/admin-calls.d.ts.map +1 -1
  6. package/dist/caddy/admin.d.ts +28 -38
  7. package/dist/caddy/admin.d.ts.map +1 -1
  8. package/dist/caddy/caddy-http-client.d.ts +25 -0
  9. package/dist/caddy/caddy-http-client.d.ts.map +1 -0
  10. package/dist/caddy/config-errors.d.ts +24 -0
  11. package/dist/caddy/config-errors.d.ts.map +1 -0
  12. package/dist/caddy/config-lifecycle.d.ts +20 -49
  13. package/dist/caddy/config-lifecycle.d.ts.map +1 -1
  14. package/dist/caddy/config-reconcile.d.ts +45 -0
  15. package/dist/caddy/config-reconcile.d.ts.map +1 -0
  16. package/dist/caddy/config.d.ts +4 -3
  17. package/dist/caddy/config.d.ts.map +1 -1
  18. package/dist/caddy/fake-caddy.d.ts +10 -2
  19. package/dist/caddy/fake-caddy.d.ts.map +1 -1
  20. package/dist/caddy/index.d.ts +3 -3
  21. package/dist/caddy/index.d.ts.map +1 -1
  22. package/dist/caddy/index.js +487 -444
  23. package/dist/caddy/index.js.map +16 -12
  24. package/dist/caddy/local-admin.d.ts +20 -34
  25. package/dist/caddy/local-admin.d.ts.map +1 -1
  26. package/dist/caddy/providers.d.ts +19 -3
  27. package/dist/caddy/providers.d.ts.map +1 -1
  28. package/dist/cloudflare/mesh-node-token.d.ts +1 -1
  29. package/dist/cloudflare/mesh-node-token.d.ts.map +1 -1
  30. package/dist/forgejo/branch-protection.d.ts +4 -4
  31. package/dist/forgejo/org-actions-secrets.d.ts +4 -4
  32. package/dist/forgejo/org-label.d.ts +4 -4
  33. package/dist/forgejo/org-team.d.ts +4 -4
  34. package/dist/forgejo/repo-webhook.d.ts +4 -4
  35. package/dist/forgejo/repository.d.ts +4 -4
  36. package/dist/forgejo/team-member.d.ts +4 -4
  37. package/dist/github/declare-repo-baseline.d.ts +1 -1
  38. package/dist/github/declare-repo-baseline.d.ts.map +1 -1
  39. package/dist/github/index.d.ts +8 -4
  40. package/dist/github/index.d.ts.map +1 -1
  41. package/dist/github/index.js +83 -24
  42. package/dist/github/index.js.map +14 -12
  43. package/dist/github/repo-apply-order-fake-providers.d.ts +48 -0
  44. package/dist/github/repo-apply-order-fake-providers.d.ts.map +1 -0
  45. package/dist/github/repo-apply-order-fake-stack.d.ts +13 -0
  46. package/dist/github/repo-apply-order-fake-stack.d.ts.map +1 -0
  47. package/dist/github/repo-auto-merge-gate.d.ts +54 -0
  48. package/dist/github/repo-auto-merge-gate.d.ts.map +1 -0
  49. package/dist/github/repo-baseline-data.d.ts +10 -1
  50. package/dist/github/repo-baseline-data.d.ts.map +1 -1
  51. package/dist/github/repo-policy.d.ts +1 -1
  52. package/dist/github/repo-policy.d.ts.map +1 -1
  53. package/dist/github/repository-ruleset-errors.d.ts +3 -2
  54. package/dist/github/repository-ruleset-errors.d.ts.map +1 -1
  55. package/dist/github/repository-ruleset-form.d.ts.map +1 -1
  56. package/dist/github/repository-ruleset-guards.d.ts +3 -2
  57. package/dist/github/repository-ruleset-guards.d.ts.map +1 -1
  58. package/dist/github/repository-ruleset-octokit.d.ts +49 -0
  59. package/dist/github/repository-ruleset-octokit.d.ts.map +1 -1
  60. package/dist/github/repository-ruleset-probe.d.ts +2 -1
  61. package/dist/github/repository-ruleset-probe.d.ts.map +1 -1
  62. package/dist/github/repository-ruleset-props.d.ts +7 -4
  63. package/dist/github/repository-ruleset-props.d.ts.map +1 -1
  64. package/dist/github/repository-ruleset-providers.d.ts +42 -0
  65. package/dist/github/repository-ruleset-providers.d.ts.map +1 -0
  66. package/dist/github/repository-ruleset.d.ts +26 -4
  67. package/dist/github/repository-ruleset.d.ts.map +1 -1
  68. package/dist/litellm/fake-litellm.d.ts +27 -16
  69. package/dist/litellm/fake-litellm.d.ts.map +1 -1
  70. package/dist/litellm/fake-stack.d.ts +9 -4
  71. package/dist/litellm/fake-stack.d.ts.map +1 -1
  72. package/dist/litellm/index.d.ts +7 -5
  73. package/dist/litellm/index.d.ts.map +1 -1
  74. package/dist/litellm/index.js +53 -123
  75. package/dist/litellm/index.js.map +8 -8
  76. package/dist/litellm/operations.d.ts +60 -0
  77. package/dist/litellm/operations.d.ts.map +1 -0
  78. package/dist/litellm/pass-through-endpoint.d.ts +10 -28
  79. package/dist/litellm/pass-through-endpoint.d.ts.map +1 -1
  80. package/dist/litellm/pass-through-errors.d.ts +37 -0
  81. package/dist/litellm/pass-through-errors.d.ts.map +1 -0
  82. package/dist/litellm/pass-through-form.d.ts +11 -4
  83. package/dist/litellm/pass-through-form.d.ts.map +1 -1
  84. package/dist/litellm/providers.d.ts +7 -5
  85. package/dist/litellm/providers.d.ts.map +1 -1
  86. package/dist/netbox/prefix.d.ts +4 -4
  87. package/dist/paperless/custom-field.d.ts +21 -21
  88. package/dist/paperless/custom-field.d.ts.map +1 -1
  89. package/dist/paperless/document-type.d.ts +34 -4
  90. package/dist/paperless/document-type.d.ts.map +1 -1
  91. package/dist/paperless/fake-paperless.d.ts +36 -19
  92. package/dist/paperless/fake-paperless.d.ts.map +1 -1
  93. package/dist/paperless/index.d.ts +7 -2
  94. package/dist/paperless/index.d.ts.map +1 -1
  95. package/dist/paperless/index.js +164 -228
  96. package/dist/paperless/index.js.map +10 -13
  97. package/dist/paperless/matching-locate.d.ts +42 -20
  98. package/dist/paperless/matching-locate.d.ts.map +1 -1
  99. package/dist/paperless/matching-types.d.ts +47 -18
  100. package/dist/paperless/matching-types.d.ts.map +1 -1
  101. package/dist/paperless/matching.d.ts +30 -27
  102. package/dist/paperless/matching.d.ts.map +1 -1
  103. package/dist/paperless/providers.d.ts +13 -7
  104. package/dist/paperless/providers.d.ts.map +1 -1
  105. package/dist/paperless/storage-path.d.ts +34 -4
  106. package/dist/paperless/storage-path.d.ts.map +1 -1
  107. package/dist/paperless/tag.d.ts +43 -8
  108. package/dist/paperless/tag.d.ts.map +1 -1
  109. package/dist/proxmox/acl.d.ts +30 -23
  110. package/dist/proxmox/acl.d.ts.map +1 -1
  111. package/dist/proxmox/distilled-pve.d.ts +89 -0
  112. package/dist/proxmox/distilled-pve.d.ts.map +1 -0
  113. package/dist/proxmox/index.js +663 -609
  114. package/dist/proxmox/index.js.map +12 -11
  115. package/dist/proxmox/members.d.ts +29 -10
  116. package/dist/proxmox/members.d.ts.map +1 -1
  117. package/docs/caddy-admin.md +1 -1
  118. package/docs/caddy.md +3 -2
  119. package/docs/credentials.md +16 -0
  120. package/docs/litellm.md +21 -13
  121. package/docs/paperless.md +12 -0
  122. package/docs/peers.md +5 -0
  123. package/docs/repo-policy.md +16 -1
  124. package/docs/repository-ruleset.md +53 -13
  125. package/docs/upstream-conformance.md +126 -10
  126. package/package.json +5 -2
  127. package/src/caddy/admin-address.ts +71 -0
  128. package/src/caddy/admin-calls.ts +48 -100
  129. package/src/caddy/admin.ts +37 -41
  130. package/src/caddy/adopt-scope.test.ts +1 -1
  131. package/src/caddy/caddy-http-client.ts +229 -0
  132. package/src/caddy/config-adopt-provider.test.ts +139 -0
  133. package/src/caddy/config-adopt.test.ts +60 -126
  134. package/src/caddy/config-errors.ts +47 -0
  135. package/src/caddy/config-lifecycle.test.ts +55 -42
  136. package/src/caddy/config-lifecycle.ts +72 -162
  137. package/src/caddy/config-reconcile.ts +138 -0
  138. package/src/caddy/config.ts +36 -42
  139. package/src/caddy/fake-caddy.ts +20 -2
  140. package/src/caddy/index.ts +3 -8
  141. package/src/caddy/local-admin.test.ts +35 -21
  142. package/src/caddy/local-admin.ts +60 -167
  143. package/src/caddy/providers.test.ts +14 -6
  144. package/src/caddy/providers.ts +20 -4
  145. package/src/github/declare-repo-baseline-apply-order.test.ts +86 -0
  146. package/src/github/declare-repo-baseline.ts +40 -7
  147. package/src/github/index.ts +8 -4
  148. package/src/github/repo-apply-order-fake-providers.ts +119 -0
  149. package/src/github/repo-apply-order-fake-stack.ts +74 -0
  150. package/src/github/repo-auto-merge-gate.ts +57 -0
  151. package/src/github/repo-baseline-data.test.ts +13 -0
  152. package/src/github/repo-baseline-data.ts +11 -2
  153. package/src/github/repo-policy-apply-order.test.ts +72 -0
  154. package/src/github/repo-policy-stack.test.ts +59 -0
  155. package/src/github/repo-policy.ts +31 -3
  156. package/src/github/repository-ruleset-errors.ts +6 -4
  157. package/src/github/repository-ruleset-exact-adopt-k1.test.ts +109 -0
  158. package/src/github/repository-ruleset-exact-adopt.test.ts +14 -9
  159. package/src/github/repository-ruleset-form.ts +7 -3
  160. package/src/github/repository-ruleset-guards.ts +3 -2
  161. package/src/github/repository-ruleset-octokit.test.ts +141 -0
  162. package/src/github/repository-ruleset-octokit.ts +121 -30
  163. package/src/github/repository-ruleset-probe.ts +2 -1
  164. package/src/github/repository-ruleset-props.ts +7 -4
  165. package/src/github/repository-ruleset-providers.ts +46 -0
  166. package/src/github/repository-ruleset-wire.test.ts +38 -27
  167. package/src/github/repository-ruleset.ts +27 -3
  168. package/src/litellm/fake-litellm.ts +83 -78
  169. package/src/litellm/fake-stack.ts +13 -5
  170. package/src/litellm/index.ts +7 -21
  171. package/src/litellm/operations.ts +149 -0
  172. package/src/litellm/pass-through-endpoint-delete-swallow.test.ts +17 -20
  173. package/src/litellm/pass-through-endpoint-replace.test.ts +3 -4
  174. package/src/litellm/pass-through-endpoint.test.ts +8 -8
  175. package/src/litellm/pass-through-endpoint.ts +21 -31
  176. package/src/litellm/pass-through-errors.ts +37 -0
  177. package/src/litellm/pass-through-form.ts +20 -10
  178. package/src/litellm/providers.ts +8 -7
  179. package/src/paperless/custom-field.test.ts +49 -40
  180. package/src/paperless/custom-field.ts +57 -33
  181. package/src/paperless/document-type.test.ts +48 -0
  182. package/src/paperless/document-type.ts +51 -22
  183. package/src/paperless/fake-paperless.ts +63 -72
  184. package/src/paperless/index.ts +7 -13
  185. package/src/paperless/matching-locate.test.ts +102 -0
  186. package/src/paperless/matching-locate.ts +80 -86
  187. package/src/paperless/matching-types.ts +49 -16
  188. package/src/paperless/matching.ts +77 -90
  189. package/src/paperless/providers.ts +14 -10
  190. package/src/paperless/storage-path.test.ts +56 -0
  191. package/src/paperless/storage-path.ts +53 -24
  192. package/src/paperless/tag-identity.test.ts +127 -0
  193. package/src/paperless/tag.test.ts +100 -0
  194. package/src/paperless/tag.ts +62 -32
  195. package/src/proxmox/acl.test.ts +145 -0
  196. package/src/proxmox/acl.ts +128 -150
  197. package/src/proxmox/distilled-pve.test.ts +231 -0
  198. package/src/proxmox/distilled-pve.ts +147 -0
  199. package/src/proxmox/members-timeout.test.ts +161 -0
  200. package/src/proxmox/members.test.ts +9 -0
  201. package/src/proxmox/members.ts +36 -2
  202. package/dist/litellm/client.d.ts +0 -76
  203. package/dist/litellm/client.d.ts.map +0 -1
  204. package/dist/litellm/credentials.d.ts +0 -48
  205. package/dist/litellm/credentials.d.ts.map +0 -1
  206. package/dist/litellm/generated/pass-through.d.ts +0 -71
  207. package/dist/litellm/generated/pass-through.d.ts.map +0 -1
  208. package/dist/paperless/client.d.ts +0 -37
  209. package/dist/paperless/client.d.ts.map +0 -1
  210. package/dist/paperless/credentials.d.ts +0 -40
  211. package/dist/paperless/credentials.d.ts.map +0 -1
  212. package/dist/paperless/errors.d.ts +0 -49
  213. package/dist/paperless/errors.d.ts.map +0 -1
  214. package/src/litellm/client.ts +0 -195
  215. package/src/litellm/credentials.ts +0 -73
  216. package/src/litellm/generated/pass-through.ts +0 -73
  217. package/src/paperless/client.ts +0 -88
  218. package/src/paperless/credentials.ts +0 -69
  219. package/src/paperless/errors.ts +0 -62
  220. package/src/paperless/matching-identity.test.ts +0 -194
  221. package/src/paperless/matching.test.ts +0 -128
@@ -140,6 +140,14 @@ import * as GitHub from "alchemy/GitHub";
140
140
  import * as RemovalPolicy from "alchemy/RemovalPolicy";
141
141
  import * as Effect6 from "effect/Effect";
142
142
 
143
+ // src/github/repo-auto-merge-gate.ts
144
+ import * as Output from "alchemy/Output";
145
+ function gateAutoMergeOnRuleset(settings, ruleset) {
146
+ if (!settings.allowAutoMerge)
147
+ return settings;
148
+ return { ...settings, allowAutoMerge: Output.map(ruleset.rulesetId, () => true) };
149
+ }
150
+
143
151
  // src/github/repository-ruleset.ts
144
152
  import { Resource } from "alchemy";
145
153
  import { Unowned } from "alchemy/AdoptPolicy";
@@ -234,7 +242,7 @@ class RequiredChecksOmitted extends Data.TaggedError("RequiredChecksOmitted") {
234
242
 
235
243
  class NeverReportedContext extends Data.TaggedError("NeverReportedContext") {
236
244
  get message() {
237
- return `GitHub.RepositoryRuleset: "${this.context}" has never reported success on ` + `${this.owner}/${this.repository}'s default branch. Requiring it now would leave every ` + "pull request waiting on a check that has never once reported — refused before any write.";
245
+ return `GitHub.RepositoryRuleset: "${this.context}" has never reported success on ` + `${this.owner}/${this.repository}'s default branch tip or any of its recent merged pull ` + "requests. Requiring it now would leave every pull request waiting on a check that has " + "never once reported — refused before any write.";
238
246
  }
239
247
  }
240
248
 
@@ -259,6 +267,53 @@ var octokitFor = (baseUrl) => Effect.gen(function* () {
259
267
  return baseUrl === undefined ? creds.octokit() : creds.octokit({ baseUrl });
260
268
  }).pipe(Effect.mapError(asError));
261
269
  var is404 = (e) => e?.status === 404;
270
+ var RECENT_MERGED_PR_LIMIT = 10;
271
+ var RECENT_CLOSED_PR_PAGE_SIZE = 100;
272
+ var hasRefReportedSuccess = (octokit, owner, repo, ref, context) => Effect.gen(function* () {
273
+ const [checkRuns, statuses] = yield* Effect.all([
274
+ Effect.tryPromise({
275
+ try: () => octokit.rest.checks.listForRef({ owner, repo, ref, check_name: context }),
276
+ catch: asError
277
+ }),
278
+ Effect.tryPromise({
279
+ try: () => octokit.rest.repos.listCommitStatusesForRef({ owner, repo, ref }),
280
+ catch: asError
281
+ })
282
+ ]);
283
+ const checkReported = checkRuns.data.check_runs.some((run) => run.name === context && run.conclusion === "success");
284
+ const statusReported = statuses.data.some((status) => status.context === context && status.state === "success");
285
+ return checkReported || statusReported;
286
+ });
287
+ var recentMergedHeadShas = (octokit, owner, repo, base) => Effect.gen(function* () {
288
+ const closed = yield* Effect.tryPromise({
289
+ try: () => octokit.rest.pulls.list({
290
+ owner,
291
+ repo,
292
+ state: "closed",
293
+ base,
294
+ sort: "updated",
295
+ direction: "desc",
296
+ per_page: RECENT_CLOSED_PR_PAGE_SIZE
297
+ }),
298
+ catch: asError
299
+ });
300
+ return closed.data.filter((pr) => pr.merged_at !== null).slice(0, RECENT_MERGED_PR_LIMIT).map((pr) => pr.head.sha);
301
+ });
302
+ var contextReportedSuccess = (octokit, owner, repo, context) => Effect.gen(function* () {
303
+ const repository = yield* Effect.tryPromise({
304
+ try: () => octokit.rest.repos.get({ owner, repo }),
305
+ catch: asError
306
+ });
307
+ const ref = repository.data.default_branch;
308
+ if (yield* hasRefReportedSuccess(octokit, owner, repo, ref, context))
309
+ return true;
310
+ const heads = yield* recentMergedHeadShas(octokit, owner, repo, ref);
311
+ for (const sha of heads) {
312
+ if (yield* hasRefReportedSuccess(octokit, owner, repo, sha, context))
313
+ return true;
314
+ }
315
+ return false;
316
+ });
262
317
  var makeRulesetOctokit = (baseUrl) => ({
263
318
  list: ({ owner, repo }) => Effect.gen(function* () {
264
319
  const octokit = yield* octokitFor(baseUrl);
@@ -314,24 +369,7 @@ var makeRulesetOctokit = (baseUrl) => ({
314
369
  }),
315
370
  hasContextReportedSuccess: ({ owner, repo, context }) => Effect.gen(function* () {
316
371
  const octokit = yield* octokitFor(baseUrl);
317
- const repository = yield* Effect.tryPromise({
318
- try: () => octokit.rest.repos.get({ owner, repo }),
319
- catch: asError
320
- });
321
- const ref = repository.data.default_branch;
322
- const [checkRuns, statuses] = yield* Effect.all([
323
- Effect.tryPromise({
324
- try: () => octokit.rest.checks.listForRef({ owner, repo, ref, check_name: context }),
325
- catch: asError
326
- }),
327
- Effect.tryPromise({
328
- try: () => octokit.rest.repos.listCommitStatusesForRef({ owner, repo, ref }),
329
- catch: asError
330
- })
331
- ]);
332
- const checkReported = checkRuns.data.check_runs.some((run) => run.name === context && run.conclusion === "success");
333
- const statusReported = statuses.data.some((status) => status.context === context && status.state === "success");
334
- return checkReported || statusReported;
372
+ return yield* contextReportedSuccess(octokit, owner, repo, context);
335
373
  })
336
374
  });
337
375
 
@@ -383,7 +421,9 @@ function buildPullRequestRule(rule) {
383
421
  minimum_approvals: r.minimumApprovals,
384
422
  reviewer: { id: r.reviewer.actorId, type: r.reviewer.actorType }
385
423
  })),
386
- ...rule.extraApprovalForUnattributedChanges === undefined ? {} : { require_extra_approval_for_unattributed_changes: false }
424
+ ...rule.extraApprovalForUnattributedChanges === undefined ? {} : {
425
+ require_extra_approval_for_unattributed_changes: rule.extraApprovalForUnattributedChanges
426
+ }
387
427
  }
388
428
  };
389
429
  }
@@ -876,6 +916,11 @@ var declareRepoPolicy = (id, options) => Effect6.gen(function* () {
876
916
  const kept = resource.pipe(RemovalPolicy.retain());
877
917
  return options.adopt === undefined ? kept : kept.pipe(adopt(options.adopt));
878
918
  };
919
+ if (policy.repository.allowAutoMerge) {
920
+ const ruleset2 = yield* owned(RepositoryRuleset(`${id}-ruleset`, policy.ruleset));
921
+ const repository2 = yield* owned(GitHub.Repository(id, gateAutoMergeOnRuleset(policy.repository, ruleset2)));
922
+ return { policy, repository: repository2, ruleset: ruleset2 };
923
+ }
879
924
  const repository = yield* owned(GitHub.Repository(id, policy.repository));
880
925
  const ruleset = yield* owned(RepositoryRuleset(`${id}-ruleset`, policy.ruleset));
881
926
  return { policy, repository, ruleset };
@@ -890,7 +935,7 @@ function repoBaselineSettings(input) {
890
935
  allowSquashMerge: true,
891
936
  allowMergeCommit: false,
892
937
  allowRebaseMerge: false,
893
- allowAutoMerge: true,
938
+ allowAutoMerge: input.checks.length > 0,
894
939
  deleteBranchOnMerge: true,
895
940
  hasWiki: false
896
941
  };
@@ -939,10 +984,23 @@ import * as RemovalPolicy2 from "alchemy/RemovalPolicy";
939
984
  import * as Effect7 from "effect/Effect";
940
985
  var declareRepoBaseline = (id, options) => Effect7.gen(function* () {
941
986
  const owned = (resource) => resource.pipe(RemovalPolicy2.retain(), adopt2(true));
942
- const repository = yield* owned(GitHub2.Repository(id, repoBaselineSettings(options)));
987
+ const settings = repoBaselineSettings(options);
988
+ if (settings.allowAutoMerge) {
989
+ const ruleset2 = yield* owned(RepositoryRuleset(`${id}-ruleset`, repoBaselineRuleset(options)));
990
+ const repository2 = yield* owned(GitHub2.Repository(id, gateAutoMergeOnRuleset(settings, ruleset2)));
991
+ return { repository: repository2, ruleset: ruleset2 };
992
+ }
993
+ const repository = yield* owned(GitHub2.Repository(id, settings));
943
994
  const ruleset = yield* owned(RepositoryRuleset(`${id}-ruleset`, repoBaselineRuleset(options)));
944
995
  return { repository, ruleset };
945
996
  });
997
+ // src/github/repository-ruleset-providers.ts
998
+ import * as GitHub3 from "alchemy/GitHub";
999
+ import * as Layer from "effect/Layer";
1000
+ var repoPolicyProviders = (options) => {
1001
+ const github = GitHub3.providers(options);
1002
+ return Layer.mergeAll(github, RepositoryRulesetProvider().pipe(Layer.provideMerge(github)));
1003
+ };
946
1004
  export {
947
1005
  BypassActorNarrowed,
948
1006
  BypassActorWidened,
@@ -961,8 +1019,9 @@ export {
961
1019
  declareRepoPolicy,
962
1020
  repoBaselineRuleset,
963
1021
  repoBaselineSettings,
964
- repoPolicy
1022
+ repoPolicy,
1023
+ repoPolicyProviders
965
1024
  };
966
1025
 
967
- //# debugId=92F34291743D117E64756E2164756E21
1026
+ //# debugId=D21B99F55F9E8E6C64756E2164756E21
968
1027
  //# sourceMappingURL=index.js.map