55import * as environments from "./environments" ;
66import * as core from "./core" ;
77import * as fs from "fs" ;
8- import * as FileForge from "./api/index" ;
8+ import * as Fileforge from "./api/index" ;
99import * as stream from "stream" ;
1010import urlJoin from "url-join" ;
1111import * as errors from "./errors/index" ;
1212import * as serializers from "./serialization/index" ;
1313
14- export declare namespace FileForgeClient {
14+ export declare namespace FileforgeClient {
1515 interface Options {
16- environment ?: core . Supplier < environments . FileForgeEnvironment | string > ;
16+ environment ?: core . Supplier < environments . FileforgeEnvironment | string > ;
1717 apiKey : core . Supplier < string > ;
1818 }
1919
2020 interface RequestOptions {
2121 timeoutInSeconds ?: number ;
2222 maxRetries ?: number ;
23+ abortSignal ?: AbortSignal ;
2324 }
2425}
2526
26- export class FileForgeClient {
27- constructor ( protected readonly _options : FileForgeClient . Options ) { }
27+ export class FileforgeClient {
28+ constructor ( protected readonly _options : FileforgeClient . Options ) { }
2829
2930 /**
3031 * Generates a PDF document from web assets.
31- * @throws {@link FileForge .BadRequestError }
32- * @throws {@link FileForge .UnauthorizedError }
33- * @throws {@link FileForge .InternalServerError }
34- * @throws {@link FileForge .BadGatewayError }
32+ * @throws {@link Fileforge .BadRequestError }
33+ * @throws {@link Fileforge .UnauthorizedError }
34+ * @throws {@link Fileforge .InternalServerError }
35+ * @throws {@link Fileforge .BadGatewayError }
3536 */
3637 public async generate (
3738 files : File [ ] | fs . ReadStream [ ] ,
38- request : FileForge . GenerateRequest ,
39- requestOptions ?: FileForgeClient . RequestOptions
39+ request : Fileforge . GenerateRequest ,
40+ requestOptions ?: FileforgeClient . RequestOptions
4041 ) : Promise < stream . Readable > {
41- const _request = core . newFormData ( ) ;
42+ const _request = new core . FormDataWrapper ( ) ;
4243 const options = await serializers . GenerateRequestOptions . jsonOrThrow ( request . options , {
4344 unrecognizedObjectKeys : "passthrough" ,
4445 allowUnrecognizedUnionMembers : false ,
@@ -49,49 +50,164 @@ export class FileForgeClient {
4950 for ( const _file of files ) {
5051 await _request . append ( "files" , _file ) ;
5152 }
53+
54+ const _maybeEncodedRequest = _request . getRequest ( ) ;
5255 const _response = await core . fetcher < stream . Readable > ( {
5356 url : urlJoin (
54- ( await core . Supplier . get ( this . _options . environment ) ) ?? environments . FileForgeEnvironment . Default ,
57+ ( await core . Supplier . get ( this . _options . environment ) ) ?? environments . FileforgeEnvironment . Default ,
5558 "pdf/generate/"
5659 ) ,
5760 method : "POST" ,
5861 headers : {
59- "X-API-Key" : await core . Supplier . get ( this . _options . apiKey ) ,
6062 "X-Fern-Language" : "JavaScript" ,
61- "X-Fern-SDK-Name" : "fileforge" ,
62- "X-Fern-SDK-Version" : "0.0.1 " ,
63+ "X-Fern-SDK-Name" : "@ fileforge/client " ,
64+ "X-Fern-SDK-Version" : "0.1.0 " ,
6365 "X-Fern-Runtime" : core . RUNTIME . type ,
6466 "X-Fern-Runtime-Version" : core . RUNTIME . version ,
65- ...( await _request . getHeaders ( ) ) ,
67+ ...( await this . _getCustomAuthorizationHeaders ( ) ) ,
68+ ...( await _maybeEncodedRequest . getHeaders ( ) ) ,
6669 } ,
67- body : await _request . getBody ( ) ,
70+ body : await _maybeEncodedRequest . getBody ( ) ,
6871 responseType : "streaming" ,
6972 timeoutMs : requestOptions ?. timeoutInSeconds != null ? requestOptions . timeoutInSeconds * 1000 : 60000 ,
7073 maxRetries : requestOptions ?. maxRetries ,
74+ abortSignal : requestOptions ?. abortSignal ,
7175 } ) ;
7276 if ( _response . ok ) {
7377 return _response . body ;
7478 }
7579
7680 if ( _response . error . reason === "status-code" ) {
77- throw new errors . FileForgeError ( {
78- statusCode : _response . error . statusCode ,
79- body : _response . error . body ,
80- } ) ;
81+ switch ( _response . error . statusCode ) {
82+ case 500 :
83+ throw new Fileforge . InternalServerError ( _response . error . body ) ;
84+ case 502 :
85+ throw new Fileforge . BadGatewayError (
86+ await serializers . ErrorSchema . parseOrThrow ( _response . error . body , {
87+ unrecognizedObjectKeys : "passthrough" ,
88+ allowUnrecognizedUnionMembers : true ,
89+ allowUnrecognizedEnumValues : true ,
90+ breadcrumbsPrefix : [ "response" ] ,
91+ } )
92+ ) ;
93+ default :
94+ throw new errors . FileforgeError ( {
95+ statusCode : _response . error . statusCode ,
96+ body : _response . error . body ,
97+ } ) ;
98+ }
8199 }
82100
83101 switch ( _response . error . reason ) {
84102 case "non-json" :
85- throw new errors . FileForgeError ( {
103+ throw new errors . FileforgeError ( {
86104 statusCode : _response . error . statusCode ,
87105 body : _response . error . rawBody ,
88106 } ) ;
89107 case "timeout" :
90- throw new errors . FileForgeTimeoutError ( ) ;
108+ throw new errors . FileforgeTimeoutError ( ) ;
91109 case "unknown" :
92- throw new errors . FileForgeError ( {
110+ throw new errors . FileforgeError ( {
93111 message : _response . error . errorMessage ,
94112 } ) ;
95113 }
96114 }
115+
116+ /**
117+ * @throws {@link Fileforge.BadRequestError }
118+ * @throws {@link Fileforge.UnauthorizedError }
119+ * @throws {@link Fileforge.InternalServerError }
120+ */
121+ public async merge (
122+ files : File [ ] | fs . ReadStream [ ] ,
123+ request : Fileforge . MergeRequest ,
124+ requestOptions ?: FileforgeClient . RequestOptions
125+ ) : Promise < stream . Readable > {
126+ const _request = new core . FormDataWrapper ( ) ;
127+ const options = await serializers . MergeRequestOptions . jsonOrThrow ( request . options , {
128+ unrecognizedObjectKeys : "passthrough" ,
129+ allowUnrecognizedUnionMembers : false ,
130+ allowUnrecognizedEnumValues : false ,
131+ breadcrumbsPrefix : [ "" ] ,
132+ } ) ;
133+ await _request . append ( "options" , new Blob ( [ JSON . stringify ( options ) ] , { type : "application/json" } ) ) ;
134+ for ( const _file of files ) {
135+ await _request . append ( "files" , _file ) ;
136+ }
137+
138+ const _maybeEncodedRequest = _request . getRequest ( ) ;
139+ const _response = await core . fetcher < stream . Readable > ( {
140+ url : urlJoin (
141+ ( await core . Supplier . get ( this . _options . environment ) ) ?? environments . FileforgeEnvironment . Default ,
142+ "pdf/merge/"
143+ ) ,
144+ method : "POST" ,
145+ headers : {
146+ "X-Fern-Language" : "JavaScript" ,
147+ "X-Fern-SDK-Name" : "@fileforge/client" ,
148+ "X-Fern-SDK-Version" : "0.1.0" ,
149+ "X-Fern-Runtime" : core . RUNTIME . type ,
150+ "X-Fern-Runtime-Version" : core . RUNTIME . version ,
151+ ...( await this . _getCustomAuthorizationHeaders ( ) ) ,
152+ ...( await _maybeEncodedRequest . getHeaders ( ) ) ,
153+ } ,
154+ body : await _maybeEncodedRequest . getBody ( ) ,
155+ responseType : "streaming" ,
156+ timeoutMs : requestOptions ?. timeoutInSeconds != null ? requestOptions . timeoutInSeconds * 1000 : 60000 ,
157+ maxRetries : requestOptions ?. maxRetries ,
158+ abortSignal : requestOptions ?. abortSignal ,
159+ } ) ;
160+ if ( _response . ok ) {
161+ return _response . body ;
162+ }
163+
164+ if ( _response . error . reason === "status-code" ) {
165+ switch ( _response . error . statusCode ) {
166+ case 400 :
167+ throw new Fileforge . BadRequestError (
168+ await serializers . ErrorSchema . parseOrThrow ( _response . error . body , {
169+ unrecognizedObjectKeys : "passthrough" ,
170+ allowUnrecognizedUnionMembers : true ,
171+ allowUnrecognizedEnumValues : true ,
172+ breadcrumbsPrefix : [ "response" ] ,
173+ } )
174+ ) ;
175+ case 401 :
176+ throw new Fileforge . UnauthorizedError (
177+ await serializers . ErrorSchema . parseOrThrow ( _response . error . body , {
178+ unrecognizedObjectKeys : "passthrough" ,
179+ allowUnrecognizedUnionMembers : true ,
180+ allowUnrecognizedEnumValues : true ,
181+ breadcrumbsPrefix : [ "response" ] ,
182+ } )
183+ ) ;
184+ case 500 :
185+ throw new Fileforge . InternalServerError ( _response . error . body ) ;
186+ default :
187+ throw new errors . FileforgeError ( {
188+ statusCode : _response . error . statusCode ,
189+ body : _response . error . body ,
190+ } ) ;
191+ }
192+ }
193+
194+ switch ( _response . error . reason ) {
195+ case "non-json" :
196+ throw new errors . FileforgeError ( {
197+ statusCode : _response . error . statusCode ,
198+ body : _response . error . rawBody ,
199+ } ) ;
200+ case "timeout" :
201+ throw new errors . FileforgeTimeoutError ( ) ;
202+ case "unknown" :
203+ throw new errors . FileforgeError ( {
204+ message : _response . error . errorMessage ,
205+ } ) ;
206+ }
207+ }
208+
209+ protected async _getCustomAuthorizationHeaders ( ) {
210+ const apiKeyValue = await core . Supplier . get ( this . _options . apiKey ) ;
211+ return { "X-API-Key" : apiKeyValue } ;
212+ }
97213}
0 commit comments