@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,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse DID URLs used with `git-remote-did`.
|
|
3
|
+
*
|
|
4
|
+
* Supported URL forms (all invoke `git-remote-did <remote> <url>`):
|
|
5
|
+
*
|
|
6
|
+
* did::dht:abc123 → DID = did:dht:abc123, repo = undefined
|
|
7
|
+
* did::dht:abc123/my-repo → DID = did:dht:abc123, repo = my-repo
|
|
8
|
+
* did://dht:abc123/my-repo → DID = did:dht:abc123, repo = my-repo
|
|
9
|
+
*
|
|
10
|
+
* The double-colon form (`did::<address>`) is recommended because it avoids
|
|
11
|
+
* URL-parsing ambiguity. Git strips the `did::` prefix and passes
|
|
12
|
+
* `<address>` as the URL argument.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Types
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
/** Parsed components of a DID remote URL. */
|
|
22
|
+
export type ParsedDidUrl = {
|
|
23
|
+
/** Full DID URI, e.g. `did:dht:abc123xyz`. */
|
|
24
|
+
did: string;
|
|
25
|
+
|
|
26
|
+
/** Optional repository name from the path component. */
|
|
27
|
+
repo?: string;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Parser
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Parse a DID remote URL into its components.
|
|
36
|
+
*
|
|
37
|
+
* @param url - The URL argument passed by Git to the remote helper.
|
|
38
|
+
* After stripping the transport prefix:
|
|
39
|
+
* `did::dht:abc123/repo` → Git passes `dht:abc123/repo`
|
|
40
|
+
* `did://dht:abc123/repo` → Git passes `did://dht:abc123/repo`
|
|
41
|
+
*/
|
|
42
|
+
export function parseDidUrl(url: string): ParsedDidUrl {
|
|
43
|
+
let stripped = url;
|
|
44
|
+
|
|
45
|
+
// Strip did:// prefix if present (the `://` form).
|
|
46
|
+
if (stripped.startsWith('did://')) {
|
|
47
|
+
stripped = stripped.slice('did://'.length);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// At this point, `stripped` is either:
|
|
51
|
+
// "dht:abc123" (DID only)
|
|
52
|
+
// "dht:abc123/my-repo" (DID + repo path)
|
|
53
|
+
// "web:example.com:path/my-repo" (did:web)
|
|
54
|
+
|
|
55
|
+
// Split on the first `/` to separate DID from repo path.
|
|
56
|
+
const slashIdx = stripped.indexOf('/');
|
|
57
|
+
|
|
58
|
+
let didSuffix: string;
|
|
59
|
+
let repo: string | undefined;
|
|
60
|
+
|
|
61
|
+
if (slashIdx === -1) {
|
|
62
|
+
didSuffix = stripped;
|
|
63
|
+
} else {
|
|
64
|
+
didSuffix = stripped.slice(0, slashIdx);
|
|
65
|
+
const pathPart = stripped.slice(slashIdx + 1);
|
|
66
|
+
if (pathPart.length > 0) {
|
|
67
|
+
repo = pathPart;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Reconstruct full DID URI.
|
|
72
|
+
const did = `did:${didSuffix}`;
|
|
73
|
+
|
|
74
|
+
// Basic validation.
|
|
75
|
+
const parts = did.split(':');
|
|
76
|
+
if (parts.length < 3 || parts[0] !== 'did' || parts[1].length === 0 || parts[2].length === 0) {
|
|
77
|
+
throw new Error(`Invalid DID URL: "${url}" (parsed DID: "${did}")`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return { did, repo };
|
|
81
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DID resolution and git transport endpoint discovery.
|
|
3
|
+
*
|
|
4
|
+
* Resolves a DID document and extracts the git transport endpoint URL.
|
|
5
|
+
* The resolution order is:
|
|
6
|
+
* 1. Service of type `GitTransport` (preferred)
|
|
7
|
+
* 2. Service of type `DecentralizedWebNode` with `/git` suffix appended
|
|
8
|
+
* 3. Failure — no git endpoint found
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { DidService } from '@enbox/dids';
|
|
14
|
+
|
|
15
|
+
import { DidDht, DidJwk, DidKey, DidWeb, UniversalResolver } from '@enbox/dids';
|
|
16
|
+
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Types
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
/** Result of resolving a DID to a git transport endpoint. */
|
|
22
|
+
export type GitEndpoint = {
|
|
23
|
+
/** The resolved HTTPS URL for git smart HTTP transport. */
|
|
24
|
+
url: string;
|
|
25
|
+
|
|
26
|
+
/** The DID that was resolved. */
|
|
27
|
+
did: string;
|
|
28
|
+
|
|
29
|
+
/** How the endpoint was discovered. */
|
|
30
|
+
source: 'GitTransport' | 'DecentralizedWebNode';
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Resolver
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
|
|
37
|
+
/** Shared resolver instance (lazy-initialized). */
|
|
38
|
+
let resolver: UniversalResolver | undefined;
|
|
39
|
+
|
|
40
|
+
/** Get or create the DID resolver. */
|
|
41
|
+
function getResolver(): UniversalResolver {
|
|
42
|
+
if (!resolver) {
|
|
43
|
+
resolver = new UniversalResolver({
|
|
44
|
+
didResolvers: [DidDht, DidJwk, DidWeb, DidKey],
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return resolver;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** DID resolution timeout in milliseconds. */
|
|
51
|
+
const DID_RESOLUTION_TIMEOUT_MS = 30_000;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a DID to a git transport HTTPS endpoint.
|
|
55
|
+
*
|
|
56
|
+
* @param did - Full DID URI (e.g. `did:dht:abc123xyz`)
|
|
57
|
+
* @param repo - Optional repo name to append to the endpoint path
|
|
58
|
+
* @returns The resolved git transport endpoint
|
|
59
|
+
* @throws If resolution fails, times out, or no git-compatible service is found
|
|
60
|
+
*/
|
|
61
|
+
export async function resolveGitEndpoint(did: string, repo?: string): Promise<GitEndpoint> {
|
|
62
|
+
const { didDocument, didResolutionMetadata } = await Promise.race([
|
|
63
|
+
getResolver().resolve(did),
|
|
64
|
+
new Promise<never>((_, reject) =>
|
|
65
|
+
setTimeout(() => reject(new Error(`DID resolution timed out after ${DID_RESOLUTION_TIMEOUT_MS}ms for ${did}`)), DID_RESOLUTION_TIMEOUT_MS),
|
|
66
|
+
),
|
|
67
|
+
]);
|
|
68
|
+
|
|
69
|
+
if (didResolutionMetadata.error) {
|
|
70
|
+
throw new Error(`DID resolution failed for ${did}: ${didResolutionMetadata.error}`);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!didDocument) {
|
|
74
|
+
throw new Error(`DID resolution returned no document for ${did}`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const services: DidService[] = didDocument.service ?? [];
|
|
78
|
+
|
|
79
|
+
// Priority 1: Look for a GitTransport service.
|
|
80
|
+
const gitService = services.find((s) => s.type === 'GitTransport');
|
|
81
|
+
if (gitService) {
|
|
82
|
+
const baseUrl = extractEndpointUrl(gitService);
|
|
83
|
+
return {
|
|
84
|
+
url : buildUrl(baseUrl, did, repo),
|
|
85
|
+
did,
|
|
86
|
+
source : 'GitTransport',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Priority 2: Fall back to DWN endpoint + /git suffix.
|
|
91
|
+
const dwnService = services.find((s) => s.type === 'DecentralizedWebNode');
|
|
92
|
+
if (dwnService) {
|
|
93
|
+
const baseUrl = extractEndpointUrl(dwnService);
|
|
94
|
+
const gitUrl = baseUrl.replace(/\/$/, '') + '/git';
|
|
95
|
+
return {
|
|
96
|
+
url : buildUrl(gitUrl, did, repo),
|
|
97
|
+
did,
|
|
98
|
+
source : 'DecentralizedWebNode',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
throw new Error(
|
|
103
|
+
`No GitTransport or DecentralizedWebNode service found in DID document for ${did}. ` +
|
|
104
|
+
`Services: ${services.map((s) => s.type).join(', ') || '(none)'}`,
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
// Helpers
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
|
|
112
|
+
/** Extract a URL string from a service endpoint (handles string and array forms). */
|
|
113
|
+
function extractEndpointUrl(service: DidService): string {
|
|
114
|
+
const ep = service.serviceEndpoint;
|
|
115
|
+
|
|
116
|
+
let url: string | undefined;
|
|
117
|
+
if (typeof ep === 'string') {
|
|
118
|
+
url = ep;
|
|
119
|
+
} else if (Array.isArray(ep) && ep.length > 0) {
|
|
120
|
+
const first = ep[0];
|
|
121
|
+
if (typeof first === 'string') {
|
|
122
|
+
url = first;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (!url) {
|
|
127
|
+
throw new Error(`Cannot extract URL from service endpoint: ${JSON.stringify(ep)}`);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
assertNotPrivateUrl(url);
|
|
131
|
+
return url;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// SSRF protection
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Private / loopback IP ranges that must never be contacted via
|
|
140
|
+
* DID-resolved URLs (prevents SSRF attacks).
|
|
141
|
+
*/
|
|
142
|
+
const PRIVATE_IP_PATTERNS: RegExp[] = [
|
|
143
|
+
/^127\./, // 127.0.0.0/8 loopback
|
|
144
|
+
/^10\./, // 10.0.0.0/8 private
|
|
145
|
+
/^172\.(1[6-9]|2\d|3[01])\./, // 172.16.0.0/12 private
|
|
146
|
+
/^192\.168\./, // 192.168.0.0/16 private
|
|
147
|
+
/^169\.254\./, // 169.254.0.0/16 link-local
|
|
148
|
+
/^0\./, // 0.0.0.0/8
|
|
149
|
+
];
|
|
150
|
+
|
|
151
|
+
const PRIVATE_IPV6_PATTERNS: RegExp[] = [
|
|
152
|
+
/^::1$/, // IPv6 loopback
|
|
153
|
+
/^fc/i, // fc00::/7 unique local
|
|
154
|
+
/^fd/i, // fc00::/7 unique local
|
|
155
|
+
/^fe80:/i, // fe80::/10 link-local
|
|
156
|
+
];
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Assert that a URL does not resolve to a private/loopback address.
|
|
160
|
+
* @throws If the URL hostname is a private or loopback IP
|
|
161
|
+
*/
|
|
162
|
+
function assertNotPrivateUrl(urlString: string): void {
|
|
163
|
+
let parsed: URL;
|
|
164
|
+
try {
|
|
165
|
+
parsed = new URL(urlString);
|
|
166
|
+
} catch {
|
|
167
|
+
throw new Error(`Invalid URL from DID service endpoint: ${urlString}`);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const hostname = parsed.hostname;
|
|
171
|
+
|
|
172
|
+
// Strip IPv6 brackets if present.
|
|
173
|
+
const bare = hostname.startsWith('[') && hostname.endsWith(']')
|
|
174
|
+
? hostname.slice(1, -1)
|
|
175
|
+
: hostname;
|
|
176
|
+
|
|
177
|
+
// Reject localhost by name.
|
|
178
|
+
if (bare === 'localhost' || bare.endsWith('.localhost')) {
|
|
179
|
+
throw new Error(`SSRF blocked: resolved endpoint points to localhost: ${urlString}`);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Check IPv4 private ranges.
|
|
183
|
+
for (const pattern of PRIVATE_IP_PATTERNS) {
|
|
184
|
+
if (pattern.test(bare)) {
|
|
185
|
+
throw new Error(`SSRF blocked: resolved endpoint points to private IP: ${urlString}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Check IPv6 private ranges.
|
|
190
|
+
for (const pattern of PRIVATE_IPV6_PATTERNS) {
|
|
191
|
+
if (pattern.test(bare)) {
|
|
192
|
+
throw new Error(`SSRF blocked: resolved endpoint points to private IPv6: ${urlString}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Build the full git transport URL: `<base>/<did>[/<repo>]`.
|
|
199
|
+
*
|
|
200
|
+
* The DID is always included in the path since the git HTTP handler uses
|
|
201
|
+
* it for routing and authorization.
|
|
202
|
+
*/
|
|
203
|
+
function buildUrl(base: string, did: string, repo?: string): string {
|
|
204
|
+
const normalized = base.replace(/\/$/, '');
|
|
205
|
+
if (!repo) { return `${normalized}/${did}`; }
|
|
206
|
+
return `${normalized}/${did}/${repo}`;
|
|
207
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitTransport DID service type utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides helpers for creating and identifying `GitTransport` service entries
|
|
5
|
+
* in DID documents. The `GitTransport` service type advertises a smart HTTP
|
|
6
|
+
* git endpoint that can be used by `git-remote-did` to locate repositories.
|
|
7
|
+
*
|
|
8
|
+
* When a DID document contains a GitTransport service, the git remote helper
|
|
9
|
+
* uses it directly (highest priority). Otherwise it falls back to
|
|
10
|
+
* `DecentralizedWebNode` + `/git` suffix.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { createGitTransportService } from '@enbox/gitd/git-remote/service';
|
|
15
|
+
*
|
|
16
|
+
* const service = createGitTransportService({
|
|
17
|
+
* id : '#git',
|
|
18
|
+
* serviceEndpoint : 'https://git.example.com',
|
|
19
|
+
* });
|
|
20
|
+
* // → { id: '#git', type: 'GitTransport', serviceEndpoint: 'https://git.example.com' }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import type { DidDocument, DidService } from '@enbox/dids';
|
|
27
|
+
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Constants
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
|
|
32
|
+
/** The DID service type string for git smart HTTP transport endpoints. */
|
|
33
|
+
export const GIT_TRANSPORT_SERVICE_TYPE = 'GitTransport' as const;
|
|
34
|
+
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Types
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A DID service entry with `type` fixed to `GitTransport`.
|
|
41
|
+
*
|
|
42
|
+
* The `serviceEndpoint` should be an HTTPS URL (or array of URLs) pointing to
|
|
43
|
+
* a smart HTTP git server. Repositories are addressed by appending the repo
|
|
44
|
+
* name as a path segment: `<serviceEndpoint>/<repo-name>`.
|
|
45
|
+
*/
|
|
46
|
+
export interface GitTransportService extends DidService {
|
|
47
|
+
type: typeof GIT_TRANSPORT_SERVICE_TYPE;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Options for creating a GitTransport service entry. */
|
|
51
|
+
export type CreateGitTransportServiceOptions = {
|
|
52
|
+
/**
|
|
53
|
+
* The service entry `id`, typically a fragment like `#git`.
|
|
54
|
+
* If no `#` prefix is provided, it will be added automatically.
|
|
55
|
+
*/
|
|
56
|
+
id: string;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The HTTPS URL (or URLs) of the git smart HTTP endpoint.
|
|
60
|
+
*
|
|
61
|
+
* @example 'https://git.example.com'
|
|
62
|
+
* @example ['https://git1.example.com', 'https://git2.example.com']
|
|
63
|
+
*/
|
|
64
|
+
serviceEndpoint: string | string[];
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Factory
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Create a `GitTransport` DID service entry.
|
|
73
|
+
*
|
|
74
|
+
* @param options - Service configuration
|
|
75
|
+
* @returns A well-formed GitTransport service entry ready for inclusion in a
|
|
76
|
+
* DID document's `service` array.
|
|
77
|
+
*/
|
|
78
|
+
export function createGitTransportService(
|
|
79
|
+
options: CreateGitTransportServiceOptions,
|
|
80
|
+
): GitTransportService {
|
|
81
|
+
const { serviceEndpoint } = options;
|
|
82
|
+
let { id } = options;
|
|
83
|
+
|
|
84
|
+
// Normalize the id to include a # prefix if missing.
|
|
85
|
+
if (!id.startsWith('#')) {
|
|
86
|
+
id = `#${id}`;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Validate endpoint(s).
|
|
90
|
+
const endpoints = Array.isArray(serviceEndpoint) ? serviceEndpoint : [serviceEndpoint];
|
|
91
|
+
for (const ep of endpoints) {
|
|
92
|
+
if (typeof ep !== 'string' || ep.length === 0) {
|
|
93
|
+
throw new Error(`GitTransport serviceEndpoint must be a non-empty string, got: ${JSON.stringify(ep)}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
id,
|
|
99
|
+
type : GIT_TRANSPORT_SERVICE_TYPE,
|
|
100
|
+
serviceEndpoint : Array.isArray(serviceEndpoint) ? serviceEndpoint : serviceEndpoint,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Queries
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Check whether a DID service entry is a GitTransport service.
|
|
110
|
+
*
|
|
111
|
+
* @param service - A service entry from a DID document
|
|
112
|
+
* @returns `true` if the service type is `GitTransport`
|
|
113
|
+
*/
|
|
114
|
+
export function isGitTransportService(service: DidService): service is GitTransportService {
|
|
115
|
+
return service.type === GIT_TRANSPORT_SERVICE_TYPE;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Extract all GitTransport service entries from a DID document.
|
|
120
|
+
*
|
|
121
|
+
* @param didDocument - A resolved DID document
|
|
122
|
+
* @returns An array of GitTransport services (may be empty)
|
|
123
|
+
*/
|
|
124
|
+
export function getGitTransportServices(didDocument: DidDocument): GitTransportService[] {
|
|
125
|
+
return (didDocument.service ?? []).filter(isGitTransportService);
|
|
126
|
+
}
|