Skip to content

Commit

Permalink
fix: add remaining resource keys
Browse files Browse the repository at this point in the history
  • Loading branch information
trs committed Aug 31, 2023
1 parent 11b4290 commit 549ebec
Show file tree
Hide file tree
Showing 43 changed files with 382 additions and 378 deletions.
31 changes: 20 additions & 11 deletions src/resources/abstract-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,18 @@ type ChargeBeeProcessWaitMethodName<
? TMethod
: "Method must return a ProcessWait";

type ResultConstructor<K extends keyof Result> = {
new (...args: unknown[]): Result[K];
};

export abstract class ChargebeeResource {
constructor(protected readonly chargebee: ChargeBee) {}

private resolveGetters =
<TResult extends { [K in keyof Result]?: unknown }>(result?: TResult) =>
(value: Result) => {
<TResult extends { [K in keyof Result]?: ResultConstructor<K> }>(
result: TResult,
) =>
(value: Result): TResult => {
const descriptors = Object.getOwnPropertyDescriptors(
value.constructor.prototype,
);
Expand All @@ -77,12 +83,9 @@ export abstract class ChargebeeResource {
.map(([key]) => key as keyof Result);
return Object.fromEntries(
properties
.filter(
(key) =>
(result ? Object.keys(result) : undefined)?.includes(key) ?? true,
)
.filter((key) => Object.keys(result).includes(key))
.map((key) => [key, value[key]]),
);
) as TResult;
};

protected request<
Expand All @@ -94,7 +97,9 @@ export abstract class ChargebeeResource {
) {
return {
returns:
<TResult extends { [K in keyof Result]?: unknown }>(result?: TResult) =>
<TResult extends { [K in keyof Result]?: ResultConstructor<K> }>(
result: TResult,
) =>
async (
...args: Parameters<ChargeBeeResultFunction<TResource, TMethod>>
): Promise<TResult> => {
Expand All @@ -116,11 +121,13 @@ export abstract class ChargebeeResource {
) {
return {
returns:
<TResult extends { [K in keyof Result]?: unknown }>(result?: TResult) =>
<TResult extends { [K in keyof Result]?: ResultConstructor<K> }>(
result: TResult,
) =>
async (
...args: Parameters<ChargeBeeListResultFunction<TResource, TMethod>>
): Promise<TResult[]> => {
const request = (offset: string | undefined) => {
const request = (offset: string | undefined): Promise<ListResult> => {
const forwardArgs = args.map((arg) =>
Object.assign(arg, { offset }),
);
Expand Down Expand Up @@ -162,7 +169,9 @@ export abstract class ChargebeeResource {
) {
return {
returns:
<TResult extends { [K in keyof Result]?: unknown }>(result?: TResult) =>
<TResult extends { [K in keyof Result]?: ResultConstructor<K> }>(
result: TResult,
) =>
async (
...args: Parameters<ChargeBeeResultFunction<TResource, TMethod>>
): Promise<TResult> => {
Expand Down
14 changes: 7 additions & 7 deletions src/resources/addon-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,23 @@ import { ChargebeeResource } from "./abstract-resource";
export class AddonResource extends ChargebeeResource {
public readonly create = super
.request("addon", "create")
.returns<{ addon: Addon }>();
.returns({ addon: Addon });
public readonly update = super
.request("addon", "update")
.returns<{ addon: Addon }>();
.returns({ addon: Addon });
public readonly list = super
.listRequest("addon", "list")
.returns<{ addon: Addon }>();
.returns({ addon: Addon });
public readonly retrieve = super
.request("addon", "retrieve")
.returns<{ addon: Addon }>();
.returns({ addon: Addon });
public readonly delete = super
.request("addon", "delete")
.returns<{ addon: Addon }>();
.returns({ addon: Addon });
public readonly copy = super
.request("addon", "copy")
.returns<{ addon: Addon }>();
.returns({ addon: Addon });
public readonly unarchive = super
.request("addon", "unarchive")
.returns<{ addon: Addon }>();
.returns({ addon: Addon });
}
4 changes: 2 additions & 2 deletions src/resources/address-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import { ChargebeeResource } from "./abstract-resource";
export class AddressResource extends ChargebeeResource {
public readonly retrieve = super
.request("address", "retrieve")
.returns<{ address: Address }>();
.returns({ address: Address });
public readonly update = super
.request("address", "update")
.returns<{ address: Address }>();
.returns({ address: Address });
}
10 changes: 5 additions & 5 deletions src/resources/attached-item-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@ import { ChargebeeResource } from "./abstract-resource";
export class AttachedItemResource extends ChargebeeResource {
public readonly create = super
.request("attached_item", "create")
.returns<{ attached_item: AttachedItem }>();
.returns({ attached_item: AttachedItem });
public readonly update = super
.request("attached_item", "update")
.returns<{ attached_item: AttachedItem }>();
.returns({ attached_item: AttachedItem });
public readonly retrieve = super
.request("attached_item", "retrieve")
.returns<{ attached_item: AttachedItem }>();
.returns({ attached_item: AttachedItem });
public readonly delete = super
.request("attached_item", "delete")
.returns<{ attached_item: AttachedItem }>();
.returns({ attached_item: AttachedItem });
public readonly list = super
.listRequest("attached_item", "list")
.returns<{ attached_item: AttachedItem }>();
.returns({ attached_item: AttachedItem });
}
10 changes: 5 additions & 5 deletions src/resources/card-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ import { ChargebeeResource } from "./abstract-resource";
export class CardResource extends ChargebeeResource {
public readonly retrieve = super
.request("card", "retrieve")
.returns<{ card: Card }>();
.returns({ card: Card });
public readonly updateCardForCustomer = super
.request("card", "update_card_for_customer")
.returns<{ card: Card; customer: Customer }>();
.returns({ card: Card, customer: Customer });
public readonly switchGatewayForCustomer = super
.request("card", "switch_gateway_for_customer")
.returns<{ card: Card; customer: Customer }>();
.returns({ card: Card, customer: Customer });
public readonly copyCardForCustomer = super
.request("card", "copy_card_for_customer")
.returns<{ third_party_payment_method: ThirdPartyPaymentMethod }>();
.returns({ third_party_payment_method: ThirdPartyPaymentMethod });
public readonly deleteCardForCustomer = super
.request("card", "delete_card_for_customer")
.returns<{ customer: Customer }>();
.returns({ customer: Customer });
}
8 changes: 4 additions & 4 deletions src/resources/comment-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import { ChargebeeResource } from "./abstract-resource";
export class CommentResource extends ChargebeeResource {
public readonly create = super
.request("comment", "create")
.returns<{ comment: Comment }>();
.returns({ comment: Comment });
public readonly retrieve = super
.request("comment", "retrieve")
.returns<{ comment: Comment }>();
.returns({ comment: Comment });
public readonly list = super
.listRequest("comment", "list")
.returns<{ comment: Comment }>();
.returns({ comment: Comment });
public readonly delete = super
.request("comment", "delete")
.returns<{ comment: Comment }>();
.returns({ comment: Comment });
}
8 changes: 4 additions & 4 deletions src/resources/coupon-code-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import { ChargebeeResource } from "./abstract-resource";
export class CouponCodeResource extends ChargebeeResource {
public readonly create = super
.request("coupon_code", "create")
.returns<{ coupon_code: CouponCode }>();
.returns({ coupon_code: CouponCode });
public readonly retrieve = super
.request("coupon_code", "retrieve")
.returns<{ coupon_code: CouponCode }>();
.returns({ coupon_code: CouponCode });
public readonly list = super
.listRequest("coupon_code", "list")
.returns<{ coupon_code: CouponCode }>();
.returns({ coupon_code: CouponCode });
public readonly archive = super
.request("coupon_code", "archive")
.returns<{ coupon_code: CouponCode }>();
.returns({ coupon_code: CouponCode });
}
18 changes: 9 additions & 9 deletions src/resources/coupon-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,29 @@ import { ChargebeeResource } from "./abstract-resource";
export class CouponResource extends ChargebeeResource {
public readonly create = super
.request("coupon", "create")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
public readonly createForItems = super
.request("coupon", "create_for_items")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
public readonly updateForItems = super
.request("coupon", "update_for_items")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
public readonly list = super
.listRequest("coupon", "list")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
public readonly retrieve = super
.request("coupon", "retrieve")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
public readonly update = super
.request("coupon", "update")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
public readonly delete = super
.request("coupon", "delete")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
public readonly copy = super
.request("coupon", "copy")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
public readonly unarchive = super
.request("coupon", "unarchive")
.returns<{ coupon: Coupon }>();
.returns({ coupon: Coupon });
}
14 changes: 7 additions & 7 deletions src/resources/coupon-set-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,23 @@ import { ChargebeeResource } from "./abstract-resource";
export class CouponSetResource extends ChargebeeResource {
public readonly create = super
.request("coupon_set", "create")
.returns<{ coupon_set: CouponSet }>();
.returns({ coupon_set: CouponSet });
public readonly addCouponCodes = super
.request("coupon_set", "add_coupon_codes")
.returns<{ coupon_set: CouponSet }>();
.returns({ coupon_set: CouponSet });
public readonly list = super
.listRequest("coupon_set", "list")
.returns<{ coupon_set: CouponSet }>();
.returns({ coupon_set: CouponSet });
public readonly retrieve = super
.request("coupon_set", "retrieve")
.returns<{ coupon_set: CouponSet }>();
.returns({ coupon_set: CouponSet });
public readonly update = super
.request("coupon_set", "update")
.returns<{ coupon_set: CouponSet }>();
.returns({ coupon_set: CouponSet });
public readonly delete = super
.request("coupon_set", "delete")
.returns<{ coupon_set: CouponSet }>();
.returns({ coupon_set: CouponSet });
public readonly deleteUnusedCouponCodes = super
.request("coupon_set", "delete_unused_coupon_codes")
.returns<{ coupon_set: CouponSet }>();
.returns({ coupon_set: CouponSet });
}
28 changes: 14 additions & 14 deletions src/resources/credit-note-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,44 +9,44 @@ import { ChargebeeResource } from "./abstract-resource";
export class CreditNoteResource extends ChargebeeResource {
public readonly create = super
.request("credit_note", "create")
.returns<{ credit_note: CreditNote; invoice: Invoice }>();
.returns({ credit_note: CreditNote, invoice: Invoice });
public readonly retrieve = super
.request("credit_note", "retrieve")
.returns<{ credit_note: CreditNote }>();
.returns({ credit_note: CreditNote });
public readonly pdf = super
.request("credit_note", "pdf")
.returns<{ download: Download }>();
.returns({ download: Download });
public readonly downloadEinvoice = super
.request("credit_note", "download_einvoice")
.returns<{ downloads: Download }>();
.returns({ download: Download });
public readonly refund = super
.request("credit_note", "refund")
.returns<{ credit_note: CreditNote; transaction: Transaction }>();
.returns({ credit_note: CreditNote, transaction: Transaction });
public readonly recordRefund = super
.request("credit_note", "record_refund")
.returns<{ credit_note: CreditNote; transaction: Transaction }>();
.returns({ credit_note: CreditNote, transaction: Transaction });
public readonly voidCreditNote = super
.request("credit_note", "void_credit_note")
.returns<{ credit_note: CreditNote; invoice: Invoice }>();
.returns({ credit_note: CreditNote, invoice: Invoice });
public readonly list = super
.listRequest("credit_note", "list")
.returns<{ credit_note: CreditNote }>();
.returns({ credit_note: CreditNote });
public readonly creditNotesForCustomer = super
.listRequest("credit_note", "credit_notes_for_customer")
.returns<{ credit_note: CreditNote; customer: Customer }>();
.returns({ credit_note: CreditNote, customer: Customer });
public readonly delete = super
.request("credit_note", "delete")
.returns<{ credit_note: CreditNote }>();
.returns({ credit_note: CreditNote });
public readonly removeTaxWithheldRefund = super
.request("credit_note", "remove_tax_withheld_refund")
.returns<{ credit_note: CreditNote; customer: Customer }>();
.returns({ credit_note: CreditNote, customer: Customer });
public readonly resendEinvoice = super
.request("credit_note", "resend_einvoice")
.returns<{ credit_note: CreditNote }>();
.returns({ credit_note: CreditNote });
public readonly sendEinvoice = super
.request("credit_note", "send_einvoice")
.returns<{ credit_note: CreditNote }>();
.returns({ credit_note: CreditNote });
public readonly importCreditNote = super
.request("credit_note", "import_credit_note")
.returns<{ credit_note: CreditNote }>();
.returns({ credit_note: CreditNote });
}
Loading

0 comments on commit 549ebec

Please sign in to comment.