{"record":{"id":"6372baf115346331","repo":"linshenkx/prompt-optimizer","slug":"remote-delete-is-not-supported-by-this-provider","errorCode":null,"errorMessage":"Remote delete is not supported by this provider","messagePattern":"Remote delete is not supported by this provider","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"warning","filePath":"packages/ui/src/utils/remote-backup.ts","lineNumber":811,"sourceCode":"      .sort((a, b) => String(b.updatedAt || '').localeCompare(String(a.updatedAt || '')))\n  }\n\n  async uploadBackup(name: string, blob: Blob): Promise<RemoteBackupEntry> {\n    const entry = await this.put(name, blob, { contentType: blob.type || BACKUP_MIME_TYPE })\n    return {\n      id: entry.path,\n      name: fileNameOf(entry.path),\n      sizeBytes: entry.sizeBytes ?? blob.size,\n      updatedAt: entry.updatedAt,\n    }\n  }\n\n  async downloadBackup(entry: RemoteBackupEntry): Promise<ArrayBuffer> {\n    return this.get(entry.id)\n  }\n\n  async deleteBackup(entry: RemoteBackupEntry): Promise<void> {\n    if (!this.delete) throw new Error('Remote delete is not supported by this provider')\n    await this.delete(entry.id)\n  }\n\n  authorize?(): Promise<void>\n}\n\nclass GoogleDriveRemoteObjectStore extends BaseRemoteObjectStore {\n  provider: RemoteBackupProviderKind = 'google-drive'\n  private accessTokenEntry: GoogleAccessTokenEntry | null = null\n  private rootFolderId: string | null = null\n  private pathIdCache = new Map<string, string>()\n\n  constructor(private readonly config: Extract<RemoteBackupProviderConfig, { kind: 'google-drive' }>) {\n    super()\n  }\n\n  async authorize(): Promise<void> {\n    await this.ensureAccessToken()","sourceCodeStart":793,"sourceCodeEnd":829,"githubUrl":"https://github.com/linshenkx/prompt-optimizer/blob/3e677b1d9f7e0493c142c175560531e7ae786dce/packages/ui/src/utils/remote-backup.ts#L793-L829","documentation":"Thrown by RemoteObjectStore.deleteBackup when the configured provider object store does not implement an optional delete method. The base class treats delete as optional capability; only some providers (S3, WebDAV, desktop IPC) supply it.","triggerScenarios":"Calling deleteBackup() on a RemoteObjectStore whose concrete class never assigns this.delete (e.g. a custom/minimal provider or a Google Drive store variant without delete support). downloadBackup works because get is mandatory.","commonSituations":"Custom provider implementations that only implement put/get/list; UI flows exposing a delete button for providers that cannot delete.","solutions":["Check 'delete' in store / typeof store.delete === 'function' before calling deleteBackup","Hide or disable delete UI for providers lacking delete support","Implement a delete method on your custom provider class"],"exampleFix":"// before\nawait store.deleteBackup(entry)\n// after\nif (typeof store.delete === 'function') {\n  await store.deleteBackup(entry)\n} else {\n  showUnsupportedMessage()\n}","handlingStrategy":"type-guard","validationCode":"if (typeof store.delete !== 'function') { /* hide delete UI */ }","typeGuard":"const canDeleteBackup = (store: RemoteObjectStore): boolean => typeof (store as any).delete === 'function'","tryCatchPattern":null,"preventionTips":["Gate delete buttons on provider capability","Document which providers support delete"],"tags":["provider-capability","delete","remote-backup"],"backgroundTag":"unsupported-operation","analyzedSha":"3e677b1d9f7e0493c142c175560531e7ae786dce","analyzedAt":"2026-08-27T21:29:16.709Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}