Push your artifact’s published files to a GitHub repository. Tokens are stored
per artifact. Access via sdk.github.
const sdk = await ShareOut.create();
if (!await sdk.github.isConnected()) {
await sdk.github.authorize();
const result = await sdk.github.export({
commitMessage: 'Update from ShareOut',
console.log(result.repoUrl); // https://github.com/octocat/my-site
console.log(result.filesCommitted); // 3
authorize(returnUrl?): Promise<boolean>
isConnected(): Promise<boolean>
getStatus(): Promise<{ connected: boolean; username?: string; artifactId: string }>
disconnect(): Promise<void>
listRepos(options?): Promise<{ repos: Repo[]; page: number; perPage: number }>
export(options): Promise<ExportResult>
| Field |
Required |
Description |
repo |
One of repo or newRepo |
Existing repo in owner/repo format |
newRepo.name |
One of repo or newRepo |
Name for a new repo to create |
newRepo.description |
No |
Repository description |
newRepo.private |
No |
Private repo (default: false) |
branch |
No |
Target branch (default: main) |
commitMessage |
No |
Commit message (default: "ShareOut export v{version}") |
includeReadme |
No |
Generate a README with artifact info (default: true) |
pathPrefix |
No |
Prefix for all file paths, e.g. "dist/" |
These endpoints are also available directly from agents or server code.
| Endpoint |
Method |
Description |
/v1/data/{artifactIdOrSlug}/github/auth-url |
GET |
Returns a GitHub OAuth URL |
/v1/data/{artifactIdOrSlug}/github/token-status |
GET |
Connection status and username |
/v1/data/{artifactIdOrSlug}/github/disconnect |
POST |
Remove stored GitHub token |
/v1/data/{artifactIdOrSlug}/github/repos |
GET |
List user’s repositories |
/v1/data/{artifactIdOrSlug}/github/export |
POST |
Export files to a repository |
{artifactIdOrSlug} accepts either art_2ce7… or a deployment slug like my-site.
| Parameter |
Required |
Description |
return |
No |
URL to redirect to after OAuth; callback appends ?github_connected=true |
- Tokens are stored per artifact, not per ShareOut user.
- GitHub tokens do not expire unless revoked.
- OAuth scope is
repo (full repository access).
- OAuth returns through
https://shareout.site/auth/callback; ShareOut detects GitHub callbacks from the state parameter.
| Code |
Meaning |
GITHUB_NOT_CONNECTED |
No token stored — call authorize() first |
REPO_NOT_FOUND |
Repository not found or not accessible |
NO_DEPLOYMENT |
No published version exists to export |
NO_ASSETS |
No files found in the deployment |
INVALID_REQUEST |
Both repo and newRepo missing from export body |
EXPORT_ERROR |
GitHub API error during export |