This commit is contained in:
Mo
2022-11-13 09:28:16 -06:00
committed by GitHub
parent e56a960bbf
commit d519aca685
49 changed files with 512 additions and 151 deletions

View File

@@ -0,0 +1,4 @@
export enum AppleIAPProductId {
ProPlanYearly = 'pro_plan_yearly',
PlusPlanYearly = 'plus_plan_yearly',
}

View File

@@ -0,0 +1,8 @@
import { AppleIAPProductId } from './AppleIAPProductId'
export type AppleIAPReceipt = {
productId: AppleIAPProductId
transactionDate: string
transactionId: string
transactionReceipt: string
}

View File

@@ -1,9 +1,14 @@
import { Uuid } from '@standardnotes/common'
import { Invitation } from '@standardnotes/models'
import { AppleIAPReceipt } from './AppleIAPReceipt'
export interface SubscriptionClientInterface {
listSubscriptionInvitations(): Promise<Invitation[]>
inviteToSubscription(inviteeEmail: string): Promise<boolean>
cancelInvitation(inviteUuid: Uuid): Promise<boolean>
acceptInvitation(inviteUuid: Uuid): Promise<{ success: true } | { success: false; message: string }>
confirmAppleIAP(
receipt: AppleIAPReceipt,
subscriptionToken: string,
): Promise<{ success: true } | { success: false; message: string }>
}

View File

@@ -4,6 +4,7 @@ import { InternalEventBusInterface } from '../Internal/InternalEventBusInterface
import { AbstractService } from '../Service/AbstractService'
import { SubscriptionClientInterface } from './SubscriptionClientInterface'
import { Uuid } from '@standardnotes/common'
import { AppleIAPReceipt } from './AppleIAPReceipt'
export class SubscriptionManager extends AbstractService implements SubscriptionClientInterface {
constructor(
@@ -56,4 +57,24 @@ export class SubscriptionManager extends AbstractService implements Subscription
return false
}
}
async confirmAppleIAP(
params: AppleIAPReceipt,
subscriptionToken: string,
): Promise<{ success: true } | { success: false; message: string }> {
try {
const result = await this.subscriptionApiService.confirmAppleIAP({
...params,
subscription_token: subscriptionToken,
})
if (result.data.error) {
return { success: false, message: result.data.error.message }
}
return result.data
} catch (error) {
return { success: false, message: 'Could not confirm IAP.' }
}
}
}