Compare commits

..

2 Commits

Author SHA1 Message Date
fe95ab824e Add Apple subscription mobile operations
All checks were successful
Tests / Tests (pull_request) Successful in 11s
2026-06-15 16:12:38 -07:00
079e4e8719 Merge pull request 'Add Apple subscription sync schema' (#253) from apple-iap-pr2-backend-schema into master
Reviewed-on: #253
2026-06-12 04:50:36 +00:00
4 changed files with 206 additions and 202 deletions

View File

@@ -79,12 +79,6 @@ export enum AlignedIntervalEnum {
Year = "YEAR",
}
export type AppleIapSubscriptionOptionsGql = {
__typename?: "AppleIapSubscriptionOptionsGQL";
enabled: Scalars["Boolean"]["output"];
proMonthlyProductId?: Maybe<Scalars["String"]["output"]>;
};
export type BankFeaturesGql = {
__typename?: "BankFeaturesGQL";
bankAngle: Scalars["Float"]["output"];
@@ -310,14 +304,6 @@ export type DoesNotOwnShotErrOtherErrorNeedsNote =
| DoesNotOwnShotErr
| OtherErrorNeedsNote;
export type DrillRunLeaderboardGql = {
__typename?: "DrillRunLeaderboardGQL";
entries: Array<RunGql>;
totalPlayers: Scalars["Int"]["output"];
youRank?: Maybe<Scalars["Int"]["output"]>;
youRun?: Maybe<RunGql>;
};
export type EditShotReturn = {
__typename?: "EditShotReturn";
error?: Maybe<DoesNotOwnShotErr>;
@@ -2838,7 +2824,6 @@ export type Query = {
getAvailableSubscriptionOptions: StripeSubscriptionOptionsGql;
getBucketSet?: Maybe<BucketSetGql>;
getDeployedConfig: DeployedConfigGql;
getDrillRunLeaderboard: DrillRunLeaderboardGql;
getFeedVideos: VideoHistoryGql;
getGameTypeTagMetrics: Array<GameTypeTagMetric>;
getLoggedInUser?: Maybe<UserGql>;
@@ -2900,12 +2885,6 @@ export type QueryGetBucketSetArgs = {
keyName: Scalars["String"]["input"];
};
export type QueryGetDrillRunLeaderboardArgs = {
drillTag: Scalars["String"]["input"];
interval?: InputMaybe<TimeInterval>;
limit?: Scalars["Int"]["input"];
};
export type QueryGetFeedVideosArgs = {
after?: InputMaybe<Scalars["String"]["input"]>;
feedInput?: InputMaybe<VideoFeedInputGql>;
@@ -3381,7 +3360,6 @@ export type StripeProductGql = {
export type StripeSubscriptionOptionsGql = {
__typename?: "StripeSubscriptionOptionsGQL";
appleIap: AppleIapSubscriptionOptionsGql;
products: Array<StripeProductGql>;
trialPeriodDays?: Maybe<Scalars["Int"]["output"]>;
};
@@ -4623,39 +4601,6 @@ export type GetRunsLeaderboardQuery = {
};
};
export type GetDrillRunLeaderboardQueryVariables = Exact<{
drillTag: Scalars["String"]["input"];
interval?: InputMaybe<TimeInterval>;
limit?: InputMaybe<Scalars["Int"]["input"]>;
}>;
export type GetDrillRunLeaderboardQuery = {
__typename?: "Query";
getDrillRunLeaderboard: {
__typename?: "DrillRunLeaderboardGQL";
youRank?: number | null;
totalPlayers: number;
entries: Array<{
__typename?: "RunGQL";
id: number;
runLength: number;
videoId: number;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
};
}>;
youRun?: {
__typename?: "RunGQL";
id: number;
runLength: number;
videoId: number;
} | null;
};
};
export type GetVideoMakePercentageIntervalsQueryVariables = Exact<{
videoId: Scalars["ID"]["input"];
intervalDuration: Scalars["Int"]["input"];
@@ -5002,6 +4947,9 @@ export type GetSubscriptionStatusQuery = {
getUserSubscriptionStatus: {
__typename?: "UserSubscriptionStatusGQL";
hasActiveSubscription: boolean;
entitlementSource?: EntitlementSourceTypeEnum | null;
entitlementStartsAt?: any | null;
entitlementEndsAt?: any | null;
subscriptionStatus?: StripeSubscriptionStatusEnum | null;
currentPeriodStart?: any | null;
currentPeriodEnd?: any | null;
@@ -5011,6 +4959,38 @@ export type GetSubscriptionStatusQuery = {
};
};
export type GetAppleAppAccountTokenQueryVariables = Exact<{
[key: string]: never;
}>;
export type GetAppleAppAccountTokenQuery = {
__typename?: "Query";
getAppleAppAccountToken: string;
};
export type SyncAppleSubscriptionMutationVariables = Exact<{
signedTransactionInfo: Scalars["String"]["input"];
}>;
export type SyncAppleSubscriptionMutation = {
__typename?: "Mutation";
syncAppleSubscription: {
__typename?: "SyncAppleSubscriptionResultGQL";
ok: boolean;
errorCode?: string | null;
errorMessage?: string | null;
hasActiveSubscription: boolean;
entitlementSource?: EntitlementSourceTypeEnum | null;
entitlementStartsAt?: any | null;
entitlementEndsAt?: any | null;
appleStatus?: number | null;
originalTransactionId?: string | null;
latestTransactionId?: string | null;
productId?: string | null;
expiresAt?: any | null;
};
};
export type CancelSubscriptionMutationVariables = Exact<{
[key: string]: never;
}>;
@@ -5020,6 +5000,9 @@ export type CancelSubscriptionMutation = {
cancelSubscription: {
__typename?: "UserSubscriptionStatusGQL";
hasActiveSubscription: boolean;
entitlementSource?: EntitlementSourceTypeEnum | null;
entitlementStartsAt?: any | null;
entitlementEndsAt?: any | null;
subscriptionStatus?: StripeSubscriptionStatusEnum | null;
currentPeriodStart?: any | null;
currentPeriodEnd?: any | null;
@@ -9630,105 +9613,6 @@ export type GetRunsLeaderboardQueryResult = Apollo.QueryResult<
GetRunsLeaderboardQuery,
GetRunsLeaderboardQueryVariables
>;
export const GetDrillRunLeaderboardDocument = gql`
query GetDrillRunLeaderboard(
$drillTag: String!
$interval: TimeInterval
$limit: Int = 50
) {
getDrillRunLeaderboard(
drillTag: $drillTag
interval: $interval
limit: $limit
) {
entries {
id
runLength
videoId
user {
id
username
profileImageUri
}
}
youRun {
id
runLength
videoId
}
youRank
totalPlayers
}
}
`;
/**
* __useGetDrillRunLeaderboardQuery__
*
* To run a query within a React component, call `useGetDrillRunLeaderboardQuery` and pass it any options that fit your needs.
* When your component renders, `useGetDrillRunLeaderboardQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useGetDrillRunLeaderboardQuery({
* variables: {
* drillTag: // value for 'drillTag'
* interval: // value for 'interval'
* limit: // value for 'limit'
* },
* });
*/
export function useGetDrillRunLeaderboardQuery(
baseOptions: Apollo.QueryHookOptions<
GetDrillRunLeaderboardQuery,
GetDrillRunLeaderboardQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<
GetDrillRunLeaderboardQuery,
GetDrillRunLeaderboardQueryVariables
>(GetDrillRunLeaderboardDocument, options);
}
export function useGetDrillRunLeaderboardLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetDrillRunLeaderboardQuery,
GetDrillRunLeaderboardQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<
GetDrillRunLeaderboardQuery,
GetDrillRunLeaderboardQueryVariables
>(GetDrillRunLeaderboardDocument, options);
}
export function useGetDrillRunLeaderboardSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetDrillRunLeaderboardQuery,
GetDrillRunLeaderboardQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<
GetDrillRunLeaderboardQuery,
GetDrillRunLeaderboardQueryVariables
>(GetDrillRunLeaderboardDocument, options);
}
export type GetDrillRunLeaderboardQueryHookResult = ReturnType<
typeof useGetDrillRunLeaderboardQuery
>;
export type GetDrillRunLeaderboardLazyQueryHookResult = ReturnType<
typeof useGetDrillRunLeaderboardLazyQuery
>;
export type GetDrillRunLeaderboardSuspenseQueryHookResult = ReturnType<
typeof useGetDrillRunLeaderboardSuspenseQuery
>;
export type GetDrillRunLeaderboardQueryResult = Apollo.QueryResult<
GetDrillRunLeaderboardQuery,
GetDrillRunLeaderboardQueryVariables
>;
export const GetVideoMakePercentageIntervalsDocument = gql`
query GetVideoMakePercentageIntervals(
$videoId: ID!
@@ -10543,6 +10427,9 @@ export const GetSubscriptionStatusDocument = gql`
query GetSubscriptionStatus {
getUserSubscriptionStatus {
hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
subscriptionStatus
currentPeriodStart
currentPeriodEnd
@@ -10617,10 +10504,146 @@ export type GetSubscriptionStatusQueryResult = Apollo.QueryResult<
GetSubscriptionStatusQuery,
GetSubscriptionStatusQueryVariables
>;
export const GetAppleAppAccountTokenDocument = gql`
query GetAppleAppAccountToken {
getAppleAppAccountToken
}
`;
/**
* __useGetAppleAppAccountTokenQuery__
*
* To run a query within a React component, call `useGetAppleAppAccountTokenQuery` and pass it any options that fit your needs.
* When your component renders, `useGetAppleAppAccountTokenQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useGetAppleAppAccountTokenQuery({
* variables: {
* },
* });
*/
export function useGetAppleAppAccountTokenQuery(
baseOptions?: Apollo.QueryHookOptions<
GetAppleAppAccountTokenQuery,
GetAppleAppAccountTokenQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<
GetAppleAppAccountTokenQuery,
GetAppleAppAccountTokenQueryVariables
>(GetAppleAppAccountTokenDocument, options);
}
export function useGetAppleAppAccountTokenLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetAppleAppAccountTokenQuery,
GetAppleAppAccountTokenQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<
GetAppleAppAccountTokenQuery,
GetAppleAppAccountTokenQueryVariables
>(GetAppleAppAccountTokenDocument, options);
}
export function useGetAppleAppAccountTokenSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetAppleAppAccountTokenQuery,
GetAppleAppAccountTokenQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<
GetAppleAppAccountTokenQuery,
GetAppleAppAccountTokenQueryVariables
>(GetAppleAppAccountTokenDocument, options);
}
export type GetAppleAppAccountTokenQueryHookResult = ReturnType<
typeof useGetAppleAppAccountTokenQuery
>;
export type GetAppleAppAccountTokenLazyQueryHookResult = ReturnType<
typeof useGetAppleAppAccountTokenLazyQuery
>;
export type GetAppleAppAccountTokenSuspenseQueryHookResult = ReturnType<
typeof useGetAppleAppAccountTokenSuspenseQuery
>;
export type GetAppleAppAccountTokenQueryResult = Apollo.QueryResult<
GetAppleAppAccountTokenQuery,
GetAppleAppAccountTokenQueryVariables
>;
export const SyncAppleSubscriptionDocument = gql`
mutation SyncAppleSubscription($signedTransactionInfo: String!) {
syncAppleSubscription(
input: { signedTransactionInfo: $signedTransactionInfo }
) {
ok
errorCode
errorMessage
hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
appleStatus
originalTransactionId
latestTransactionId
productId
expiresAt
}
}
`;
export type SyncAppleSubscriptionMutationFn = Apollo.MutationFunction<
SyncAppleSubscriptionMutation,
SyncAppleSubscriptionMutationVariables
>;
/**
* __useSyncAppleSubscriptionMutation__
*
* To run a mutation, you first call `useSyncAppleSubscriptionMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useSyncAppleSubscriptionMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [syncAppleSubscriptionMutation, { data, loading, error }] = useSyncAppleSubscriptionMutation({
* variables: {
* signedTransactionInfo: // value for 'signedTransactionInfo'
* },
* });
*/
export function useSyncAppleSubscriptionMutation(
baseOptions?: Apollo.MutationHookOptions<
SyncAppleSubscriptionMutation,
SyncAppleSubscriptionMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
SyncAppleSubscriptionMutation,
SyncAppleSubscriptionMutationVariables
>(SyncAppleSubscriptionDocument, options);
}
export type SyncAppleSubscriptionMutationHookResult = ReturnType<
typeof useSyncAppleSubscriptionMutation
>;
export type SyncAppleSubscriptionMutationResult =
Apollo.MutationResult<SyncAppleSubscriptionMutation>;
export type SyncAppleSubscriptionMutationOptions = Apollo.BaseMutationOptions<
SyncAppleSubscriptionMutation,
SyncAppleSubscriptionMutationVariables
>;
export const CancelSubscriptionDocument = gql`
mutation CancelSubscription {
cancelSubscription {
hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
subscriptionStatus
currentPeriodStart
currentPeriodEnd

View File

@@ -30,33 +30,3 @@ query GetRunsLeaderboard($interval: TimeInterval, $when: DateTime) {
}
}
}
query GetDrillRunLeaderboard(
$drillTag: String!
$interval: TimeInterval
$limit: Int = 50
) {
getDrillRunLeaderboard(
drillTag: $drillTag
interval: $interval
limit: $limit
) {
entries {
id
runLength
videoId
user {
id
username
profileImageUri
}
}
youRun {
id
runLength
videoId
}
youRank
totalPlayers
}
}

View File

@@ -50,6 +50,9 @@ query GetAvailableSubscriptionOptions {
query GetSubscriptionStatus {
getUserSubscriptionStatus {
hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
subscriptionStatus
currentPeriodStart
currentPeriodEnd
@@ -59,9 +62,35 @@ query GetSubscriptionStatus {
}
}
query GetAppleAppAccountToken {
getAppleAppAccountToken
}
mutation SyncAppleSubscription($signedTransactionInfo: String!) {
syncAppleSubscription(
input: { signedTransactionInfo: $signedTransactionInfo }
) {
ok
errorCode
errorMessage
hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
appleStatus
originalTransactionId
latestTransactionId
productId
expiresAt
}
}
mutation CancelSubscription {
cancelSubscription {
hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
subscriptionStatus
currentPeriodStart
currentPeriodEnd

View File

@@ -31,11 +31,6 @@ type Query {
limit: Int! = 50
requiredTags: [String!] = null
): RunLeaderboardGQL!
getDrillRunLeaderboard(
drillTag: String!
interval: TimeInterval = null
limit: Int! = 50
): DrillRunLeaderboardGQL!
getMakesLeaderboard(
interval: TimeInterval = null
when: DateTime = null
@@ -755,13 +750,6 @@ type RunLeaderboardGQL {
entries: [RunGQL!]!
}
type DrillRunLeaderboardGQL {
entries: [RunGQL!]!
youRun: RunGQL
youRank: Int
totalPlayers: Int!
}
type CountLeaderboardGQL {
entries: [UserShotCountEntry!]!
}
@@ -996,7 +984,6 @@ type UserRelationship {
type StripeSubscriptionOptionsGQL {
products: [StripeProductGQL!]!
trialPeriodDays: Int
appleIap: AppleIapSubscriptionOptionsGQL!
}
type StripeProductGQL {
@@ -1017,11 +1004,6 @@ type StripePriceGQL {
active: Boolean!
}
type AppleIapSubscriptionOptionsGQL {
enabled: Boolean!
proMonthlyProductId: String
}
type UserSubscriptionStatusGQL {
hasActiveSubscription: Boolean!
entitlementSource: EntitlementSourceTypeEnum