feat: reduce backend (#14251)

#### PR Dependency Tree


* **PR #14251** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Current user profile now exposes access tokens, revealed tokens, and
detailed calendar accounts/subscriptions.
* Workspace now exposes permissions, calendars, calendar events, and a
workspace-scoped blob upload part URL.
  * New document-update mutation for applying doc updates.

* **API Changes**
  * validateAppConfig is now a query (mutation deprecated).
* Several legacy top-level calendar/blob endpoints deprecated in favor
of user/workspace fields.

* **Refactor**
* Calendar, blob-upload and access-token surfaces reorganized to use
user/workspace-centric fields.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-01-14 00:01:07 +08:00
committed by GitHub
parent 7c440686ad
commit 7c24b2521a
41 changed files with 978 additions and 503 deletions
@@ -5,7 +5,7 @@ import {
completeBlobUploadMutation,
createBlobUploadMutation,
deleteBlobMutation,
getBlobUploadPartUrlMutation,
getBlobUploadPartUrlQuery,
listBlobsQuery,
releaseDeletedBlobsMutation,
setBlobMutation,
@@ -265,16 +265,16 @@ export class CloudBlobStorage extends BlobStorageBase {
const chunk = data.subarray(start, end);
const part = await this.connection.gql({
query: getBlobUploadPartUrlMutation,
query: getBlobUploadPartUrlQuery,
variables: { workspaceId: this.options.id, key, uploadId, partNumber },
context: { signal },
});
const res = await this.fetchWithTimeout(
part.getBlobUploadPartUrl.uploadUrl,
part.workspace.blobUploadPartUrl.uploadUrl,
{
method: 'PUT',
headers: part.getBlobUploadPartUrl.headers ?? undefined,
headers: part.workspace.blobUploadPartUrl.headers ?? undefined,
body: chunk,
signal,
timeout: UPLOAD_REQUEST_TIMEOUT,