@@ -20,6 +20,8 @@ export declare namespace FileForgeClient {
20
20
interface RequestOptions {
21
21
timeoutInSeconds ?: number ;
22
22
maxRetries ?: number ;
23
+ abortSignal ?: AbortSignal ;
24
+
23
25
}
24
26
25
27
}
@@ -97,4 +99,96 @@ export class FileForgeClient {
97
99
} ) ;
98
100
}
99
101
}
102
+
103
+ /**
104
+ * @throws {@link Fileforge.BadRequestError }
105
+ * @throws {@link Fileforge.UnauthorizedError }
106
+ * @throws {@link Fileforge.InternalServerError }
107
+ */
108
+ public async merge (
109
+ files : File [ ] | fs . ReadStream [ ] ,
110
+ request : FileForge . MergeRequest ,
111
+ requestOptions ?: FileForgeClient . RequestOptions
112
+ ) : Promise < any > {
113
+ const _request = core . newFormData ( ) ;
114
+ const options = await serializers . GenerateRequestOptions . jsonOrThrow ( request . options , {
115
+ unrecognizedObjectKeys : "passthrough" ,
116
+ allowUnrecognizedUnionMembers : false ,
117
+ allowUnrecognizedEnumValues : false ,
118
+ breadcrumbsPrefix : [ "" ] ,
119
+ } ) ;
120
+ await _request . append ( "options" , new Blob ( [ JSON . stringify ( options ) ] , { type : "application/json" } ) ) ;
121
+ for ( const _file of files ) {
122
+ await _request . append ( "files" , _file ) ;
123
+ }
124
+
125
+ const _response = await core . fetcher < stream . Readable > ( {
126
+ url : urlJoin (
127
+ ( await core . Supplier . get ( this . _options . environment ) ) ?? environments . FileForgeEnvironment . Default ,
128
+ "pdf/merge/"
129
+ ) ,
130
+ method : "POST" ,
131
+ headers : {
132
+ Authorization : await core . Supplier . get ( this . _options . apiKey ) ,
133
+ "X-API-Key" : await core . Supplier . get ( this . _options . apiKey ) ,
134
+ "X-Fern-Language" : "JavaScript" ,
135
+ "X-Fern-SDK-Name" : "fileforge" ,
136
+ "X-Fern-SDK-Version" : "0.0.12" ,
137
+ "X-Fern-Runtime" : core . RUNTIME . type ,
138
+ "X-Fern-Runtime-Version" : core . RUNTIME . version ,
139
+ ...( await _request . getHeaders ( ) ) ,
140
+ } ,
141
+ body : await _request . getBody ( ) ,
142
+ responseType : "streaming" ,
143
+ timeoutMs : requestOptions ?. timeoutInSeconds != null ? requestOptions . timeoutInSeconds * 1000 : 60000 ,
144
+ maxRetries : requestOptions ?. maxRetries ,
145
+ } ) ;
146
+ if ( _response . ok ) {
147
+ return _response . body ;
148
+ }
149
+
150
+ if ( _response . error . reason === "status-code" ) {
151
+ switch ( _response . error . statusCode ) {
152
+ case 400 :
153
+ throw new FileForge . BadRequestError (
154
+ await serializers . ErrorSchema . parseOrThrow ( _response . error . body , {
155
+ unrecognizedObjectKeys : "passthrough" ,
156
+ allowUnrecognizedUnionMembers : true ,
157
+ allowUnrecognizedEnumValues : true ,
158
+ breadcrumbsPrefix : [ "response" ] ,
159
+ } )
160
+ ) ;
161
+ case 401 :
162
+ throw new FileForge . UnauthorizedError (
163
+ await serializers . ErrorSchema . parseOrThrow ( _response . error . body , {
164
+ unrecognizedObjectKeys : "passthrough" ,
165
+ allowUnrecognizedUnionMembers : true ,
166
+ allowUnrecognizedEnumValues : true ,
167
+ breadcrumbsPrefix : [ "response" ] ,
168
+ } )
169
+ ) ;
170
+ case 500 :
171
+ throw new FileForge . InternalServerError ( _response . error . body ) ;
172
+ default :
173
+ throw new errors . FileForgeError ( {
174
+ statusCode : _response . error . statusCode ,
175
+ body : _response . error . body ,
176
+ } ) ;
177
+ }
178
+ }
179
+
180
+ switch ( _response . error . reason ) {
181
+ case "non-json" :
182
+ throw new errors . FileForgeError ( {
183
+ statusCode : _response . error . statusCode ,
184
+ body : _response . error . rawBody ,
185
+ } ) ;
186
+ case "timeout" :
187
+ throw new errors . FileForgeTimeoutError ( ) ;
188
+ case "unknown" :
189
+ throw new errors . FileForgeError ( {
190
+ message : _response . error . errorMessage ,
191
+ } ) ;
192
+ }
193
+ }
100
194
}
0 commit comments