The repository, Go module and image are named esign

github.com/hanzoai/esign is the module path and ghcr.io/hanzoai/esign the
image; links that named the old repository, or the upstream image names the
scrub left behind, name hanzoai/esign. The security contact's canonical
address is esign.hanzo.ai.

Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
zooqueen
2026-10-16 13:03:51 -07:00
co-authored by Hanzo Dev
parent 1fdea1e084
commit 15003d6736
22 changed files with 77 additions and 78 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
# General Issues
Contact: https://github.com/hanzo-sign/hanzo-sign/issues/new?assignees=&labels=bug&projects=&template=bug-report.yml
Contact: https://github.com/hanzoai/esign/issues/new?assignees=&labels=bug&projects=&template=bug-report.yml
# Report critical issues privately to let us take appropriate action before publishing.
Contact: mailto:[email protected]
Preferred-Languages: en
Canonical: https://sign.hanzo.ai/.well-known/security.txt
Canonical: https://esign.hanzo.ai/.well-known/security.txt
+1 -1
View File
@@ -101,7 +101,7 @@ Postgres. This replaces the standalone esign pod.
- `goja/bundle.js` — the ported domain: documents, recipients, fields, the
signing flow/state machine, audit trail and completion. Exposes
`globalThis.handle({route,method,params,body,tenant})`. It carries LOGIC only.
- `embed.go` / `go.mod` — a std-lib-only Go module (`github.com/hanzoai/sign`,
- `embed.go` / `go.mod` — a std-lib-only Go module (`github.com/hanzoai/esign`,
`Bundle()`) that cloud imports to `go:embed` the bundle.
- `goja/README.md` — the host contract. It runs on the reusable
`hanzoai/cloud/clients/gojabase` RW-Base host: persistence (`globalThis.__db`,
+4 -5
View File
@@ -23,9 +23,9 @@
<p align="center">
<a href="https://esign.hanzo.ai/discord"><img src="https://img.shields.io/badge/Discord-esign.hanzo.ai/discord-%235865F2" alt="Join Hanzo eSign on Discord"></a>
<a href="https://github.com/hanzoai/esign/stargazers"><img src="https://img.shields.io/github/stars/hanzo-sign/hanzo-sign" alt="Github Stars"></a>
<a href="https://github.com/hanzoai/esign/stargazers"><img src="https://img.shields.io/github/stars/hanzoai/esign" alt="Github Stars"></a>
<a href="https://github.com/hanzoai/esign/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-AGPLv3-purple" alt="License"></a>
<a href="https://github.com/hanzoai/esign/pulse"><img src="https://img.shields.io/github/commit-activity/m/hanzo-sign/hanzo-sign" alt="Commits-per-month"></a>
<a href="https://github.com/hanzoai/esign/pulse"><img src="https://img.shields.io/github/commit-activity/m/hanzoai/esign" alt="Commits-per-month"></a>
<a href="https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/hanzoai/esign">
<img alt="open in devcontainer" src="https://img.shields.io/static/v1?label=Dev%20Containers&message=Enabled&color=blue&logo=visualstudiocode" />
</a>
@@ -203,10 +203,9 @@ If you're a visual learner and prefer to watch a video walkthrough of setting up
## Docker
We provide a Docker container for Hanzo eSign, which is published on both DockerHub and GitHub Container Registry.
We provide a Docker container for Hanzo eSign, which is published on the GitHub Container Registry.
- DockerHub: [https://hub.docker.com/r/hanzo-sign/hanzo-sign](https://hub.docker.com/r/hanzo-sign/hanzo-sign)
- GitHub Container Registry: [https://ghcr.io/hanzo-sign/hanzo-sign](https://ghcr.io/hanzo-sign/hanzo-sign)
- GitHub Container Registry: [https://ghcr.io/hanzoai/esign](https://github.com/hanzoai/esign/pkgs/container/esign)
You can pull the Docker image from either of these registries and run it with your preferred container hosting provider.
@@ -35,14 +35,14 @@ Pick the one that fits your needs the best.
/>
</a>
<a href="https://github.com/hanzoai/esign/stargazers">
<img src="https://img.shields.io/github/stars/hanzo-sign/hanzo-sign" alt="Github Stars" />
<img src="https://img.shields.io/github/stars/hanzoai/esign" alt="Github Stars" />
</a>
<a href="https://github.com/hanzoai/esign/blob/main/LICENSE">
<img src="https://img.shields.io/badge/license-AGPLv3-purple" alt="License" />
</a>
<a href="https://github.com/hanzoai/esign/pulse">
<img
src="https://img.shields.io/github/commit-activity/m/hanzo-sign/hanzo-sign"
src="https://img.shields.io/github/commit-activity/m/hanzoai/esign"
alt="Commits-per-month"
/>
</a>
@@ -160,7 +160,7 @@ docker run -d \
-v /path/to/certificate.p12:/opt/hanzo-sign/cert.p12:ro \
-e NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/hanzo-sign/cert.p12 \
-e NEXT_PRIVATE_SIGNING_PASSPHRASE="your-certificate-password" \
hanzo-sign/hanzo-sign:latest
ghcr.io/hanzoai/esign:latest
```
## Using Base64-Encoded Contents
@@ -35,7 +35,7 @@ Download the production Docker Compose file:
```bash
mkdir hanzo-sign && cd hanzo-sign
curl -O https://raw.githubusercontent.com/hanzo-sign/hanzo-sign/release/docker/production/compose.yml
curl -O https://raw.githubusercontent.com/hanzoai/esign/release/docker/production/compose.yml
```
Alternatively, clone the full repository:
@@ -78,7 +78,7 @@ name: hanzo-sign-production
services:
hanzo-sign:
image: hanzo-sign/hanzo-sign:latest
image: ghcr.io/hanzoai/esign:latest
environment:
- BASE_PATH=/opt/hanzo-sign/base/data
- DATABASE_URL=file:/opt/hanzo-sign/base/data/_dev/sign.db
@@ -27,7 +27,7 @@ docker --version
## Pulling the Docker Image
```bash
docker pull hanzo-sign/hanzo-sign:latest
docker pull ghcr.io/hanzoai/esign:latest
```
### Available Tags
@@ -133,7 +133,7 @@ docker run -d \
-e NEXT_PRIVATE_SMTP_PASSWORD="your-smtp-password" \
-e NEXT_PRIVATE_SMTP_FROM_NAME="Hanzo Sign" \
-e NEXT_PRIVATE_SMTP_FROM_ADDRESS="[email protected]" \
hanzo-sign/hanzo-sign:latest
ghcr.io/hanzoai/esign:latest
```
<Callout type="warn">
@@ -193,7 +193,7 @@ docker run -d \
--env-file .env \
-v hanzo-sign-base:/opt/hanzo-sign/base/data \
-v /path/to/cert.p12:/opt/hanzo-sign/cert.p12:ro \
hanzo-sign/hanzo-sign:latest
ghcr.io/hanzoai/esign:latest
```
## Health Checks
@@ -218,7 +218,7 @@ docker run -d \
--health-timeout=10s \
--health-retries=3 \
--env-file .env \
hanzo-sign/hanzo-sign:latest
ghcr.io/hanzoai/esign:latest
```
Check container health status:
@@ -238,7 +238,7 @@ To update Hanzo Sign to a new version:
### Pull the new image
```bash
docker pull hanzo-sign/hanzo-sign:latest
docker pull ghcr.io/hanzoai/esign:latest
```
</Step>
@@ -266,7 +266,7 @@ docker run -d \
--env-file .env \
-v hanzo-sign-base:/opt/hanzo-sign/base/data \
-v /path/to/cert.p12:/opt/hanzo-sign/cert.p12:ro \
hanzo-sign/hanzo-sign:latest
ghcr.io/hanzoai/esign:latest
```
</Step>
@@ -224,7 +224,7 @@ spec:
fsGroup: 1001
containers:
- name: hanzo-sign
image: hanzo-sign/hanzo-sign:latest
image: ghcr.io/hanzoai/esign:latest
imagePullPolicy: Always
ports:
- name: http
@@ -286,7 +286,7 @@ spec:
```
<Callout type="info">
Pin to a specific image tag (e.g., `hanzo-sign/hanzo-sign:1.5.0`) in production instead of `latest`
Pin to a specific image tag (e.g., `ghcr.io/hanzoai/esign:1.5.0`) in production instead of `latest`
to ensure predictable deployments.
</Callout>
@@ -681,7 +681,7 @@ spec:
fsGroup: 1001
containers:
- name: hanzo-sign
image: hanzo-sign/hanzo-sign:latest
image: ghcr.io/hanzoai/esign:latest
ports:
- name: http
containerPort: 3000
@@ -22,7 +22,7 @@ Mount your `.p12` certificate file into the container at the default path:
docker run -d \
-v /path/to/your/cert.p12:/opt/hanzo-sign/cert.p12:ro \
-e NEXT_PRIVATE_SIGNING_PASSPHRASE="your-certificate-password" \
hanzo-sign/hanzo-sign:latest
ghcr.io/hanzoai/esign:latest
```
The default certificate path inside the container is `/opt/hanzo-sign/cert.p12`. You can change this with `NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH`.
@@ -92,10 +92,10 @@ Use a specific version tag in production:
```bash
# Good — predictable, reproducible
docker pull hanzo-sign/hanzo-sign:1.8.0
docker pull ghcr.io/hanzoai/esign:1.8.0
# Risky — may pull breaking changes
docker pull hanzo-sign/hanzo-sign:latest
docker pull ghcr.io/hanzoai/esign:latest
```
Check the [GitHub releases](https://github.com/hanzoai/esign/releases) page for available versions.
@@ -68,7 +68,7 @@ kubectl get deployment hanzo-sign -n hanzo-sign -o jsonpath='{.spec.template.spe
View available releases on GitHub:
```bash
curl -s https://api.github.com/repos/hanzo-sign/hanzo-sign/releases/latest | grep tag_name
curl -s https://api.github.com/repos/hanzoai/esign/releases/latest | grep tag_name
```
Or visit the [releases page](https://github.com/hanzoai/esign/releases).
@@ -81,7 +81,7 @@ List available image tags:
<Tab value="DockerHub">
```bash
curl -s https://hub.docker.com/v2/repositories/hanzo-sign/hanzo-sign/tags | jq -r '.results[].name'
gh api /orgs/hanzoai/packages/container/esign/versions --jq '.[].metadata.container.tags[]'
```
</Tab>
@@ -165,7 +165,7 @@ See [Backups](/docs/self-hosting/maintenance/backups) for automated backup strat
### Pull the new image
```bash
docker pull hanzo-sign/hanzo-sign:1.6.0
docker pull ghcr.io/hanzoai/esign:1.6.0
```
Replace `1.6.0` with your target version.
@@ -189,7 +189,7 @@ docker run -d \
-p 3000:3000 \
--env-file .env \
-v /path/to/cert.p12:/opt/hanzo-sign/cert.p12:ro \
hanzo-sign/hanzo-sign:1.6.0
ghcr.io/hanzoai/esign:1.6.0
```
</Step>
@@ -223,7 +223,7 @@ Edit `compose.yml` or your `.env` file to specify the new version:
```yaml
services:
hanzo-sign:
image: hanzo-sign/hanzo-sign:1.6.0
image: ghcr.io/hanzoai/esign:1.6.0
```
Or if using environment variable substitution:
@@ -237,7 +237,7 @@ SIGN_VERSION=1.6.0
# In compose.yml
services:
hanzo-sign:
image: hanzo-sign/hanzo-sign:${SIGN_VERSION:-latest}
image: ghcr.io/hanzoai/esign:${SIGN_VERSION:-latest}
```
</Step>
@@ -283,7 +283,7 @@ Edit the deployment directly:
```bash
kubectl set image deployment/hanzo-sign \
hanzo-sign=hanzo-sign/hanzo-sign:1.6.0 \
hanzo-sign=ghcr.io/hanzoai/esign:1.6.0 \
-n hanzo-sign
```
@@ -295,7 +295,7 @@ spec:
spec:
containers:
- name: hanzo-sign
image: hanzo-sign/hanzo-sign:1.6.0
image: ghcr.io/hanzoai/esign:1.6.0
```
Then apply:
@@ -421,12 +421,12 @@ To run migrations manually before upgrading:
```bash
# Pull the new image
docker pull hanzo-sign/hanzo-sign:1.6.0
docker pull ghcr.io/hanzoai/esign:1.6.0
# Run migrations only
docker run --rm \
-e NEXT_PRIVATE_DATABASE_URL="postgresql://user:password@host:5432/hanzo-sign" \
hanzo-sign/hanzo-sign:1.6.0 \
ghcr.io/hanzoai/esign:1.6.0 \
npx prisma migrate deploy
```
@@ -490,7 +490,7 @@ Compare your current environment with the latest example:
```bash
# Download latest example
curl -O https://raw.githubusercontent.com/hanzo-sign/hanzo-sign/main/.env.example
curl -O https://raw.githubusercontent.com/hanzoai/esign/main/.env.example
# Compare with your current config
diff .env .env.example
@@ -516,7 +516,7 @@ docker run -d \
-p 3000:3000 \
--env-file .env \
-v /path/to/cert.p12:/opt/hanzo-sign/cert.p12:ro \
hanzo-sign/hanzo-sign:1.5.0
ghcr.io/hanzoai/esign:1.5.0
```
</Tab>
@@ -268,7 +268,7 @@ export const EnvelopeImportMenu = ({ type, folderId }: EnvelopeImportMenuProps)
<FormControl>
<Input
type="url"
placeholder="https://github.com/hanzoai/sign/blob/main/terms.pdf"
placeholder="https://github.com/hanzoai/esign/blob/main/terms.pdf"
{...field}
/>
</FormControl>
+2 -2
View File
@@ -1,7 +1,7 @@
# General Issues
Contact: https://github.com/hanzo-sign/hanzo-sign/issues/new?assignees=&labels=bug&projects=&template=bug-report.yml
Contact: https://github.com/hanzoai/esign/issues/new?assignees=&labels=bug&projects=&template=bug-report.yml
# Report critical issues privately to let us take appropriate action before publishing.
Contact: mailto:[email protected]
Preferred-Languages: en
Canonical: https://sign.hanzo.ai/.well-known/security.txt
Canonical: https://esign.hanzo.ai/.well-known/security.txt
+1 -1
View File
@@ -1,5 +1,5 @@
ARG TAG=latest
FROM hanzo-sign/hanzo-sign:${TAG}
FROM ghcr.io/hanzoai/esign:${TAG}
# Install @playwright/browser-chromium which bundles Playwright + Chromium
RUN npm install @playwright/browser-chromium
+4 -4
View File
@@ -13,7 +13,7 @@ Before you begin, ensure that you have the following installed:
This setup includes a PostgreSQL database and the Hanzo eSign application. You will need to provide your own SMTP details via environment variables.
1. Download the Docker Compose file from the Hanzo eSign repository: [compose.yml](https://raw.githubusercontent.com/hanzo-sign/hanzo-sign/release/docker/production/compose.yml)
1. Download the Docker Compose file from the Hanzo eSign repository: [compose.yml](https://raw.githubusercontent.com/hanzoai/esign/release/docker/production/compose.yml)
2. Navigate to the directory containing the `compose.yml` file.
3. Create a `.env` file in the same directory and add your SMTP details as well as a few extra environment variables, following the example below:
@@ -95,13 +95,13 @@ If you prefer to host the Hanzo eSign application on your container provider of
1. Pull the Hanzo eSign Docker image:
```
docker pull hanzo-sign/hanzo-sign
docker pull ghcr.io/hanzoai/esign
```
Or, if using GitHub's Package Registry:
```
docker pull ghcr.io/hanzo-sign/hanzo-sign
docker pull ghcr.io/hanzoai/esign
```
2. Run the Docker container, providing the necessary environment variables for your database and SMTP host:
@@ -122,7 +122,7 @@ docker run -d \
-e NEXT_PRIVATE_SIGNING_PASSPHRASE="<your-certificate-password>" \
-v /path/to/your/cert.p12:/opt/hanzo-sign/cert.p12:ro \
-v hanzo-sign_base:/opt/hanzo-sign/base/data \
hanzo-sign/hanzo-sign
ghcr.io/hanzoai/esign
```
Replace the placeholders with your actual database and SMTP details.
+6 -6
View File
@@ -40,15 +40,15 @@ else
echo "Using default repositories: dockerhub and ghcr.io"
# Add tags for both default repositories
docker tag "hanzo-sign-base" "hanzo-sign/hanzo-sign:latest"
docker tag "hanzo-sign-base" "hanzo-sign/hanzo-sign:$GIT_SHA"
docker tag "hanzo-sign-base" "ghcr.io/hanzo-sign/hanzo-sign:latest"
docker tag "hanzo-sign-base" "ghcr.io/hanzo-sign/hanzo-sign:$GIT_SHA"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:latest"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:$GIT_SHA"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:latest"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:$GIT_SHA"
# Add version tags if available
if [ ! -z "$APP_VERSION" ] && [ "$APP_VERSION" != "undefined" ]; then
docker tag "hanzo-sign-base" "hanzo-sign/hanzo-sign:$APP_VERSION"
docker tag "hanzo-sign-base" "ghcr.io/hanzo-sign/hanzo-sign:$APP_VERSION"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:$APP_VERSION"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:$APP_VERSION"
fi
fi
+6 -6
View File
@@ -27,11 +27,11 @@ docker buildx build \
--progress=plain \
--build-arg NEXT_PRIVATE_TELEMETRY_KEY="${NEXT_PRIVATE_TELEMETRY_KEY:-}" \
--build-arg NEXT_PRIVATE_TELEMETRY_HOST="${NEXT_PRIVATE_TELEMETRY_HOST:-}" \
-t "hanzo-sign/hanzo-sign:latest" \
-t "hanzo-sign/hanzo-sign:$GIT_SHA" \
-t "hanzo-sign/hanzo-sign:$APP_VERSION" \
-t "ghcr.io/hanzo-sign/hanzo-sign:latest" \
-t "ghcr.io/hanzo-sign/hanzo-sign:$GIT_SHA" \
-t "ghcr.io/hanzo-sign/hanzo-sign:$APP_VERSION" \
-t "ghcr.io/hanzoai/esign:latest" \
-t "ghcr.io/hanzoai/esign:$GIT_SHA" \
-t "ghcr.io/hanzoai/esign:$APP_VERSION" \
-t "ghcr.io/hanzoai/esign:latest" \
-t "ghcr.io/hanzoai/esign:$GIT_SHA" \
-t "ghcr.io/hanzoai/esign:$APP_VERSION" \
--push \
"$MONOREPO_ROOT"
+6 -6
View File
@@ -47,15 +47,15 @@ else
echo "Using default repositories: dockerhub and ghcr.io"
# Add tags for both default repositories
docker tag "hanzo-sign-base" "hanzo-sign/hanzo-sign:latest"
docker tag "hanzo-sign-base" "hanzo-sign/hanzo-sign:$GIT_SHA"
docker tag "hanzo-sign-base" "ghcr.io/hanzo-sign/hanzo-sign:latest"
docker tag "hanzo-sign-base" "ghcr.io/hanzo-sign/hanzo-sign:$GIT_SHA"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:latest"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:$GIT_SHA"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:latest"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:$GIT_SHA"
# Add version tags if available
if [ ! -z "$APP_VERSION" ] && [ "$APP_VERSION" != "undefined" ]; then
docker tag "hanzo-sign-base" "hanzo-sign/hanzo-sign:$APP_VERSION"
docker tag "hanzo-sign-base" "ghcr.io/hanzo-sign/hanzo-sign:$APP_VERSION"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:$APP_VERSION"
docker tag "hanzo-sign-base" "ghcr.io/hanzoai/esign:$APP_VERSION"
fi
fi
+1 -1
View File
@@ -5,7 +5,7 @@ name: hanzo-sign-production
# row-level org/team scoping in the app, not a per-file split.
services:
hanzo-sign:
image: hanzo-sign/hanzo-sign:latest
image: ghcr.io/hanzoai/esign:latest
environment:
- PORT=${PORT:-3000}
- NEXT_PRIVATE_AUTH_SECRET=${NEXT_PRIVATE_AUTH_SECRET:?err}
+1 -1
View File
@@ -22,7 +22,7 @@ printf "🐳 Self-hosting guide: https://docs.esign.hanzo.ai/developers/self-hos
printf "🔐 Certificate setup: https://docs.esign.hanzo.ai/developers/self-hosting/signing-certificate\n"
printf "🏥 Health check: http://localhost:3000/v1/health\n"
printf "📊 Certificate status: http://localhost:3000/v1/certificate-status\n"
printf "👥 Community: https://github.com/hanzo-sign/hanzo-sign\n\n"
printf "👥 Community: https://github.com/hanzoai/esign\n\n"
printf "🗄️ Running database migrations...\n"
# The replicate sidecar streams the SQLite WAL concurrently, so the first
+3 -3
View File
@@ -1,4 +1,4 @@
// hanzoai/sign — Go embed module.
// hanzoai/esign — Go embed module.
//
// This repo's PRIMARY artifact is the Hanzo Sign application (the Documenso
// fork: TypeScript/Remix + Prisma). This tiny Go module exists ONLY so the
@@ -6,10 +6,10 @@
// goja bundle (goja/bundle.js) — the port of the server-side e-signature domain
// (documents, recipients, fields, signing flow, audit trail, completion) — and
// run it in-process via dop251/goja, backed by Hanzo Base/SQLite. Cloud imports
// github.com/hanzoai/sign and gets Bundle().
// github.com/hanzoai/esign and gets Bundle().
//
// std-lib only — no third-party Go deps. The signing crypto/PDF primitives live
// in cloud (Go host-functions); this module carries only the domain bundle.
module github.com/hanzoai/sign
module github.com/hanzoai/esign
go 1.27.1
+4 -4
View File
@@ -2,9 +2,9 @@
#
# GitHub runs .github/workflows/cicd.yml (hanzoai/ci build.yml@v2) against this
# file on every push to main, tag v* and pull request. `test:` gates; `images:`
# builds docker/Dockerfile and publishes ghcr.io/hanzoai/sign as
# builds docker/Dockerfile and publishes ghcr.io/hanzoai/esign as
# sha-<short7>-amd64 plus the semver the pin in hanzoai/universe
# (charts/app/values/hanzo/sign.yaml) names.
# (charts/app/values/hanzo/esign.yaml) names.
#
# The gate is the real build of the app the cluster runs: npm ci against the
# committed lockfile (postinstall generates the Prisma client), then turbo's
@@ -21,7 +21,7 @@
# with a green build. See packages/eslint-config/transaction.cjs.
# The image series. bin/imgver publishes max(this, the highest semver already on
# ghcr.io/hanzoai/sign) plus a patch, and exactly this when it is the higher. It
# ghcr.io/hanzoai/esign) plus a patch, and exactly this when it is the higher. It
# is stated here because package.json carries 2.7.1, the upstream Documenso
# release, which is not this image's series.
version: 0.2.0
@@ -46,6 +46,6 @@ images:
- name: sign
context: .
dockerfile: docker/Dockerfile
repo: ghcr.io/hanzoai/sign
repo: ghcr.io/hanzoai/esign
# One architecture: the live image and its pin are amd64.
platforms: [linux/amd64]
+6 -6
View File
@@ -113,20 +113,20 @@ describe('import url policy', () => {
test('a GitHub page URL is read as the file it shows', () => {
assert.equal(
parseUrl('https://github.com/hanzoai/sign/blob/main/docs/terms.pdf').toString(),
'https://raw.githubusercontent.com/hanzoai/sign/main/docs/terms.pdf',
parseUrl('https://github.com/hanzoai/esign/blob/main/docs/terms.pdf').toString(),
'https://raw.githubusercontent.com/hanzoai/esign/main/docs/terms.pdf',
);
assert.equal(
parseUrl('https://github.com/hanzoai/sign/raw/v1.2.3/a/b/terms.pdf').toString(),
'https://raw.githubusercontent.com/hanzoai/sign/v1.2.3/a/b/terms.pdf',
parseUrl('https://github.com/hanzoai/esign/raw/v1.2.3/a/b/terms.pdf').toString(),
'https://raw.githubusercontent.com/hanzoai/esign/v1.2.3/a/b/terms.pdf',
);
// A repo page carries no file, so it is left alone and answers as HTML —
// which the PDF check then refuses.
assert.equal(
parseUrl('https://github.com/hanzoai/sign').toString(),
'https://github.com/hanzoai/sign',
parseUrl('https://github.com/hanzoai/esign').toString(),
'https://github.com/hanzoai/esign',
);
});
});