INTEGRITY Dokumentace

Sandbox SDK + Artifacts

Tento příklad používá git-repo-per-sandbox šablonu Sandbox SDK a zvýrazňuje části specifické pro Artifacts.

Vyjděte ze šablony s create cloudflare, jak je uvedeno v Spuštění Claude Code v Sandboxu. Poté upravte postup Artifacts pomocí níže uvedených cílených ukázek kódu.

Vytvoření projektu

npm create cloudflare@latest -- repo-per-sandbox --template=cloudflare/sandbox-sdk/examples/git-repo-per-sandbox
cd repo-per-sandbox

1. Vytvořte nebo znovu použijte repozitář

Šablona udržuje jeden repozitář Artifacts pro každé ID sandboxu. K rozhodnutí, zda má tento požadavek vytvořit nový repozitář, nebo načíst existující, použijte vlastní zdroj pravdy.

src/index.js
let defaultBranch;
let remote;
let token;
const sandboxWasJustCreated = true; // for example, set this when you create a new sandbox record

if (sandboxWasJustCreated) {
	const created = await env.ARTIFACTS.create(sandboxId);

	defaultBranch = created.defaultBranch;
	remote = created.remote;
	token = created.token;
} else {
	const repo = await env.ARTIFACTS.get(sandboxId);

	defaultBranch = repo.defaultBranch;
	remote = repo.remote;
	token = (await repo.createToken("write", 3600)).plaintext;
}
src/index.ts
let defaultBranch: string;
let remote: string;
let token: string;
const sandboxWasJustCreated = true; // for example, set this when you create a new sandbox record

if (sandboxWasJustCreated) {
	const created = await env.ARTIFACTS.create(sandboxId);

	defaultBranch = created.defaultBranch;
	remote = created.remote;
	token = created.token;
} else {
	const repo = await env.ARTIFACTS.get(sandboxId);

	defaultBranch = repo.defaultBranch;
	remote = repo.remote;
	token = (await repo.createToken("write", 3600)).plaintext;
}

Šablona již zná název repozitáře, takže začněte přímým vyhledáním namísto procházení list() stránek. Nepoužívejte široké catch bloky. Mohou skrýt chybu chybějícího repozitáře, ověření i validace za stejnou zprávou o opakování pokusu.

Pokud může u vašeho flow dojít k souběhu s vytvářením repozitáře, ošetřete opakování na úrovni aplikace až po prozkoumání vyvolané chyby.

2. Vytvořte nebo znovu použijte sandbox

Pro sandbox použijte stejné ID:

src/index.js
import { getSandbox } from "@cloudflare/sandbox";

const sandbox = getSandbox(env.Sandbox, sandboxId);
src/index.ts
import { getSandbox } from "@cloudflare/sandbox";

const sandbox = getSandbox(env.Sandbox, sandboxId);

3. Předejte repozitář do sandboxu

Zápisový token převeďte na ověřený Git remote a uložte jej jako proměnnou prostředí uvnitř sandboxu.

Použijte krátkodobý token a do sandboxu ho předejte až poté, co je relace sandboxu autorizovaná k odesílání změn.

src/index.js
function toAuthenticatedRemote(remote, token) {
	const tokenSecret = token.split("?expires=")[0];
	return `https://x:${tokenSecret}@${remote.slice("https://".length)}`;
}

await sandbox.setEnvVars({
	ARTIFACTS_GIT_REMOTE: toAuthenticatedRemote(remote, token),
});
src/index.ts
function toAuthenticatedRemote(remote: string, token: string) {
	const tokenSecret = token.split("?expires=")[0];
	return `https://x:${tokenSecret}@${remote.slice("https://".length)}`;
}

await sandbox.setEnvVars({
	ARTIFACTS_GIT_REMOTE: toAuthenticatedRemote(remote, token),
});

Kód běžící uvnitř sandboxu pak může použít ARTIFACTS_GIT_REMOTE hodnotou git clone, git fetch, git pull, nebo git push.