Skip to content

Commit 28d394c

Browse files
committed
T-331 return raw data in errors
1 parent 3630f0e commit 28d394c

File tree

8 files changed

+70
-53
lines changed

8 files changed

+70
-53
lines changed

index.node.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.web.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 14 additions & 33 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"author": "Adgorithmics, Inc.",
2424
"license": "MIT",
2525
"dependencies": {
26-
"@adgorithmics/graphql-errors": "^1.3.0",
26+
"@adgorithmics/graphql-errors": "^1.4.0",
2727
"cross-fetch": "3.0.4",
2828
"lodash.get": "4.4.2"
2929
},

src/helpers.d.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { codes } from '@adgorithmics/graphql-errors';
12
import { Query } from './generated/graphql';
23
export declare type Deep<T> = {
34
0: T;
@@ -6,3 +7,19 @@ export declare type Deep<T> = {
67
export declare function bind<T extends Function>(_target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> | void;
78
export declare function getFormattedFields(fields?: Array<string>): string;
89
export declare function pageQueryGenerator(name: keyof Query, fields?: Array<string>, hasShowDeleted?: boolean): string;
10+
export interface APIError {
11+
message?: string;
12+
extentions?: {
13+
code?: codes;
14+
};
15+
}
16+
export declare class CinnamonError extends Error {
17+
raw?: {
18+
data?: unknown;
19+
errors?: Array<APIError>;
20+
};
21+
constructor(message: string, raw?: {
22+
data?: unknown;
23+
errors?: Array<APIError>;
24+
});
25+
}

src/helpers.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { codes } from '@adgorithmics/graphql-errors';
12
import { Query } from './generated/graphql';
23
import { nameMap } from './generated/fields';
34

@@ -82,3 +83,21 @@ query(
8283
}
8384
}`;
8485
}
86+
87+
export interface APIError {
88+
message?: string;
89+
extentions?: { code?: codes };
90+
}
91+
92+
export class CinnamonError extends Error {
93+
raw?: { data?: unknown; errors?: Array<APIError> };
94+
95+
constructor(
96+
message: string,
97+
raw?: { data?: unknown; errors?: Array<APIError> },
98+
) {
99+
super(message);
100+
101+
this.raw = raw;
102+
}
103+
}

src/index.d.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { codes } from '@adgorithmics/graphql-errors';
21
import { PageInfo, Scalars, Mutation, Query, SortInput, User, UserLoginInput, UserUpdateInput, RefreshTokenInput, Organization, OrganizationInput, OrganizationUpdateInput, Marketplace, MarketplaceInput, MarketplaceUpdateInput, MediaChannel, MediaChannelCreateInput, MediaChannelUpdateInput, MediaChannelImportInput, CampaignTemplate, Vendor, VendorInput, VendorUpdateInput, VendorToken, VendorTokenInput, Catalog, CatalogCreateInput, CatalogImportInput, CatalogUpdateInput, Product, ProductInput, ProductUpdateInput, MarketingCampaign, MarketingCampaignInput, MarketingCampaignUpdateInput, MarketingAd, Result, Entitlement, EntitlementInput, EntitlementUpdateInput, CreativeFont, CreativeFontCreateInput, CreativeFontUpdateInput, CreativeImage, CreativeImageCreateInput, CreativeImageUpdateInput, CreativeLayer, CreativeLayerCreateInput, CreativeLayerUpdateInput, CreativeTemplate, CreativeTemplateCreateInput, CreativeTemplateUpdateInput } from './generated/graphql';
32
import { OrganizationFields, UserFields, MarketplaceFields, MediaChannelFields, CampaignTemplateFields, VendorFields, VendorTokenFields, CatalogFields, ProductFields, MarketingCampaignFields, MarketingAdFields, ResultFields, EntitlementFields, CreativeFontFields, CreativeImageFields, CreativeLayerFields, CreativeTemplateFields } from './generated/fields';
43
import { Deep } from './helpers';
@@ -8,12 +7,6 @@ export interface Config {
87
export interface Headers {
98
[key: string]: string;
109
}
11-
export interface Error {
12-
message?: string;
13-
extentions?: {
14-
code?: codes;
15-
};
16-
}
1710
export declare type APIKey = keyof (Query & Mutation);
1811
export declare type APIResult<T extends APIKey, U extends string = T> = {
1912
data: Record<U, NonNullable<(Query & Mutation)[T]>>;

src/index.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,14 @@ import {
7878
CreativeTemplateFields,
7979
} from './generated/fields';
8080

81-
import { Deep, bind, pageQueryGenerator, getFormattedFields } from './helpers';
81+
import {
82+
Deep,
83+
bind,
84+
pageQueryGenerator,
85+
getFormattedFields,
86+
APIError,
87+
CinnamonError,
88+
} from './helpers';
8289

8390
export interface Config {
8491
url: string;
@@ -88,11 +95,6 @@ export interface Headers {
8895
[key: string]: string;
8996
}
9097

91-
export interface Error {
92-
message?: string;
93-
extentions?: { code?: codes };
94-
}
95-
9698
export type APIKey = keyof (Query & Mutation);
9799
export type APIResult<T extends APIKey, U extends string = T> = {
98100
data: Record<U, NonNullable<(Query & Mutation)[T]>>;
@@ -129,7 +131,8 @@ export class Cinnamon {
129131
const response = await fetch(this.config.url, {
130132
method: 'POST',
131133
headers: {
132-
authorization: `Bearer ${token || this.token}`,
134+
authorization:
135+
token || this.token ? `Bearer ${token || this.token}` : '',
133136
accept: 'application/json',
134137
'content-type': 'application/json',
135138
...headers,
@@ -141,20 +144,24 @@ export class Cinnamon {
141144
if (json.errors) {
142145
if (
143146
json.errors.some(
144-
(error: Error) =>
147+
(error: APIError) =>
145148
get(error, 'extensions.code') === codes.TOKEN_EXPIRED,
146149
) &&
147150
!token
148151
) {
149152
await this.refreshLogin({ refreshToken: this.refreshToken });
150153
return this.api({ query, variables, headers, token });
151154
}
152-
throw new Error(
155+
throw new CinnamonError(
153156
json.errors.map((error: Error) => error.message).join('\n'),
157+
json,
154158
);
155159
}
156160
if (!json.data) {
157-
throw new Error(`Invalid server response: ${JSON.stringify(json)}`);
161+
throw new CinnamonError(
162+
`Invalid server response: ${JSON.stringify(json)}`,
163+
json,
164+
);
158165
}
159166
return json;
160167
}

0 commit comments

Comments
 (0)