Skip to content

Commit 114f3ad

Browse files
authored
Fix/refactor-and-cleanup (#11)
* fix: error handling & session token fix * fix: remote_id added & other refactoring
1 parent 54f9e92 commit 114f3ad

17 files changed

+90
-95
lines changed

backend/.env.example

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,11 @@ PORT=3001
66
# Replace <YOUR_STACKONE_API_KEY> with the actual API key provided by StackOne.
77
# This key is used to authenticate requests to the StackOne API.
88
STACKONE_API_KEY="<YOUR_STACKONE_API_KEY>"
9+
10+
# The owner ID for the origin.
11+
# Replace <ORIGIN_OWNER_ID> with the actual owner ID in StackOne Account.
12+
ORIGIN_OWNER_ID="<ORIGIN_OWNER_ID>"
13+
14+
# The owner name for the origin.
15+
# Replace <ORIGIN_OWNER_NAME> with the actual owner name in StackOne Account.
16+
ORIGIN_OWNER_NAME="<ORIGIN_OWNER_NAME>"

backend/src/config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ export default {
55
PORT: process.env.PORT || 3001,
66
STACKONE_API_KEY: Buffer.from(process.env.STACKONE_API_KEY || "").toString('base64'),
77
STACKONE_BASE_URL: 'https://api.stackone.com',
8-
STACKONE_ATS_URL: 'https://api.stackone.com/unified/ats'
8+
STACKONE_ATS_URL: 'https://api.stackone.com/unified/ats',
9+
ORIGIN_OWNER_ID: process.env.ORIGIN_OWNER_ID,
10+
ORIGIN_OWNER_NAME: process.env.ORIGIN_OWNER_NAME
911
};

backend/src/http/stackOneAccounts.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,20 @@ export const getAllAccounts = async () => {
1616
return response.data;
1717
} catch (error) {
1818
if (axios.isAxiosError(error)) {
19+
const errorMessage = error.response?.data?.message || 'An error occurred';
1920
switch (error.response?.status) {
2021
case 400:
21-
throw new InvalidRequestError('Invalid request.');
22+
throw new InvalidRequestError(errorMessage);
2223
case 403:
23-
throw new ForbiddenRequestError('Forbidden request.');
24+
throw new ForbiddenRequestError(errorMessage);
2425
case 429:
25-
throw new TooManyRequestsError('Too many requests.');
26+
throw new TooManyRequestsError(errorMessage);
2627
case 500:
27-
throw new ServerError('Server error while executing the request.');
28+
throw new ServerError(errorMessage);
2829
case 501:
29-
throw new NotImplementedError('This functionality is not implemented.');
30+
throw new NotImplementedError(errorMessage);
3031
default:
31-
throw new UnhandledError(`Unexpected error: ${error.response?.status}`);
32+
throw new UnhandledError(`Unexpected error: ${error.response?.status} - ${errorMessage}`);
3233
}
3334
} else {
3435
throw new UnhandledError(`Unexpected error: ${error}`);

backend/src/http/stackOneAts.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,22 @@ export const getJobs = async (accountId: string, next: string) => {
2121
return response.data;
2222
} catch (error) {
2323
if (axios.isAxiosError(error)) {
24+
const errorMessage = error.response?.data?.message || 'An error occurred';
2425
switch (error.response?.status) {
2526
case 400:
26-
throw new InvalidRequestError('Invalid request.');
27+
throw new InvalidRequestError(errorMessage);
2728
case 403:
28-
throw new ForbiddenRequestError('Forbidden request.');
29+
throw new ForbiddenRequestError(errorMessage);
2930
case 412:
30-
throw new PreconditionFailedError('Precondition failed: linked account belongs to a disabled integration.');
31+
throw new PreconditionFailedError(errorMessage);
3132
case 429:
32-
throw new TooManyRequestsError('Too many requests.');
33+
throw new TooManyRequestsError(errorMessage);
3334
case 500:
34-
throw new ServerError('Server error while executing the request.');
35+
throw new ServerError(errorMessage);
3536
case 501:
36-
throw new NotImplementedError('This functionality is not implemented.');
37+
throw new NotImplementedError(errorMessage);
3738
default:
38-
throw new UnhandledError(`Unexpected error: ${error.response?.status}`);
39+
throw new UnhandledError(`Unexpected error: ${error.response?.status} - ${errorMessage}`);
3940
}
4041
} else {
4142
throw new UnhandledError(`Unexpected error: ${error}`);
@@ -61,21 +62,22 @@ export const getApplications = async (accountId: string, next: string) => {
6162
return response.data;
6263
} catch (error) {
6364
if (axios.isAxiosError(error)) {
65+
const errorMessage = error.response?.data?.message || 'An error occurred';
6466
switch (error.response?.status) {
6567
case 400:
66-
throw new InvalidRequestError('Invalid request.');
68+
throw new InvalidRequestError(errorMessage);
6769
case 403:
68-
throw new ForbiddenRequestError('Forbidden request.');
70+
throw new ForbiddenRequestError(errorMessage);
6971
case 412:
70-
throw new PreconditionFailedError('Precondition failed: linked account belongs to a disabled integration.');
72+
throw new PreconditionFailedError(errorMessage);
7173
case 429:
72-
throw new TooManyRequestsError('Too many requests.');
74+
throw new TooManyRequestsError(errorMessage);
7375
case 500:
74-
throw new ServerError('Server error while executing the request.');
76+
throw new ServerError(errorMessage);
7577
case 501:
76-
throw new NotImplementedError('This functionality is not implemented.');
78+
throw new NotImplementedError(errorMessage);
7779
default:
78-
throw new UnhandledError(`Unexpected error: ${error.response?.status}`);
80+
throw new UnhandledError(`Unexpected error: ${error.response?.status} - ${errorMessage}`);
7981
}
8082
} else {
8183
throw new UnhandledError(`Unexpected error: ${error}`);

backend/src/http/stackOneSession.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import axios from "axios";
22
import config from "../config";
33
import { InvalidRequestError, ForbiddenRequestError, TooManyRequestsError, ServerError, NotImplementedError, UnhandledError } from '../errors/stackoneErrors';
44

5-
export const getSessionToken = async (origin_owner_id: string, origin_owner_name: string) => {
5+
export const getSessionToken = async () => {
66

77
const url: string = config.STACKONE_BASE_URL + "/connect_sessions";
88
try {
9+
const origin_owner_id = config.ORIGIN_OWNER_ID;
10+
const origin_owner_name = config.ORIGIN_OWNER_NAME;
911
const response = await axios.post(url, {
1012
expires_in: 1800,
1113
multiple: false,
@@ -22,19 +24,20 @@ export const getSessionToken = async (origin_owner_id: string, origin_owner_name
2224
return response.data;
2325
} catch (error) {
2426
if (axios.isAxiosError(error)) {
27+
const errorMessage = error.response?.data?.message || 'An error occurred';
2528
switch (error.response?.status) {
2629
case 400:
27-
throw new InvalidRequestError('Invalid request.');
30+
throw new InvalidRequestError(errorMessage);
2831
case 403:
29-
throw new ForbiddenRequestError('Forbidden request.');
32+
throw new ForbiddenRequestError(errorMessage);
3033
case 429:
31-
throw new TooManyRequestsError('Too many requests.');
34+
throw new TooManyRequestsError(errorMessage);
3235
case 500:
33-
throw new ServerError('Server error while executing the request.');
36+
throw new ServerError(errorMessage);
3437
case 501:
35-
throw new NotImplementedError('This functionality is not implemented.');
38+
throw new NotImplementedError(errorMessage);
3639
default:
37-
throw new UnhandledError(`Unexpected error: ${error.response?.status}`);
40+
throw new UnhandledError(`Unexpected error: ${error.response?.status} - ${errorMessage}`);
3841
}
3942
} else {
4043
throw new UnhandledError(`Unexpected error: ${error}`);

backend/src/routes/connectRoute.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@ const isKnownError = (error: unknown): error is InvalidRequestError | ForbiddenR
1414
};
1515

1616
router.post('/connect-session', async (req: Request, res: Response) => {
17-
18-
const { origin_owner_id, origin_owner_name } = req.body;
1917

2018
try {
21-
const sessionToken = await connectStackOneSession(origin_owner_id, origin_owner_name);
19+
const sessionToken = await connectStackOneSession();
2220
res.status(200).send(sessionToken);
2321
} catch (error: unknown) {
2422
if (isKnownError(error)) {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { getSessionToken } from '../http/stackOneSession';
22

3-
export const connectStackOneSession = async (origin_owner_id: string, origin_owner_name: string) => {
4-
return await getSessionToken(origin_owner_id, origin_owner_name);
3+
export const connectStackOneSession = async () => {
4+
return await getSessionToken();
55
};

frontend/public/logo.svg

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)