스토어프론트 작업 트리 바꾸기
작업 트리 전체를 목록(경로·해시·크기)으로 바꾼다. 전부 아니면 전무다. `expectedBaseRef`가 지금 작업 트리와 다르면 409 `SOURCE_CHANGED`, 편집 환경이 열려 있으면 409 `EDIT_SESSION_OPEN`(`endEditSession: true`면 끄고 진행), 서버에 없는 내용은 409 `SOURCE_BLOBS_MISSING`(`error.details.hashes`를 올리고 다시). 목록에 `package.json`·`pnpm-lock.yaml`이 있으면 그 내용(`packageJson`·`lockfile`)을 함께 보내고 서버가 의존성을 판정한다(거절 409 `DEPENDENCY_REJECTED`, 경고 `dependencyWarnings`). 빌드는 하지 않는다(`POST versions`)
작업 트리 전체를 목록(경로·해시·크기)으로 바꾼다. 전부 아니면 전무다. expectedBaseRef가 지금 작업 트리와 다르면 409 SOURCE_CHANGED, 편집 환경이 열려 있으면 409 EDIT_SESSION_OPEN(endEditSession: true면 끄고 진행), 서버에 없는 내용은 409 SOURCE_BLOBS_MISSING(error.details.hashes를 올리고 다시). 목록에 package.json·pnpm-lock.yaml이 있으면 그 내용(packageJson·lockfile)을 함께 보내고 서버가 의존성을 판정한다(거절 409 DEPENDENCY_REJECTED, 경고 dependencyWarnings). 빌드는 하지 않는다(POST versions)
accessTokenAuthorizationBearer <token>Sayren 계정 토큰(로그인 토큰 또는 개인 액세스 토큰, RFC 9068 JWT)
X-Store-Id*string대상 상점 id. 토큰의 상점 범위 밖이면 403 STORE_NOT_GRANTED, 없으면 400 STORE_ID_REQUIRED다
user-agent*stringapplication/json- body
expectedBaseRef?string내려받은 작업 트리. 지금 작업 트리가 이 값일 때만 바꾼다. 생략하면 조건 없이 덮어쓴다
^sources\/sfs_[a-z0-9]{8,40}\/[0-9a-f]{64}\.tgz$files*array<>1 <= items <= 2000endEditSession?boolean열린 편집 환경을 끄고 진행한다 (기본 false — 열려 있으면 409 EDIT_SESSION_OPEN)
packageJson?stringfiles에 package.json이 있으면 그 내용(utf8). 서버가 의존성을 판정한다. 해시가 목록과 다르면 400 DEPENDENCY_FILES_MISMATCH
length <= 1048576lockfile?stringfiles에 pnpm-lock.yaml이 있으면 그 내용(utf8)
length <= 1048576성공
application/json- response
meta*data*error*|nullcurl -X PUT 'https://api.sayren.io/v1/storefront/site/source' \ -H 'X-Store-Id: string' \ -H 'user-agent: string' \ -H 'Content-Type: application/json' \ -d '{ "files": [ { "path": "string", "hash": "string", "size": 0 } ]}'{ "meta": { "status": 200, "code": "OK", "message": "OK", "isSuccess": true }, "data": { "sourceRef": "string", "previousRef": "string", "treeSha256": "string", "files": 0, "bytes": 0, "changed": true, "endedEditSession": true, "dependencyWarnings": [ { "name": "string", "version": "string", "reason": "string", "detail": "string", "advisory": { "id": "string", "url": "string", "severity": "string", "title": "string" } } ] }, "error": null}