You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Support Torch Object Storage from VolcanoEngine #59
TOS is not covered by the existing tiny-oss/aws entry, so this needs a provider entry (the repo's usual pattern).
What the TOS docs say (verified against docs.volcengine.com):
There is a dedicated S3-compatible endpoint — tos-s3-<region>.volces.com, e.g. tos-s3-cn-beijing.volces.com — which must be used for S3-protocol access.
Only Signature V4 is supported (no V2).
Virtual-hosted style only; path-style is explicitly not supported.
Region-scoped domains only; regions include cn-beijing, cn-guangzhou, cn-shanghai, cn-hongkong, ap-southeast-1, ap-southeast-3.
Why tiny-oss/aws doesn't work for it today: with a custom endpoint, resolveAwsHost() (src/aws/host.ts) returns it verbatim and the bucket is only added to the URL path when pathStyle: true (src/aws/request.ts). TOS rejects path-style, and with pathStyle: false the bucket never appears in host or path — so the documented S3-compatible recipe (endpoint + pathStyle: true) can't target TOS.
Plan for the implementing stage: add a self-contained src/tos/ provider following the src/aws/ / src/cos/ layout (signature, host, request, signatureUrl, index), wire it into tsup.config.ts and package.jsonexports, and pin the signer with a new test/tos-signature.spec.ts against the official @volcengine/tos-sdk (v2.9.1, MIT) — its native scheme is TOS4-HMAC-SHA256 (service tos, x-tos-* headers), like the other providers' oracle tests. No .github/workflows/** change is involved.
Labelling ready-for-agent; the loop's feature stage will pick it up. Reopen or say so if you'd rather only document the S3-endpoint workaround instead of adding tiny-oss/tos.
tiny-oss/tos is implemented — PR opening on branch loop/59-tos (feat: add Volcano Engine TOS provider entry, closes this issue).
It adds a self-contained TOS entry with the full operation set (put, multipartUpload, putSymlink, signatureUrl, list/copy/abort), signing TOS4-HMAC-SHA256 (service tos, host + x-tos-*, UNSIGNED-PAYLOAD) against virtual-hosted tos-<region>.volces.com hosts. The signer is pinned byte-for-byte against the official @volcengine/tos-sdk@2.9.1 (pnpm test:tos-oracle, also run by test:ci).
One deliberate detail: TOS's JS SDK puts the endpoint in the pre-signed URL credential scope, which disagrees with the official Go SDK; signatureUrl signs the real region (the JS SDK has no getPreSignedUrl test, and the Go SDK's published vector is used as the oracle for that path). See the PR description for the evidence and the per-provider options (endpoint is the endpoint domain; region is always required).
Activity
github-actions commentedon Sep 18, 2026
Loop triage —
feature/ready-for-agent(confidence: high)TOS is not covered by the existing
tiny-oss/awsentry, so this needs a provider entry (the repo's usual pattern).What the TOS docs say (verified against
docs.volcengine.com):tos-s3-<region>.volces.com, e.g.tos-s3-cn-beijing.volces.com— which must be used for S3-protocol access.cn-beijing,cn-guangzhou,cn-shanghai,cn-hongkong,ap-southeast-1,ap-southeast-3.Why
tiny-oss/awsdoesn't work for it today: with a customendpoint,resolveAwsHost()(src/aws/host.ts) returns it verbatim and the bucket is only added to the URL path whenpathStyle: true(src/aws/request.ts). TOS rejects path-style, and withpathStyle: falsethe bucket never appears in host or path — so the documented S3-compatible recipe (endpoint +pathStyle: true) can't target TOS.Plan for the implementing stage: add a self-contained
src/tos/provider following thesrc/aws//src/cos/layout (signature,host,request,signatureUrl,index), wire it intotsup.config.tsandpackage.jsonexports, and pin the signer with a newtest/tos-signature.spec.tsagainst the official@volcengine/tos-sdk(v2.9.1, MIT) — its native scheme isTOS4-HMAC-SHA256(servicetos,x-tos-*headers), like the other providers' oracle tests. No.github/workflows/**change is involved.Labelling
ready-for-agent; the loop'sfeaturestage will pick it up. Reopen or say so if you'd rather only document the S3-endpoint workaround instead of addingtiny-oss/tos.github-actions commentedon Sep 18, 2026
tiny-oss/tosis implemented — PR opening on branchloop/59-tos(feat: add Volcano Engine TOS provider entry, closes this issue).It adds a self-contained TOS entry with the full operation set (
put,multipartUpload,putSymlink,signatureUrl, list/copy/abort), signingTOS4-HMAC-SHA256(servicetos,host+x-tos-*,UNSIGNED-PAYLOAD) against virtual-hostedtos-<region>.volces.comhosts. The signer is pinned byte-for-byte against the official@volcengine/tos-sdk@2.9.1(pnpm test:tos-oracle, also run bytest:ci).One deliberate detail: TOS's JS SDK puts the endpoint in the pre-signed URL credential scope, which disagrees with the official Go SDK;
signatureUrlsigns the realregion(the JS SDK has nogetPreSignedUrltest, and the Go SDK's published vector is used as the oracle for that path). See the PR description for the evidence and the per-provider options (endpointis the endpoint domain;regionis always required).