Skip to content

Commit 60773a6

Browse files
committed
NO-TICKET vendor token update
1 parent 2d08cd7 commit 60773a6

File tree

9 files changed

+1193
-32
lines changed

9 files changed

+1193
-32
lines changed

graphql.schema.json

Lines changed: 619 additions & 9 deletions
Large diffs are not rendered by default.

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.

src/generated/graphql.d.ts

Lines changed: 141 additions & 5 deletions
Large diffs are not rendered by default.

src/generated/graphql.ts

Lines changed: 225 additions & 4 deletions
Large diffs are not rendered by default.

src/index.d.ts

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { codes } from '@adgorithmics/graphql-errors';
2-
import { PageInfo, Scalars, Mutation, Query, SortInput, UserLoginInput, UserUpdateInput, RefreshTokenInput, Organization, OrganizationInput, OrganizationUpdateInput, Marketplace, MarketplaceInput, MarketplaceUpdateInput, MediaChannel, MediaChannelCreateInput, MediaChannelUpdateInput, MediaChannelImportInput, CampaignTemplate, Vendor, VendorInput, VendorUpdateInput, Catalog, CatalogCreateInput, CatalogImportInput, CatalogUpdateInput, Product, ProductInput, ProductUpdateInput, MarketingCampaign, MarketingCampaignInput, MarketingCampaignUpdateInput, MarketingAd, Result, Entitlement, EntitlementInput, EntitlementUpdateInput } from './generated/graphql';
3-
import { OrganizationFields, UserFields, MarketplaceFields, MediaChannelFields, CampaignTemplateFields, VendorFields, CatalogFields, ProductFields, MarketingCampaignFields, MarketingAdFields, ResultFields, EntitlementFields } from './inputFields';
2+
import { PageInfo, Scalars, Mutation, Query, SortInput, 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 } from './generated/graphql';
3+
import { OrganizationFields, UserFields, MarketplaceFields, MediaChannelFields, CampaignTemplateFields, VendorFields, VendorTokenFields, CatalogFields, ProductFields, MarketingCampaignFields, MarketingAdFields, ResultFields, EntitlementFields } from './inputFields';
44
export interface Config {
55
url: string;
66
}
@@ -22,6 +22,7 @@ export declare class Cinnamon {
2222
refreshToken: string;
2323
token: string;
2424
constructor(config: Config);
25+
private isVendorToken;
2526
api<T extends APIKey, U extends string = T>({ query, variables, headers, token, }: {
2627
query: string;
2728
variables?: object;
@@ -34,13 +35,15 @@ export declare class Cinnamon {
3435
node?: T;
3536
}>;
3637
}>): Promise<T[]>;
38+
private defaultUserFields;
3739
login(input: UserLoginInput): Promise<import("./generated/graphql").Token>;
3840
refreshLogin(input: RefreshTokenInput): Promise<import("./generated/graphql").Token>;
41+
setToken(token: string): void;
3942
me({ fields, headers, token, }?: {
40-
fields?: Array<keyof UserFields | string>;
43+
fields?: Array<keyof UserFields | keyof VendorFields | string>;
4144
headers?: Headers;
4245
token?: string;
43-
}): Promise<import("./generated/graphql").User>;
46+
}): Promise<import("./generated/graphql").Me>;
4447
updateUser({ input, fields, headers, token, }: {
4548
input: UserUpdateInput;
4649
fields?: Array<keyof UserFields | string>;
@@ -230,6 +233,39 @@ export declare class Cinnamon {
230233
headers?: Headers;
231234
token?: string;
232235
}): Promise<import("./generated/graphql").Deletion>;
236+
private defaultVendorTokenFields;
237+
vendorToken({ id, fields, headers, token, }: {
238+
id: Scalars['ObjectId'];
239+
fields?: Array<keyof VendorTokenFields | string>;
240+
headers?: Headers;
241+
token?: string;
242+
}): Promise<VendorToken>;
243+
vendorTokens({ filter, sort, after, fields, headers, token, }?: {
244+
filter?: Scalars['FilterInput'];
245+
sort?: SortInput;
246+
after?: PageInfo['endCursor'];
247+
fields?: Array<keyof VendorTokenFields | string>;
248+
headers?: Headers;
249+
token?: string;
250+
}): Promise<import("./generated/graphql").VendorTokenConnection>;
251+
vendorTokensAll({ filter, sort, fields, headers, token, }?: {
252+
filter?: Scalars['FilterInput'];
253+
sort?: SortInput;
254+
fields?: Array<keyof VendorTokenFields | string>;
255+
headers?: Headers;
256+
token?: string;
257+
}): Promise<VendorToken[]>;
258+
createVendorToken({ input, fields, headers, token, }: {
259+
input: VendorTokenInput;
260+
fields?: Array<keyof VendorTokenFields | string>;
261+
headers?: Headers;
262+
token?: string;
263+
}): Promise<VendorToken>;
264+
deleteVendorToken({ id, headers, token, }: {
265+
id: Scalars['ObjectId'];
266+
headers?: Headers;
267+
token?: string;
268+
}): Promise<import("./generated/graphql").Deletion>;
233269
private defaultCatalogFields;
234270
catalog({ id, fields, headers, token, }: {
235271
id: Scalars['ObjectId'];

src/index.ts

Lines changed: 155 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import {
2525
Vendor,
2626
VendorInput,
2727
VendorUpdateInput,
28+
VendorToken,
29+
VendorTokenInput,
2830
Catalog,
2931
CatalogCreateInput,
3032
CatalogImportInput,
@@ -50,6 +52,7 @@ import {
5052
MediaChannelFields,
5153
CampaignTemplateFields,
5254
VendorFields,
55+
VendorTokenFields,
5356
CatalogFields,
5457
ProductFields,
5558
MarketingCampaignFields,
@@ -76,6 +79,8 @@ export type APIResult<T extends APIKey, U extends string = T> = {
7679
data: Record<U, NonNullable<(Query & Mutation)[T]>>;
7780
};
7881

82+
const VENDOR_TOKEN_LENGTH = 60;
83+
7984
export class Cinnamon {
8085
config: Config;
8186
refreshToken = '';
@@ -85,6 +90,10 @@ export class Cinnamon {
8590
this.config = config;
8691
}
8792

93+
private isVendorToken(token: string) {
94+
return token.length === VENDOR_TOKEN_LENGTH;
95+
}
96+
8897
async api<T extends APIKey, U extends string = T>({
8998
query,
9099
variables = {},
@@ -154,6 +163,8 @@ export class Cinnamon {
154163
// User
155164
// ####################################
156165

166+
private defaultUserFields = [UserFields.id, UserFields.email];
167+
157168
async login(input: UserLoginInput) {
158169
const result = (await this.api<'login'>({
159170
query: `mutation($input: UserLoginInput!) {
@@ -198,19 +209,31 @@ export class Cinnamon {
198209
return result;
199210
}
200211

212+
setToken(token: string) {
213+
this.token = token;
214+
}
215+
201216
async me({
202-
fields = [UserFields.id, UserFields.email],
217+
fields,
203218
headers,
204219
token,
205220
}: {
206-
fields?: Array<keyof UserFields | string>;
221+
fields?: Array<keyof UserFields | keyof VendorFields | string>;
207222
headers?: Headers;
208223
token?: string;
209224
} = {}) {
210225
return (await this.api<'me'>({
211226
query: `query {
212227
me {
213-
${fields.join(' ')}
228+
${
229+
this.isVendorToken(token || this.token)
230+
? `... on Vendor { ${(
231+
fields || this.defaultVendorFields
232+
).join(' ')} }`
233+
: `... on User { ${(
234+
fields || this.defaultUserFields
235+
).join(' ')} }`
236+
}
214237
}
215238
}`,
216239
variables: {},
@@ -540,8 +563,6 @@ export class Cinnamon {
540563
private defaultMediaChannelFields = [
541564
MarketplaceFields.id,
542565
MarketplaceFields.name,
543-
MarketplaceFields.systemStatus,
544-
MarketplaceFields.errors,
545566
];
546567

547568
async mediaChannel({
@@ -960,6 +981,135 @@ export class Cinnamon {
960981
})).data.deleteVendor;
961982
}
962983

984+
// ####################################
985+
// Vendor Token
986+
// ####################################
987+
988+
private defaultVendorTokenFields = [
989+
VendorTokenFields.id,
990+
VendorTokenFields.token,
991+
];
992+
993+
async vendorToken({
994+
id,
995+
fields = this.defaultVendorTokenFields,
996+
headers,
997+
token,
998+
}: {
999+
id: Scalars['ObjectId'];
1000+
fields?: Array<keyof VendorTokenFields | string>;
1001+
headers?: Headers;
1002+
token?: string;
1003+
}) {
1004+
return (await this.api<'vendorToken'>({
1005+
query: `query($id: ObjectId!) {
1006+
vendorToken(id: $id) {
1007+
${fields.join(' ')}
1008+
}
1009+
}`,
1010+
variables: { id },
1011+
headers,
1012+
token,
1013+
})).data.vendorToken;
1014+
}
1015+
1016+
async vendorTokens({
1017+
filter,
1018+
sort,
1019+
after,
1020+
fields = this.defaultVendorTokenFields,
1021+
headers,
1022+
token,
1023+
}: {
1024+
filter?: Scalars['FilterInput'];
1025+
sort?: SortInput;
1026+
after?: PageInfo['endCursor'];
1027+
fields?: Array<keyof VendorTokenFields | string>;
1028+
headers?: Headers;
1029+
token?: string;
1030+
} = {}) {
1031+
return (await this.api<'vendorTokens'>({
1032+
query: `query($filter: FilterInput, $sort: SortInput, $after: String) {
1033+
vendorTokens(filter: $filter, sort: $sort, after: $after) {
1034+
pageInfo {
1035+
hasNextPage
1036+
endCursor
1037+
}
1038+
edges {
1039+
node {
1040+
${fields.join(' ')}
1041+
}
1042+
}
1043+
}
1044+
}`,
1045+
variables: { filter, sort, after },
1046+
headers,
1047+
token,
1048+
})).data.vendorTokens;
1049+
}
1050+
1051+
vendorTokensAll({
1052+
filter,
1053+
sort,
1054+
fields = this.defaultVendorTokenFields,
1055+
headers,
1056+
token,
1057+
}: {
1058+
filter?: Scalars['FilterInput'];
1059+
sort?: SortInput;
1060+
fields?: Array<keyof VendorTokenFields | string>;
1061+
headers?: Headers;
1062+
token?: string;
1063+
} = {}) {
1064+
return this.allPages<VendorToken>((after: PageInfo['endCursor']) =>
1065+
this.vendorTokens({ filter, sort, after, fields, headers, token }),
1066+
);
1067+
}
1068+
1069+
async createVendorToken({
1070+
input,
1071+
fields = this.defaultVendorTokenFields,
1072+
headers,
1073+
token,
1074+
}: {
1075+
input: VendorTokenInput;
1076+
fields?: Array<keyof VendorTokenFields | string>;
1077+
headers?: Headers;
1078+
token?: string;
1079+
}) {
1080+
return (await this.api<'createVendorToken'>({
1081+
query: `mutation($input: VendorTokenInput!) {
1082+
createVendorToken(input: $input) {
1083+
${fields.join(' ')}
1084+
}
1085+
}`,
1086+
variables: { input },
1087+
headers,
1088+
token,
1089+
})).data.createVendorToken;
1090+
}
1091+
1092+
async deleteVendorToken({
1093+
id,
1094+
headers,
1095+
token,
1096+
}: {
1097+
id: Scalars['ObjectId'];
1098+
headers?: Headers;
1099+
token?: string;
1100+
}) {
1101+
return (await this.api<'deleteVendorToken'>({
1102+
query: `mutation($id: ObjectId!) {
1103+
deleteVendorToken(id: $id) {
1104+
id
1105+
}
1106+
}`,
1107+
variables: { id },
1108+
headers,
1109+
token,
1110+
})).data.deleteVendorToken;
1111+
}
1112+
9631113
// ####################################
9641114
// Catalog
9651115
// ####################################

src/inputFields/index.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { Token, Organization, User, Marketplace, MediaChannel, CampaignTemplate, Vendor, Catalog, Product, MarketingCampaign, MarketingAd, Result, Entitlement } from '../generated/graphql';
1+
import { Token, Organization, User, Marketplace, MediaChannel, CampaignTemplate, Vendor, VendorToken, Catalog, Product, MarketingCampaign, MarketingAd, Result, Entitlement } from '../generated/graphql';
22
declare type Fields<T> = {
3-
[key in NonNullable<keyof T>]: keyof T;
3+
[key in NonNullable<keyof T>]: key;
44
};
55
export declare type TokenFields = Fields<Token>;
66
export declare const TokenFields: Fields<Token>;
@@ -16,6 +16,8 @@ export declare type CampaignTemplateFields = Fields<CampaignTemplate>;
1616
export declare const CampaignTemplateFields: Fields<CampaignTemplate>;
1717
export declare type VendorFields = Fields<Vendor>;
1818
export declare const VendorFields: Fields<Vendor>;
19+
export declare type VendorTokenFields = Fields<VendorToken>;
20+
export declare const VendorTokenFields: Fields<VendorToken>;
1921
export declare type CatalogFields = Fields<Catalog>;
2022
export declare const CatalogFields: Fields<Catalog>;
2123
export declare type ProductFields = Fields<Product>;

src/inputFields/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
MediaChannel,
88
CampaignTemplate,
99
Vendor,
10+
VendorToken,
1011
Catalog,
1112
Product,
1213
MarketingCampaign,
@@ -18,7 +19,7 @@ import {
1819
const fields = (keys: string[]): object =>
1920
keys.reduce((keys, key) => ({ ...keys, [key]: key }), {});
2021

21-
type Fields<T> = { [key in NonNullable<keyof T>]: keyof T };
22+
type Fields<T> = { [key in NonNullable<keyof T>]: key };
2223

2324
export type TokenFields = Fields<Token>;
2425
export const TokenFields = fields(keys<Token>()) as TokenFields;
@@ -49,6 +50,11 @@ export const CampaignTemplateFields = fields(
4950
export type VendorFields = Fields<Vendor>;
5051
export const VendorFields = fields(keys<Vendor>()) as VendorFields;
5152

53+
export type VendorTokenFields = Fields<VendorToken>;
54+
export const VendorTokenFields = fields(
55+
keys<VendorToken>(),
56+
) as VendorTokenFields;
57+
5258
export type CatalogFields = Fields<Catalog>;
5359
export const CatalogFields = fields(keys<Catalog>()) as CatalogFields;
5460

0 commit comments

Comments
 (0)