import Node, { CRUDNodeInfo, CRUDEdgeInfoSet } from './node'; import { AdAccount, AdNetworkAnalyticsAsyncQueryResult, Album, Application, ApplicationAppEventTypes, ApplicationPermission, ApplicationPermissionStatus, AppRequest, AsyncSession, Business, ButtonAutoDetectionDeviceSelection, CanvasAppAsset, Comment, CommerceMerchantSettings, ConversionConfig, CPASAdvertiserPartnershipRecommendation, CPASCollaborationRequest, CTCertDomain, DACheck, GamesIAPProduct, InsightsQueryResult, MobileSDKGK, Photo, ProductCatalog, Profile, ProfilePictureSource, Reaction, CommerceReturn, Role, SDKMLModel, TestAccount, Conversation, Message, Destination, Doc, Event, Flight, FriendList, GroupDoc, GroupMessage, ImageCopyright, LeadGenData, UserLeadGenInfo, Link, LiveVideo, LiveVideoInputStream, LiveEncoder, User, Page, LiveVideoError, VideoPoll, MailingAddress, GroupFile, MediaFingerprint, NativeOffer, NativeOfferView, OfflineConversionDataSet, OfflineConversionDataSetUpload, CustomAudience, CustomConversion, OfflineConversionDataSetStats, CommerceMerchantTaxSettings, Video, Post, SignalsUploadProgress, GamesIAPOrder, PagePost, AssignedUser, AudioCopyright, CommerceMerchantSettingsSetupStatus, CommerceOrder, CommerceOrderTransactionDetail, CommercePayout, InsightsResult, InstagramUser, InstantArticle, InstantArticleInsightsQueryResult, MessagingFeatureReview, PageCallToAction, PageSettings, PageThreadOwner, PageUserMessageThreadLabel, Persona, Recommendation, RTBDynamicPost, Tab, VideoCopyright, VideoCopyrightRule, VideoList, EventTour, Group, InsightBreakdown, BusinessUser, BusinessAssetGroup, Permission, URL, UserIDForApp, AdStudy, PaymentEnginePayment, PaymentSubscription, UserIDForPage, AppRequestFormerRecipient, } from '../graph-api/types'; import { CustomUserSettings } from '../messenger-platform/apis/custom-user-settings'; import { MessengerProfile } from '../messenger-platform/apis/messenger-profile'; import { PageMessageRequest } from '../messenger-platform/apis/send'; interface NodeGetterTypeParams { node: CRUDNodeInfo; edges: CRUDEdgeInfoSet; } export type APISpec = { [key: string]: NodeGetterTypeParams }; export interface APIv9 extends APISpec { Album: { node: NodeSpec; edges: Pick & { Photos: EdgeSpec; Picture: EdgeSpec & { /** * Default value: `true` * * By default the picture edge will return a picture instead of a JSON response. If you want the picture edge to return JSON that describes the image set redirect=0 when you make the request. */ redirect: boolean; /** * Default value: `album` * * The size of this picture. It can be one of the following values: thumbnail, small, album. */ type: 'thumbnail' | 'small' | 'album'; }; }; }; AppRequest: EdgelessNodeSpec; Application: { node: NodeSpec; edges: { Accounts: EdgeSpec< TestAccount & { access_token: string }, 'accounts' > & { read_params: { /** * The type of user requested */ type: 'test-users'; }; }; AdNetworkAnalyticsResults: EdgeSpec< AdNetworkAnalyticsAsyncQueryResult, 'adnetworkanalytics_results' > & { read_params: { /** * Default value: `Array` * * Set of query ids to get result for */ query_ids: string; }; }; Agencies: EdgeSpec; AppEventTypes: EdgeSpec< ApplicationAppEventTypes, 'app_events_types' >; AppInsights: EdgeSpec & { read_params: { breakdowns: InsightBreakdown[]; ecosystem: 'GAME' | 'NON_GAME'; event_name: string; intervals_to_aggregate: number; since: string; until: string; } & ( | { metric_key: | 'api_avg_request_time' | 'api_calls' | 'api_errors' | 'payments_daily_chargebacks' | 'payments_daily_refunds' | 'payments_daily_spend'; period: 'daily' | 'range'; } | { metric_key: | 'facebook_features_monthly_active_users' | 'facebook_features_weekly_active_users' | 'facebook_features_daily_active_users'; period: 'daily'; } ); }; AppInstalledGroups: EdgeSpec & { read_params: { group_id: string; }; }; AppAssets: EdgeSpec; AuthorizedAdAccounts: EdgeSpec< AdAccount, 'authorized_adaccounts' > & { read_params: { business: string; }; }; ButtonAutoDetectionDeviceSelection: EdgeSpec< ButtonAutoDetectionDeviceSelection, 'button_auto_detection_device_selection' > & { read_params: { device_id: string; }; }; DAChecks: EdgeSpec & { read_params: { checks: string[]; connection_method: 'ALL' | 'APP' | 'BROWSER' | 'SERVER'; }; }; Events: EdgeSpec & { read_params: { include_canceld: boolean; type: | 'attending' | 'created' | 'declined' | 'maybe' | 'not_replied'; }; }; iOSSKAdNetworkConversionConfig: EdgeSpec< ConversionConfig, 'ios_skadnetwork_conversion_config' >; MobileSDKGK: EdgeSpec & { read_params: { device_id: string; extinfo: { 0: string; 1: string; 2: string; 3: string; 4: string; 5: string; 6: string; 7: string; 8: string; 9: number; 10: number; 11: string; 12: number; 13: number; 14: number; 15: number; }; platform: 'ANDROID' | 'IOS'; sdk_version: string; }; }; ModelAsset: EdgeSpec; Permissions: EdgeSpec & { read_params: { android_key_hash: string; ios_bundle_id: string; permission: unknown[]; // Permission[] proxied_app_id: number; status: ApplicationPermissionStatus[]; }; }; Products: EdgeSpec & { read_params: { product_ids: string[]; }; }; Purchases: EdgeSpec & { read_params: { is_premium: boolean; }; }; Roles: EdgeSpec; SubscribedDomains: EdgeSpec; SubscribedDomainsPhishing: EdgeSpec< CTCertDomain, 'subscribed_domains_phishing' >; }; }; AsyncSession: EdgelessNodeSpec; CPASAdvertiserPartnershipRecommendation: EdgelessNodeSpec; CPASCollaborationRequest: EdgelessNodeSpec; CTCertDomain: EdgelessNodeSpec; Comment: { node: NodeSpec; edges: { Comments: CommentsEdge; Likes: LikesEdge; Reactions: ReactionsEdge; PrivateReplies: EdgeSpec; }; }; CommerceMerchantSettings: { node: NodeSpec; edges: { OrderManagementsApps: EdgeSpec< Application, 'order_management_apps' >; ProductCatalogs: EdgeSpec; Returns: EdgeSpec; SetupStatus: EdgeSpec; TaxSettings: EdgeSpec; }; }; Conversation: { node: NodeSpec; edges: { Messages: EdgeSpec; }; }; Destination: EdgelessNodeSpec; Doc: EdgelessNodeSpec; Event: { node: NodeSpec; edges: { Roles: EdgeSpec< Profile & { role_type: unknown /* enum */ }, 'roles' >; }; }; Flight: EdgelessNodeSpec; FriendList: EdgelessNodeSpec; Group: { node: NodeSpec; edges: { Albums: EdgeSpec; Docs: EdgeSpec; Events: EdgeSpec; Feed: EdgeSpec; Files: EdgeSpec; LiveVideos: EdgeSpec & { read_params: { broadcast_status: | 'UNPUBLISHED' | 'LIVE' | 'LIVE_STOPPED' | 'PROCESSING' | 'VOD' | 'SCHEDULED_UNPUBLISHED' | 'SCHEDULED_LIVE' | 'SCHEDULED_EXPIRED' | 'SCHEDULED_CANCELED'; source: 'target' | 'owner'; }; }; Photos: EdgeSpec; Videos: EdgeSpec; }; }; GroupDoc: EdgelessNodeSpec; GroupMessage: EdgelessNodeSpec; ImageCopyright: EdgelessNodeSpec; LeadGenData: { node: NodeSpec; edges: { Leads: EdgeSpec; TestLeads: EdgeSpec; }; }; Link: { node: NodeSpec; edges: Pick; }; LiveEncoder: EdgelessNodeSpec; LiveVideo: { node: NodeSpec; edges: Pick & { BlockedUsers: EdgeSpec; CrosspostSharedPages: EdgeSpec; CrosspostedBroadcasrs: EdgeSpec< LiveVideo, 'crossposted_broadcasts' >; Errors: EdgeSpec; Polls: EdgeSpec; }; }; LiveVideoInputStream: EdgelessNodeSpec; MailingAddress: EdgelessNodeSpec; MediaFingerprint: EdgelessNodeSpec; NativeOffer: { node: NodeSpec; edges: { Views: EdgeSpec; }; }; OfflineConversionDataSet: { node: NodeSpec; edges: { AdAccounts: EdgeSpec< AdAccount & { auto_track_for_ads: boolean; auto_track_for_ads_timestamp: number; }, 'adaccounts' > & { read_params: { business: string; }; }; Agencies: EdgeSpec< Business & { permitted_roles: ('ADMIN' | 'UPLOADER' | 'ADVERTISER')[]; }, 'agencies' >; Audiences: EdgeSpec & { read_params: { ad_account: string; }; }; CustomConversations: EdgeSpec< CustomConversion, 'customconversations' > & { read_params: { ad_account: string; }; }; Stats: EdgeSpec & { read_params: { aggr_time: 'upload_time' | 'event_time'; end: number; granularity: 'daily' | 'hourly' | 'six_hourly'; skip_empty_values: boolean; start: number; user_timezone_id: number; }; }; Uploads: EdgeSpec & { read_params: { end_time: string; order: 'ASCENDING' | 'DESCENDING'; sort_by: | 'CREATION_TIME' | 'FIRST_UPLOAD_TIME' | 'LAST_UPLOAD_TIME' | 'API_CALLS' | 'EVENT_TIME_MIN' | 'EVENT_TIME_MAX' | 'IS_EXCLUDED_FOR_LIFT'; start_time: string; upload_tag: string; }; }; }; }; OfflineConversionDataSetUpload: { node: NodeSpec; edges: { Progress: EdgeSpec; }; }; Page: { node: NodeSpec; edges: { AdsPosts: EdgeSpec & { read_params: { /** * Default value: `false` * * Exclude dynamic ad posts from the request */ exclude_dynamic_ads: boolean; /** * Default value: `false` * * Include also the INLINE_CREATE posts which are created to support delivered ads. */ include_inline_create: boolean; /** * The earliest timestamp of return data set */ since: string; /** * The latest timestamp of return data set */ until: string; }; }; Agencies: EdgeSpec; Albums: EdgeSpec; AssignedUsers: EdgeSpec; AudioMediaCopyrights: EdgeSpec< AudioCopyright, 'audio_media_copyrights' >; Blocked: EdgeSpec; CallToActions: EdgeSpec; ClaimedURLs: EdgeSpec; CommerceMerchantSettings: EdgeSpec< CommerceMerchantSettings, 'commerce_merchant_settings' >; CommerceOrders: EdgeSpec; CommercePayouts: EdgeSpec; CommerceTransactions: EdgeSpec< CommerceOrderTransactionDetail, 'commerce_transactions' >; Conversations: EdgeSpec; CopyrightWhitelistedPartners: EdgeSpec< Profile, 'copyright_whitelisted_partners' >; CrosspostWhitelistedPages: EdgeSpec< Page, 'crosspost_whitelisted_pages' >; CustomLabels: EdgeSpec; CustomUserSettings: EdgeSpec< CustomUserSettings, 'custom_user_settings' >; Events: EdgeSpec; Feed: EdgeSpec; GlobalBrandChildren: EdgeSpec; ImageCopyrights: EdgeSpec; IndexedVideos: EdgeSpec; Insights: EdgeSpec; InstagramAccounts: EdgeSpec; InstantArticles: EdgeSpec; InstantArticlesInsights: EdgeSpec< InstantArticleInsightsQueryResult, 'instant_articles_insights' >; LeadgenForms: EdgeSpec; Likes: EdgeSpec; LiveEncoders: EdgeSpec; LiveVideos: EdgeSpec; Locations: EdgeSpec; MediaFingerprints: EdgeSpec; Messages: CreateEdgeSpec; MessagingFeatureReview: EdgeSpec< MessagingFeatureReview, 'messaging_feature_review' >; MessengerProfile: CreateEdgeSpec< MessengerProfile, 'messenger_profile' >; Nativeoffers: EdgeSpec; PageBackedInstagramAccounts: EdgeSpec< InstagramUser, 'page_backed_instagram_accounts' >; Personas: EdgeSpec; Photos: EdgeSpec; Picture: EdgeSpec; Posts: EdgeSpec; ProductCatalogs: EdgeSpec; PublishedPosts: EdgeSpec; Ratings: EdgeSpec; Roles: EdgeSpec; RtbDynamicPosts: EdgeSpec; ScheduledPosts: EdgeSpec; SecondaryReceivers: EdgeSpec; Settings: EdgeSpec; ShopSetupStatus: EdgeSpec< CommerceMerchantSettingsSetupStatus, 'shop_setup_status' >; SubscribedApps: EdgeSpec; Tabs: EdgeSpec; Tagged: EdgeSpec; ThreadOwner: EdgeSpec; Tours: EdgeSpec; VideoCopyrightRules: EdgeSpec< VideoCopyrightRule, 'video_copyright_rules' >; VideoCopyrights: EdgeSpec; VideoLists: EdgeSpec; VideoMediaCopyrights: EdgeSpec< VideoCopyright, 'video_media_copyrights' >; Videos: EdgeSpec; VisitorPosts: EdgeSpec; }; }; PageCallToAction: EdgelessNodeSpec; PagePost: { node: NodeSpec; edges: Pick; }; Photo: { node: NodeSpec; edges: Pick; }; User: { node: NodeSpec; edges: { 'Albums': EdgeSpec; 'AppRequestFormerRecipients': EdgeSpec< AppRequestFormerRecipient, 'apprequestformerrecipients' >; 'AppRequests': EdgeSpec; 'BusinessUsers': EdgeSpec; 'Businesses': EdgeSpec; 'Accounts': EdgeSpec; 'AdStudies': EdgeSpec; 'Adaccounts': EdgeSpec; 'AssignedAdAccounts': EdgeSpec; 'AssignedBusinessAssetGroups': EdgeSpec< BusinessAssetGroup, 'assigned_business_asset_groups' >; 'AssignedPages': EdgeSpec; 'AssignedProductCatalogs': EdgeSpec< ProductCatalog, 'assigned_product_catalogs' >; 'Events': EdgeSpec; 'Feed': EdgeSpec; 'Friends': EdgeSpec; 'Groups': EdgeSpec; 'IdsForApps': EdgeSpec; 'IdsForBusiness': EdgeSpec; 'IdsForPages': EdgeSpec; 'Likes': EdgeSpec; 'LiveEncoders': EdgeSpec; 'LiveVideos': EdgeSpec; 'Music': EdgeSpec; 'Payment.subscriptions': EdgeSpec< PaymentSubscription, 'payment.subscriptions' >; 'PaymentTransactions': EdgeSpec< PaymentEnginePayment, 'payment_transactions' >; 'Permissions': EdgeSpec; 'PersonalAdAccounts': EdgeSpec; 'Photos': EdgeSpec; 'Picture': EdgeSpec; 'Posts': EdgeSpec; 'Videos': EdgeSpec; }; }; Video: { node: NodeSpec