Skip to content

Commit

Permalink
fix: subscription proration policy prefix, offering attach/detach pro…
Browse files Browse the repository at this point in the history
…duct (#940) (#4)

BREAKING CHANGE:

Co-authored-by: Rostyk <[email protected]>
  • Loading branch information
samblacklock and rostyk-kanafotskyy authored Jul 22, 2024
1 parent cc18715 commit bd6365d
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 16 deletions.
98 changes: 82 additions & 16 deletions src/types/subscription-offerings.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[]
}

Expand All @@ -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<SubscriptionOfferingBase, 'attributes'> & {attributes: Partial<SubscriptionOfferingBase['attributes']>}
export type SubscriptionOfferingUpdate = Omit<SubscriptionOffering, 'attributes'> & {attributes: Partial<SubscriptionOfferingBase['attributes']>}
export type SubscriptionOfferingUpdate = Identifiable & Omit<SubscriptionOfferingBase, 'attributes'> & {attributes: Partial<SubscriptionOfferingBase['attributes']>}

type SubscriptionOfferingAttachmentsRelationships = {
relationships: {
Expand All @@ -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<SubscriptionPlan, 'meta'> & SubscriptionOfferingAttachmentsRelationships & SubscriptionOfferingPlanMeta
export type SubscriptionOfferingProduct = SubscriptionProduct & SubscriptionOfferingAttachmentsRelationships
/**
* Subscription Offering Endpoints
Expand All @@ -80,7 +142,7 @@ export interface SubscriptionOfferingsEndpoint
SubscriptionOffering,
SubscriptionOfferingCreate,
SubscriptionOfferingUpdate,
never,
SubscriptionOfferingFilter,
never,
never
> {
Expand All @@ -99,4 +161,8 @@ export interface SubscriptionOfferingsEndpoint
AttachPlans(offeringId: string, body: SubscriptionOfferingAttachPlanBody): Promise<Resource<SubscriptionPlan[]>>

RemovePlan(offeringId: string, planId: string): Promise<void>

AttachProrationPolicy(offeringId: string, body: SubscriptionOfferingAttachProrationPolicyBody | null): Promise<Resource<SubscriptionOfferingAttachProrationPolicyBody>>

ReplaceProducts(offeringId: string, productIds: string[]): Promise<Resource<SubscriptionProduct[]>>
}
52 changes: 52 additions & 0 deletions src/types/subscription-proration-policies.d.ts
Original file line number Diff line number Diff line change
@@ -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<SubscriptionProrationPolicyBase, 'attributes'> & {attributes: Partial<SubscriptionProrationPolicy['attributes']>}

/**
* Subscription Proration Policies Endpoints
* DOCS: TODO: add docs when ready
*/
export interface SubscriptionProrationPoliciesEndpoint
extends CrudQueryableResource<
SubscriptionProrationPolicy,
SubscriptionProrationPolicyCreate,
SubscriptionProrationPolicyUpdate,
never,
never,
never
> {
endpoint: 'proration-policies'
}

0 comments on commit bd6365d

Please sign in to comment.