Compare commits

...

13 Commits

Author SHA1 Message Date
Dean Wenstrand
d428a8caa2 VideoCardFields: fetch stream isCompleted + lastSegmentUploadedAt
All checks were successful
Tests / Tests (pull_request) Successful in 10s
Lets the feed derive upload state (uploading vs paused vs processing) per card.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 15:16:11 -07:00
48207e12ee Merge pull request 'Add lastSegmentUploadedAt to UploadStreamGQL' (#265) from dean/last-uploaded-chunk into master
Reviewed-on: #265
2026-06-20 21:45:32 +00:00
Dean Wenstrand
1d403f8155 Add lastSegmentUploadedAt to UploadStreamGQL
All checks were successful
Tests / Tests (pull_request) Successful in 10s
Surfaces the timestamp of the most recently uploaded chunk so clients can tell
an actively-uploading stream from a partially-uploaded, stalled/paused one
(combined with isCompleted).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 14:40:40 -07:00
6758f3e77a Merge pull request 'Add bio field to user (UserFragment + editUser)' (#264) from dean/profile-bio into master
Reviewed-on: #264
2026-06-19 21:27:52 +00:00
Dean Wenstrand
79979b001a Add bio field to user (UserFragment + editUser)
All checks were successful
Tests / Tests (pull_request) Successful in 10s
Expose UserGQL.bio in UserFragment and let editUser set it; regenerated
codegen. Rebased onto current master.
2026-06-19 14:14:24 -07:00
49fbebd0c2 Merge pull request 'Fix duplicate Apple IAP selection' (#263) from loewy/fix-duplicate-apple-iap-selection into master
Reviewed-on: #263
2026-06-18 21:39:20 +00:00
9219451c8d Fix duplicate Apple IAP selection
All checks were successful
Tests / Tests (pull_request) Successful in 11s
2026-06-18 14:32:37 -07:00
42601f9587 Merge pull request 'Add Apple subscription mobile operations' (#255) from apple-iap-pr4-mobile-ops into master
Reviewed-on: #255
2026-06-18 20:03:10 +00:00
acfb750265 Merge pull request 'Add Apple IAP product IDs to subscription options' (#262) from loewy/apple-iap-product-options into master
Reviewed-on: #262
2026-06-18 01:59:53 +00:00
ffa96a24c3 Add Apple subscription mobile operations
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2026-06-17 18:39:36 -07:00
5b73dd3a83 Add Apple IAP product IDs to subscription options
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2026-06-17 18:22:47 -07:00
d1bc29b41b Add Apple IAP product config to subscription options
All checks were successful
Tests / Tests (pull_request) Successful in 11s
2026-06-16 18:31:36 -07:00
853769e183 Add Apple subscription mobile operations 2026-06-16 18:31:36 -07:00
5 changed files with 258 additions and 0 deletions

View File

@@ -83,6 +83,7 @@ export type AppleIapSubscriptionOptionsGql = {
__typename?: "AppleIapSubscriptionOptionsGQL"; __typename?: "AppleIapSubscriptionOptionsGQL";
enabled: Scalars["Boolean"]["output"]; enabled: Scalars["Boolean"]["output"];
proMonthlyProductId?: Maybe<Scalars["String"]["output"]>; proMonthlyProductId?: Maybe<Scalars["String"]["output"]>;
productIds: Array<Scalars["String"]["output"]>;
}; };
export type BankFeaturesGql = { export type BankFeaturesGql = {
@@ -326,6 +327,7 @@ export type EditShotReturn = {
export type EditUserInputGql = { export type EditUserInputGql = {
agreesToMarketing?: InputMaybe<Scalars["Boolean"]["input"]>; agreesToMarketing?: InputMaybe<Scalars["Boolean"]["input"]>;
bio?: InputMaybe<Scalars["String"]["input"]>;
fargoRating?: InputMaybe<Scalars["Int"]["input"]>; fargoRating?: InputMaybe<Scalars["Int"]["input"]>;
username?: InputMaybe<Scalars["String"]["input"]>; username?: InputMaybe<Scalars["String"]["input"]>;
videosPrivateByDefault?: InputMaybe<Scalars["Boolean"]["input"]>; videosPrivateByDefault?: InputMaybe<Scalars["Boolean"]["input"]>;
@@ -3539,6 +3541,7 @@ export type UploadStreamGql = {
initPlaylistUploadStatus?: Maybe<InitPlaylistUploadStatusEnum>; initPlaylistUploadStatus?: Maybe<InitPlaylistUploadStatusEnum>;
isCompleted: Scalars["Boolean"]["output"]; isCompleted: Scalars["Boolean"]["output"];
lastIntendedSegmentBound?: Maybe<Scalars["Int"]["output"]>; lastIntendedSegmentBound?: Maybe<Scalars["Int"]["output"]>;
lastSegmentUploadedAt?: Maybe<Scalars["DateTime"]["output"]>;
linksRequested: Scalars["Int"]["output"]; linksRequested: Scalars["Int"]["output"];
lowestUnuploadedSegmentIndex: Scalars["Int"]["output"]; lowestUnuploadedSegmentIndex: Scalars["Int"]["output"];
resolution: VideoResolutionGql; resolution: VideoResolutionGql;
@@ -3555,6 +3558,7 @@ export type UserGql = {
__typename?: "UserGQL"; __typename?: "UserGQL";
activeVideoId?: Maybe<Scalars["Int"]["output"]>; activeVideoId?: Maybe<Scalars["Int"]["output"]>;
agreesToMarketing?: Maybe<Scalars["Boolean"]["output"]>; agreesToMarketing?: Maybe<Scalars["Boolean"]["output"]>;
bio?: Maybe<Scalars["String"]["output"]>;
createdAt?: Maybe<Scalars["DateTime"]["output"]>; createdAt?: Maybe<Scalars["DateTime"]["output"]>;
fargoRating?: Maybe<Scalars["Int"]["output"]>; fargoRating?: Maybe<Scalars["Int"]["output"]>;
firebaseUid?: Maybe<Scalars["String"]["output"]>; firebaseUid?: Maybe<Scalars["String"]["output"]>;
@@ -4280,6 +4284,8 @@ export type GetFeedQuery = {
id: string; id: string;
lastIntendedSegmentBound?: number | null; lastIntendedSegmentBound?: number | null;
streamSegmentType: StreamSegmentTypeEnum; streamSegmentType: StreamSegmentTypeEnum;
isCompleted: boolean;
lastSegmentUploadedAt?: any | null;
} | null; } | null;
tags: Array<{ tags: Array<{
__typename?: "VideoTag"; __typename?: "VideoTag";
@@ -4391,6 +4397,8 @@ export type VideoCardFieldsFragment = {
id: string; id: string;
lastIntendedSegmentBound?: number | null; lastIntendedSegmentBound?: number | null;
streamSegmentType: StreamSegmentTypeEnum; streamSegmentType: StreamSegmentTypeEnum;
isCompleted: boolean;
lastSegmentUploadedAt?: any | null;
} | null; } | null;
tags: Array<{ tags: Array<{
__typename?: "VideoTag"; __typename?: "VideoTag";
@@ -4535,6 +4543,8 @@ export type GetVideoFeedQuery = {
id: string; id: string;
lastIntendedSegmentBound?: number | null; lastIntendedSegmentBound?: number | null;
streamSegmentType: StreamSegmentTypeEnum; streamSegmentType: StreamSegmentTypeEnum;
isCompleted: boolean;
lastSegmentUploadedAt?: any | null;
} | null; } | null;
tags: Array<{ tags: Array<{
__typename?: "VideoTag"; __typename?: "VideoTag";
@@ -5057,6 +5067,12 @@ export type GetAvailableSubscriptionOptionsQuery = {
active: boolean; active: boolean;
}>; }>;
}>; }>;
appleIap: {
__typename?: "AppleIapSubscriptionOptionsGQL";
enabled: boolean;
proMonthlyProductId?: string | null;
productIds: Array<string>;
};
}; };
}; };
@@ -5069,6 +5085,9 @@ export type GetSubscriptionStatusQuery = {
getUserSubscriptionStatus: { getUserSubscriptionStatus: {
__typename?: "UserSubscriptionStatusGQL"; __typename?: "UserSubscriptionStatusGQL";
hasActiveSubscription: boolean; hasActiveSubscription: boolean;
entitlementSource?: EntitlementSourceTypeEnum | null;
entitlementStartsAt?: any | null;
entitlementEndsAt?: any | null;
subscriptionStatus?: StripeSubscriptionStatusEnum | null; subscriptionStatus?: StripeSubscriptionStatusEnum | null;
currentPeriodStart?: any | null; currentPeriodStart?: any | null;
currentPeriodEnd?: any | null; currentPeriodEnd?: any | null;
@@ -5078,6 +5097,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<{ export type CancelSubscriptionMutationVariables = Exact<{
[key: string]: never; [key: string]: never;
}>; }>;
@@ -5087,6 +5138,9 @@ export type CancelSubscriptionMutation = {
cancelSubscription: { cancelSubscription: {
__typename?: "UserSubscriptionStatusGQL"; __typename?: "UserSubscriptionStatusGQL";
hasActiveSubscription: boolean; hasActiveSubscription: boolean;
entitlementSource?: EntitlementSourceTypeEnum | null;
entitlementStartsAt?: any | null;
entitlementEndsAt?: any | null;
subscriptionStatus?: StripeSubscriptionStatusEnum | null; subscriptionStatus?: StripeSubscriptionStatusEnum | null;
currentPeriodStart?: any | null; currentPeriodStart?: any | null;
currentPeriodEnd?: any | null; currentPeriodEnd?: any | null;
@@ -5894,6 +5948,7 @@ export type EditProfileImageUriMutation = {
username: string; username: string;
isAdmin?: boolean | null; isAdmin?: boolean | null;
profileImageUri?: string | null; profileImageUri?: string | null;
bio?: string | null;
fargoRating?: number | null; fargoRating?: number | null;
activeVideoId?: number | null; activeVideoId?: number | null;
createdAt?: any | null; createdAt?: any | null;
@@ -5914,6 +5969,7 @@ export type GetLoggedInUserQuery = {
username: string; username: string;
isAdmin?: boolean | null; isAdmin?: boolean | null;
profileImageUri?: string | null; profileImageUri?: string | null;
bio?: string | null;
fargoRating?: number | null; fargoRating?: number | null;
activeVideoId?: number | null; activeVideoId?: number | null;
createdAt?: any | null; createdAt?: any | null;
@@ -5936,6 +5992,7 @@ export type GetUserQuery = {
username: string; username: string;
isAdmin?: boolean | null; isAdmin?: boolean | null;
profileImageUri?: string | null; profileImageUri?: string | null;
bio?: string | null;
fargoRating?: number | null; fargoRating?: number | null;
activeVideoId?: number | null; activeVideoId?: number | null;
createdAt?: any | null; createdAt?: any | null;
@@ -6125,6 +6182,7 @@ export type EditUserMutationVariables = Exact<{
fargoRating?: InputMaybe<Scalars["Int"]["input"]>; fargoRating?: InputMaybe<Scalars["Int"]["input"]>;
videosPrivateByDefault?: InputMaybe<Scalars["Boolean"]["input"]>; videosPrivateByDefault?: InputMaybe<Scalars["Boolean"]["input"]>;
agreesToMarketing?: InputMaybe<Scalars["Boolean"]["input"]>; agreesToMarketing?: InputMaybe<Scalars["Boolean"]["input"]>;
bio?: InputMaybe<Scalars["String"]["input"]>;
}>; }>;
export type EditUserMutation = { export type EditUserMutation = {
@@ -6138,6 +6196,7 @@ export type EditUserMutation = {
updatedAt?: any | null; updatedAt?: any | null;
videosPrivateByDefault?: boolean | null; videosPrivateByDefault?: boolean | null;
agreesToMarketing?: boolean | null; agreesToMarketing?: boolean | null;
bio?: string | null;
}; };
}; };
@@ -6155,6 +6214,7 @@ export type UserFragmentFragment = {
username: string; username: string;
isAdmin?: boolean | null; isAdmin?: boolean | null;
profileImageUri?: string | null; profileImageUri?: string | null;
bio?: string | null;
fargoRating?: number | null; fargoRating?: number | null;
activeVideoId?: number | null; activeVideoId?: number | null;
createdAt?: any | null; createdAt?: any | null;
@@ -6178,6 +6238,7 @@ export type GetUsersMatchingQuery = {
username: string; username: string;
isAdmin?: boolean | null; isAdmin?: boolean | null;
profileImageUri?: string | null; profileImageUri?: string | null;
bio?: string | null;
fargoRating?: number | null; fargoRating?: number | null;
activeVideoId?: number | null; activeVideoId?: number | null;
createdAt?: any | null; createdAt?: any | null;
@@ -6443,6 +6504,8 @@ export type GetVideoCardQuery = {
id: string; id: string;
lastIntendedSegmentBound?: number | null; lastIntendedSegmentBound?: number | null;
streamSegmentType: StreamSegmentTypeEnum; streamSegmentType: StreamSegmentTypeEnum;
isCompleted: boolean;
lastSegmentUploadedAt?: any | null;
} | null; } | null;
tags: Array<{ tags: Array<{
__typename?: "VideoTag"; __typename?: "VideoTag";
@@ -7156,6 +7219,8 @@ export const VideoCardFieldsFragmentDoc = gql`
id id
lastIntendedSegmentBound lastIntendedSegmentBound
streamSegmentType streamSegmentType
isCompleted
lastSegmentUploadedAt
} }
tableSize tableSize
pocketSize pocketSize
@@ -7357,6 +7422,7 @@ export const UserFragmentFragmentDoc = gql`
username username
isAdmin isAdmin
profileImageUri profileImageUri
bio
fargoRating fargoRating
activeVideoId activeVideoId
createdAt createdAt
@@ -10661,6 +10727,11 @@ export const GetAvailableSubscriptionOptionsDocument = gql`
active active
} }
} }
appleIap {
enabled
proMonthlyProductId
productIds
}
} }
} }
`; `;
@@ -10733,6 +10804,9 @@ export const GetSubscriptionStatusDocument = gql`
query GetSubscriptionStatus { query GetSubscriptionStatus {
getUserSubscriptionStatus { getUserSubscriptionStatus {
hasActiveSubscription hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
subscriptionStatus subscriptionStatus
currentPeriodStart currentPeriodStart
currentPeriodEnd currentPeriodEnd
@@ -10807,10 +10881,146 @@ export type GetSubscriptionStatusQueryResult = Apollo.QueryResult<
GetSubscriptionStatusQuery, GetSubscriptionStatusQuery,
GetSubscriptionStatusQueryVariables 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` export const CancelSubscriptionDocument = gql`
mutation CancelSubscription { mutation CancelSubscription {
cancelSubscription { cancelSubscription {
hasActiveSubscription hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
subscriptionStatus subscriptionStatus
currentPeriodStart currentPeriodStart
currentPeriodEnd currentPeriodEnd
@@ -13215,6 +13425,7 @@ export const EditUserDocument = gql`
$fargoRating: Int $fargoRating: Int
$videosPrivateByDefault: Boolean $videosPrivateByDefault: Boolean
$agreesToMarketing: Boolean $agreesToMarketing: Boolean
$bio: String
) { ) {
editUser( editUser(
input: { input: {
@@ -13222,6 +13433,7 @@ export const EditUserDocument = gql`
fargoRating: $fargoRating fargoRating: $fargoRating
videosPrivateByDefault: $videosPrivateByDefault videosPrivateByDefault: $videosPrivateByDefault
agreesToMarketing: $agreesToMarketing agreesToMarketing: $agreesToMarketing
bio: $bio
} }
) { ) {
id id
@@ -13231,6 +13443,7 @@ export const EditUserDocument = gql`
updatedAt updatedAt
videosPrivateByDefault videosPrivateByDefault
agreesToMarketing agreesToMarketing
bio
} }
} }
`; `;
@@ -13256,6 +13469,7 @@ export type EditUserMutationFn = Apollo.MutationFunction<
* fargoRating: // value for 'fargoRating' * fargoRating: // value for 'fargoRating'
* videosPrivateByDefault: // value for 'videosPrivateByDefault' * videosPrivateByDefault: // value for 'videosPrivateByDefault'
* agreesToMarketing: // value for 'agreesToMarketing' * agreesToMarketing: // value for 'agreesToMarketing'
* bio: // value for 'bio'
* }, * },
* }); * });
*/ */

View File

@@ -42,6 +42,8 @@ fragment VideoCardFields on VideoGQL {
id id
lastIntendedSegmentBound lastIntendedSegmentBound
streamSegmentType streamSegmentType
isCompleted
lastSegmentUploadedAt
} }
tableSize tableSize
pocketSize pocketSize

View File

@@ -44,12 +44,20 @@ query GetAvailableSubscriptionOptions {
active active
} }
} }
appleIap {
enabled
proMonthlyProductId
productIds
}
} }
} }
query GetSubscriptionStatus { query GetSubscriptionStatus {
getUserSubscriptionStatus { getUserSubscriptionStatus {
hasActiveSubscription hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
subscriptionStatus subscriptionStatus
currentPeriodStart currentPeriodStart
currentPeriodEnd currentPeriodEnd
@@ -59,9 +67,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 { mutation CancelSubscription {
cancelSubscription { cancelSubscription {
hasActiveSubscription hasActiveSubscription
entitlementSource
entitlementStartsAt
entitlementEndsAt
subscriptionStatus subscriptionStatus
currentPeriodStart currentPeriodStart
currentPeriodEnd currentPeriodEnd

View File

@@ -177,6 +177,7 @@ mutation editUser(
$fargoRating: Int $fargoRating: Int
$videosPrivateByDefault: Boolean $videosPrivateByDefault: Boolean
$agreesToMarketing: Boolean $agreesToMarketing: Boolean
$bio: String
) { ) {
editUser( editUser(
input: { input: {
@@ -184,6 +185,7 @@ mutation editUser(
fargoRating: $fargoRating fargoRating: $fargoRating
videosPrivateByDefault: $videosPrivateByDefault videosPrivateByDefault: $videosPrivateByDefault
agreesToMarketing: $agreesToMarketing agreesToMarketing: $agreesToMarketing
bio: $bio
} }
) { ) {
id id
@@ -193,6 +195,7 @@ mutation editUser(
updatedAt updatedAt
videosPrivateByDefault videosPrivateByDefault
agreesToMarketing agreesToMarketing
bio
} }
} }
@@ -206,6 +209,7 @@ fragment UserFragment on UserGQL {
username username
isAdmin isAdmin
profileImageUri profileImageUri
bio
fargoRating fargoRating
activeVideoId activeVideoId
createdAt createdAt

View File

@@ -356,6 +356,7 @@ type UserGQL {
activeVideoId: Int activeVideoId: Int
stripeCustomerId: String stripeCustomerId: String
profileImageUri: String profileImageUri: String
bio: String
createdAt: DateTime createdAt: DateTime
updatedAt: DateTime updatedAt: DateTime
videosPrivateByDefault: Boolean videosPrivateByDefault: Boolean
@@ -529,6 +530,7 @@ type UploadStreamGQL {
initPlaylistUploadStatus: InitPlaylistUploadStatusEnum initPlaylistUploadStatus: InitPlaylistUploadStatusEnum
lowestUnuploadedSegmentIndex: Int! lowestUnuploadedSegmentIndex: Int!
uploadCompletionCursor: Int! uploadCompletionCursor: Int!
lastSegmentUploadedAt: DateTime
errors: [StreamErrorGQL!]! errors: [StreamErrorGQL!]!
createdAt: DateTime! createdAt: DateTime!
updatedAt: DateTime! updatedAt: DateTime!
@@ -1034,6 +1036,7 @@ type StripePriceGQL {
type AppleIapSubscriptionOptionsGQL { type AppleIapSubscriptionOptionsGQL {
enabled: Boolean! enabled: Boolean!
proMonthlyProductId: String proMonthlyProductId: String
productIds: [String!]!
} }
type UserSubscriptionStatusGQL { type UserSubscriptionStatusGQL {
@@ -1363,6 +1366,7 @@ input EditUserInputGQL {
fargoRating: Int = null fargoRating: Int = null
videosPrivateByDefault: Boolean = null videosPrivateByDefault: Boolean = null
agreesToMarketing: Boolean = null agreesToMarketing: Boolean = null
bio: String = null
} }
type SyncAppleSubscriptionResultGQL { type SyncAppleSubscriptionResultGQL {