Skip to content

Commit e4aae06

Browse files
merge in main
2 parents 8a158e5 + 39f3fa5 commit e4aae06

32 files changed

+471
-451
lines changed

.fernignore

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ src/core/helper.ts
55
src/core/fetcher/Fetcher.ts
66
src/core/form-data-utils/FormData.ts
77
src/core/form-data-utils/index.ts
8-
src/core/index.ts
8+
9+
tests/custom.test.ts
10+
911
README.md
10-
package.json
12+

.github/workflows/ci.yml

+37-37
Original file line numberDiff line numberDiff line change
@@ -3,53 +3,53 @@ name: ci
33
on: [push]
44

55
jobs:
6-
compile:
7-
runs-on: ubuntu-latest
6+
compile:
7+
runs-on: ubuntu-latest
88

9-
steps:
10-
- name: Checkout repo
11-
uses: actions/checkout@v3
9+
steps:
10+
- name: Checkout repo
11+
uses: actions/checkout@v3
1212

13-
- name: Set up node
14-
uses: actions/setup-node@v3
13+
- name: Set up node
14+
uses: actions/setup-node@v3
1515

16-
- name: Compile
17-
run: yarn && yarn build
16+
- name: Compile
17+
run: yarn && yarn build
1818

19-
test:
20-
runs-on: ubuntu-latest
19+
test:
20+
runs-on: ubuntu-latest
2121

22-
steps:
23-
- name: Checkout repo
24-
uses: actions/checkout@v3
22+
steps:
23+
- name: Checkout repo
24+
uses: actions/checkout@v3
2525

26-
- name: Set up node
27-
uses: actions/setup-node@v3
26+
- name: Set up node
27+
uses: actions/setup-node@v3
2828

29-
- name: Compile
30-
run: yarn && yarn test
29+
- name: Compile
30+
run: yarn && yarn test
3131

32-
publish:
33-
needs: [compile, test]
34-
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
35-
runs-on: ubuntu-latest
32+
publish:
33+
needs: [ compile, test ]
34+
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
35+
runs-on: ubuntu-latest
3636

37-
steps:
38-
- name: Checkout repo
39-
uses: actions/checkout@v3
37+
steps:
38+
- name: Checkout repo
39+
uses: actions/checkout@v3
4040

41-
- name: Set up node
42-
uses: actions/setup-node@v3
41+
- name: Set up node
42+
uses: actions/setup-node@v3
4343

44-
- name: Install dependencies
45-
run: yarn install
44+
- name: Install dependencies
45+
run: yarn install
4646

47-
- name: Build
48-
run: yarn build
47+
- name: Build
48+
run: yarn build
4949

50-
- name: Publish to npm
51-
run: |
52-
npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}
53-
npm publish --access public
54-
env:
55-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
50+
- name: Publish to npm
51+
run: |
52+
npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}
53+
npm publish --access public
54+
env:
55+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

README.md

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
# FileForge TypeScript Library
1+
# Fileforge TypeScript Library
22

33
[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-SDK%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com/)
44

5-
The FileForge TypeScript library provides convenient access to the FileForge API from JavaScript/TypeScript.
5+
The Fileforge TypeScript library provides convenient access to the Fileforge API from JavaScript/TypeScript.
66

77
## Documentation
88

@@ -19,10 +19,10 @@ yarn add fileforge
1919
## Usage
2020

2121
```typescript
22-
import { FileForgeClient, FileForge } from "guesty";
22+
import { FileforgeClient, Fileforge } from "guesty";
2323
import * as fs from "fs";
2424

25-
const fileforge = new FileForgeClient({
25+
const fileforge = new FileforgeClient({
2626
apiKey: "...",
2727
});
2828

@@ -37,15 +37,15 @@ await fileforge.generate({
3737
## Exception Handling
3838

3939
When the API returns a non-success status code (4xx or 5xx response),
40-
a subclass of [FileForgeError](./src/errors/FileForgeError.ts) will be thrown:
40+
a subclass of [FileforgeError](./src/errors/FileforgeError.ts) will be thrown:
4141

4242
```ts
43-
import { FileForgeError } from 'fileforge';
43+
import { FileforgeError } from 'fileforge';
4444

