From 0c9a739d4807ea93899337834f22890ebdf299c0 Mon Sep 17 00:00:00 2001 From: Rostyk <34774987+rostyk-kanafotskyy@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:40:08 +0300 Subject: [PATCH] fix: subscription proration policy prefix, offering attach/detach product (#940) BREAKING CHANGE: --- src/types/subscription-offerings.d.ts | 98 ++++++++++++++++--- .../subscription-proration-policies.d.ts | 52 ++++++++++ 2 files changed, 134 insertions(+), 16 deletions(-) create mode 100644 src/types/subscription-proration-policies.d.ts diff --git a/src/types/subscription-offerings.d.ts b/src/types/subscription-offerings.d.ts index d26e9ed..c4985db 100644 --- a/src/types/subscription-offerings.d.ts +++ b/src/types/subscription-offerings.d.ts @@ -20,27 +20,60 @@ export interface SubscriptionOfferingBase { attributes: { name: string description: string - created_at: string - updated_at: string - }, + } +} + +export interface SubscriptionOfferingRelationships { relationships?: { - [key: string]: { - links?: { - related?: string - self?: string - }, - data?: { - type?: string - id?: string + plans?: { + data: { + id: string + type: 'subscription_offering_plan' + }[] + links: { + related: string + } + } + products?: { + data: { + id: string + type: 'subscription_offering_product' + }[] + links: { + related: string + } + } + proration_policy?: { + data: { + id: string + type: 'subscription_proration_policy' } } } + } +export interface SubscriptionOfferingBuildProduct { + external_ref?: string + name: string + description?: string + sku?: string + main_image?: string + price?: { + [key: string]: { + amount: number + includes_tax?: boolean + } + } + price_units?: { + unit: "day" | "month" + amount: number + } +} export interface SubscriptionOfferingBuildBody { name: string description: string - products: string[] + products: string[] | SubscriptionOfferingBuildProduct[] plans: string[] } @@ -52,11 +85,23 @@ export interface SubscriptionOfferingAttachPlanBody { plans: string[] } -export interface SubscriptionOffering extends Identifiable, SubscriptionOfferingBase { +export interface SubscriptionOfferingAttachProrationPolicyBody { + type: 'subscription_proration_policy' + id: string +} +export interface SubscriptionOffering extends Identifiable, SubscriptionOfferingBase, SubscriptionOfferingRelationships { + meta: { + external_product_refs: string[] + owner: string + timestamps: { + created_at: string + updated_at: string + } + } } export type SubscriptionOfferingCreate = Omit & {attributes: Partial} -export type SubscriptionOfferingUpdate = Omit & {attributes: Partial} +export type SubscriptionOfferingUpdate = Identifiable & Omit & {attributes: Partial} type SubscriptionOfferingAttachmentsRelationships = { relationships: { @@ -69,7 +114,24 @@ type SubscriptionOfferingAttachmentsRelationships = { } } -export type SubscriptionOfferingPlan = SubscriptionPlan & SubscriptionOfferingAttachmentsRelationships +export interface SubscriptionOfferingFilter { + eq?: { + "products.external_ref": string + } +} + +type SubscriptionOfferingPlanMeta = { + meta: { + active_plan?: boolean + owner: string + timestamps: { + created_at: string + updated_at: string + } + } +} + +export type SubscriptionOfferingPlan = Omit & SubscriptionOfferingAttachmentsRelationships & SubscriptionOfferingPlanMeta export type SubscriptionOfferingProduct = SubscriptionProduct & SubscriptionOfferingAttachmentsRelationships /** * Subscription Offering Endpoints @@ -80,7 +142,7 @@ export interface SubscriptionOfferingsEndpoint SubscriptionOffering, SubscriptionOfferingCreate, SubscriptionOfferingUpdate, - never, + SubscriptionOfferingFilter, never, never > { @@ -99,4 +161,8 @@ export interface SubscriptionOfferingsEndpoint AttachPlans(offeringId: string, body: SubscriptionOfferingAttachPlanBody): Promise> RemovePlan(offeringId: string, planId: string): Promise + + AttachProrationPolicy(offeringId: string, body: SubscriptionOfferingAttachProrationPolicyBody | null): Promise> + + ReplaceProducts(offeringId: string, productIds: string[]): Promise> } diff --git a/src/types/subscription-proration-policies.d.ts b/src/types/subscription-proration-policies.d.ts new file mode 100644 index 0000000..547582e --- /dev/null +++ b/src/types/subscription-proration-policies.d.ts @@ -0,0 +1,52 @@ +/** + * Subscription Proration Policies + * Description: Subscription Proration Policies. + * DOCS: TODO: add docs when ready + */ +import { + Identifiable, + CrudQueryableResource +} from './core' + +/** + * Core Subscription Proration Policies Base Interface + * For custom flows, extend this interface + * DOCS: TODO: add docs when ready + */ +export interface SubscriptionProrationPolicyBase { + type: 'subscription_proration_policy' + attributes: { + name: string + rounding: 'up' | 'down' | 'nearest' + external_ref?: string + } +} + +export interface SubscriptionProrationPolicy extends Identifiable, SubscriptionProrationPolicyBase { + meta: { + owner: 'store' | 'organization' + timestamps: { + updated_at: string + created_at: string + } + } +} + +export type SubscriptionProrationPolicyCreate = SubscriptionProrationPolicyBase +export type SubscriptionProrationPolicyUpdate = Identifiable & Omit & {attributes: Partial} + +/** + * Subscription Proration Policies Endpoints + * DOCS: TODO: add docs when ready + */ +export interface SubscriptionProrationPoliciesEndpoint + extends CrudQueryableResource< + SubscriptionProrationPolicy, + SubscriptionProrationPolicyCreate, + SubscriptionProrationPolicyUpdate, + never, + never, + never + > { + endpoint: 'proration-policies' +}