@enbox/gitd 0.0.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 (502) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +134 -0
  3. package/dist/esm/ci.js +76 -0
  4. package/dist/esm/ci.js.map +1 -0
  5. package/dist/esm/cli/agent.js +86 -0
  6. package/dist/esm/cli/agent.js.map +1 -0
  7. package/dist/esm/cli/commands/ci.js +278 -0
  8. package/dist/esm/cli/commands/ci.js.map +1 -0
  9. package/dist/esm/cli/commands/clone.js +77 -0
  10. package/dist/esm/cli/commands/clone.js.map +1 -0
  11. package/dist/esm/cli/commands/daemon.js +132 -0
  12. package/dist/esm/cli/commands/daemon.js.map +1 -0
  13. package/dist/esm/cli/commands/github-api.js +36 -0
  14. package/dist/esm/cli/commands/github-api.js.map +1 -0
  15. package/dist/esm/cli/commands/init.js +69 -0
  16. package/dist/esm/cli/commands/init.js.map +1 -0
  17. package/dist/esm/cli/commands/issue.js +293 -0
  18. package/dist/esm/cli/commands/issue.js.map +1 -0
  19. package/dist/esm/cli/commands/log.js +90 -0
  20. package/dist/esm/cli/commands/log.js.map +1 -0
  21. package/dist/esm/cli/commands/migrate.js +444 -0
  22. package/dist/esm/cli/commands/migrate.js.map +1 -0
  23. package/dist/esm/cli/commands/notification.js +141 -0
  24. package/dist/esm/cli/commands/notification.js.map +1 -0
  25. package/dist/esm/cli/commands/org.js +353 -0
  26. package/dist/esm/cli/commands/org.js.map +1 -0
  27. package/dist/esm/cli/commands/patch.js +375 -0
  28. package/dist/esm/cli/commands/patch.js.map +1 -0
  29. package/dist/esm/cli/commands/registry.js +501 -0
  30. package/dist/esm/cli/commands/registry.js.map +1 -0
  31. package/dist/esm/cli/commands/release.js +197 -0
  32. package/dist/esm/cli/commands/release.js.map +1 -0
  33. package/dist/esm/cli/commands/repo.js +148 -0
  34. package/dist/esm/cli/commands/repo.js.map +1 -0
  35. package/dist/esm/cli/commands/serve.js +148 -0
  36. package/dist/esm/cli/commands/serve.js.map +1 -0
  37. package/dist/esm/cli/commands/setup.js +92 -0
  38. package/dist/esm/cli/commands/setup.js.map +1 -0
  39. package/dist/esm/cli/commands/shim.js +75 -0
  40. package/dist/esm/cli/commands/shim.js.map +1 -0
  41. package/dist/esm/cli/commands/social.js +206 -0
  42. package/dist/esm/cli/commands/social.js.map +1 -0
  43. package/dist/esm/cli/commands/web.js +36 -0
  44. package/dist/esm/cli/commands/web.js.map +1 -0
  45. package/dist/esm/cli/commands/wiki.js +185 -0
  46. package/dist/esm/cli/commands/wiki.js.map +1 -0
  47. package/dist/esm/cli/flags.js +29 -0
  48. package/dist/esm/cli/flags.js.map +1 -0
  49. package/dist/esm/cli/main.js +331 -0
  50. package/dist/esm/cli/main.js.map +1 -0
  51. package/dist/esm/cli/repo-context.js +53 -0
  52. package/dist/esm/cli/repo-context.js.map +1 -0
  53. package/dist/esm/daemon/adapter.js +18 -0
  54. package/dist/esm/daemon/adapter.js.map +1 -0
  55. package/dist/esm/daemon/adapters/github.js +112 -0
  56. package/dist/esm/daemon/adapters/github.js.map +1 -0
  57. package/dist/esm/daemon/adapters/go.js +51 -0
  58. package/dist/esm/daemon/adapters/go.js.map +1 -0
  59. package/dist/esm/daemon/adapters/index.js +32 -0
  60. package/dist/esm/daemon/adapters/index.js.map +1 -0
  61. package/dist/esm/daemon/adapters/npm.js +51 -0
  62. package/dist/esm/daemon/adapters/npm.js.map +1 -0
  63. package/dist/esm/daemon/adapters/oci.js +62 -0
  64. package/dist/esm/daemon/adapters/oci.js.map +1 -0
  65. package/dist/esm/daemon/index.js +12 -0
  66. package/dist/esm/daemon/index.js.map +1 -0
  67. package/dist/esm/daemon/server.js +167 -0
  68. package/dist/esm/daemon/server.js.map +1 -0
  69. package/dist/esm/git-remote/credential-helper.js +106 -0
  70. package/dist/esm/git-remote/credential-helper.js.map +1 -0
  71. package/dist/esm/git-remote/credential-main.js +109 -0
  72. package/dist/esm/git-remote/credential-main.js.map +1 -0
  73. package/dist/esm/git-remote/index.js +10 -0
  74. package/dist/esm/git-remote/index.js.map +1 -0
  75. package/dist/esm/git-remote/main.js +78 -0
  76. package/dist/esm/git-remote/main.js.map +1 -0
  77. package/dist/esm/git-remote/parse-url.js +60 -0
  78. package/dist/esm/git-remote/parse-url.js.map +1 -0
  79. package/dist/esm/git-remote/resolve.js +175 -0
  80. package/dist/esm/git-remote/resolve.js.map +1 -0
  81. package/dist/esm/git-remote/service.js +82 -0
  82. package/dist/esm/git-remote/service.js.map +1 -0
  83. package/dist/esm/git-server/auth.js +211 -0
  84. package/dist/esm/git-server/auth.js.map +1 -0
  85. package/dist/esm/git-server/bundle-restore.js +180 -0
  86. package/dist/esm/git-server/bundle-restore.js.map +1 -0
  87. package/dist/esm/git-server/bundle-sync.js +233 -0
  88. package/dist/esm/git-server/bundle-sync.js.map +1 -0
  89. package/dist/esm/git-server/did-service.js +73 -0
  90. package/dist/esm/git-server/did-service.js.map +1 -0
  91. package/dist/esm/git-server/git-backend.js +186 -0
  92. package/dist/esm/git-server/git-backend.js.map +1 -0
  93. package/dist/esm/git-server/http-handler.js +295 -0
  94. package/dist/esm/git-server/http-handler.js.map +1 -0
  95. package/dist/esm/git-server/index.js +16 -0
  96. package/dist/esm/git-server/index.js.map +1 -0
  97. package/dist/esm/git-server/push-authorizer.js +62 -0
  98. package/dist/esm/git-server/push-authorizer.js.map +1 -0
  99. package/dist/esm/git-server/ref-sync.js +132 -0
  100. package/dist/esm/git-server/ref-sync.js.map +1 -0
  101. package/dist/esm/git-server/server.js +185 -0
  102. package/dist/esm/git-server/server.js.map +1 -0
  103. package/dist/esm/git-server/verify.js +109 -0
  104. package/dist/esm/git-server/verify.js.map +1 -0
  105. package/dist/esm/github-shim/helpers.js +273 -0
  106. package/dist/esm/github-shim/helpers.js.map +1 -0
  107. package/dist/esm/github-shim/index.js +13 -0
  108. package/dist/esm/github-shim/index.js.map +1 -0
  109. package/dist/esm/github-shim/issues.js +318 -0
  110. package/dist/esm/github-shim/issues.js.map +1 -0
  111. package/dist/esm/github-shim/pulls.js +423 -0
  112. package/dist/esm/github-shim/pulls.js.map +1 -0
  113. package/dist/esm/github-shim/releases.js +154 -0
  114. package/dist/esm/github-shim/releases.js.map +1 -0
  115. package/dist/esm/github-shim/repos.js +86 -0
  116. package/dist/esm/github-shim/repos.js.map +1 -0
  117. package/dist/esm/github-shim/server.js +351 -0
  118. package/dist/esm/github-shim/server.js.map +1 -0
  119. package/dist/esm/github-shim/users.js +61 -0
  120. package/dist/esm/github-shim/users.js.map +1 -0
  121. package/dist/esm/index.js +26 -0
  122. package/dist/esm/index.js.map +1 -0
  123. package/dist/esm/indexer/api.js +132 -0
  124. package/dist/esm/indexer/api.js.map +1 -0
  125. package/dist/esm/indexer/crawler.js +256 -0
  126. package/dist/esm/indexer/crawler.js.map +1 -0
  127. package/dist/esm/indexer/index.js +9 -0
  128. package/dist/esm/indexer/index.js.map +1 -0
  129. package/dist/esm/indexer/main.js +76 -0
  130. package/dist/esm/indexer/main.js.map +1 -0
  131. package/dist/esm/indexer/store.js +334 -0
  132. package/dist/esm/indexer/store.js.map +1 -0
  133. package/dist/esm/issues.js +133 -0
  134. package/dist/esm/issues.js.map +1 -0
  135. package/dist/esm/notifications.js +47 -0
  136. package/dist/esm/notifications.js.map +1 -0
  137. package/dist/esm/org.js +90 -0
  138. package/dist/esm/org.js.map +1 -0
  139. package/dist/esm/patches.js +136 -0
  140. package/dist/esm/patches.js.map +1 -0
  141. package/dist/esm/refs.js +54 -0
  142. package/dist/esm/refs.js.map +1 -0
  143. package/dist/esm/registry.js +81 -0
  144. package/dist/esm/registry.js.map +1 -0
  145. package/dist/esm/releases.js +78 -0
  146. package/dist/esm/releases.js.map +1 -0
  147. package/dist/esm/repo.js +150 -0
  148. package/dist/esm/repo.js.map +1 -0
  149. package/dist/esm/resolver/index.js +10 -0
  150. package/dist/esm/resolver/index.js.map +1 -0
  151. package/dist/esm/resolver/resolve.js +189 -0
  152. package/dist/esm/resolver/resolve.js.map +1 -0
  153. package/dist/esm/resolver/trust-chain.js +155 -0
  154. package/dist/esm/resolver/trust-chain.js.map +1 -0
  155. package/dist/esm/resolver/verify.js +186 -0
  156. package/dist/esm/resolver/verify.js.map +1 -0
  157. package/dist/esm/shims/go/index.js +9 -0
  158. package/dist/esm/shims/go/index.js.map +1 -0
  159. package/dist/esm/shims/go/proxy.js +275 -0
  160. package/dist/esm/shims/go/proxy.js.map +1 -0
  161. package/dist/esm/shims/go/server.js +70 -0
  162. package/dist/esm/shims/go/server.js.map +1 -0
  163. package/dist/esm/shims/index.js +15 -0
  164. package/dist/esm/shims/index.js.map +1 -0
  165. package/dist/esm/shims/npm/index.js +9 -0
  166. package/dist/esm/shims/npm/index.js.map +1 -0
  167. package/dist/esm/shims/npm/registry.js +234 -0
  168. package/dist/esm/shims/npm/registry.js.map +1 -0
  169. package/dist/esm/shims/npm/server.js +72 -0
  170. package/dist/esm/shims/npm/server.js.map +1 -0
  171. package/dist/esm/shims/oci/index.js +9 -0
  172. package/dist/esm/shims/oci/index.js.map +1 -0
  173. package/dist/esm/shims/oci/registry.js +276 -0
  174. package/dist/esm/shims/oci/registry.js.map +1 -0
  175. package/dist/esm/shims/oci/server.js +82 -0
  176. package/dist/esm/shims/oci/server.js.map +1 -0
  177. package/dist/esm/social.js +70 -0
  178. package/dist/esm/social.js.map +1 -0
  179. package/dist/esm/web/html.js +123 -0
  180. package/dist/esm/web/html.js.map +1 -0
  181. package/dist/esm/web/index.js +7 -0
  182. package/dist/esm/web/index.js.map +1 -0
  183. package/dist/esm/web/routes.js +420 -0
  184. package/dist/esm/web/routes.js.map +1 -0
  185. package/dist/esm/web/server.js +225 -0
  186. package/dist/esm/web/server.js.map +1 -0
  187. package/dist/esm/wiki.js +63 -0
  188. package/dist/esm/wiki.js.map +1 -0
  189. package/dist/types/ci.d.ts +203 -0
  190. package/dist/types/ci.d.ts.map +1 -0
  191. package/dist/types/cli/agent.d.ts +59 -0
  192. package/dist/types/cli/agent.d.ts.map +1 -0
  193. package/dist/types/cli/commands/ci.d.ts +16 -0
  194. package/dist/types/cli/commands/ci.d.ts.map +1 -0
  195. package/dist/types/cli/commands/clone.d.ts +13 -0
  196. package/dist/types/cli/commands/clone.d.ts.map +1 -0
  197. package/dist/types/cli/commands/daemon.d.ts +29 -0
  198. package/dist/types/cli/commands/daemon.d.ts.map +1 -0
  199. package/dist/types/cli/commands/github-api.d.ts +14 -0
  200. package/dist/types/cli/commands/github-api.d.ts.map +1 -0
  201. package/dist/types/cli/commands/init.d.ts +11 -0
  202. package/dist/types/cli/commands/init.d.ts.map +1 -0
  203. package/dist/types/cli/commands/issue.d.ts +16 -0
  204. package/dist/types/cli/commands/issue.d.ts.map +1 -0
  205. package/dist/types/cli/commands/log.d.ts +13 -0
  206. package/dist/types/cli/commands/log.d.ts.map +1 -0
  207. package/dist/types/cli/commands/migrate.d.ts +19 -0
  208. package/dist/types/cli/commands/migrate.d.ts.map +1 -0
  209. package/dist/types/cli/commands/notification.d.ts +16 -0
  210. package/dist/types/cli/commands/notification.d.ts.map +1 -0
  211. package/dist/types/cli/commands/org.d.ts +19 -0
  212. package/dist/types/cli/commands/org.d.ts.map +1 -0
  213. package/dist/types/cli/commands/patch.d.ts +17 -0
  214. package/dist/types/cli/commands/patch.d.ts.map +1 -0
  215. package/dist/types/cli/commands/registry.d.ts +25 -0
  216. package/dist/types/cli/commands/registry.d.ts.map +1 -0
  217. package/dist/types/cli/commands/release.d.ts +13 -0
  218. package/dist/types/cli/commands/release.d.ts.map +1 -0
  219. package/dist/types/cli/commands/repo.d.ts +15 -0
  220. package/dist/types/cli/commands/repo.d.ts.map +1 -0
  221. package/dist/types/cli/commands/serve.d.ts +22 -0
  222. package/dist/types/cli/commands/serve.d.ts.map +1 -0
  223. package/dist/types/cli/commands/setup.d.ts +16 -0
  224. package/dist/types/cli/commands/setup.d.ts.map +1 -0
  225. package/dist/types/cli/commands/shim.d.ts +16 -0
  226. package/dist/types/cli/commands/shim.d.ts.map +1 -0
  227. package/dist/types/cli/commands/social.d.ts +19 -0
  228. package/dist/types/cli/commands/social.d.ts.map +1 -0
  229. package/dist/types/cli/commands/web.d.ts +14 -0
  230. package/dist/types/cli/commands/web.d.ts.map +1 -0
  231. package/dist/types/cli/commands/wiki.d.ts +14 -0
  232. package/dist/types/cli/commands/wiki.d.ts.map +1 -0
  233. package/dist/types/cli/flags.d.ts +16 -0
  234. package/dist/types/cli/flags.d.ts.map +1 -0
  235. package/dist/types/cli/main.d.ts +69 -0
  236. package/dist/types/cli/main.d.ts.map +1 -0
  237. package/dist/types/cli/repo-context.d.ts +30 -0
  238. package/dist/types/cli/repo-context.d.ts.map +1 -0
  239. package/dist/types/daemon/adapter.d.ts +74 -0
  240. package/dist/types/daemon/adapter.d.ts.map +1 -0
  241. package/dist/types/daemon/adapters/github.d.ts +10 -0
  242. package/dist/types/daemon/adapters/github.d.ts.map +1 -0
  243. package/dist/types/daemon/adapters/go.d.ts +10 -0
  244. package/dist/types/daemon/adapters/go.d.ts.map +1 -0
  245. package/dist/types/daemon/adapters/index.d.ts +22 -0
  246. package/dist/types/daemon/adapters/index.d.ts.map +1 -0
  247. package/dist/types/daemon/adapters/npm.d.ts +10 -0
  248. package/dist/types/daemon/adapters/npm.d.ts.map +1 -0
  249. package/dist/types/daemon/adapters/oci.d.ts +10 -0
  250. package/dist/types/daemon/adapters/oci.d.ts.map +1 -0
  251. package/dist/types/daemon/index.d.ts +14 -0
  252. package/dist/types/daemon/index.d.ts.map +1 -0
  253. package/dist/types/daemon/server.d.ts +55 -0
  254. package/dist/types/daemon/server.d.ts.map +1 -0
  255. package/dist/types/git-remote/credential-helper.d.ts +49 -0
  256. package/dist/types/git-remote/credential-helper.d.ts.map +1 -0
  257. package/dist/types/git-remote/credential-main.d.ts +24 -0
  258. package/dist/types/git-remote/credential-main.d.ts.map +1 -0
  259. package/dist/types/git-remote/index.d.ts +10 -0
  260. package/dist/types/git-remote/index.d.ts.map +1 -0
  261. package/dist/types/git-remote/main.d.ts +23 -0
  262. package/dist/types/git-remote/main.d.ts.map +1 -0
  263. package/dist/types/git-remote/parse-url.d.ts +32 -0
  264. package/dist/types/git-remote/parse-url.d.ts.map +1 -0
  265. package/dist/types/git-remote/resolve.d.ts +30 -0
  266. package/dist/types/git-remote/resolve.d.ts.map +1 -0
  267. package/dist/types/git-remote/service.d.ts +75 -0
  268. package/dist/types/git-remote/service.d.ts.map +1 -0
  269. package/dist/types/git-server/auth.d.ts +129 -0
  270. package/dist/types/git-server/auth.d.ts.map +1 -0
  271. package/dist/types/git-server/bundle-restore.d.ts +48 -0
  272. package/dist/types/git-server/bundle-restore.d.ts.map +1 -0
  273. package/dist/types/git-server/bundle-sync.d.ts +90 -0
  274. package/dist/types/git-server/bundle-sync.d.ts.map +1 -0
  275. package/dist/types/git-server/did-service.d.ts +26 -0
  276. package/dist/types/git-server/did-service.d.ts.map +1 -0
  277. package/dist/types/git-server/git-backend.d.ts +84 -0
  278. package/dist/types/git-server/git-backend.d.ts.map +1 -0
  279. package/dist/types/git-server/http-handler.d.ts +73 -0
  280. package/dist/types/git-server/http-handler.d.ts.map +1 -0
  281. package/dist/types/git-server/index.d.ts +16 -0
  282. package/dist/types/git-server/index.d.ts.map +1 -0
  283. package/dist/types/git-server/push-authorizer.d.ts +38 -0
  284. package/dist/types/git-server/push-authorizer.d.ts.map +1 -0
  285. package/dist/types/git-server/ref-sync.d.ts +52 -0
  286. package/dist/types/git-server/ref-sync.d.ts.map +1 -0
  287. package/dist/types/git-server/server.d.ts +70 -0
  288. package/dist/types/git-server/server.d.ts.map +1 -0
  289. package/dist/types/git-server/verify.d.ts +12 -0
  290. package/dist/types/git-server/verify.d.ts.map +1 -0
  291. package/dist/types/github-shim/helpers.d.ts +108 -0
  292. package/dist/types/github-shim/helpers.d.ts.map +1 -0
  293. package/dist/types/github-shim/index.d.ts +15 -0
  294. package/dist/types/github-shim/index.d.ts.map +1 -0
  295. package/dist/types/github-shim/issues.d.ts +24 -0
  296. package/dist/types/github-shim/issues.d.ts.map +1 -0
  297. package/dist/types/github-shim/pulls.d.ts +31 -0
  298. package/dist/types/github-shim/pulls.d.ts.map +1 -0
  299. package/dist/types/github-shim/releases.d.ts +18 -0
  300. package/dist/types/github-shim/releases.d.ts.map +1 -0
  301. package/dist/types/github-shim/repos.d.ts +21 -0
  302. package/dist/types/github-shim/repos.d.ts.map +1 -0
  303. package/dist/types/github-shim/server.d.ts +53 -0
  304. package/dist/types/github-shim/server.d.ts.map +1 -0
  305. package/dist/types/github-shim/users.d.ts +17 -0
  306. package/dist/types/github-shim/users.d.ts.map +1 -0
  307. package/dist/types/index.d.ts +26 -0
  308. package/dist/types/index.d.ts.map +1 -0
  309. package/dist/types/indexer/api.d.ts +32 -0
  310. package/dist/types/indexer/api.d.ts.map +1 -0
  311. package/dist/types/indexer/crawler.d.ts +72 -0
  312. package/dist/types/indexer/crawler.d.ts.map +1 -0
  313. package/dist/types/indexer/index.d.ts +12 -0
  314. package/dist/types/indexer/index.d.ts.map +1 -0
  315. package/dist/types/indexer/main.d.ts +21 -0
  316. package/dist/types/indexer/main.d.ts.map +1 -0
  317. package/dist/types/indexer/store.d.ts +168 -0
  318. package/dist/types/indexer/store.d.ts.map +1 -0
  319. package/dist/types/issues.d.ts +395 -0
  320. package/dist/types/issues.d.ts.map +1 -0
  321. package/dist/types/notifications.d.ts +93 -0
  322. package/dist/types/notifications.d.ts.map +1 -0
  323. package/dist/types/org.d.ts +232 -0
  324. package/dist/types/org.d.ts.map +1 -0
  325. package/dist/types/patches.d.ts +410 -0
  326. package/dist/types/patches.d.ts.map +1 -0
  327. package/dist/types/refs.d.ts +114 -0
  328. package/dist/types/refs.d.ts.map +1 -0
  329. package/dist/types/registry.d.ts +212 -0
  330. package/dist/types/registry.d.ts.map +1 -0
  331. package/dist/types/releases.d.ts +204 -0
  332. package/dist/types/releases.d.ts.map +1 -0
  333. package/dist/types/repo.d.ts +450 -0
  334. package/dist/types/repo.d.ts.map +1 -0
  335. package/dist/types/resolver/index.d.ts +13 -0
  336. package/dist/types/resolver/index.d.ts.map +1 -0
  337. package/dist/types/resolver/resolve.d.ts +80 -0
  338. package/dist/types/resolver/resolve.d.ts.map +1 -0
  339. package/dist/types/resolver/trust-chain.d.ts +54 -0
  340. package/dist/types/resolver/trust-chain.d.ts.map +1 -0
  341. package/dist/types/resolver/verify.d.ts +62 -0
  342. package/dist/types/resolver/verify.d.ts.map +1 -0
  343. package/dist/types/shims/go/index.d.ts +11 -0
  344. package/dist/types/shims/go/index.d.ts.map +1 -0
  345. package/dist/types/shims/go/proxy.d.ts +51 -0
  346. package/dist/types/shims/go/proxy.d.ts.map +1 -0
  347. package/dist/types/shims/go/server.d.ts +23 -0
  348. package/dist/types/shims/go/server.d.ts.map +1 -0
  349. package/dist/types/shims/index.d.ts +18 -0
  350. package/dist/types/shims/index.d.ts.map +1 -0
  351. package/dist/types/shims/npm/index.d.ts +11 -0
  352. package/dist/types/shims/npm/index.d.ts.map +1 -0
  353. package/dist/types/shims/npm/registry.d.ts +46 -0
  354. package/dist/types/shims/npm/registry.d.ts.map +1 -0
  355. package/dist/types/shims/npm/server.d.ts +23 -0
  356. package/dist/types/shims/npm/server.d.ts.map +1 -0
  357. package/dist/types/shims/oci/index.d.ts +11 -0
  358. package/dist/types/shims/oci/index.d.ts.map +1 -0
  359. package/dist/types/shims/oci/registry.d.ts +56 -0
  360. package/dist/types/shims/oci/registry.d.ts.map +1 -0
  361. package/dist/types/shims/oci/server.d.ts +23 -0
  362. package/dist/types/shims/oci/server.d.ts.map +1 -0
  363. package/dist/types/social.d.ts +162 -0
  364. package/dist/types/social.d.ts.map +1 -0
  365. package/dist/types/web/html.d.ts +23 -0
  366. package/dist/types/web/html.d.ts.map +1 -0
  367. package/dist/types/web/index.d.ts +8 -0
  368. package/dist/types/web/index.d.ts.map +1 -0
  369. package/dist/types/web/routes.d.ts +21 -0
  370. package/dist/types/web/routes.d.ts.map +1 -0
  371. package/dist/types/web/server.d.ts +38 -0
  372. package/dist/types/web/server.d.ts.map +1 -0
  373. package/dist/types/wiki.d.ts +143 -0
  374. package/dist/types/wiki.d.ts.map +1 -0
  375. package/package.json +108 -0
  376. package/schemas/ci/check-run.json +23 -0
  377. package/schemas/ci/check-suite.json +23 -0
  378. package/schemas/issues/assignment.json +17 -0
  379. package/schemas/issues/comment.json +14 -0
  380. package/schemas/issues/issue.json +20 -0
  381. package/schemas/issues/label.json +17 -0
  382. package/schemas/issues/reaction.json +14 -0
  383. package/schemas/issues/status-change.json +14 -0
  384. package/schemas/notifications/notification.json +20 -0
  385. package/schemas/org/org-member.json +17 -0
  386. package/schemas/org/org.json +26 -0
  387. package/schemas/org/team-member.json +17 -0
  388. package/schemas/org/team.json +17 -0
  389. package/schemas/patches/merge-result.json +14 -0
  390. package/schemas/patches/patch-status-change.json +14 -0
  391. package/schemas/patches/patch.json +20 -0
  392. package/schemas/patches/review-comment.json +17 -0
  393. package/schemas/patches/review.json +14 -0
  394. package/schemas/patches/revision.json +30 -0
  395. package/schemas/refs/git-ref.json +32 -0
  396. package/schemas/registry/attestation.json +23 -0
  397. package/schemas/registry/package-version.json +23 -0
  398. package/schemas/registry/package.json +32 -0
  399. package/schemas/releases/release.json +17 -0
  400. package/schemas/repo/collaborator.json +17 -0
  401. package/schemas/repo/repo.json +35 -0
  402. package/schemas/repo/settings.json +39 -0
  403. package/schemas/repo/topic.json +14 -0
  404. package/schemas/repo/webhook.json +26 -0
  405. package/schemas/social/activity.json +23 -0
  406. package/schemas/social/follow.json +17 -0
  407. package/schemas/social/star.json +20 -0
  408. package/schemas/wiki/wiki-history.json +20 -0
  409. package/schemas/wiki/wiki-page.json +17 -0
  410. package/src/ci.ts +118 -0
  411. package/src/cli/agent.ts +117 -0
  412. package/src/cli/commands/ci.ts +300 -0
  413. package/src/cli/commands/clone.ts +78 -0
  414. package/src/cli/commands/daemon.ts +129 -0
  415. package/src/cli/commands/github-api.ts +30 -0
  416. package/src/cli/commands/init.ts +69 -0
  417. package/src/cli/commands/issue.ts +321 -0
  418. package/src/cli/commands/log.ts +106 -0
  419. package/src/cli/commands/migrate.ts +525 -0
  420. package/src/cli/commands/notification.ts +148 -0
  421. package/src/cli/commands/org.ts +381 -0
  422. package/src/cli/commands/patch.ts +413 -0
  423. package/src/cli/commands/registry.ts +542 -0
  424. package/src/cli/commands/release.ts +189 -0
  425. package/src/cli/commands/repo.ts +160 -0
  426. package/src/cli/commands/serve.ts +153 -0
  427. package/src/cli/commands/setup.ts +97 -0
  428. package/src/cli/commands/shim.ts +79 -0
  429. package/src/cli/commands/social.ts +221 -0
  430. package/src/cli/commands/web.ts +30 -0
  431. package/src/cli/commands/wiki.ts +199 -0
  432. package/src/cli/flags.ts +28 -0
  433. package/src/cli/main.ts +350 -0
  434. package/src/cli/repo-context.ts +55 -0
  435. package/src/daemon/adapter.ts +95 -0
  436. package/src/daemon/adapters/github.ts +86 -0
  437. package/src/daemon/adapters/go.ts +47 -0
  438. package/src/daemon/adapters/index.ts +36 -0
  439. package/src/daemon/adapters/npm.ts +47 -0
  440. package/src/daemon/adapters/oci.ts +59 -0
  441. package/src/daemon/index.ts +16 -0
  442. package/src/daemon/server.ts +204 -0
  443. package/src/git-remote/credential-helper.ts +114 -0
  444. package/src/git-remote/credential-main.ts +118 -0
  445. package/src/git-remote/index.ts +10 -0
  446. package/src/git-remote/main.ts +74 -0
  447. package/src/git-remote/parse-url.ts +81 -0
  448. package/src/git-remote/resolve.ts +207 -0
  449. package/src/git-remote/service.ts +126 -0
  450. package/src/git-server/auth.ts +308 -0
  451. package/src/git-server/bundle-restore.ts +217 -0
  452. package/src/git-server/bundle-sync.ts +300 -0
  453. package/src/git-server/did-service.ts +77 -0
  454. package/src/git-server/git-backend.ts +222 -0
  455. package/src/git-server/http-handler.ts +386 -0
  456. package/src/git-server/index.ts +16 -0
  457. package/src/git-server/push-authorizer.ts +77 -0
  458. package/src/git-server/ref-sync.ts +166 -0
  459. package/src/git-server/server.ts +236 -0
  460. package/src/git-server/verify.ts +116 -0
  461. package/src/github-shim/helpers.ts +311 -0
  462. package/src/github-shim/index.ts +35 -0
  463. package/src/github-shim/issues.ts +389 -0
  464. package/src/github-shim/pulls.ts +500 -0
  465. package/src/github-shim/releases.ts +185 -0
  466. package/src/github-shim/repos.ts +95 -0
  467. package/src/github-shim/server.ts +334 -0
  468. package/src/github-shim/users.ts +63 -0
  469. package/src/index.ts +26 -0
  470. package/src/indexer/api.ts +162 -0
  471. package/src/indexer/crawler.ts +290 -0
  472. package/src/indexer/index.ts +22 -0
  473. package/src/indexer/main.ts +83 -0
  474. package/src/indexer/store.ts +408 -0
  475. package/src/issues.ts +200 -0
  476. package/src/notifications.ts +80 -0
  477. package/src/org.ts +147 -0
  478. package/src/patches.ts +203 -0
  479. package/src/refs.ts +94 -0
  480. package/src/registry.ts +132 -0
  481. package/src/releases.ts +124 -0
  482. package/src/repo.ts +234 -0
  483. package/src/resolver/index.ts +42 -0
  484. package/src/resolver/resolve.ts +244 -0
  485. package/src/resolver/trust-chain.ts +217 -0
  486. package/src/resolver/verify.ts +237 -0
  487. package/src/shims/go/index.ts +14 -0
  488. package/src/shims/go/proxy.ts +336 -0
  489. package/src/shims/go/server.ts +82 -0
  490. package/src/shims/index.ts +20 -0
  491. package/src/shims/npm/index.ts +14 -0
  492. package/src/shims/npm/registry.ts +288 -0
  493. package/src/shims/npm/server.ts +84 -0
  494. package/src/shims/oci/index.ts +14 -0
  495. package/src/shims/oci/registry.ts +334 -0
  496. package/src/shims/oci/server.ts +94 -0
  497. package/src/social.ts +116 -0
  498. package/src/web/html.ts +120 -0
  499. package/src/web/index.ts +8 -0
  500. package/src/web/routes.ts +449 -0
  501. package/src/web/server.ts +256 -0
  502. package/src/wiki.ts +102 -0
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Git backend — wraps Git CLI commands for bare repository management.
3
+ *
4
+ * Provides a thin abstraction over `git init --bare`, `git upload-pack`, and
5
+ * `git receive-pack` for use by the smart HTTP transport handler.
6
+ *
7
+ * All repositories are stored as bare repos under a configurable base
8
+ * directory, organized by DID: `<basePath>/<did-hash>/<repo-name>.git`
9
+ *
10
+ * @module
11
+ */
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ import { createHash } from 'node:crypto';
22
+ import { spawn } from 'node:child_process';
23
+ import { join, resolve } from 'node:path';
24
+ import { existsSync, mkdirSync } from 'node:fs';
25
+ // ---------------------------------------------------------------------------
26
+ // GitBackend
27
+ // ---------------------------------------------------------------------------
28
+ /**
29
+ * Manages bare git repositories on the filesystem and spawns git subprocess
30
+ * for smart HTTP transport.
31
+ */
32
+ export class GitBackend {
33
+ constructor(options) {
34
+ this._basePath = options.basePath;
35
+ }
36
+ /** Get the base path for all repositories. */
37
+ get basePath() {
38
+ return this._basePath;
39
+ }
40
+ /**
41
+ * Compute the filesystem path for a repository.
42
+ *
43
+ * @param did - The DID of the repository owner
44
+ * @param repo - The repository name
45
+ * @returns Absolute path to the bare repo directory
46
+ * @throws If the repo name contains path traversal characters
47
+ */
48
+ repoPath(did, repo) {
49
+ validateRepoName(repo);
50
+ const didHash = hashDid(did);
51
+ const repoDir = join(this._basePath, didHash, `${repo}.git`);
52
+ const resolved = resolve(repoDir);
53
+ const base = resolve(this._basePath);
54
+ if (!resolved.startsWith(base + '/') && resolved !== base) {
55
+ throw new Error(`Path traversal detected: repo name '${repo}' escapes base directory`);
56
+ }
57
+ return resolved;
58
+ }
59
+ /**
60
+ * Check whether a repository exists on disk.
61
+ *
62
+ * @param did - The DID of the repository owner
63
+ * @param repo - The repository name
64
+ */
65
+ exists(did, repo) {
66
+ const path = this.repoPath(did, repo);
67
+ return existsSync(join(path, 'HEAD'));
68
+ }
69
+ /**
70
+ * Initialize a new bare repository.
71
+ *
72
+ * @param did - The DID of the repository owner
73
+ * @param repo - The repository name
74
+ * @returns The path to the new bare repository
75
+ * @throws If `git init --bare` fails
76
+ */
77
+ initRepo(did, repo) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ const path = this.repoPath(did, repo);
80
+ mkdirSync(path, { recursive: true });
81
+ const exitCode = yield runGit(['init', '--bare', path]);
82
+ if (exitCode !== 0) {
83
+ throw new Error(`git init --bare failed with exit code ${exitCode} for ${path}`);
84
+ }
85
+ return path;
86
+ });
87
+ }
88
+ /**
89
+ * Spawn `git upload-pack` for fetch/clone operations.
90
+ *
91
+ * @param did - The DID of the repository owner
92
+ * @param repo - The repository name
93
+ * @returns A GitProcess with stdin/stdout streams for the subprocess
94
+ * @throws If the repository does not exist
95
+ */
96
+ uploadPack(did, repo) {
97
+ this._assertRepoExists(did, repo);
98
+ const path = this.repoPath(did, repo);
99
+ return spawnGitService('upload-pack', path);
100
+ }
101
+ /**
102
+ * Spawn `git receive-pack` for push operations.
103
+ *
104
+ * @param did - The DID of the repository owner
105
+ * @param repo - The repository name
106
+ * @returns A GitProcess with stdin/stdout streams for the subprocess
107
+ * @throws If the repository does not exist
108
+ */
109
+ receivePack(did, repo) {
110
+ this._assertRepoExists(did, repo);
111
+ const path = this.repoPath(did, repo);
112
+ return spawnGitService('receive-pack', path);
113
+ }
114
+ /** Throw if the repo doesn't exist on disk. */
115
+ _assertRepoExists(did, repo) {
116
+ if (!this.exists(did, repo)) {
117
+ throw new Error(`Repository not found: ${did}/${repo}`);
118
+ }
119
+ }
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // Helpers
123
+ // ---------------------------------------------------------------------------
124
+ /** Allowed characters in a repository name: alphanumeric, dots, hyphens, underscores. */
125
+ const SAFE_REPO_NAME_RE = /^[a-zA-Z0-9._-]+$/;
126
+ /**
127
+ * Validate that a repository name is safe for filesystem use.
128
+ * Rejects path traversal components and unsafe characters.
129
+ *
130
+ * @throws If the repo name is invalid
131
+ */
132
+ function validateRepoName(name) {
133
+ if (!name || !SAFE_REPO_NAME_RE.test(name)) {
134
+ throw new Error(`Invalid repository name: '${name}'. Names must match ${SAFE_REPO_NAME_RE}`);
135
+ }
136
+ if (name === '.' || name === '..' || name.startsWith('.git')) {
137
+ throw new Error(`Invalid repository name: '${name}'`);
138
+ }
139
+ }
140
+ /** Hash a DID to a short filesystem-safe directory name. */
141
+ function hashDid(did) {
142
+ return createHash('sha256').update(did).digest('hex').slice(0, 16);
143
+ }
144
+ /** Run a git command and return the exit code. */
145
+ function runGit(args) {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ return new Promise((resolve, reject) => {
148
+ const child = spawn('git', args, { stdio: 'pipe' });
149
+ child.on('error', reject);
150
+ child.on('exit', (code) => resolve(code !== null && code !== void 0 ? code : 128));
151
+ });
152
+ });
153
+ }
154
+ /**
155
+ * Spawn a git service subprocess (upload-pack or receive-pack) and return
156
+ * web-standard ReadableStream/WritableStream wrappers around its stdio.
157
+ */
158
+ function spawnGitService(service, repoPath) {
159
+ const child = spawn('git', [service, '--stateless-rpc', repoPath], {
160
+ stdio: ['pipe', 'pipe', 'pipe'],
161
+ });
162
+ const stdout = new ReadableStream({
163
+ start(controller) {
164
+ child.stdout.on('data', (chunk) => controller.enqueue(new Uint8Array(chunk)));
165
+ child.stdout.on('end', () => controller.close());
166
+ child.stdout.on('error', (err) => controller.error(err));
167
+ },
168
+ });
169
+ const stdin = new WritableStream({
170
+ write(chunk) {
171
+ child.stdin.write(chunk);
172
+ },
173
+ close() {
174
+ child.stdin.end();
175
+ },
176
+ abort() {
177
+ child.stdin.destroy();
178
+ },
179
+ });
180
+ const exitCode = new Promise((resolve, reject) => {
181
+ child.on('error', reject);
182
+ child.on('exit', (code) => resolve(code !== null && code !== void 0 ? code : 128));
183
+ });
184
+ return { stdout, stdin, exitCode };
185
+ }
186
+ //# sourceMappingURL=git-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-backend.js","sourceRoot":"","sources":["../../../src/git-server/git-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Git smart HTTP transport handler.
3
+ *
4
+ * Implements the server side of Git's smart HTTP protocol (v1):
5
+ * - `GET /<did>/<repo>/info/refs?service=git-upload-pack` — ref discovery (clone/fetch)
6
+ * - `POST /<did>/<repo>/git-upload-pack` — pack negotiation (clone/fetch)
7
+ * - `GET /<did>/<repo>/info/refs?service=git-receive-pack` — ref discovery (push)
8
+ * - `POST /<did>/<repo>/git-receive-pack` — receive pack (push)
9
+ *
10
+ * When `onRepoNotFound` is provided, the handler auto-restores repos from
11
+ * DWN bundle records on first access (cold-start). This enables commodity
12
+ * git hosts to serve repos they've never seen before.
13
+ *
14
+ * The handler is a pure function `(Request) => Response | Promise<Response>`
15
+ * suitable for use with `Bun.serve()`, `Deno.serve()`, or any fetch-compatible
16
+ * HTTP runtime.
17
+ *
18
+ * URL format: `/<did>/<repo>/...`
19
+ * The DID is URL-encoded in the path (colons are preserved since they're
20
+ * valid in path segments).
21
+ *
22
+ * @module
23
+ */
24
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
25
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
26
+ return new (P || (P = Promise))(function (resolve, reject) {
27
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
28
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
29
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
30
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
31
+ });
32
+ };
33
+ import { spawn } from 'node:child_process';
34
+ // ---------------------------------------------------------------------------
35
+ // Handler factory
36
+ // ---------------------------------------------------------------------------
37
+ /**
38
+ * Create a fetch-compatible HTTP handler for Git smart HTTP transport.
39
+ *
40
+ * @param options - Handler configuration
41
+ * @returns A function that handles incoming HTTP requests
42
+ */
43
+ export function createGitHttpHandler(options) {
44
+ const { backend, authenticatePush, onPushComplete, onRepoNotFound, pathPrefix = '' } = options;
45
+ /**
46
+ * Ensure a repo exists on disk, attempting DWN bundle restore if absent.
47
+ * Returns `true` when the repo is available (or was restored).
48
+ */
49
+ function ensureRepo(did, repo) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ if (backend.exists(did, repo)) {
52
+ return true;
53
+ }
54
+ if (onRepoNotFound) {
55
+ const repoPath = backend.repoPath(did, repo);
56
+ try {
57
+ return yield onRepoNotFound(did, repo, repoPath);
58
+ }
59
+ catch (err) {
60
+ console.error(`onRepoNotFound error for ${did}/${repo}: ${err.message}`);
61
+ return false;
62
+ }
63
+ }
64
+ return false;
65
+ });
66
+ }
67
+ return (request) => __awaiter(this, void 0, void 0, function* () {
68
+ const url = new URL(request.url);
69
+ let pathname = url.pathname;
70
+ // Strip path prefix.
71
+ if (pathPrefix && pathname.startsWith(pathPrefix)) {
72
+ pathname = pathname.slice(pathPrefix.length);
73
+ }
74
+ // Parse the route.
75
+ const route = parseRoute(pathname);
76
+ if (!route) {
77
+ return new Response('Not Found', { status: 404 });
78
+ }
79
+ const { did, repo, action } = route;
80
+ // -----------------------------------------------------------------------
81
+ // GET /<did>/<repo>/info/refs?service=<service>
82
+ // -----------------------------------------------------------------------
83
+ if (request.method === 'GET' && action === 'info/refs') {
84
+ const service = url.searchParams.get('service');
85
+ if (service !== 'git-upload-pack' && service !== 'git-receive-pack') {
86
+ return new Response('Dumb HTTP transport is not supported. Use git smart HTTP.', { status: 403 });
87
+ }
88
+ // Auth check for push ref discovery.
89
+ if (service === 'git-receive-pack' && authenticatePush) {
90
+ const authorized = yield authenticatePush(request, did, repo);
91
+ if (!authorized) {
92
+ return new Response('Unauthorized', {
93
+ status: 401,
94
+ headers: { 'WWW-Authenticate': 'Basic realm="gitd"' },
95
+ });
96
+ }
97
+ }
98
+ // Ensure repo exists (auto-restore from DWN if possible).
99
+ if (!(yield ensureRepo(did, repo))) {
100
+ return new Response('Repository not found', { status: 404 });
101
+ }
102
+ return handleInfoRefs(backend, did, repo, service);
103
+ }
104
+ // -----------------------------------------------------------------------
105
+ // POST /<did>/<repo>/git-upload-pack
106
+ // -----------------------------------------------------------------------
107
+ if (request.method === 'POST' && action === 'git-upload-pack') {
108
+ if (!(yield ensureRepo(did, repo))) {
109
+ return new Response('Repository not found', { status: 404 });
110
+ }
111
+ return handleServiceRpc(backend, did, repo, 'upload-pack', request);
112
+ }
113
+ // -----------------------------------------------------------------------
114
+ // POST /<did>/<repo>/git-receive-pack
115
+ // -----------------------------------------------------------------------
116
+ if (request.method === 'POST' && action === 'git-receive-pack') {
117
+ // Auth check for push.
118
+ if (authenticatePush) {
119
+ const authorized = yield authenticatePush(request, did, repo);
120
+ if (!authorized) {
121
+ return new Response('Unauthorized', {
122
+ status: 401,
123
+ headers: { 'WWW-Authenticate': 'Basic realm="gitd"' },
124
+ });
125
+ }
126
+ }
127
+ if (!(yield ensureRepo(did, repo))) {
128
+ return new Response('Repository not found', { status: 404 });
129
+ }
130
+ const response = yield handleServiceRpc(backend, did, repo, 'receive-pack', request);
131
+ // Fire the post-push callback asynchronously (don't block the response).
132
+ if (onPushComplete && response.status === 200) {
133
+ const repoPath = backend.repoPath(did, repo);
134
+ onPushComplete(did, repo, repoPath).catch((err) => {
135
+ console.error(`onPushComplete error for ${did}/${repo}: ${err.message}`);
136
+ });
137
+ }
138
+ return response;
139
+ }
140
+ return new Response('Not Found', { status: 404 });
141
+ });
142
+ }
143
+ // ---------------------------------------------------------------------------
144
+ // Route parsing
145
+ // ---------------------------------------------------------------------------
146
+ /**
147
+ * Parse a URL path into DID, repo, and action components.
148
+ *
149
+ * Expected format: `/<did>/<repo>/<action>`
150
+ * The DID occupies exactly 3 colon-separated segments: `did:<method>:<id>`.
151
+ * However, since the DID is in the URL path, we split by `/` and reconstruct.
152
+ *
153
+ * URL form: `/<did-scheme>:<did-method>:<did-id>/<repo>/<action...>`
154
+ * Example: `/did:dht:abc123/my-repo/info/refs`
155
+ */
156
+ function parseRoute(pathname) {
157
+ // Remove leading slash.
158
+ const path = pathname.startsWith('/') ? pathname.slice(1) : pathname;
159
+ // The DID is the first path segment (contains colons, not slashes).
160
+ const firstSlash = path.indexOf('/');
161
+ if (firstSlash === -1) {
162
+ return undefined;
163
+ }
164
+ const did = decodeURIComponent(path.slice(0, firstSlash));
165
+ // Validate it looks like a DID.
166
+ if (!did.startsWith('did:') || did.split(':').length < 3) {
167
+ return undefined;
168
+ }
169
+ // Remaining path: <repo>/<action...>
170
+ const rest = path.slice(firstSlash + 1);
171
+ const secondSlash = rest.indexOf('/');
172
+ if (secondSlash === -1) {
173
+ return undefined;
174
+ }
175
+ const repo = rest.slice(0, secondSlash);
176
+ const action = rest.slice(secondSlash + 1);
177
+ if (!repo || !action) {
178
+ return undefined;
179
+ }
180
+ // Reject path-traversal and unsafe repo names.
181
+ if (!/^[a-zA-Z0-9._-]+$/.test(repo) || repo === '.' || repo === '..') {
182
+ return undefined;
183
+ }
184
+ return { did, repo, action };
185
+ }
186
+ // ---------------------------------------------------------------------------
187
+ // Git smart HTTP protocol handlers
188
+ // ---------------------------------------------------------------------------
189
+ /** Git pkt-line helper: encode a single line. */
190
+ function pktLine(line) {
191
+ const len = line.length + 4;
192
+ return len.toString(16).padStart(4, '0') + line;
193
+ }
194
+ /** Git pkt-line flush: `0000`. */
195
+ const PKT_FLUSH = '0000';
196
+ /**
197
+ * Handle `GET /info/refs?service=<service>`.
198
+ *
199
+ * Runs `git <service> --stateless-rpc --advertise-refs` and wraps the output
200
+ * in the smart HTTP ref advertisement format.
201
+ */
202
+ function handleInfoRefs(backend, did, repo, service) {
203
+ return __awaiter(this, void 0, void 0, function* () {
204
+ const gitService = service === 'git-upload-pack' ? 'upload-pack' : 'receive-pack';
205
+ const repoPath = backend.repoPath(did, repo);
206
+ // Run git with --advertise-refs to get the ref listing.
207
+ const refData = yield spawnAndCollect(gitService, repoPath);
208
+ if (refData === null) {
209
+ return new Response('Git service error', { status: 500 });
210
+ }
211
+ // Build the smart HTTP response: service announcement + ref data.
212
+ const encoder = new TextEncoder();
213
+ const announcement = pktLine(`# service=${service}\n`) + PKT_FLUSH;
214
+ const announcementBytes = encoder.encode(announcement);
215
+ const body = new Uint8Array(announcementBytes.length + refData.length);
216
+ body.set(announcementBytes, 0);
217
+ body.set(refData, announcementBytes.length);
218
+ return new Response(body, {
219
+ status: 200,
220
+ headers: {
221
+ 'Content-Type': `application/x-${service}-advertisement`,
222
+ 'Cache-Control': 'no-cache',
223
+ },
224
+ });
225
+ });
226
+ }
227
+ /**
228
+ * Handle `POST /git-upload-pack` or `POST /git-receive-pack`.
229
+ *
230
+ * Pipes the request body to `git <service> --stateless-rpc` stdin and
231
+ * streams stdout back as the response.
232
+ */
233
+ function handleServiceRpc(backend, did, repo, service, request) {
234
+ return __awaiter(this, void 0, void 0, function* () {
235
+ const gitProcess = service === 'upload-pack'
236
+ ? backend.uploadPack(did, repo)
237
+ : backend.receivePack(did, repo);
238
+ // Pipe request body into git subprocess stdin.
239
+ if (request.body) {
240
+ const writer = gitProcess.stdin.getWriter();
241
+ const reader = request.body.getReader();
242
+ try {
243
+ while (true) {
244
+ const { done, value } = yield reader.read();
245
+ if (done) {
246
+ break;
247
+ }
248
+ yield writer.write(value);
249
+ }
250
+ }
251
+ finally {
252
+ yield writer.close();
253
+ reader.releaseLock();
254
+ }
255
+ }
256
+ else {
257
+ const writer = gitProcess.stdin.getWriter();
258
+ yield writer.close();
259
+ }
260
+ return new Response(gitProcess.stdout, {
261
+ status: 200,
262
+ headers: {
263
+ 'Content-Type': `application/x-git-${service}-result`,
264
+ 'Cache-Control': 'no-cache',
265
+ },
266
+ });
267
+ });
268
+ }
269
+ // ---------------------------------------------------------------------------
270
+ // Helpers
271
+ // ---------------------------------------------------------------------------
272
+ /**
273
+ * Spawn `git <service> --stateless-rpc --advertise-refs` and collect stdout.
274
+ * Returns `null` if the process exits with a non-zero code.
275
+ */
276
+ function spawnAndCollect(service, repoPath) {
277
+ return new Promise((resolve, reject) => {
278
+ const child = spawn('git', [service, '--stateless-rpc', '--advertise-refs', repoPath], {
279
+ stdio: ['pipe', 'pipe', 'pipe'],
280
+ });
281
+ const chunks = [];
282
+ child.stdout.on('data', (chunk) => chunks.push(chunk));
283
+ child.stdout.on('error', reject);
284
+ child.on('error', reject);
285
+ child.on('exit', (code) => {
286
+ if (code !== 0) {
287
+ resolve(null);
288
+ }
289
+ else {
290
+ resolve(new Uint8Array(Buffer.concat(chunks)));
291
+ }
292
+ });
293
+ });
294
+ }
295
+ //# sourceMappingURL=http-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-handler.js","sourceRoot":"","sources":["../../../src/git-server/http-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Git transport server — smart HTTP git backend with DID-based push auth.
3
+ *
4
+ * @module git-server
5
+ */
6
+ export * from './auth.js';
7
+ export * from './bundle-restore.js';
8
+ export * from './bundle-sync.js';
9
+ export * from './did-service.js';
10
+ export * from './git-backend.js';
11
+ export * from './http-handler.js';
12
+ export * from './push-authorizer.js';
13
+ export * from './ref-sync.js';
14
+ export * from './server.js';
15
+ export * from './verify.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/git-server/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * DWN-based push authorization — checks collaborator roles in the DWN.
3
+ *
4
+ * When a DID attempts to push to a repository, this module queries the
5
+ * DWN for `repo/maintainer` and `repo/contributor` role records to
6
+ * determine if the pusher is authorized.
7
+ *
8
+ * Authorization rules:
9
+ * - The repo owner (DID that owns the DWN) can always push
10
+ * - DIDs with a `maintainer` role record can push
11
+ * - DIDs with a `contributor` role record can push
12
+ * - All other DIDs are rejected
13
+ *
14
+ * @module
15
+ */
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ // ---------------------------------------------------------------------------
26
+ // Public API
27
+ // ---------------------------------------------------------------------------
28
+ /**
29
+ * Create a `PushAuthorizer` that checks DWN collaborator role records.
30
+ *
31
+ * The authorizer queries the ForgeRepoProtocol for `maintainer` and
32
+ * `contributor` role records matching the pusher's DID. The repo owner
33
+ * is always authorized.
34
+ *
35
+ * @param options - Authorizer configuration
36
+ * @returns A PushAuthorizer callback
37
+ */
38
+ export function createDwnPushAuthorizer(options) {
39
+ const { repo, ownerDid } = options;
40
+ return (did, owner, _repoName) => __awaiter(this, void 0, void 0, function* () {
41
+ // The owner can always push to their own repos.
42
+ if (did === owner || did === ownerDid) {
43
+ return true;
44
+ }
45
+ // Query for maintainer role records for this DID.
46
+ const { records: maintainers } = yield repo.records.query('repo/maintainer', {
47
+ filter: { tags: { did } },
48
+ });
49
+ if (maintainers.length > 0) {
50
+ return true;
51
+ }
52
+ // Query for contributor role records for this DID.
53
+ const { records: contributors } = yield repo.records.query('repo/contributor', {
54
+ filter: { tags: { did } },
55
+ });
56
+ if (contributors.length > 0) {
57
+ return true;
58
+ }
59
+ return false;
60
+ });
61
+ }
62
+ //# sourceMappingURL=push-authorizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-authorizer.js","sourceRoot":"","sources":["../../../src/git-server/push-authorizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;AAqBH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAiC;IACvE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAEnC,OAAO,CAAO,GAAW,EAAE,KAAa,EAAE,SAAiB,EAAoB,EAAE;QAC/E,gDAAgD;QAChD,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kDAAkD;QAClD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAwB,EAAE;YAClF,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;SAC1B,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mDAAmD;QACnD,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAyB,EAAE;YACpF,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;SAC1B,CAAC,CAAC;QACH,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAA,CAAC;AACJ,CAAC"}