@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.
- package/LICENSE +177 -0
- package/README.md +134 -0
- package/dist/esm/ci.js +76 -0
- package/dist/esm/ci.js.map +1 -0
- package/dist/esm/cli/agent.js +86 -0
- package/dist/esm/cli/agent.js.map +1 -0
- package/dist/esm/cli/commands/ci.js +278 -0
- package/dist/esm/cli/commands/ci.js.map +1 -0
- package/dist/esm/cli/commands/clone.js +77 -0
- package/dist/esm/cli/commands/clone.js.map +1 -0
- package/dist/esm/cli/commands/daemon.js +132 -0
- package/dist/esm/cli/commands/daemon.js.map +1 -0
- package/dist/esm/cli/commands/github-api.js +36 -0
- package/dist/esm/cli/commands/github-api.js.map +1 -0
- package/dist/esm/cli/commands/init.js +69 -0
- package/dist/esm/cli/commands/init.js.map +1 -0
- package/dist/esm/cli/commands/issue.js +293 -0
- package/dist/esm/cli/commands/issue.js.map +1 -0
- package/dist/esm/cli/commands/log.js +90 -0
- package/dist/esm/cli/commands/log.js.map +1 -0
- package/dist/esm/cli/commands/migrate.js +444 -0
- package/dist/esm/cli/commands/migrate.js.map +1 -0
- package/dist/esm/cli/commands/notification.js +141 -0
- package/dist/esm/cli/commands/notification.js.map +1 -0
- package/dist/esm/cli/commands/org.js +353 -0
- package/dist/esm/cli/commands/org.js.map +1 -0
- package/dist/esm/cli/commands/patch.js +375 -0
- package/dist/esm/cli/commands/patch.js.map +1 -0
- package/dist/esm/cli/commands/registry.js +501 -0
- package/dist/esm/cli/commands/registry.js.map +1 -0
- package/dist/esm/cli/commands/release.js +197 -0
- package/dist/esm/cli/commands/release.js.map +1 -0
- package/dist/esm/cli/commands/repo.js +148 -0
- package/dist/esm/cli/commands/repo.js.map +1 -0
- package/dist/esm/cli/commands/serve.js +148 -0
- package/dist/esm/cli/commands/serve.js.map +1 -0
- package/dist/esm/cli/commands/setup.js +92 -0
- package/dist/esm/cli/commands/setup.js.map +1 -0
- package/dist/esm/cli/commands/shim.js +75 -0
- package/dist/esm/cli/commands/shim.js.map +1 -0
- package/dist/esm/cli/commands/social.js +206 -0
- package/dist/esm/cli/commands/social.js.map +1 -0
- package/dist/esm/cli/commands/web.js +36 -0
- package/dist/esm/cli/commands/web.js.map +1 -0
- package/dist/esm/cli/commands/wiki.js +185 -0
- package/dist/esm/cli/commands/wiki.js.map +1 -0
- package/dist/esm/cli/flags.js +29 -0
- package/dist/esm/cli/flags.js.map +1 -0
- package/dist/esm/cli/main.js +331 -0
- package/dist/esm/cli/main.js.map +1 -0
- package/dist/esm/cli/repo-context.js +53 -0
- package/dist/esm/cli/repo-context.js.map +1 -0
- package/dist/esm/daemon/adapter.js +18 -0
- package/dist/esm/daemon/adapter.js.map +1 -0
- package/dist/esm/daemon/adapters/github.js +112 -0
- package/dist/esm/daemon/adapters/github.js.map +1 -0
- package/dist/esm/daemon/adapters/go.js +51 -0
- package/dist/esm/daemon/adapters/go.js.map +1 -0
- package/dist/esm/daemon/adapters/index.js +32 -0
- package/dist/esm/daemon/adapters/index.js.map +1 -0
- package/dist/esm/daemon/adapters/npm.js +51 -0
- package/dist/esm/daemon/adapters/npm.js.map +1 -0
- package/dist/esm/daemon/adapters/oci.js +62 -0
- package/dist/esm/daemon/adapters/oci.js.map +1 -0
- package/dist/esm/daemon/index.js +12 -0
- package/dist/esm/daemon/index.js.map +1 -0
- package/dist/esm/daemon/server.js +167 -0
- package/dist/esm/daemon/server.js.map +1 -0
- package/dist/esm/git-remote/credential-helper.js +106 -0
- package/dist/esm/git-remote/credential-helper.js.map +1 -0
- package/dist/esm/git-remote/credential-main.js +109 -0
- package/dist/esm/git-remote/credential-main.js.map +1 -0
- package/dist/esm/git-remote/index.js +10 -0
- package/dist/esm/git-remote/index.js.map +1 -0
- package/dist/esm/git-remote/main.js +78 -0
- package/dist/esm/git-remote/main.js.map +1 -0
- package/dist/esm/git-remote/parse-url.js +60 -0
- package/dist/esm/git-remote/parse-url.js.map +1 -0
- package/dist/esm/git-remote/resolve.js +175 -0
- package/dist/esm/git-remote/resolve.js.map +1 -0
- package/dist/esm/git-remote/service.js +82 -0
- package/dist/esm/git-remote/service.js.map +1 -0
- package/dist/esm/git-server/auth.js +211 -0
- package/dist/esm/git-server/auth.js.map +1 -0
- package/dist/esm/git-server/bundle-restore.js +180 -0
- package/dist/esm/git-server/bundle-restore.js.map +1 -0
- package/dist/esm/git-server/bundle-sync.js +233 -0
- package/dist/esm/git-server/bundle-sync.js.map +1 -0
- package/dist/esm/git-server/did-service.js +73 -0
- package/dist/esm/git-server/did-service.js.map +1 -0
- package/dist/esm/git-server/git-backend.js +186 -0
- package/dist/esm/git-server/git-backend.js.map +1 -0
- package/dist/esm/git-server/http-handler.js +295 -0
- package/dist/esm/git-server/http-handler.js.map +1 -0
- package/dist/esm/git-server/index.js +16 -0
- package/dist/esm/git-server/index.js.map +1 -0
- package/dist/esm/git-server/push-authorizer.js +62 -0
- package/dist/esm/git-server/push-authorizer.js.map +1 -0
- package/dist/esm/git-server/ref-sync.js +132 -0
- package/dist/esm/git-server/ref-sync.js.map +1 -0
- package/dist/esm/git-server/server.js +185 -0
- package/dist/esm/git-server/server.js.map +1 -0
- package/dist/esm/git-server/verify.js +109 -0
- package/dist/esm/git-server/verify.js.map +1 -0
- package/dist/esm/github-shim/helpers.js +273 -0
- package/dist/esm/github-shim/helpers.js.map +1 -0
- package/dist/esm/github-shim/index.js +13 -0
- package/dist/esm/github-shim/index.js.map +1 -0
- package/dist/esm/github-shim/issues.js +318 -0
- package/dist/esm/github-shim/issues.js.map +1 -0
- package/dist/esm/github-shim/pulls.js +423 -0
- package/dist/esm/github-shim/pulls.js.map +1 -0
- package/dist/esm/github-shim/releases.js +154 -0
- package/dist/esm/github-shim/releases.js.map +1 -0
- package/dist/esm/github-shim/repos.js +86 -0
- package/dist/esm/github-shim/repos.js.map +1 -0
- package/dist/esm/github-shim/server.js +351 -0
- package/dist/esm/github-shim/server.js.map +1 -0
- package/dist/esm/github-shim/users.js +61 -0
- package/dist/esm/github-shim/users.js.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/indexer/api.js +132 -0
- package/dist/esm/indexer/api.js.map +1 -0
- package/dist/esm/indexer/crawler.js +256 -0
- package/dist/esm/indexer/crawler.js.map +1 -0
- package/dist/esm/indexer/index.js +9 -0
- package/dist/esm/indexer/index.js.map +1 -0
- package/dist/esm/indexer/main.js +76 -0
- package/dist/esm/indexer/main.js.map +1 -0
- package/dist/esm/indexer/store.js +334 -0
- package/dist/esm/indexer/store.js.map +1 -0
- package/dist/esm/issues.js +133 -0
- package/dist/esm/issues.js.map +1 -0
- package/dist/esm/notifications.js +47 -0
- package/dist/esm/notifications.js.map +1 -0
- package/dist/esm/org.js +90 -0
- package/dist/esm/org.js.map +1 -0
- package/dist/esm/patches.js +136 -0
- package/dist/esm/patches.js.map +1 -0
- package/dist/esm/refs.js +54 -0
- package/dist/esm/refs.js.map +1 -0
- package/dist/esm/registry.js +81 -0
- package/dist/esm/registry.js.map +1 -0
- package/dist/esm/releases.js +78 -0
- package/dist/esm/releases.js.map +1 -0
- package/dist/esm/repo.js +150 -0
- package/dist/esm/repo.js.map +1 -0
- package/dist/esm/resolver/index.js +10 -0
- package/dist/esm/resolver/index.js.map +1 -0
- package/dist/esm/resolver/resolve.js +189 -0
- package/dist/esm/resolver/resolve.js.map +1 -0
- package/dist/esm/resolver/trust-chain.js +155 -0
- package/dist/esm/resolver/trust-chain.js.map +1 -0
- package/dist/esm/resolver/verify.js +186 -0
- package/dist/esm/resolver/verify.js.map +1 -0
- package/dist/esm/shims/go/index.js +9 -0
- package/dist/esm/shims/go/index.js.map +1 -0
- package/dist/esm/shims/go/proxy.js +275 -0
- package/dist/esm/shims/go/proxy.js.map +1 -0
- package/dist/esm/shims/go/server.js +70 -0
- package/dist/esm/shims/go/server.js.map +1 -0
- package/dist/esm/shims/index.js +15 -0
- package/dist/esm/shims/index.js.map +1 -0
- package/dist/esm/shims/npm/index.js +9 -0
- package/dist/esm/shims/npm/index.js.map +1 -0
- package/dist/esm/shims/npm/registry.js +234 -0
- package/dist/esm/shims/npm/registry.js.map +1 -0
- package/dist/esm/shims/npm/server.js +72 -0
- package/dist/esm/shims/npm/server.js.map +1 -0
- package/dist/esm/shims/oci/index.js +9 -0
- package/dist/esm/shims/oci/index.js.map +1 -0
- package/dist/esm/shims/oci/registry.js +276 -0
- package/dist/esm/shims/oci/registry.js.map +1 -0
- package/dist/esm/shims/oci/server.js +82 -0
- package/dist/esm/shims/oci/server.js.map +1 -0
- package/dist/esm/social.js +70 -0
- package/dist/esm/social.js.map +1 -0
- package/dist/esm/web/html.js +123 -0
- package/dist/esm/web/html.js.map +1 -0
- package/dist/esm/web/index.js +7 -0
- package/dist/esm/web/index.js.map +1 -0
- package/dist/esm/web/routes.js +420 -0
- package/dist/esm/web/routes.js.map +1 -0
- package/dist/esm/web/server.js +225 -0
- package/dist/esm/web/server.js.map +1 -0
- package/dist/esm/wiki.js +63 -0
- package/dist/esm/wiki.js.map +1 -0
- package/dist/types/ci.d.ts +203 -0
- package/dist/types/ci.d.ts.map +1 -0
- package/dist/types/cli/agent.d.ts +59 -0
- package/dist/types/cli/agent.d.ts.map +1 -0
- package/dist/types/cli/commands/ci.d.ts +16 -0
- package/dist/types/cli/commands/ci.d.ts.map +1 -0
- package/dist/types/cli/commands/clone.d.ts +13 -0
- package/dist/types/cli/commands/clone.d.ts.map +1 -0
- package/dist/types/cli/commands/daemon.d.ts +29 -0
- package/dist/types/cli/commands/daemon.d.ts.map +1 -0
- package/dist/types/cli/commands/github-api.d.ts +14 -0
- package/dist/types/cli/commands/github-api.d.ts.map +1 -0
- package/dist/types/cli/commands/init.d.ts +11 -0
- package/dist/types/cli/commands/init.d.ts.map +1 -0
- package/dist/types/cli/commands/issue.d.ts +16 -0
- package/dist/types/cli/commands/issue.d.ts.map +1 -0
- package/dist/types/cli/commands/log.d.ts +13 -0
- package/dist/types/cli/commands/log.d.ts.map +1 -0
- package/dist/types/cli/commands/migrate.d.ts +19 -0
- package/dist/types/cli/commands/migrate.d.ts.map +1 -0
- package/dist/types/cli/commands/notification.d.ts +16 -0
- package/dist/types/cli/commands/notification.d.ts.map +1 -0
- package/dist/types/cli/commands/org.d.ts +19 -0
- package/dist/types/cli/commands/org.d.ts.map +1 -0
- package/dist/types/cli/commands/patch.d.ts +17 -0
- package/dist/types/cli/commands/patch.d.ts.map +1 -0
- package/dist/types/cli/commands/registry.d.ts +25 -0
- package/dist/types/cli/commands/registry.d.ts.map +1 -0
- package/dist/types/cli/commands/release.d.ts +13 -0
- package/dist/types/cli/commands/release.d.ts.map +1 -0
- package/dist/types/cli/commands/repo.d.ts +15 -0
- package/dist/types/cli/commands/repo.d.ts.map +1 -0
- package/dist/types/cli/commands/serve.d.ts +22 -0
- package/dist/types/cli/commands/serve.d.ts.map +1 -0
- package/dist/types/cli/commands/setup.d.ts +16 -0
- package/dist/types/cli/commands/setup.d.ts.map +1 -0
- package/dist/types/cli/commands/shim.d.ts +16 -0
- package/dist/types/cli/commands/shim.d.ts.map +1 -0
- package/dist/types/cli/commands/social.d.ts +19 -0
- package/dist/types/cli/commands/social.d.ts.map +1 -0
- package/dist/types/cli/commands/web.d.ts +14 -0
- package/dist/types/cli/commands/web.d.ts.map +1 -0
- package/dist/types/cli/commands/wiki.d.ts +14 -0
- package/dist/types/cli/commands/wiki.d.ts.map +1 -0
- package/dist/types/cli/flags.d.ts +16 -0
- package/dist/types/cli/flags.d.ts.map +1 -0
- package/dist/types/cli/main.d.ts +69 -0
- package/dist/types/cli/main.d.ts.map +1 -0
- package/dist/types/cli/repo-context.d.ts +30 -0
- package/dist/types/cli/repo-context.d.ts.map +1 -0
- package/dist/types/daemon/adapter.d.ts +74 -0
- package/dist/types/daemon/adapter.d.ts.map +1 -0
- package/dist/types/daemon/adapters/github.d.ts +10 -0
- package/dist/types/daemon/adapters/github.d.ts.map +1 -0
- package/dist/types/daemon/adapters/go.d.ts +10 -0
- package/dist/types/daemon/adapters/go.d.ts.map +1 -0
- package/dist/types/daemon/adapters/index.d.ts +22 -0
- package/dist/types/daemon/adapters/index.d.ts.map +1 -0
- package/dist/types/daemon/adapters/npm.d.ts +10 -0
- package/dist/types/daemon/adapters/npm.d.ts.map +1 -0
- package/dist/types/daemon/adapters/oci.d.ts +10 -0
- package/dist/types/daemon/adapters/oci.d.ts.map +1 -0
- package/dist/types/daemon/index.d.ts +14 -0
- package/dist/types/daemon/index.d.ts.map +1 -0
- package/dist/types/daemon/server.d.ts +55 -0
- package/dist/types/daemon/server.d.ts.map +1 -0
- package/dist/types/git-remote/credential-helper.d.ts +49 -0
- package/dist/types/git-remote/credential-helper.d.ts.map +1 -0
- package/dist/types/git-remote/credential-main.d.ts +24 -0
- package/dist/types/git-remote/credential-main.d.ts.map +1 -0
- package/dist/types/git-remote/index.d.ts +10 -0
- package/dist/types/git-remote/index.d.ts.map +1 -0
- package/dist/types/git-remote/main.d.ts +23 -0
- package/dist/types/git-remote/main.d.ts.map +1 -0
- package/dist/types/git-remote/parse-url.d.ts +32 -0
- package/dist/types/git-remote/parse-url.d.ts.map +1 -0
- package/dist/types/git-remote/resolve.d.ts +30 -0
- package/dist/types/git-remote/resolve.d.ts.map +1 -0
- package/dist/types/git-remote/service.d.ts +75 -0
- package/dist/types/git-remote/service.d.ts.map +1 -0
- package/dist/types/git-server/auth.d.ts +129 -0
- package/dist/types/git-server/auth.d.ts.map +1 -0
- package/dist/types/git-server/bundle-restore.d.ts +48 -0
- package/dist/types/git-server/bundle-restore.d.ts.map +1 -0
- package/dist/types/git-server/bundle-sync.d.ts +90 -0
- package/dist/types/git-server/bundle-sync.d.ts.map +1 -0
- package/dist/types/git-server/did-service.d.ts +26 -0
- package/dist/types/git-server/did-service.d.ts.map +1 -0
- package/dist/types/git-server/git-backend.d.ts +84 -0
- package/dist/types/git-server/git-backend.d.ts.map +1 -0
- package/dist/types/git-server/http-handler.d.ts +73 -0
- package/dist/types/git-server/http-handler.d.ts.map +1 -0
- package/dist/types/git-server/index.d.ts +16 -0
- package/dist/types/git-server/index.d.ts.map +1 -0
- package/dist/types/git-server/push-authorizer.d.ts +38 -0
- package/dist/types/git-server/push-authorizer.d.ts.map +1 -0
- package/dist/types/git-server/ref-sync.d.ts +52 -0
- package/dist/types/git-server/ref-sync.d.ts.map +1 -0
- package/dist/types/git-server/server.d.ts +70 -0
- package/dist/types/git-server/server.d.ts.map +1 -0
- package/dist/types/git-server/verify.d.ts +12 -0
- package/dist/types/git-server/verify.d.ts.map +1 -0
- package/dist/types/github-shim/helpers.d.ts +108 -0
- package/dist/types/github-shim/helpers.d.ts.map +1 -0
- package/dist/types/github-shim/index.d.ts +15 -0
- package/dist/types/github-shim/index.d.ts.map +1 -0
- package/dist/types/github-shim/issues.d.ts +24 -0
- package/dist/types/github-shim/issues.d.ts.map +1 -0
- package/dist/types/github-shim/pulls.d.ts +31 -0
- package/dist/types/github-shim/pulls.d.ts.map +1 -0
- package/dist/types/github-shim/releases.d.ts +18 -0
- package/dist/types/github-shim/releases.d.ts.map +1 -0
- package/dist/types/github-shim/repos.d.ts +21 -0
- package/dist/types/github-shim/repos.d.ts.map +1 -0
- package/dist/types/github-shim/server.d.ts +53 -0
- package/dist/types/github-shim/server.d.ts.map +1 -0
- package/dist/types/github-shim/users.d.ts +17 -0
- package/dist/types/github-shim/users.d.ts.map +1 -0
- package/dist/types/index.d.ts +26 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/indexer/api.d.ts +32 -0
- package/dist/types/indexer/api.d.ts.map +1 -0
- package/dist/types/indexer/crawler.d.ts +72 -0
- package/dist/types/indexer/crawler.d.ts.map +1 -0
- package/dist/types/indexer/index.d.ts +12 -0
- package/dist/types/indexer/index.d.ts.map +1 -0
- package/dist/types/indexer/main.d.ts +21 -0
- package/dist/types/indexer/main.d.ts.map +1 -0
- package/dist/types/indexer/store.d.ts +168 -0
- package/dist/types/indexer/store.d.ts.map +1 -0
- package/dist/types/issues.d.ts +395 -0
- package/dist/types/issues.d.ts.map +1 -0
- package/dist/types/notifications.d.ts +93 -0
- package/dist/types/notifications.d.ts.map +1 -0
- package/dist/types/org.d.ts +232 -0
- package/dist/types/org.d.ts.map +1 -0
- package/dist/types/patches.d.ts +410 -0
- package/dist/types/patches.d.ts.map +1 -0
- package/dist/types/refs.d.ts +114 -0
- package/dist/types/refs.d.ts.map +1 -0
- package/dist/types/registry.d.ts +212 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/releases.d.ts +204 -0
- package/dist/types/releases.d.ts.map +1 -0
- package/dist/types/repo.d.ts +450 -0
- package/dist/types/repo.d.ts.map +1 -0
- package/dist/types/resolver/index.d.ts +13 -0
- package/dist/types/resolver/index.d.ts.map +1 -0
- package/dist/types/resolver/resolve.d.ts +80 -0
- package/dist/types/resolver/resolve.d.ts.map +1 -0
- package/dist/types/resolver/trust-chain.d.ts +54 -0
- package/dist/types/resolver/trust-chain.d.ts.map +1 -0
- package/dist/types/resolver/verify.d.ts +62 -0
- package/dist/types/resolver/verify.d.ts.map +1 -0
- package/dist/types/shims/go/index.d.ts +11 -0
- package/dist/types/shims/go/index.d.ts.map +1 -0
- package/dist/types/shims/go/proxy.d.ts +51 -0
- package/dist/types/shims/go/proxy.d.ts.map +1 -0
- package/dist/types/shims/go/server.d.ts +23 -0
- package/dist/types/shims/go/server.d.ts.map +1 -0
- package/dist/types/shims/index.d.ts +18 -0
- package/dist/types/shims/index.d.ts.map +1 -0
- package/dist/types/shims/npm/index.d.ts +11 -0
- package/dist/types/shims/npm/index.d.ts.map +1 -0
- package/dist/types/shims/npm/registry.d.ts +46 -0
- package/dist/types/shims/npm/registry.d.ts.map +1 -0
- package/dist/types/shims/npm/server.d.ts +23 -0
- package/dist/types/shims/npm/server.d.ts.map +1 -0
- package/dist/types/shims/oci/index.d.ts +11 -0
- package/dist/types/shims/oci/index.d.ts.map +1 -0
- package/dist/types/shims/oci/registry.d.ts +56 -0
- package/dist/types/shims/oci/registry.d.ts.map +1 -0
- package/dist/types/shims/oci/server.d.ts +23 -0
- package/dist/types/shims/oci/server.d.ts.map +1 -0
- package/dist/types/social.d.ts +162 -0
- package/dist/types/social.d.ts.map +1 -0
- package/dist/types/web/html.d.ts +23 -0
- package/dist/types/web/html.d.ts.map +1 -0
- package/dist/types/web/index.d.ts +8 -0
- package/dist/types/web/index.d.ts.map +1 -0
- package/dist/types/web/routes.d.ts +21 -0
- package/dist/types/web/routes.d.ts.map +1 -0
- package/dist/types/web/server.d.ts +38 -0
- package/dist/types/web/server.d.ts.map +1 -0
- package/dist/types/wiki.d.ts +143 -0
- package/dist/types/wiki.d.ts.map +1 -0
- package/package.json +108 -0
- package/schemas/ci/check-run.json +23 -0
- package/schemas/ci/check-suite.json +23 -0
- package/schemas/issues/assignment.json +17 -0
- package/schemas/issues/comment.json +14 -0
- package/schemas/issues/issue.json +20 -0
- package/schemas/issues/label.json +17 -0
- package/schemas/issues/reaction.json +14 -0
- package/schemas/issues/status-change.json +14 -0
- package/schemas/notifications/notification.json +20 -0
- package/schemas/org/org-member.json +17 -0
- package/schemas/org/org.json +26 -0
- package/schemas/org/team-member.json +17 -0
- package/schemas/org/team.json +17 -0
- package/schemas/patches/merge-result.json +14 -0
- package/schemas/patches/patch-status-change.json +14 -0
- package/schemas/patches/patch.json +20 -0
- package/schemas/patches/review-comment.json +17 -0
- package/schemas/patches/review.json +14 -0
- package/schemas/patches/revision.json +30 -0
- package/schemas/refs/git-ref.json +32 -0
- package/schemas/registry/attestation.json +23 -0
- package/schemas/registry/package-version.json +23 -0
- package/schemas/registry/package.json +32 -0
- package/schemas/releases/release.json +17 -0
- package/schemas/repo/collaborator.json +17 -0
- package/schemas/repo/repo.json +35 -0
- package/schemas/repo/settings.json +39 -0
- package/schemas/repo/topic.json +14 -0
- package/schemas/repo/webhook.json +26 -0
- package/schemas/social/activity.json +23 -0
- package/schemas/social/follow.json +17 -0
- package/schemas/social/star.json +20 -0
- package/schemas/wiki/wiki-history.json +20 -0
- package/schemas/wiki/wiki-page.json +17 -0
- package/src/ci.ts +118 -0
- package/src/cli/agent.ts +117 -0
- package/src/cli/commands/ci.ts +300 -0
- package/src/cli/commands/clone.ts +78 -0
- package/src/cli/commands/daemon.ts +129 -0
- package/src/cli/commands/github-api.ts +30 -0
- package/src/cli/commands/init.ts +69 -0
- package/src/cli/commands/issue.ts +321 -0
- package/src/cli/commands/log.ts +106 -0
- package/src/cli/commands/migrate.ts +525 -0
- package/src/cli/commands/notification.ts +148 -0
- package/src/cli/commands/org.ts +381 -0
- package/src/cli/commands/patch.ts +413 -0
- package/src/cli/commands/registry.ts +542 -0
- package/src/cli/commands/release.ts +189 -0
- package/src/cli/commands/repo.ts +160 -0
- package/src/cli/commands/serve.ts +153 -0
- package/src/cli/commands/setup.ts +97 -0
- package/src/cli/commands/shim.ts +79 -0
- package/src/cli/commands/social.ts +221 -0
- package/src/cli/commands/web.ts +30 -0
- package/src/cli/commands/wiki.ts +199 -0
- package/src/cli/flags.ts +28 -0
- package/src/cli/main.ts +350 -0
- package/src/cli/repo-context.ts +55 -0
- package/src/daemon/adapter.ts +95 -0
- package/src/daemon/adapters/github.ts +86 -0
- package/src/daemon/adapters/go.ts +47 -0
- package/src/daemon/adapters/index.ts +36 -0
- package/src/daemon/adapters/npm.ts +47 -0
- package/src/daemon/adapters/oci.ts +59 -0
- package/src/daemon/index.ts +16 -0
- package/src/daemon/server.ts +204 -0
- package/src/git-remote/credential-helper.ts +114 -0
- package/src/git-remote/credential-main.ts +118 -0
- package/src/git-remote/index.ts +10 -0
- package/src/git-remote/main.ts +74 -0
- package/src/git-remote/parse-url.ts +81 -0
- package/src/git-remote/resolve.ts +207 -0
- package/src/git-remote/service.ts +126 -0
- package/src/git-server/auth.ts +308 -0
- package/src/git-server/bundle-restore.ts +217 -0
- package/src/git-server/bundle-sync.ts +300 -0
- package/src/git-server/did-service.ts +77 -0
- package/src/git-server/git-backend.ts +222 -0
- package/src/git-server/http-handler.ts +386 -0
- package/src/git-server/index.ts +16 -0
- package/src/git-server/push-authorizer.ts +77 -0
- package/src/git-server/ref-sync.ts +166 -0
- package/src/git-server/server.ts +236 -0
- package/src/git-server/verify.ts +116 -0
- package/src/github-shim/helpers.ts +311 -0
- package/src/github-shim/index.ts +35 -0
- package/src/github-shim/issues.ts +389 -0
- package/src/github-shim/pulls.ts +500 -0
- package/src/github-shim/releases.ts +185 -0
- package/src/github-shim/repos.ts +95 -0
- package/src/github-shim/server.ts +334 -0
- package/src/github-shim/users.ts +63 -0
- package/src/index.ts +26 -0
- package/src/indexer/api.ts +162 -0
- package/src/indexer/crawler.ts +290 -0
- package/src/indexer/index.ts +22 -0
- package/src/indexer/main.ts +83 -0
- package/src/indexer/store.ts +408 -0
- package/src/issues.ts +200 -0
- package/src/notifications.ts +80 -0
- package/src/org.ts +147 -0
- package/src/patches.ts +203 -0
- package/src/refs.ts +94 -0
- package/src/registry.ts +132 -0
- package/src/releases.ts +124 -0
- package/src/repo.ts +234 -0
- package/src/resolver/index.ts +42 -0
- package/src/resolver/resolve.ts +244 -0
- package/src/resolver/trust-chain.ts +217 -0
- package/src/resolver/verify.ts +237 -0
- package/src/shims/go/index.ts +14 -0
- package/src/shims/go/proxy.ts +336 -0
- package/src/shims/go/server.ts +82 -0
- package/src/shims/index.ts +20 -0
- package/src/shims/npm/index.ts +14 -0
- package/src/shims/npm/registry.ts +288 -0
- package/src/shims/npm/server.ts +84 -0
- package/src/shims/oci/index.ts +14 -0
- package/src/shims/oci/registry.ts +334 -0
- package/src/shims/oci/server.ts +94 -0
- package/src/social.ts +116 -0
- package/src/web/html.ts +120 -0
- package/src/web/index.ts +8 -0
- package/src/web/routes.ts +449 -0
- package/src/web/server.ts +256 -0
- package/src/wiki.ts +102 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle restore — reconstructs a bare git repo from DWN bundle records.
|
|
3
|
+
*
|
|
4
|
+
* When a commodity git host receives a clone request for a repo it doesn't
|
|
5
|
+
* have on disk, it resolves the owner's DID, reads bundle records from
|
|
6
|
+
* the owner's DWN, and reconstructs the bare repo locally.
|
|
7
|
+
*
|
|
8
|
+
* Restore flow:
|
|
9
|
+
* 1. Query the owner's DWN for bundle records (via the repo's contextId)
|
|
10
|
+
* 2. Find the most recent full bundle (isFull: true)
|
|
11
|
+
* 3. Clone from the full bundle to create a bare repo
|
|
12
|
+
* 4. Apply any incremental bundles (in chronological order) that are newer
|
|
13
|
+
* 5. The restored repo is now ready to serve clones and accept pushes
|
|
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 { DateSort } from '@enbox/dwn-sdk-js';
|
|
27
|
+
import { existsSync } from 'node:fs';
|
|
28
|
+
import { join } from 'node:path';
|
|
29
|
+
import { spawn } from 'node:child_process';
|
|
30
|
+
import { tmpdir } from 'node:os';
|
|
31
|
+
import { mkdir, unlink, writeFile } from 'node:fs/promises';
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Public API
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
/**
|
|
36
|
+
* Restore a bare git repository from DWN bundle records.
|
|
37
|
+
*
|
|
38
|
+
* Queries the owner's DWN for bundle records, downloads the most recent
|
|
39
|
+
* full bundle, clones from it, then applies any incremental bundles.
|
|
40
|
+
*
|
|
41
|
+
* @param options - Restore configuration
|
|
42
|
+
* @returns Result of the restore operation
|
|
43
|
+
*/
|
|
44
|
+
export function restoreFromBundles(options) {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const { repo, repoPath } = options;
|
|
47
|
+
// 1. Query for the most recent full bundle.
|
|
48
|
+
const { records: fullBundles } = yield repo.records.query('repo/bundle', {
|
|
49
|
+
filter: { tags: { isFull: true } },
|
|
50
|
+
dateSort: DateSort.CreatedDescending,
|
|
51
|
+
});
|
|
52
|
+
if (fullBundles.length === 0) {
|
|
53
|
+
return { success: false, bundlesApplied: 0, error: 'No full bundle found in DWN' };
|
|
54
|
+
}
|
|
55
|
+
const latestFull = fullBundles[0];
|
|
56
|
+
const fullTimestamp = latestFull.dateCreated;
|
|
57
|
+
// 2. Download the full bundle to a temp file.
|
|
58
|
+
const fullBundlePath = tempBundlePath();
|
|
59
|
+
try {
|
|
60
|
+
const fullBlob = yield latestFull.data.blob();
|
|
61
|
+
const fullBlobData = Buffer.from(yield fullBlob.arrayBuffer());
|
|
62
|
+
yield writeFile(fullBundlePath, fullBlobData);
|
|
63
|
+
// 3. Clone from the full bundle to create the bare repo.
|
|
64
|
+
yield ensureParentDir(repoPath);
|
|
65
|
+
yield spawnChecked('git', ['clone', '--bare', fullBundlePath, repoPath]);
|
|
66
|
+
let bundlesApplied = 1;
|
|
67
|
+
// 4. Query for incremental bundles newer than the full bundle.
|
|
68
|
+
const { records: incrementals } = yield repo.records.query('repo/bundle', {
|
|
69
|
+
filter: { tags: { isFull: false } },
|
|
70
|
+
dateSort: DateSort.CreatedAscending,
|
|
71
|
+
});
|
|
72
|
+
// Apply incremental bundles in chronological order.
|
|
73
|
+
for (const incBundle of incrementals) {
|
|
74
|
+
// Only apply incrementals that are newer than the full bundle.
|
|
75
|
+
if (incBundle.dateCreated <= fullTimestamp) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const incPath = tempBundlePath();
|
|
79
|
+
try {
|
|
80
|
+
const incBlob = yield incBundle.data.blob();
|
|
81
|
+
const incData = Buffer.from(yield incBlob.arrayBuffer());
|
|
82
|
+
yield writeFile(incPath, incData);
|
|
83
|
+
// Fetch all refs from the incremental bundle into the bare repo.
|
|
84
|
+
// The explicit refspec is required because bundles don't have a HEAD
|
|
85
|
+
// ref, and `git fetch` without a refspec tries to fetch HEAD.
|
|
86
|
+
yield spawnChecked('git', ['fetch', incPath, 'refs/*:refs/*', '--update-head-ok'], repoPath);
|
|
87
|
+
bundlesApplied++;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
yield unlink(incPath).catch(() => { });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// 5. Get the tip commit.
|
|
94
|
+
const tipCommit = yield getTipCommit(repoPath);
|
|
95
|
+
return { success: true, bundlesApplied, tipCommit };
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
bundlesApplied: 0,
|
|
101
|
+
error: err.message,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
yield unlink(fullBundlePath).catch(() => { });
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// Helpers
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
/** Generate a unique temp file path for a bundle. */
|
|
113
|
+
function tempBundlePath() {
|
|
114
|
+
return join(tmpdir(), `gitd-restore-${Date.now()}-${Math.random().toString(36).slice(2)}.bundle`);
|
|
115
|
+
}
|
|
116
|
+
/** Ensure the parent directory of a path exists. */
|
|
117
|
+
function ensureParentDir(filePath) {
|
|
118
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const parentDir = join(filePath, '..');
|
|
120
|
+
if (!existsSync(parentDir)) {
|
|
121
|
+
yield mkdir(parentDir, { recursive: true });
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get the tip commit SHA from a bare repo.
|
|
127
|
+
*
|
|
128
|
+
* In bare repos restored from bundles, HEAD may be a dangling symbolic ref
|
|
129
|
+
* (e.g. `refs/heads/master` doesn't exist but `refs/heads/main` does).
|
|
130
|
+
* Falls back to the first ref SHA if HEAD doesn't resolve to a commit.
|
|
131
|
+
*/
|
|
132
|
+
function getTipCommit(repoPath) {
|
|
133
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
// Try HEAD first.
|
|
135
|
+
const headResult = yield spawnCollectOptional('git', ['rev-parse', 'HEAD'], repoPath);
|
|
136
|
+
if (headResult && /^[0-9a-f]{40}$/.test(headResult)) {
|
|
137
|
+
return headResult;
|
|
138
|
+
}
|
|
139
|
+
// HEAD didn't resolve; get the first ref.
|
|
140
|
+
const refResult = yield spawnCollectOptional('git', ['for-each-ref', '--format=%(objectname)', '--count=1', 'refs/'], repoPath);
|
|
141
|
+
return refResult || 'unknown';
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/** Spawn a process, collect stdout, return trimmed output or null on failure. */
|
|
145
|
+
function spawnCollectOptional(cmd, args, cwd) {
|
|
146
|
+
return new Promise((resolve) => {
|
|
147
|
+
const child = spawn(cmd, args, { cwd, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
148
|
+
const chunks = [];
|
|
149
|
+
child.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
150
|
+
child.on('error', () => resolve(null));
|
|
151
|
+
child.on('exit', (code) => {
|
|
152
|
+
if (code !== 0) {
|
|
153
|
+
resolve(null);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const result = Buffer.concat(chunks).toString('utf-8').trim();
|
|
157
|
+
resolve(result || null);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/** Spawn a process and reject if it exits with non-zero code. */
|
|
163
|
+
function spawnChecked(cmd, args, cwd) {
|
|
164
|
+
return new Promise((resolve, reject) => {
|
|
165
|
+
const child = spawn(cmd, args, { cwd, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
166
|
+
const stderrChunks = [];
|
|
167
|
+
child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
|
|
168
|
+
child.on('error', reject);
|
|
169
|
+
child.on('exit', (code) => {
|
|
170
|
+
if (code !== 0) {
|
|
171
|
+
const stderr = Buffer.concat(stderrChunks).toString('utf-8');
|
|
172
|
+
reject(new Error(`${cmd} ${args.join(' ')} exited with code ${code}: ${stderr}`));
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
resolve();
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=bundle-restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-restore.js","sourceRoot":"","sources":["../../../src/git-server/bundle-restore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git bundle → DWN sync — creates/updates a git bundle as a DWN record.
|
|
3
|
+
*
|
|
4
|
+
* After a successful `git push`, this module generates a `git bundle` from
|
|
5
|
+
* the bare repository and writes it as a ForgeRepo `bundle` record.
|
|
6
|
+
* Incremental bundles are created when a previous bundle exists; periodic
|
|
7
|
+
* squash writes compact all incrementals into a single full bundle.
|
|
8
|
+
*
|
|
9
|
+
* Bundle sync flow:
|
|
10
|
+
* 1. Query existing bundle records for the repo (sorted by timestamp desc)
|
|
11
|
+
* 2. If no bundles exist → create full bundle (`git bundle create --all`)
|
|
12
|
+
* 3. If bundles exist → create incremental bundle since last tip commit
|
|
13
|
+
* 4. Every N pushes (configurable), create a squash bundle (full bundle
|
|
14
|
+
* with `squash: true`) which purges all older bundle records
|
|
15
|
+
*
|
|
16
|
+
* The bundle data (binary `application/x-git-bundle`) is stored as the
|
|
17
|
+
* record payload. Queryable metadata is stored in tags.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
import { DateSort } from '@enbox/dwn-sdk-js';
|
|
31
|
+
import { join } from 'node:path';
|
|
32
|
+
import { spawn } from 'node:child_process';
|
|
33
|
+
import { tmpdir } from 'node:os';
|
|
34
|
+
import { readFile, stat, unlink } from 'node:fs/promises';
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Public API
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Create an `onPushComplete` callback that syncs a git bundle to a DWN record.
|
|
40
|
+
*
|
|
41
|
+
* @param options - Bundle sync configuration
|
|
42
|
+
* @returns An async callback to invoke after a successful push
|
|
43
|
+
*/
|
|
44
|
+
export function createBundleSyncer(options) {
|
|
45
|
+
const { repo, repoContextId, visibility = 'public', squashThreshold = 5 } = options;
|
|
46
|
+
const encrypt = visibility === 'private';
|
|
47
|
+
return (_did, _repoName, repoPath) => __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
// Query existing bundle records, newest first.
|
|
49
|
+
const { records: existingBundles } = yield repo.records.query('repo/bundle', {
|
|
50
|
+
filter: { tags: { isFull: true } },
|
|
51
|
+
dateSort: DateSort.CreatedDescending,
|
|
52
|
+
});
|
|
53
|
+
// Also query incremental bundles.
|
|
54
|
+
const { records: incrementalBundles } = yield repo.records.query('repo/bundle', {
|
|
55
|
+
filter: { tags: { isFull: false } },
|
|
56
|
+
dateSort: DateSort.CreatedDescending,
|
|
57
|
+
});
|
|
58
|
+
const totalBundles = existingBundles.length + incrementalBundles.length;
|
|
59
|
+
// Determine the last tip commit from the most recent bundle (full or incremental).
|
|
60
|
+
let lastTipCommit;
|
|
61
|
+
if (incrementalBundles.length > 0 && incrementalBundles[0].tags) {
|
|
62
|
+
lastTipCommit = incrementalBundles[0].tags.tipCommit;
|
|
63
|
+
}
|
|
64
|
+
else if (existingBundles.length > 0 && existingBundles[0].tags) {
|
|
65
|
+
lastTipCommit = existingBundles[0].tags.tipCommit;
|
|
66
|
+
}
|
|
67
|
+
// Decide whether to create a full or incremental bundle.
|
|
68
|
+
const shouldSquash = totalBundles > 0 && totalBundles >= squashThreshold;
|
|
69
|
+
const isIncremental = !shouldSquash && lastTipCommit !== undefined;
|
|
70
|
+
let bundleInfo;
|
|
71
|
+
try {
|
|
72
|
+
if (isIncremental) {
|
|
73
|
+
// Create incremental bundle: only objects reachable from --all but not from lastTipCommit.
|
|
74
|
+
bundleInfo = yield createIncrementalBundle(repoPath, lastTipCommit);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Create full bundle: all refs, all objects.
|
|
78
|
+
bundleInfo = yield createFullBundle(repoPath);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
console.error(`bundle-sync: failed to create bundle: ${err.message}`);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
// Read the bundle data from disk.
|
|
87
|
+
const bundleData = new Uint8Array(yield readFile(bundleInfo.path));
|
|
88
|
+
const tags = {
|
|
89
|
+
tipCommit: bundleInfo.tipCommit,
|
|
90
|
+
isFull: bundleInfo.isFull,
|
|
91
|
+
refCount: bundleInfo.refCount,
|
|
92
|
+
size: bundleInfo.size,
|
|
93
|
+
};
|
|
94
|
+
const createOptions = {
|
|
95
|
+
data: bundleData,
|
|
96
|
+
dataFormat: 'application/x-git-bundle',
|
|
97
|
+
tags,
|
|
98
|
+
parentContextId: repoContextId,
|
|
99
|
+
encryption: encrypt,
|
|
100
|
+
};
|
|
101
|
+
if (shouldSquash) {
|
|
102
|
+
// Squash write: creates a new bundle record and purges all older ones.
|
|
103
|
+
createOptions.squash = true;
|
|
104
|
+
}
|
|
105
|
+
yield repo.records.create('repo/bundle', createOptions);
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
// Clean up the temp bundle file.
|
|
109
|
+
yield unlink(bundleInfo.path).catch(() => { });
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
// Bundle creation
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
/**
|
|
117
|
+
* Create a full git bundle containing all refs and all reachable objects.
|
|
118
|
+
*
|
|
119
|
+
* @param repoPath - Path to the bare git repository
|
|
120
|
+
* @returns Bundle metadata and file path
|
|
121
|
+
*/
|
|
122
|
+
export function createFullBundle(repoPath) {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
const bundlePath = join(tmpdir(), `gitd-bundle-${Date.now()}-${Math.random().toString(36).slice(2)}.bundle`);
|
|
125
|
+
yield spawnChecked('git', ['bundle', 'create', bundlePath, '--all'], repoPath);
|
|
126
|
+
const tipCommit = yield getTipCommit(repoPath);
|
|
127
|
+
const refCount = yield getRefCount(repoPath);
|
|
128
|
+
const fileInfo = yield stat(bundlePath);
|
|
129
|
+
return {
|
|
130
|
+
path: bundlePath,
|
|
131
|
+
tipCommit,
|
|
132
|
+
isFull: true,
|
|
133
|
+
refCount,
|
|
134
|
+
size: fileInfo.size,
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Create an incremental git bundle containing only objects since a base commit.
|
|
140
|
+
*
|
|
141
|
+
* The bundle uses the base commit as a prerequisite, meaning the consumer
|
|
142
|
+
* must already have it to apply the incremental bundle.
|
|
143
|
+
*
|
|
144
|
+
* @param repoPath - Path to the bare git repository
|
|
145
|
+
* @param baseCommit - The commit SHA to use as the prerequisite (exclude point)
|
|
146
|
+
* @returns Bundle metadata and file path
|
|
147
|
+
*/
|
|
148
|
+
export function createIncrementalBundle(repoPath, baseCommit) {
|
|
149
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
150
|
+
const bundlePath = join(tmpdir(), `gitd-bundle-${Date.now()}-${Math.random().toString(36).slice(2)}.bundle`);
|
|
151
|
+
// `--all ^<base>` means: include all refs, exclude objects reachable from base.
|
|
152
|
+
yield spawnChecked('git', ['bundle', 'create', bundlePath, '--all', `^${baseCommit}`], repoPath);
|
|
153
|
+
const tipCommit = yield getTipCommit(repoPath);
|
|
154
|
+
const refCount = yield getRefCount(repoPath);
|
|
155
|
+
const fileInfo = yield stat(bundlePath);
|
|
156
|
+
return {
|
|
157
|
+
path: bundlePath,
|
|
158
|
+
tipCommit,
|
|
159
|
+
isFull: false,
|
|
160
|
+
refCount,
|
|
161
|
+
size: fileInfo.size,
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
// Helpers
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
/**
|
|
169
|
+
* Get the tip commit SHA (HEAD of the default branch).
|
|
170
|
+
* Falls back to the first ref if HEAD is unset.
|
|
171
|
+
*/
|
|
172
|
+
function getTipCommit(repoPath) {
|
|
173
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
174
|
+
try {
|
|
175
|
+
const sha = (yield spawnCollectStdout('git', ['rev-parse', 'HEAD'], repoPath)).trim();
|
|
176
|
+
// In bare repos, HEAD may be a dangling symbolic ref (e.g. refs/heads/master
|
|
177
|
+
// doesn't exist). `git rev-parse HEAD` outputs the literal string "HEAD" in
|
|
178
|
+
// that case instead of a 40-hex SHA.
|
|
179
|
+
if (/^[0-9a-f]{40}$/.test(sha)) {
|
|
180
|
+
return sha;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (_a) {
|
|
184
|
+
// rev-parse failed entirely — fall through to for-each-ref.
|
|
185
|
+
}
|
|
186
|
+
// HEAD didn't resolve; get the first ref.
|
|
187
|
+
const output = yield spawnCollectStdout('git', ['for-each-ref', '--format=%(objectname)', '--count=1', 'refs/'], repoPath);
|
|
188
|
+
return output.trim();
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/** Count the number of refs (branches + tags) in the repo. */
|
|
192
|
+
function getRefCount(repoPath) {
|
|
193
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
194
|
+
const output = yield spawnCollectStdout('git', ['for-each-ref', '--format=x', 'refs/heads/', 'refs/tags/'], repoPath);
|
|
195
|
+
return output.split('\n').filter((l) => l.trim()).length;
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/** Spawn a process and reject if it exits with non-zero code. */
|
|
199
|
+
function spawnChecked(cmd, args, cwd) {
|
|
200
|
+
return new Promise((resolve, reject) => {
|
|
201
|
+
const child = spawn(cmd, args, { cwd, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
202
|
+
const stderrChunks = [];
|
|
203
|
+
child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
|
|
204
|
+
child.on('error', reject);
|
|
205
|
+
child.on('exit', (code) => {
|
|
206
|
+
if (code !== 0) {
|
|
207
|
+
const stderr = Buffer.concat(stderrChunks).toString('utf-8');
|
|
208
|
+
reject(new Error(`${cmd} ${args.join(' ')} exited with code ${code}: ${stderr}`));
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
resolve();
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/** Spawn a process, collect stdout, and return it as a string. */
|
|
217
|
+
function spawnCollectStdout(cmd, args, cwd) {
|
|
218
|
+
return new Promise((resolve, reject) => {
|
|
219
|
+
const child = spawn(cmd, args, { cwd, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
220
|
+
const chunks = [];
|
|
221
|
+
child.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
222
|
+
child.on('error', reject);
|
|
223
|
+
child.on('exit', (code) => {
|
|
224
|
+
if (code !== 0) {
|
|
225
|
+
reject(new Error(`${cmd} ${args.join(' ')} exited with code ${code}`));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
resolve(Buffer.concat(chunks).toString('utf-8'));
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=bundle-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-sync.js","sourceRoot":"","sources":["../../../src/git-server/bundle-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DID document service management for git transport.
|
|
3
|
+
*
|
|
4
|
+
* Adds or updates a `GitTransport` service entry in a DID document,
|
|
5
|
+
* advertising the git smart HTTP endpoint for the `git-remote-did` helper.
|
|
6
|
+
*
|
|
7
|
+
* This module works with the agent's DID API to persist and publish
|
|
8
|
+
* service updates. For `did:dht`, the updated document is republished
|
|
9
|
+
* to the DHT network.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
import { GIT_TRANSPORT_SERVICE_TYPE } from '../git-remote/service.js';
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Constants
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
/** Default service entry ID for the git transport endpoint. */
|
|
27
|
+
const GIT_SERVICE_ID = '#git';
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Public API
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* Register a GitTransport service endpoint in the agent's DID document.
|
|
33
|
+
*
|
|
34
|
+
* If a GitTransport service already exists, its endpoint is updated.
|
|
35
|
+
* Otherwise, a new service entry is created. The updated DID document
|
|
36
|
+
* is persisted in the agent store and (for did:dht) republished.
|
|
37
|
+
*
|
|
38
|
+
* @param web5 - The Web5 instance (provides agent DID and did API)
|
|
39
|
+
* @param endpoint - The git transport HTTPS URL (e.g. `https://git.example.com`)
|
|
40
|
+
* @throws If the agent does not support DID updates
|
|
41
|
+
*/
|
|
42
|
+
export function registerGitService(web5, endpoint) {
|
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
var _a, _b;
|
|
45
|
+
const agent = web5.agent;
|
|
46
|
+
// Verify the agent supports DID updates.
|
|
47
|
+
if (!((_a = agent.did) === null || _a === void 0 ? void 0 : _a.update)) {
|
|
48
|
+
console.warn('Agent does not support DID document updates. ' +
|
|
49
|
+
'GitTransport service not registered. ' +
|
|
50
|
+
'The git-remote-did helper will need a DWN endpoint fallback.');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const bearerDid = agent.agentDid;
|
|
54
|
+
const portableDid = yield bearerDid.export();
|
|
55
|
+
// Look for an existing GitTransport service.
|
|
56
|
+
const services = (_b = portableDid.document.service) !== null && _b !== void 0 ? _b : [];
|
|
57
|
+
const existingIdx = services.findIndex((s) => { var _a; return s.type === GIT_TRANSPORT_SERVICE_TYPE || ((_a = s.id) === null || _a === void 0 ? void 0 : _a.endsWith('git')); });
|
|
58
|
+
const newService = {
|
|
59
|
+
id: GIT_SERVICE_ID,
|
|
60
|
+
type: GIT_TRANSPORT_SERVICE_TYPE,
|
|
61
|
+
serviceEndpoint: endpoint,
|
|
62
|
+
};
|
|
63
|
+
if (existingIdx >= 0) {
|
|
64
|
+
services[existingIdx] = newService;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
services.push(newService);
|
|
68
|
+
}
|
|
69
|
+
portableDid.document.service = services;
|
|
70
|
+
yield agent.did.update({ portableDid });
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=did-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did-service.js","sourceRoot":"","sources":["../../../src/git-server/did-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;;;;;;;;;;AAIH,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,+DAA+D;AAC/D,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,UAAgB,kBAAkB,CAAC,IAAU,EAAE,QAAgB;;;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAY,CAAC;QAEhC,yCAAyC;QACzC,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,GAAG,0CAAE,MAAM,CAAA,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CACV,+CAA+C;gBAC/C,uCAAuC;gBACvC,8DAA8D,CAC/D,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;QAE7C,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,MAAA,WAAW,CAAC,QAAQ,CAAC,OAAO,mCAAI,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CACpC,CAAC,CAAM,EAAE,EAAE,WAAC,OAAA,CAAC,CAAC,IAAI,KAAK,0BAA0B,KAAI,MAAA,CAAC,CAAC,EAAE,0CAAE,QAAQ,CAAC,KAAK,CAAC,CAAA,CAAA,EAAA,CAC3E,CAAC;QAEF,MAAM,UAAU,GAAG;YACjB,EAAE,EAAgB,cAAc;YAChC,IAAI,EAAc,0BAA0B;YAC5C,eAAe,EAAG,QAAQ;SAC3B,CAAC;QAEF,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAED,WAAW,CAAC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;QAExC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC1C,CAAC;CAAA"}
|