@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,51 @@
1
+ /**
2
+ * npm registry shim adapter for the unified daemon.
3
+ *
4
+ * Wraps `handleNpmRequest()` behind the `ShimAdapter` interface.
5
+ *
6
+ * @module
7
+ */
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ import { handleNpmRequest } from '../../shims/npm/registry.js';
18
+ // ---------------------------------------------------------------------------
19
+ // Adapter
20
+ // ---------------------------------------------------------------------------
21
+ export const npmAdapter = {
22
+ id: 'npm',
23
+ name: 'npm registry',
24
+ defaultPort: 4873,
25
+ portEnvVar: 'GITD_NPM_SHIM_PORT',
26
+ corsMethods: 'GET, OPTIONS',
27
+ corsHeaders: 'Authorization, Accept',
28
+ usageHint: 'npm install --registry=http://localhost:{port} @did:dht:<id>/<package>',
29
+ handle(ctx, req, res) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ var _a, _b, _c;
32
+ if (req.method !== 'GET') {
33
+ res.writeHead(405, { 'Content-Type': 'application/json' });
34
+ res.end(JSON.stringify({ error: 'Method not allowed. This is a read-only registry shim.' }));
35
+ return;
36
+ }
37
+ try {
38
+ const port = (_b = (_a = req.socket.address()) === null || _a === void 0 ? void 0 : _a.port) !== null && _b !== void 0 ? _b : 4873;
39
+ const url = new URL((_c = req.url) !== null && _c !== void 0 ? _c : '/', `http://localhost:${port}`);
40
+ const result = yield handleNpmRequest(ctx, url);
41
+ res.writeHead(result.status, result.headers);
42
+ res.end(result.body);
43
+ }
44
+ catch (_d) {
45
+ res.writeHead(500, { 'Content-Type': 'application/json' });
46
+ res.end(JSON.stringify({ error: 'Internal server error' }));
47
+ }
48
+ });
49
+ },
50
+ };
51
+ //# sourceMappingURL=npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../../../src/daemon/adapters/npm.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;;;;;;;;;AAOH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,EAAE,EAAY,KAAK;IACnB,IAAI,EAAU,cAAc;IAC5B,WAAW,EAAG,IAAI;IAClB,UAAU,EAAI,oBAAoB;IAClC,WAAW,EAAG,cAAc;IAC5B,WAAW,EAAG,uBAAuB;IACrC,SAAS,EAAK,wEAAwE;IAEhF,MAAM,CAAC,GAAiB,EAAE,GAAoB,EAAE,GAAmB;;;YACvE,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACzB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,wDAAwD,EAAE,CAAC,CAAC,CAAC;gBAC7F,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAA,MAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAwB,0CAAE,IAAI,mCAAI,IAAI,CAAC;gBACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,mCAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;gBAChE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChD,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YAAC,WAAM,CAAC;gBACP,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;KAAA;CACF,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * OCI/Docker registry shim adapter for the unified daemon.
3
+ *
4
+ * Wraps `handleOciRequest()` behind the `ShimAdapter` interface.
5
+ *
6
+ * @module
7
+ */
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ import { handleOciRequest } from '../../shims/oci/registry.js';
18
+ // ---------------------------------------------------------------------------
19
+ // Adapter
20
+ // ---------------------------------------------------------------------------
21
+ export const ociAdapter = {
22
+ id: 'oci',
23
+ name: 'OCI/Docker registry',
24
+ defaultPort: 5555,
25
+ portEnvVar: 'GITD_OCI_SHIM_PORT',
26
+ corsMethods: 'GET, HEAD, OPTIONS',
27
+ corsHeaders: 'Authorization, Accept, Docker-Distribution-Api-Version',
28
+ usageHint: 'docker pull localhost:{port}/did:dht:<id>/<image>:<tag>',
29
+ handle(ctx, req, res) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ var _a, _b, _c, _d;
32
+ const method = (_a = req.method) !== null && _a !== void 0 ? _a : 'GET';
33
+ if (method !== 'GET' && method !== 'HEAD') {
34
+ res.writeHead(405, {
35
+ 'Content-Type': 'application/json',
36
+ 'Docker-Distribution-Api-Version': 'registry/2.0',
37
+ });
38
+ res.end(JSON.stringify({
39
+ errors: [{ code: 'UNSUPPORTED', message: 'This is a read-only registry shim.', detail: null }],
40
+ }));
41
+ return;
42
+ }
43
+ try {
44
+ const port = (_c = (_b = req.socket.address()) === null || _b === void 0 ? void 0 : _b.port) !== null && _c !== void 0 ? _c : 5555;
45
+ const url = new URL((_d = req.url) !== null && _d !== void 0 ? _d : '/', `http://localhost:${port}`);
46
+ const result = yield handleOciRequest(ctx, url, method);
47
+ res.writeHead(result.status, result.headers);
48
+ res.end(result.body);
49
+ }
50
+ catch (_e) {
51
+ res.writeHead(500, {
52
+ 'Content-Type': 'application/json',
53
+ 'Docker-Distribution-Api-Version': 'registry/2.0',
54
+ });
55
+ res.end(JSON.stringify({
56
+ errors: [{ code: 'UNKNOWN', message: 'Internal server error', detail: null }],
57
+ }));
58
+ }
59
+ });
60
+ },
61
+ };
62
+ //# sourceMappingURL=oci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oci.js","sourceRoot":"","sources":["../../../../src/daemon/adapters/oci.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;;;;;;;;;AAOH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,EAAE,EAAY,KAAK;IACnB,IAAI,EAAU,qBAAqB;IACnC,WAAW,EAAG,IAAI;IAClB,UAAU,EAAI,oBAAoB;IAClC,WAAW,EAAG,oBAAoB;IAClC,WAAW,EAAG,wDAAwD;IACtE,SAAS,EAAK,yDAAyD;IAEjE,MAAM,CAAC,GAAiB,EAAE,GAAoB,EAAE,GAAmB;;;YACvE,MAAM,MAAM,GAAG,MAAA,GAAG,CAAC,MAAM,mCAAI,KAAK,CAAC;YAEnC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;oBACjB,cAAc,EAAsB,kBAAkB;oBACtD,iCAAiC,EAAG,cAAc;iBACnD,CAAC,CAAC;gBACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,oCAAoC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;iBAC/F,CAAC,CAAC,CAAC;gBACJ,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAA,MAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAwB,0CAAE,IAAI,mCAAI,IAAI,CAAC;gBACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,mCAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;gBAChE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBACxD,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YAAC,WAAM,CAAC;gBACP,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;oBACjB,cAAc,EAAsB,kBAAkB;oBACtD,iCAAiC,EAAG,cAAc;iBACnD,CAAC,CAAC;gBACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;iBAC9E,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;KAAA;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Unified daemon — barrel exports.
3
+ *
4
+ * @module
5
+ */
6
+ export { createAdapterServer, resolveConfig, startDaemon } from './server.js';
7
+ export { builtinAdapters, findAdapter } from './adapters/index.js';
8
+ export { githubAdapter } from './adapters/github.js';
9
+ export { goAdapter } from './adapters/go.js';
10
+ export { npmAdapter } from './adapters/npm.js';
11
+ export { ociAdapter } from './adapters/oci.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Unified daemon server — starts one HTTP server per enabled shim adapter.
3
+ *
4
+ * The daemon manages the lifecycle of all shim servers from a single
5
+ * process. It resolves configuration (JSON file, env vars, defaults),
6
+ * starts each enabled adapter on its assigned port, logs a status
7
+ * summary, and handles graceful shutdown on SIGINT/SIGTERM.
8
+ *
9
+ * Each adapter's server includes:
10
+ * - CORS preflight handling (OPTIONS)
11
+ * - A `/health` endpoint returning `{ status: 'ok', shim: '<id>' }`
12
+ * - Delegation to the adapter's `handle()` method for all other requests
13
+ * - Top-level error catching with 500 responses
14
+ *
15
+ * @module
16
+ */
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ import { createServer } from 'node:http';
27
+ import { builtinAdapters } from './adapters/index.js';
28
+ // ---------------------------------------------------------------------------
29
+ // Config resolution
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Resolve the effective configuration for every known adapter.
33
+ *
34
+ * Priority for port: config file > env var > adapter default.
35
+ * Priority for enabled: config file > `true` (all enabled by default).
36
+ */
37
+ export function resolveConfig(config, adapters = builtinAdapters) {
38
+ return adapters.map((adapter) => {
39
+ var _a, _b, _c, _d;
40
+ const entry = (_a = config.shims) === null || _a === void 0 ? void 0 : _a[adapter.id];
41
+ const envPort = process.env[adapter.portEnvVar];
42
+ const envParsed = envPort ? parseInt(envPort, 10) : undefined;
43
+ const port = (_c = (_b = entry === null || entry === void 0 ? void 0 : entry.port) !== null && _b !== void 0 ? _b : (envParsed !== undefined && !Number.isNaN(envParsed) ? envParsed : undefined)) !== null && _c !== void 0 ? _c : adapter.defaultPort;
44
+ const enabled = (_d = entry === null || entry === void 0 ? void 0 : entry.enabled) !== null && _d !== void 0 ? _d : true;
45
+ return { adapter, enabled, port };
46
+ });
47
+ }
48
+ // ---------------------------------------------------------------------------
49
+ // Server factory
50
+ // ---------------------------------------------------------------------------
51
+ /**
52
+ * Create an HTTP server for a single adapter.
53
+ *
54
+ * The server handles CORS preflight, `/health`, and delegates
55
+ * everything else to the adapter. It does NOT call `server.listen()`
56
+ * — the caller is responsible for that.
57
+ */
58
+ export function createAdapterServer(ctx, adapter) {
59
+ var _a, _b;
60
+ const corsMethods = (_a = adapter.corsMethods) !== null && _a !== void 0 ? _a : 'GET, OPTIONS';
61
+ const corsHeaders = (_b = adapter.corsHeaders) !== null && _b !== void 0 ? _b : 'Authorization, Accept, Content-Type';
62
+ return createServer((req, res) => __awaiter(this, void 0, void 0, function* () {
63
+ var _a;
64
+ const method = (_a = req.method) !== null && _a !== void 0 ? _a : 'GET';
65
+ // CORS preflight.
66
+ if (method === 'OPTIONS') {
67
+ res.writeHead(204, {
68
+ 'Access-Control-Allow-Origin': '*',
69
+ 'Access-Control-Allow-Methods': corsMethods,
70
+ 'Access-Control-Allow-Headers': corsHeaders,
71
+ 'Access-Control-Max-Age': '86400',
72
+ });
73
+ res.end();
74
+ return;
75
+ }
76
+ // Health endpoint.
77
+ if (req.url === '/health') {
78
+ res.writeHead(200, { 'Content-Type': 'application/json' });
79
+ res.end(JSON.stringify({ status: 'ok', shim: adapter.id }));
80
+ return;
81
+ }
82
+ // Delegate to adapter.
83
+ try {
84
+ yield adapter.handle(ctx, req, res);
85
+ }
86
+ catch (err) {
87
+ console.error(`[daemon:${adapter.id}] Error: ${err.message}`);
88
+ if (!res.headersSent) {
89
+ res.writeHead(500, { 'Content-Type': 'application/json' });
90
+ res.end(JSON.stringify({ error: 'Internal server error' }));
91
+ }
92
+ }
93
+ }));
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Daemon lifecycle
97
+ // ---------------------------------------------------------------------------
98
+ /**
99
+ * Start the unified daemon.
100
+ *
101
+ * Resolves configuration, starts one HTTP server per enabled adapter,
102
+ * registers SIGINT/SIGTERM handlers, and returns the `DaemonInstance`
103
+ * for programmatic control and testing.
104
+ */
105
+ export function startDaemon(options) {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ const { ctx, config } = options;
108
+ const resolved = resolveConfig(config);
109
+ const servers = new Map();
110
+ const enabledAdapters = resolved.filter((r) => r.enabled);
111
+ if (enabledAdapters.length === 0) {
112
+ console.log('[daemon] No shims enabled — nothing to start.');
113
+ return { servers, resolved, stop: () => __awaiter(this, void 0, void 0, function* () { }) };
114
+ }
115
+ // Start each enabled adapter.
116
+ const startPromises = enabledAdapters.map((r) => {
117
+ return new Promise((resolve, reject) => {
118
+ const server = createAdapterServer(ctx, r.adapter);
119
+ server.on('error', (err) => {
120
+ if (err.code === 'EADDRINUSE') {
121
+ console.error(`[daemon:${r.adapter.id}] Port ${r.port} is already in use — skipping.`);
122
+ resolve();
123
+ }
124
+ else {
125
+ reject(err);
126
+ }
127
+ });
128
+ server.listen(r.port, () => {
129
+ servers.set(r.adapter.id, server);
130
+ resolve();
131
+ });
132
+ });
133
+ });
134
+ yield Promise.all(startPromises);
135
+ // Print status summary.
136
+ console.log('[daemon] gitd daemon started');
137
+ console.log('');
138
+ for (const r of enabledAdapters) {
139
+ const running = servers.has(r.adapter.id);
140
+ const status = running ? `http://localhost:${r.port}` : 'FAILED';
141
+ console.log(` ${r.adapter.name.padEnd(22)} ${status}`);
142
+ if (running && r.adapter.usageHint) {
143
+ console.log(` ${''.padEnd(22)} ${r.adapter.usageHint.replace('{port}', String(r.port))}`);
144
+ }
145
+ }
146
+ console.log('');
147
+ console.log(`[daemon] ${servers.size}/${enabledAdapters.length} shims running. Health: GET /health on any port.`);
148
+ console.log('[daemon] Press Ctrl+C to stop.');
149
+ console.log('');
150
+ // Build the stop function.
151
+ const stop = () => __awaiter(this, void 0, void 0, function* () {
152
+ const closePromises = [];
153
+ for (const [id, server] of servers) {
154
+ closePromises.push(new Promise((resolve) => {
155
+ server.close(() => {
156
+ console.log(`[daemon:${id}] stopped`);
157
+ resolve();
158
+ });
159
+ }));
160
+ }
161
+ yield Promise.all(closePromises);
162
+ servers.clear();
163
+ });
164
+ return { servers, resolved, stop };
165
+ });
166
+ }
167
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/daemon/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Git credential helper for DID-based push authentication.
4
+ *
5
+ * Git invokes credential helpers with a single argument: `get`, `store`, or
6
+ * `erase`. For `get`, the helper reads the request from stdin and writes
7
+ * credentials to stdout.
8
+ *
9
+ * This helper creates a DID-signed push token using the local Web5 agent's
10
+ * identity, formatted as HTTP Basic auth credentials:
11
+ * username: did-auth
12
+ * password: <base64url-signature>.<base64url-token>
13
+ *
14
+ * Usage in .gitconfig:
15
+ * [credential "https://git.example.com"]
16
+ * helper = /path/to/gitd-credential-helper
17
+ *
18
+ * Environment:
19
+ * GITD_PASSWORD — vault password for the local agent
20
+ *
21
+ * @module
22
+ */
23
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
24
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
25
+ return new (P || (P = Promise))(function (resolve, reject) {
26
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
27
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
28
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
29
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
30
+ });
31
+ };
32
+ import { Ed25519 } from '@enbox/crypto';
33
+ import { createPushTokenPayload, DID_AUTH_USERNAME, encodePushToken, formatAuthPassword, } from '../git-server/auth.js';
34
+ // ---------------------------------------------------------------------------
35
+ // Credential helper logic
36
+ // ---------------------------------------------------------------------------
37
+ /**
38
+ * Generate push credentials for a git request.
39
+ *
40
+ * @param request - The parsed credential request from git
41
+ * @param agentDid - The local agent's DID
42
+ * @param privateKeyJwk - The agent's Ed25519 private key (JWK)
43
+ * @returns The credential response to write to stdout, or undefined if not applicable
44
+ */
45
+ export function generatePushCredentials(request, agentDid, privateKeyJwk) {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ var _a;
48
+ // Extract the owner DID and repo from the URL path.
49
+ // Expected path format: /<did>/<repo> or /<prefix>/<did>/<repo>
50
+ const path = (_a = request.path) !== null && _a !== void 0 ? _a : '';
51
+ const segments = path.split('/').filter(Boolean);
52
+ // Find the DID segment (starts with "did:").
53
+ const didIdx = segments.findIndex((s) => s.startsWith('did:'));
54
+ if (didIdx === -1) {
55
+ return undefined;
56
+ }
57
+ const ownerDid = segments[didIdx];
58
+ const repo = segments[didIdx + 1];
59
+ if (!repo) {
60
+ return undefined;
61
+ }
62
+ // Create and sign the push token.
63
+ const payload = createPushTokenPayload(agentDid, ownerDid, repo);
64
+ const token = encodePushToken(payload);
65
+ const tokenBytes = new TextEncoder().encode(token);
66
+ const signature = yield Ed25519.sign({
67
+ key: privateKeyJwk,
68
+ data: tokenBytes,
69
+ });
70
+ const signatureBase64url = Buffer.from(signature).toString('base64url');
71
+ return {
72
+ username: DID_AUTH_USERNAME,
73
+ password: formatAuthPassword({ signature: signatureBase64url, token }),
74
+ };
75
+ });
76
+ }
77
+ // ---------------------------------------------------------------------------
78
+ // stdin/stdout protocol
79
+ // ---------------------------------------------------------------------------
80
+ /** Parse a git credential helper request from stdin lines. */
81
+ export function parseCredentialRequest(input) {
82
+ const result = {};
83
+ for (const line of input.split('\n')) {
84
+ const eqIdx = line.indexOf('=');
85
+ if (eqIdx === -1) {
86
+ continue;
87
+ }
88
+ const key = line.slice(0, eqIdx).trim();
89
+ const value = line.slice(eqIdx + 1).trim();
90
+ if (key === 'protocol') {
91
+ result.protocol = value;
92
+ }
93
+ if (key === 'host') {
94
+ result.host = value;
95
+ }
96
+ if (key === 'path') {
97
+ result.path = value;
98
+ }
99
+ }
100
+ return result;
101
+ }
102
+ /** Format a credential response for git. */
103
+ export function formatCredentialResponse(creds) {
104
+ return `username=${creds.username}\npassword=${creds.password}\n`;
105
+ }
106
+ //# sourceMappingURL=credential-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-helper.js","sourceRoot":"","sources":["../../../src/git-remote/credential-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Git credential helper entry point for DID-based push authentication.
4
+ *
5
+ * Git invokes this binary with a single argument: `get`, `store`, or `erase`.
6
+ * For `get`, the helper reads the request from stdin (key=value lines) and
7
+ * writes credentials to stdout.
8
+ *
9
+ * This helper creates a DID-signed push token using the local Web5 agent's
10
+ * identity, formatted as HTTP Basic auth credentials:
11
+ * username: did-auth
12
+ * password: <base64url-signature>.<base64url-token>
13
+ *
14
+ * Install in .gitconfig:
15
+ * [credential]
16
+ * helper = /path/to/git-remote-did-credential
17
+ *
18
+ * Environment:
19
+ * GITD_PASSWORD — vault password for the local agent
20
+ *
21
+ * @module
22
+ */
23
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
24
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
25
+ return new (P || (P = Promise))(function (resolve, reject) {
26
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
27
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
28
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
29
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
30
+ });
31
+ };
32
+ import { Web5 } from '@enbox/api';
33
+ import { createPushTokenPayload, DID_AUTH_USERNAME, encodePushToken, formatAuthPassword, } from '../git-server/auth.js';
34
+ import { formatCredentialResponse, parseCredentialRequest, } from './credential-helper.js';
35
+ // ---------------------------------------------------------------------------
36
+ // Main
37
+ // ---------------------------------------------------------------------------
38
+ function main() {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ var _a;
41
+ const action = process.argv[2];
42
+ // Only handle `get` requests — `store` and `erase` are no-ops.
43
+ if (action !== 'get') {
44
+ return;
45
+ }
46
+ // Read the credential request from stdin.
47
+ const input = yield readStdin();
48
+ const request = parseCredentialRequest(input);
49
+ // We only handle HTTP/HTTPS requests.
50
+ if (request.protocol && request.protocol !== 'https' && request.protocol !== 'http') {
51
+ return;
52
+ }
53
+ // Connect to the local agent to get the DID and signing key.
54
+ const password = process.env.GITD_PASSWORD;
55
+ if (!password) {
56
+ // Credential helpers must be non-interactive. If no password is set,
57
+ // silently exit and let git fall back to another credential helper.
58
+ return;
59
+ }
60
+ const { web5, did } = yield Web5.connect({
61
+ password,
62
+ sync: 'off',
63
+ });
64
+ // Extract the owner DID and repo from the URL path.
65
+ const path = (_a = request.path) !== null && _a !== void 0 ? _a : '';
66
+ const segments = path.split('/').filter(Boolean);
67
+ const didIdx = segments.findIndex((s) => s.startsWith('did:'));
68
+ if (didIdx === -1) {
69
+ return;
70
+ }
71
+ const ownerDid = segments[didIdx];
72
+ const repo = segments[didIdx + 1];
73
+ if (!repo) {
74
+ return;
75
+ }
76
+ // Create the push token.
77
+ const payload = createPushTokenPayload(did, ownerDid, repo);
78
+ const token = encodePushToken(payload);
79
+ // Sign the token using the agent's DID signer.
80
+ const signer = yield web5.agent.agentDid.getSigner();
81
+ const tokenBytes = new TextEncoder().encode(token);
82
+ const signature = yield signer.sign({ data: tokenBytes });
83
+ const signatureBase64url = Buffer.from(signature).toString('base64url');
84
+ const creds = {
85
+ username: DID_AUTH_USERNAME,
86
+ password: formatAuthPassword({ signature: signatureBase64url, token }),
87
+ };
88
+ process.stdout.write(formatCredentialResponse(creds));
89
+ });
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Helpers
93
+ // ---------------------------------------------------------------------------
94
+ /** Read all of stdin until EOF. */
95
+ function readStdin() {
96
+ return new Promise((resolve) => {
97
+ let buf = '';
98
+ process.stdin.setEncoding('utf8');
99
+ process.stdin.on('data', (chunk) => { buf += chunk; });
100
+ process.stdin.on('end', () => resolve(buf));
101
+ process.stdin.resume();
102
+ });
103
+ }
104
+ main().catch(() => {
105
+ // Credential helpers must never crash loudly — silent exit on error
106
+ // lets git fall back to the next configured credential helper.
107
+ process.exit(0);
108
+ });
109
+ //# sourceMappingURL=credential-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-main.js","sourceRoot":"","sources":["../../../src/git-remote/credential-main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Git remote helper — DID-based remote transport for git.
3
+ *
4
+ * @module git-remote
5
+ */
6
+ export * from './credential-helper.js';
7
+ export * from './parse-url.js';
8
+ export * from './resolve.js';
9
+ export * from './service.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/git-remote/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * git-remote-did — Git remote helper for DID-addressed repositories.
4
+ *
5
+ * This helper is invoked by Git when it encounters a `did::` or `did://`
6
+ * remote URL. It resolves the DID to an HTTPS endpoint and delegates all
7
+ * git transport to `git-remote-https`.
8
+ *
9
+ * Usage (invoked by Git, not directly):
10
+ * git clone did::dht:abc123/my-repo
11
+ * git remote add origin did::dht:abc123/my-repo
12
+ * git push origin main
13
+ *
14
+ * The helper:
15
+ * 1. Parses the DID from the URL
16
+ * 2. Resolves the DID document
17
+ * 3. Extracts the GitTransport or DWN service endpoint
18
+ * 4. Execs `git-remote-https` with the resolved HTTPS URL
19
+ *
20
+ * @module
21
+ */
22
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
23
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
24
+ return new (P || (P = Promise))(function (resolve, reject) {
25
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
26
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
27
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
28
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
29
+ });
30
+ };
31
+ import { spawn } from 'node:child_process';
32
+ import { parseDidUrl } from './parse-url.js';
33
+ import { resolveGitEndpoint } from './resolve.js';
34
+ // ---------------------------------------------------------------------------
35
+ // Main
36
+ // ---------------------------------------------------------------------------
37
+ function main() {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ var _a;
40
+ const remoteName = process.argv[2];
41
+ const url = (_a = process.argv[3]) !== null && _a !== void 0 ? _a : remoteName;
42
+ if (!url) {
43
+ console.error('git-remote-did: missing URL argument');
44
+ process.exit(1);
45
+ }
46
+ // Parse DID from URL.
47
+ let parsed;
48
+ try {
49
+ parsed = parseDidUrl(url);
50
+ }
51
+ catch (err) {
52
+ console.error(`git-remote-did: ${err.message}`);
53
+ process.exit(1);
54
+ }
55
+ // Resolve DID → HTTPS endpoint.
56
+ let endpoint;
57
+ try {
58
+ endpoint = yield resolveGitEndpoint(parsed.did, parsed.repo);
59
+ }
60
+ catch (err) {
61
+ console.error(`git-remote-did: ${err.message}`);
62
+ process.exit(1);
63
+ }
64
+ console.error(`git-remote-did: resolved ${parsed.did} → ${endpoint.url} (via ${endpoint.source})`);
65
+ // Delegate to git-remote-https — it handles all the transport complexity.
66
+ const child = spawn('git', ['remote-https', remoteName, endpoint.url], {
67
+ stdio: 'inherit',
68
+ });
69
+ child.on('exit', (code) => {
70
+ process.exit(code !== null && code !== void 0 ? code : 128);
71
+ });
72
+ });
73
+ }
74
+ main().catch((err) => {
75
+ console.error(`git-remote-did: fatal: ${err.message}`);
76
+ process.exit(128);
77
+ });
78
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/git-remote/main.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;;;;;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,SAAe,IAAI;;;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAI,UAAU,CAAC;QAE1C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,sBAAsB;QACtB,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,gCAAgC;QAChC,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAEnG,0EAA0E;QAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;YACrE,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;CAAA;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}