{"version":3,"file":"media.cjs","names":["GoogleHostConnection","GoogleRawConnection","BlobStore","AsyncCaller","MediaBlob","ApiKeyGoogleAuth"],"sources":["../../src/experimental/media.ts"],"sourcesContent":["import {\n  AsyncCaller,\n  AsyncCallerCallOptions,\n  AsyncCallerParams,\n} from \"@langchain/core/utils/async_caller\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport {\n  MediaBlob,\n  BlobStore,\n  BlobStoreOptions,\n  MediaBlobData,\n} from \"./utils/media_core.js\";\nimport {\n  GoogleConnectionParams,\n  GoogleRawResponse,\n  GoogleResponse,\n} from \"../types.js\";\nimport { GoogleHostConnection, GoogleRawConnection } from \"../connection.js\";\nimport {\n  ApiKeyGoogleAuth,\n  GoogleAbstractedClient,\n  GoogleAbstractedClientOpsMethod,\n} from \"../auth.js\";\n\nexport interface GoogleUploadConnectionParams<\n  AuthOptions,\n> extends GoogleConnectionParams<AuthOptions> {}\n\nexport abstract class GoogleMultipartUploadConnection<\n  CallOptions extends AsyncCallerCallOptions,\n  ResponseType extends GoogleResponse,\n  AuthOptions,\n> extends GoogleHostConnection<CallOptions, ResponseType, AuthOptions> {\n  constructor(\n    fields: GoogleConnectionParams<AuthOptions> | undefined,\n    caller: AsyncCaller,\n    client: GoogleAbstractedClient\n  ) {\n    super(fields, caller, client);\n  }\n\n  async _body(\n    separator: string,\n    data: MediaBlob,\n    metadata: Record<string, unknown>\n  ): Promise<string> {\n    const contentType = data.mimetype;\n    const { encoded, encoding } = await data.encode();\n    const body = [\n      `--${separator}`,\n      \"Content-Type: application/json; charset=UTF-8\",\n      \"\",\n      JSON.stringify(metadata),\n      \"\",\n      `--${separator}`,\n      `Content-Type: ${contentType}`,\n      `Content-Transfer-Encoding: ${encoding}`,\n      \"\",\n      encoded,\n      `--${separator}--`,\n    ];\n    return body.join(\"\\n\");\n  }\n\n  async request(\n    data: MediaBlob,\n    metadata: Record<string, unknown>,\n    options: CallOptions\n  ): Promise<ResponseType> {\n    const separator = `separator-${Date.now()}`;\n    const body = await this._body(separator, data, metadata);\n    const requestHeaders = {\n      \"Content-Type\": `multipart/related; boundary=${separator}`,\n      \"X-Goog-Upload-Protocol\": \"multipart\",\n    };\n    const response = this._request(body, options, requestHeaders);\n    return response;\n  }\n}\n\nexport abstract class GoogleDownloadConnection<\n  CallOptions extends AsyncCallerCallOptions,\n  ResponseType extends GoogleResponse,\n  AuthOptions,\n> extends GoogleHostConnection<CallOptions, ResponseType, AuthOptions> {\n  async request(options: CallOptions): Promise<ResponseType> {\n    return this._request(undefined, options);\n  }\n}\n\nexport abstract class GoogleDownloadRawConnection<\n  CallOptions extends AsyncCallerCallOptions,\n  AuthOptions,\n> extends GoogleRawConnection<CallOptions, AuthOptions> {\n  buildMethod(): GoogleAbstractedClientOpsMethod {\n    return \"GET\";\n  }\n\n  async request(options: CallOptions): Promise<GoogleRawResponse> {\n    return this._request(undefined, options);\n  }\n}\n\nexport interface BlobStoreGoogleParams<AuthOptions>\n  extends\n    GoogleConnectionParams<AuthOptions>,\n    AsyncCallerParams,\n    BlobStoreOptions {}\n\nexport abstract class BlobStoreGoogle<\n  ResponseType extends GoogleResponse,\n  AuthOptions,\n> extends BlobStore {\n  caller: AsyncCaller;\n\n  client: GoogleAbstractedClient;\n\n  constructor(fields?: BlobStoreGoogleParams<AuthOptions>) {\n    super(fields);\n    this.caller = new AsyncCaller(fields ?? {});\n    this.client = this.buildClient(fields);\n  }\n\n  abstract buildClient(\n    fields?: BlobStoreGoogleParams<AuthOptions>\n  ): GoogleAbstractedClient;\n\n  abstract buildSetMetadata([key, blob]: [string, MediaBlob]): Record<\n    string,\n    unknown\n  >;\n\n  abstract buildSetConnection([key, blob]: [\n    string,\n    MediaBlob,\n  ]): GoogleMultipartUploadConnection<\n    AsyncCallerCallOptions,\n    ResponseType,\n    AuthOptions\n  >;\n\n  async _set(keyValuePair: [string, MediaBlob]): Promise<ResponseType> {\n    const [, blob] = keyValuePair;\n    const setMetadata = this.buildSetMetadata(keyValuePair);\n    const metadata = setMetadata;\n    const options = {};\n    const connection = this.buildSetConnection(keyValuePair);\n    const response = await connection.request(blob, metadata, options);\n    return response;\n  }\n\n  async mset(keyValuePairs: [string, MediaBlob][]): Promise<void> {\n    const ret = keyValuePairs.map((keyValue) => this._set(keyValue));\n    await Promise.all(ret);\n  }\n\n  abstract buildGetMetadataConnection(\n    key: string\n  ): GoogleDownloadConnection<\n    AsyncCallerCallOptions,\n    ResponseType,\n    AuthOptions\n  >;\n\n  async _getMetadata(key: string): Promise<Record<string, unknown>> {\n    const connection = this.buildGetMetadataConnection(key);\n    const options = {};\n    const response = await connection.request(options);\n    return response.data;\n  }\n\n  abstract buildGetDataConnection(\n    key: string\n  ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions>;\n\n  async _getData(key: string): Promise<Blob> {\n    const connection = this.buildGetDataConnection(key);\n    const options = {};\n    const response = await connection.request(options);\n    return response.data;\n  }\n\n  _getMimetypeFromMetadata(metadata: Record<string, unknown>): string {\n    return metadata.contentType as string;\n  }\n\n  async _get(key: string): Promise<MediaBlob | undefined> {\n    const metadata = await this._getMetadata(key);\n    const data = await this._getData(key);\n    if (data && metadata) {\n      const ret = await MediaBlob.fromBlob(data, { metadata, path: key });\n      return ret;\n    } else {\n      return undefined;\n    }\n  }\n\n  async mget(keys: string[]): Promise<(MediaBlob | undefined)[]> {\n    const ret = keys.map((key) => this._get(key));\n    return await Promise.all(ret);\n  }\n\n  abstract buildDeleteConnection(\n    key: string\n  ): GoogleDownloadConnection<\n    AsyncCallerCallOptions,\n    GoogleResponse,\n    AuthOptions\n  >;\n\n  async _del(key: string): Promise<void> {\n    const connection = this.buildDeleteConnection(key);\n    const options = {};\n    await connection.request(options);\n  }\n\n  async mdelete(keys: string[]): Promise<void> {\n    const ret = keys.map((key) => this._del(key));\n    await Promise.all(ret);\n  }\n\n  // oxlint-disable-next-line require-yield\n  async *yieldKeys(_prefix: string | undefined): AsyncGenerator<string> {\n    // TODO: Implement. Most have an implementation that uses nextToken.\n    throw new Error(\"yieldKeys is not implemented\");\n  }\n}\n\n/**\n * Based on https://cloud.google.com/storage/docs/json_api/v1/objects#resource\n */\nexport interface GoogleCloudStorageObject extends Record<string, unknown> {\n  id?: string;\n  name?: string;\n  contentType?: string;\n  metadata?: Record<string, unknown>;\n  // This is incomplete.\n}\n\nexport interface GoogleCloudStorageResponse extends GoogleResponse {\n  data: GoogleCloudStorageObject;\n}\n\nexport type BucketAndPath = {\n  bucket: string;\n  path: string;\n};\n\nexport class GoogleCloudStorageUri {\n  static uriRegexp = /gs:\\/\\/([a-z0-9][a-z0-9._-]+[a-z0-9])\\/(.*)/;\n\n  bucket: string;\n\n  path: string;\n\n  constructor(uri: string) {\n    const bucketAndPath = GoogleCloudStorageUri.uriToBucketAndPath(uri);\n    this.bucket = bucketAndPath.bucket;\n    this.path = bucketAndPath.path;\n  }\n\n  get uri() {\n    return `gs://${this.bucket}/${this.path}`;\n  }\n\n  get isValid() {\n    return (\n      typeof this.bucket !== \"undefined\" && typeof this.path !== \"undefined\"\n    );\n  }\n\n  static uriToBucketAndPath(uri: string): BucketAndPath {\n    const match = this.uriRegexp.exec(uri);\n    if (!match) {\n      throw new Error(`Invalid gs:// URI: ${uri}`);\n    }\n    return {\n      bucket: match[1],\n      path: match[2],\n    };\n  }\n\n  static isValidUri(uri: string): boolean {\n    return this.uriRegexp.test(uri);\n  }\n}\n\nexport interface GoogleCloudStorageConnectionParams {\n  uri: string;\n}\n\nexport interface GoogleCloudStorageUploadConnectionParams<AuthOptions>\n  extends\n    GoogleUploadConnectionParams<AuthOptions>,\n    GoogleCloudStorageConnectionParams {}\n\nexport class GoogleCloudStorageUploadConnection<\n  AuthOptions,\n> extends GoogleMultipartUploadConnection<\n  AsyncCallerCallOptions,\n  GoogleCloudStorageResponse,\n  AuthOptions\n> {\n  uri: GoogleCloudStorageUri;\n\n  constructor(\n    fields: GoogleCloudStorageUploadConnectionParams<AuthOptions>,\n    caller: AsyncCaller,\n    client: GoogleAbstractedClient\n  ) {\n    super(fields, caller, client);\n    this.uri = new GoogleCloudStorageUri(fields.uri);\n  }\n\n  async buildUrl(): Promise<string> {\n    return `https://storage.googleapis.com/upload/storage/${this.apiVersion}/b/${this.uri.bucket}/o?uploadType=multipart`;\n  }\n}\n\nexport interface GoogleCloudStorageDownloadConnectionParams<AuthOptions>\n  extends\n    GoogleCloudStorageConnectionParams,\n    GoogleConnectionParams<AuthOptions> {\n  method: GoogleAbstractedClientOpsMethod;\n  alt: \"media\" | undefined;\n}\n\nexport class GoogleCloudStorageDownloadConnection<\n  ResponseType extends GoogleResponse,\n  AuthOptions,\n> extends GoogleDownloadConnection<\n  AsyncCallerCallOptions,\n  ResponseType,\n  AuthOptions\n> {\n  uri: GoogleCloudStorageUri;\n\n  method: GoogleAbstractedClientOpsMethod;\n\n  alt: \"media\" | undefined;\n\n  constructor(\n    fields: GoogleCloudStorageDownloadConnectionParams<AuthOptions>,\n    caller: AsyncCaller,\n    client: GoogleAbstractedClient\n  ) {\n    super(fields, caller, client);\n    this.uri = new GoogleCloudStorageUri(fields.uri);\n    this.method = fields.method;\n    this.alt = fields.alt;\n  }\n\n  buildMethod(): GoogleAbstractedClientOpsMethod {\n    return this.method;\n  }\n\n  async buildUrl(): Promise<string> {\n    const path = encodeURIComponent(this.uri.path);\n    const ret = `https://storage.googleapis.com/storage/${this.apiVersion}/b/${this.uri.bucket}/o/${path}`;\n    return this.alt ? `${ret}?alt=${this.alt}` : ret;\n  }\n}\n\nexport interface GoogleCloudStorageRawConnectionParams<AuthOptions>\n  extends\n    GoogleCloudStorageConnectionParams,\n    GoogleConnectionParams<AuthOptions> {}\n\nexport class GoogleCloudStorageRawConnection<\n  AuthOptions,\n> extends GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n  uri: GoogleCloudStorageUri;\n\n  constructor(\n    fields: GoogleCloudStorageRawConnectionParams<AuthOptions>,\n    caller: AsyncCaller,\n    client: GoogleAbstractedClient\n  ) {\n    super(fields, caller, client);\n    this.uri = new GoogleCloudStorageUri(fields.uri);\n  }\n\n  async buildUrl(): Promise<string> {\n    const path = encodeURIComponent(this.uri.path);\n    const ret = `https://storage.googleapis.com/storage/${this.apiVersion}/b/${this.uri.bucket}/o/${path}?alt=media`;\n    return ret;\n  }\n}\n\nexport interface BlobStoreGoogleCloudStorageBaseParams<\n  AuthOptions,\n> extends BlobStoreGoogleParams<AuthOptions> {\n  uriPrefix: GoogleCloudStorageUri;\n}\n\nexport abstract class BlobStoreGoogleCloudStorageBase<\n  AuthOptions,\n> extends BlobStoreGoogle<GoogleCloudStorageResponse, AuthOptions> {\n  params: BlobStoreGoogleCloudStorageBaseParams<AuthOptions>;\n\n  constructor(fields: BlobStoreGoogleCloudStorageBaseParams<AuthOptions>) {\n    super(fields);\n    this.params = fields;\n    this.defaultStoreOptions = {\n      ...this.defaultStoreOptions,\n      pathPrefix: fields.uriPrefix.uri,\n    };\n  }\n\n  buildSetConnection([key, _blob]: [\n    string,\n    MediaBlob,\n  ]): GoogleMultipartUploadConnection<\n    AsyncCallerCallOptions,\n    GoogleCloudStorageResponse,\n    AuthOptions\n  > {\n    const params: GoogleCloudStorageUploadConnectionParams<AuthOptions> = {\n      ...this.params,\n      uri: key,\n    };\n    return new GoogleCloudStorageUploadConnection<AuthOptions>(\n      params,\n      this.caller,\n      this.client\n    );\n  }\n\n  buildSetMetadata([key, blob]: [string, MediaBlob]): Record<string, unknown> {\n    const uri = new GoogleCloudStorageUri(key);\n    const ret: GoogleCloudStorageObject = {\n      name: uri.path,\n      metadata: blob.metadata,\n      contentType: blob.mimetype,\n    };\n    return ret;\n  }\n\n  buildGetMetadataConnection(\n    key: string\n  ): GoogleDownloadConnection<\n    AsyncCallerCallOptions,\n    GoogleCloudStorageResponse,\n    AuthOptions\n  > {\n    const params: GoogleCloudStorageDownloadConnectionParams<AuthOptions> = {\n      uri: key,\n      method: \"GET\",\n      alt: undefined,\n    };\n    return new GoogleCloudStorageDownloadConnection<\n      GoogleCloudStorageResponse,\n      AuthOptions\n    >(params, this.caller, this.client);\n  }\n\n  buildGetDataConnection(\n    key: string\n  ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n    const params: GoogleCloudStorageRawConnectionParams<AuthOptions> = {\n      uri: key,\n    };\n    return new GoogleCloudStorageRawConnection<AuthOptions>(\n      params,\n      this.caller,\n      this.client\n    );\n  }\n\n  buildDeleteConnection(\n    key: string\n  ): GoogleDownloadConnection<\n    AsyncCallerCallOptions,\n    GoogleResponse,\n    AuthOptions\n  > {\n    const params: GoogleCloudStorageDownloadConnectionParams<AuthOptions> = {\n      uri: key,\n      method: \"DELETE\",\n      alt: undefined,\n    };\n    return new GoogleCloudStorageDownloadConnection<\n      GoogleResponse,\n      AuthOptions\n    >(params, this.caller, this.client);\n  }\n}\n\nexport type AIStudioFileState =\n  | \"PROCESSING\"\n  | \"ACTIVE\"\n  | \"FAILED\"\n  | \"STATE_UNSPECIFIED\";\n\nexport type AIStudioFileVideoMetadata = {\n  videoMetadata: {\n    videoDuration: string; // Duration in seconds, possibly with fractional, ending in \"s\"\n  };\n};\n\nexport type AIStudioFileMetadata = AIStudioFileVideoMetadata;\n\nexport interface AIStudioFileObject {\n  name?: string;\n  displayName?: string;\n  mimeType?: string;\n  sizeBytes?: string; // int64 format\n  createTime?: string; // timestamp format\n  updateTime?: string; // timestamp format\n  expirationTime?: string; // timestamp format\n  sha256Hash?: string; // base64 encoded\n  uri?: string;\n  state?: AIStudioFileState;\n  error?: {\n    code: number;\n    message: string;\n    details: Record<string, unknown>[];\n  };\n  metadata?: AIStudioFileMetadata;\n}\n\nexport class AIStudioMediaBlob extends MediaBlob {\n  _valueAsDate(value: string): Date {\n    if (!value) {\n      return new Date(0);\n    }\n    return new Date(value);\n  }\n\n  _metadataFieldAsDate(field: string): Date {\n    return this._valueAsDate(this.metadata?.[field]);\n  }\n\n  get createDate(): Date {\n    return this._metadataFieldAsDate(\"createTime\");\n  }\n\n  get updateDate(): Date {\n    return this._metadataFieldAsDate(\"updateTime\");\n  }\n\n  get expirationDate(): Date {\n    return this._metadataFieldAsDate(\"expirationTime\");\n  }\n\n  get isExpired(): boolean {\n    const now = new Date().toISOString();\n    const exp = this.metadata?.expirationTime ?? now;\n    return exp <= now;\n  }\n}\n\nexport interface AIStudioFileGetResponse extends GoogleResponse {\n  data: AIStudioFileObject;\n}\n\nexport interface AIStudioFileSaveResponse extends GoogleResponse {\n  data: {\n    file: AIStudioFileObject;\n  };\n}\n\nexport interface AIStudioFileListResponse extends GoogleResponse {\n  data: {\n    files: AIStudioFileObject[];\n    nextPageToken: string;\n  };\n}\n\nexport type AIStudioFileResponse =\n  | AIStudioFileGetResponse\n  | AIStudioFileSaveResponse\n  | AIStudioFileListResponse;\n\nexport interface AIStudioFileConnectionParams {}\n\nexport interface AIStudioFileUploadConnectionParams<AuthOptions>\n  extends\n    GoogleUploadConnectionParams<AuthOptions>,\n    AIStudioFileConnectionParams {}\n\nexport class AIStudioFileUploadConnection<\n  AuthOptions,\n> extends GoogleMultipartUploadConnection<\n  AsyncCallerCallOptions,\n  AIStudioFileSaveResponse,\n  AuthOptions\n> {\n  get computedApiVersion(): string {\n    return \"v1beta\";\n  }\n\n  async buildUrl(): Promise<string> {\n    return `https://generativelanguage.googleapis.com/upload/${this.apiVersion}/files`;\n  }\n}\n\nexport interface AIStudioFileDownloadConnectionParams<AuthOptions>\n  extends AIStudioFileConnectionParams, GoogleConnectionParams<AuthOptions> {\n  method: GoogleAbstractedClientOpsMethod;\n  name: string;\n}\n\nexport class AIStudioFileDownloadConnection<\n  ResponseType extends GoogleResponse,\n  AuthOptions,\n> extends GoogleDownloadConnection<\n  AsyncCallerCallOptions,\n  ResponseType,\n  AuthOptions\n> {\n  method: GoogleAbstractedClientOpsMethod;\n\n  name: string;\n\n  constructor(\n    fields: AIStudioFileDownloadConnectionParams<AuthOptions>,\n    caller: AsyncCaller,\n    client: GoogleAbstractedClient\n  ) {\n    super(fields, caller, client);\n    this.method = fields.method;\n    this.name = fields.name;\n  }\n\n  get computedApiVersion(): string {\n    return \"v1beta\";\n  }\n\n  buildMethod(): GoogleAbstractedClientOpsMethod {\n    return this.method;\n  }\n\n  async buildUrl(): Promise<string> {\n    return `https://generativelanguage.googleapis.com/${this.apiVersion}/files/${this.name}`;\n  }\n}\n\nexport interface BlobStoreAIStudioFileBaseParams<\n  AuthOptions,\n> extends BlobStoreGoogleParams<AuthOptions> {\n  retryTime?: number;\n}\n\nexport abstract class BlobStoreAIStudioFileBase<\n  AuthOptions,\n> extends BlobStoreGoogle<AIStudioFileResponse, AuthOptions> {\n  params?: BlobStoreAIStudioFileBaseParams<AuthOptions>;\n\n  retryTime: number = 1000;\n\n  constructor(fields?: BlobStoreAIStudioFileBaseParams<AuthOptions>) {\n    const params: BlobStoreAIStudioFileBaseParams<AuthOptions> = {\n      defaultStoreOptions: {\n        pathPrefix: \"https://generativelanguage.googleapis.com/v1beta/files/\",\n        actionIfInvalid: \"removePath\",\n      },\n      ...fields,\n    };\n    super(params);\n    this.params = params;\n    this.retryTime = params?.retryTime ?? this.retryTime ?? 1000;\n  }\n\n  _pathToName(path: string): string {\n    return path.split(\"/\").pop() ?? path;\n  }\n\n  abstract buildAbstractedClient(\n    fields?: BlobStoreGoogleParams<AuthOptions>\n  ): GoogleAbstractedClient;\n\n  buildApiKeyClient(apiKey: string): GoogleAbstractedClient {\n    return new ApiKeyGoogleAuth(apiKey);\n  }\n\n  buildApiKey(fields?: BlobStoreGoogleParams<AuthOptions>): string | undefined {\n    return fields?.apiKey ?? getEnvironmentVariable(\"GOOGLE_API_KEY\");\n  }\n\n  buildClient(\n    fields?: BlobStoreGoogleParams<AuthOptions>\n  ): GoogleAbstractedClient {\n    const apiKey = this.buildApiKey(fields);\n    if (apiKey) {\n      return this.buildApiKeyClient(apiKey);\n    } else {\n      // TODO: Test that you can use OAuth to access\n      return this.buildAbstractedClient(fields);\n    }\n  }\n\n  async _regetMetadata(key: string): Promise<AIStudioFileObject> {\n    // Sleep for some time period\n    await new Promise((resolve) => setTimeout(resolve, this.retryTime));\n\n    // Fetch the latest metadata\n    return this._getMetadata(key);\n  }\n\n  async _set([key, blob]: [\n    string,\n    MediaBlob,\n  ]): Promise<AIStudioFileSaveResponse> {\n    const response = (await super._set([\n      key,\n      blob,\n    ])) as AIStudioFileSaveResponse;\n\n    let file = response.data?.file ?? { state: \"FAILED\" };\n    while (file.state === \"PROCESSING\" && file.uri && this.retryTime > 0) {\n      file = await this._regetMetadata(file.uri);\n    }\n\n    // The response should contain the name (and valid URI), so we need to\n    // update the blob with this. We can't return a new blob, since mset()\n    // doesn't return anything.\n    blob.path = file.uri;\n    blob.metadata = {\n      ...blob.metadata,\n      ...file,\n    };\n    return response;\n  }\n\n  buildSetConnection([_key, _blob]: [\n    string,\n    MediaBlob,\n  ]): GoogleMultipartUploadConnection<\n    AsyncCallerCallOptions,\n    AIStudioFileResponse,\n    AuthOptions\n  > {\n    return new AIStudioFileUploadConnection(\n      this.params,\n      this.caller,\n      this.client\n    );\n  }\n\n  buildSetMetadata([_key, _blob]: [string, MediaBlob]): Record<\n    string,\n    unknown\n  > {\n    return {};\n  }\n\n  buildGetMetadataConnection(\n    key: string\n  ): GoogleDownloadConnection<\n    AsyncCallerCallOptions,\n    AIStudioFileResponse,\n    AuthOptions\n  > {\n    const params: AIStudioFileDownloadConnectionParams<AuthOptions> = {\n      ...this.params,\n      method: \"GET\",\n      name: this._pathToName(key),\n    };\n    return new AIStudioFileDownloadConnection<\n      AIStudioFileResponse,\n      AuthOptions\n    >(params, this.caller, this.client);\n  }\n\n  buildGetDataConnection(\n    _key: string\n  ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n    throw new Error(\"AI Studio File API does not provide data\");\n  }\n\n  async _get(key: string): Promise<MediaBlob | undefined> {\n    const metadata = await this._getMetadata(key);\n    if (metadata) {\n      const contentType =\n        (metadata?.mimeType as string) ?? \"application/octet-stream\";\n      // TODO - Get the actual data (and other metadata) from an optional backing store\n      const data: MediaBlobData = {\n        value: \"\",\n        type: contentType,\n      };\n\n      return new MediaBlob({\n        path: key,\n        data,\n        metadata,\n      });\n    } else {\n      return undefined;\n    }\n  }\n\n  buildDeleteConnection(\n    key: string\n  ): GoogleDownloadConnection<\n    AsyncCallerCallOptions,\n    AIStudioFileResponse,\n    AuthOptions\n  > {\n    const params: AIStudioFileDownloadConnectionParams<AuthOptions> = {\n      ...this.params,\n      method: \"DELETE\",\n      name: this._pathToName(key),\n    };\n    return new AIStudioFileDownloadConnection<\n      AIStudioFileResponse,\n      AuthOptions\n    >(params, this.caller, this.client);\n  }\n}\n"],"mappings":"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"}