4545
try {
4646
await fileforge.generate(...);
4747
} catch (err) {
48-
if (err instanceof FileForgeError) {
48+
if (err instanceof FileforgeError) {
4949
console.log(err.statusCode);
5050
console.log(err.message);
5151
console.log(err.body);
@@ -105,9 +105,9 @@ running in an unsupported environment, this provides a way for you to break the
105105
ensure the SDK works.
106106

107107
```ts
108-
import { FileForge } from 'fileforge';
108+
import { Fileforge } from 'fileforge';
109109

110-
const guesty = new FileForge({
110+
const guesty = new Fileforge({
111111
apiKey: "...",
112112
fetcher: // provide your implementation here
113113
});

src/Client.ts

+69-36
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
import * as environments from "./environments";
66
import * as core from "./core";
77
import * as fs from "fs";
8-
import * as FileForge from "./api/index";
8+
import * as Fileforge from "./api/index";
99
import * as stream from "stream";
1010
import urlJoin from "url-join";
1111
import * as errors from "./errors/index";
1212
import * as serializers from "./serialization/index";
1313
import { ResponseObject } from "./helper";
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

@@ -26,20 +26,20 @@ export declare namespace FileForgeClient {
2626

2727
}
2828

29-
export class FileForgeClient {
30-
constructor(protected readonly _options: FileForgeClient.Options) {}
29+
export class FileforgeClient {
30+
constructor(protected readonly _options: FileforgeClient.Options) {}
3131

3232
/**
3333
* Generates a PDF document from web assets.
34-
* @throws {@link FileForge.BadRequestError}
35-
* @throws {@link FileForge.UnauthorizedError}
36-
* @throws {@link FileForge.InternalServerError}
37-
* @throws {@link FileForge.BadGatewayError}
34+
* @throws {@link Fileforge.BadRequestError}
35+
* @throws {@link Fileforge.UnauthorizedError}
36+
* @throws {@link Fileforge.InternalServerError}
37+
* @throws {@link Fileforge.BadGatewayError}
3838
*/
3939
public async generate(
4040
files: File[] | fs.ReadStream[],
41-
request: FileForge.GenerateRequest,
42-
requestOptions?: FileForgeClient.RequestOptions
41+
request: Fileforge.GenerateRequest,
42+
requestOptions?: FileforgeClient.RequestOptions
4343
): Promise<ResponseObject | any>{
4444
const _request = core.newFormData();
4545
const options = await serializers.GenerateRequestOptions.jsonOrThrow(request.options, {
@@ -48,21 +48,22 @@ export class FileForgeClient {
4848
allowUnrecognizedEnumValues: false,
4949
breadcrumbsPrefix: [""],
5050
});
51-
await _request.append("options", new Blob([JSON.stringify(options)], { type: "application/json" }));
51+
await _request.append("options", new Blob([JSON.stringify(options)], { type: "application/json" }), {contentType: "application/json"});
5252
for (const _file of files) {
5353
await _request.append("files", _file);
5454
}
55+
5556
const _response = await core.fetcher<stream.Readable>({
5657
url: urlJoin(
57-
(await core.Supplier.get(this._options.environment)) ?? environments.FileForgeEnvironment.Default,
58+
(await core.Supplier.get(this._options.environment)) ?? environments.FileforgeEnvironment.Default,
5859
"pdf/generate/"
5960
),
6061
method: "POST",
6162
headers: {
6263
"X-API-Key": await core.Supplier.get(this._options.apiKey),
6364
"X-Fern-Language": "JavaScript",
64-
"X-Fern-SDK-Name": "fileforge",
65-
"X-Fern-SDK-Version": "0.0.1",
65+
"X-Fern-SDK-Name": "@fileforge/client",
66+
"X-Fern-SDK-Version": "0.0.13",
6667
"X-Fern-Runtime": core.RUNTIME.type,
6768
"X-Fern-Runtime-Version": core.RUNTIME.version,
6869
...(await _request.getHeaders()),
@@ -71,30 +72,61 @@ export class FileForgeClient {
7172
responseType: "streaming",
7273
timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000,
7374
maxRetries: requestOptions?.maxRetries,
75+
abortSignal: requestOptions?.abortSignal,
7476
});
75-
7677
if (_response.ok) {
77-
78-
return _response.body
78+
return _response.body;
7979
}
8080

8181
if (_response.error.reason === "status-code") {
82-
throw new errors.FileForgeError({
83-
statusCode: _response.error.statusCode,
84-
body: _response.error.body,
85-
});
82+
switch (_response.error.statusCode) {
83+
case 400:
84+
throw new Fileforge.BadRequestError(
85+
await serializers.ErrorSchema.parseOrThrow(_response.error.body, {
86+
unrecognizedObjectKeys: "passthrough",
87+
allowUnrecognizedUnionMembers: true,
88+
allowUnrecognizedEnumValues: true,
89+
breadcrumbsPrefix: ["response"],
90+
})
91+
);
92+
case 401:
93+
throw new Fileforge.UnauthorizedError(
94+
await serializers.ErrorSchema.parseOrThrow(_response.error.body, {
95+
unrecognizedObjectKeys: "passthrough",
96+
allowUnrecognizedUnionMembers: true,
97+
allowUnrecognizedEnumValues: true,
98+
breadcrumbsPrefix: ["response"],
99+
})
100+
);
101+
case 500:
102+
throw new Fileforge.InternalServerError(_response.error.body);
103+
case 502:
104+
throw new Fileforge.BadGatewayError(
105+
await serializers.ErrorSchema.parseOrThrow(_response.error.body, {
106+
unrecognizedObjectKeys: "passthrough",
107+
allowUnrecognizedUnionMembers: true,
108+
allowUnrecognizedEnumValues: true,
109+
breadcrumbsPrefix: ["response"],
110+
})
111+
);
112+
default:
113+
throw new errors.FileforgeError({
114+
statusCode: _response.error.statusCode,
115+
body: _response.error.body,
116+
});
117+
}
86118
}
87119

88120
switch (_response.error.reason) {
89121
case "non-json":
90-
throw new errors.FileForgeError({
122+
throw new errors.FileforgeError({
91123
statusCode: _response.error.statusCode,
92124
body: _response.error.rawBody,
93125
});
94126
case "timeout":
95-
throw new errors.FileForgeTimeoutError();
127+
throw new errors.FileforgeTimeoutError();
96128
case "unknown":
97-
throw new errors.FileForgeError({
129+
throw new errors.FileforgeError({
98130
message: _response.error.errorMessage,
99131
});
100132
}
@@ -107,8 +139,8 @@ export class FileForgeClient {
107139
*/
108140
public async merge(
109141
files: File[] | fs.ReadStream[],
110-
request: FileForge.MergeRequest,
111-
requestOptions?: FileForgeClient.RequestOptions
142+
request: Fileforge.MergeRequest,
143+
requestOptions?: FileforgeClient.RequestOptions
112144
): Promise<ResponseObject | any> {
113145
const _request = core.newFormData();
114146
const options = await serializers.GenerateRequestOptions.jsonOrThrow(request.options, {
@@ -117,14 +149,14 @@ export class FileForgeClient {
117149
allowUnrecognizedEnumValues: false,
118150
breadcrumbsPrefix: [""],
119151
});
120-
await _request.append("options", new Blob([JSON.stringify(options)], { type: "application/json" }));
152+
await _request.append("options", new Blob([JSON.stringify(options)], { type: "application/json" }), {contentType: "application/json"});
121153
for (const _file of files) {
122154
await _request.append("files", _file);
123155
}
124156

125157
const _response = await core.fetcher<stream.Readable>({
126158
url: urlJoin(
127-
(await core.Supplier.get(this._options.environment)) ?? environments.FileForgeEnvironment.Default,
159+
(await core.Supplier.get(this._options.environment)) ?? environments.FileforgeEnvironment.Default,
128160
"pdf/merge/"
129161
),
130162
method: "POST",
@@ -142,6 +174,7 @@ export class FileForgeClient {
142174
responseType: "streaming",
143175
timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000,
144176
maxRetries: requestOptions?.maxRetries,
177+
abortSignal: requestOptions?.abortSignal,
145178
});
146179
if (_response.ok) {
147180
return _response.body;
@@ -150,7 +183,7 @@ export class FileForgeClient {
150183
if (_response.error.reason === "status-code") {
151184
switch (_response.error.statusCode) {
152185
case 400:
153-
throw new FileForge.BadRequestError(
186+
throw new Fileforge.BadRequestError(
154187
await serializers.ErrorSchema.parseOrThrow(_response.error.body, {
155188
unrecognizedObjectKeys: "passthrough",
156189
allowUnrecognizedUnionMembers: true,
@@ -159,7 +192,7 @@ export class FileForgeClient {
159192
})
160193
);
161194
case 401:
162-
throw new FileForge.UnauthorizedError(
195+
throw new Fileforge.UnauthorizedError(
163196
await serializers.ErrorSchema.parseOrThrow(_response.error.body, {
164197
unrecognizedObjectKeys: "passthrough",
165198
allowUnrecognizedUnionMembers: true,
@@ -168,9 +201,9 @@ export class FileForgeClient {
168201
})
169202
);
170203
case 500:
171-
throw new FileForge.InternalServerError(_response.error.body);
204+
throw new Fileforge.InternalServerError(_response.error.body);
172205
default:
173-
throw new errors.FileForgeError({
206+
throw new errors.FileforgeError({
174207
statusCode: _response.error.statusCode,
175208
body: _response.error.body,
176209
});
@@ -179,14 +212,14 @@ export class FileForgeClient {
179212

180213
switch (_response.error.reason) {
181214
case "non-json":
182-
throw new errors.FileForgeError({
215+
throw new errors.FileforgeError({
183216
statusCode: _response.error.statusCode,
184217
body: _response.error.rawBody,
185218
});
186219
case "timeout":
187-
throw new errors.FileForgeTimeoutError();
220+
throw new errors.FileforgeTimeoutError();
188221
case "unknown":
189-
throw new errors.FileForgeError({
222+
throw new errors.FileforgeError({
190223
message: _response.error.errorMessage,
191224
});
192225
}

0 commit comments

Comments
 (0)