1- import { FileUploadProgress , UploadClient , UploadClientUploadArgs } from './UploadClient'
1+ import { UploadClient , UploadClientUploadArgs } from './UploadClient'
22import { GenerateUploadUrlMutationBuilder } from '@contember/client'
3- import { GraphQlClient } from '@contember/graphql-client'
43import { UploaderError } from '../UploaderError'
54
65export interface S3UploadClientOptions {
@@ -19,17 +18,17 @@ export interface S3FileOptions {
1918 acl ?: GenerateUploadUrlMutationBuilder . Acl
2019}
2120
21+ export type S3UrlSigner = ( parameters : GenerateUploadUrlMutationBuilder . FileParameters ) => Promise < GenerateUploadUrlMutationBuilder . ResponseBody >
22+
2223export class S3UploadClient implements UploadClient < S3FileOptions > {
2324
24- private getSignedUploadUrl : ReturnType < typeof createBatchSignedUrlGenerator >
2525 private activeCount = 0
2626 private resolverQueue : Array < ( ) => void > = [ ]
2727
2828 public constructor (
29- contentApiClient : GraphQlClient ,
29+ private readonly s3UrlSigner : S3UrlSigner ,
3030 public readonly options : S3UploadClientOptions = { } ,
3131 ) {
32- this . getSignedUploadUrl = createBatchSignedUrlGenerator ( contentApiClient )
3332 }
3433
3534
@@ -44,7 +43,7 @@ export class S3UploadClient implements UploadClient<S3FileOptions> {
4443 contentType : file . type ,
4544 ...resolvedOptions ,
4645 }
47- const responseData = await this . getSignedUploadUrl ( parameters )
46+ const responseData = await this . s3UrlSigner ( parameters )
4847 await this . uploadSingleFile ( responseData , { file, onProgress, signal } )
4948
5049 return {
@@ -131,25 +130,3 @@ const xhrAdapter = async (
131130}
132131
133132
134- const createBatchSignedUrlGenerator = ( client : GraphQlClient ) => {
135-
136- let uploadUrlBatchParameters : GenerateUploadUrlMutationBuilder . FileParameters [ ] = [ ]
137- let uploadUrlBatchResult : null | Promise < GenerateUploadUrlMutationBuilder . MutationResponse > = null
138-
139- return async ( parameters : GenerateUploadUrlMutationBuilder . FileParameters ) : Promise < GenerateUploadUrlMutationBuilder . ResponseBody > => {
140- const index = uploadUrlBatchParameters . length
141- uploadUrlBatchParameters . push ( parameters )
142- if ( uploadUrlBatchResult === null ) {
143- uploadUrlBatchResult = ( async ( ) => {
144- await new Promise ( resolve => setTimeout ( resolve , 0 ) )
145-
146- const mutation = GenerateUploadUrlMutationBuilder . buildQuery ( Object . fromEntries ( uploadUrlBatchParameters . map ( ( _ , i ) => [ 'url_' + i , _ ] ) ) )
147- const response = await client . execute < GenerateUploadUrlMutationBuilder . MutationResponse > ( mutation . query , { variables : mutation . variables } )
148- uploadUrlBatchParameters = [ ]
149- uploadUrlBatchResult = null
150- return response
151- } ) ( )
152- }
153- return ( await uploadUrlBatchResult ) [ `url_${ index } ` ]
154- }
155- }
0 commit comments