/** * Warning: this file is not isomorphic. Do not functionally import this file * from client code. */ import { Scope as ExternalEndpointsScope } from '@devvit/protos/json/devvit/plugin/externalendpoints/v1alpha/externalendpoints.js'; import { Scope as RunAsScope } from '@devvit/protos/json/reddit/devvit/app_permission/v1/app_permission.js'; import type { JsonObject, JsonValue } from '../json.js'; import type { Product } from '../payments/Product.js'; /** * devvit.json with defaults. See config-file.v1.json schema. Schema is assumed * to be v1. */ export type AppConfig = { schema: 'v1'; name: string; media?: { dir: string; }; permissions: AppPermissionConfig; post?: AppPostConfig; server?: AppServerConfig; triggers?: AppTriggersConfig; blocks?: AppBlocksConfig; dev?: AppDevConfig; scripts?: AppScriptsConfig; menu?: AppMenuConfig; payments?: AppPaymentsConfig; scheduler?: AppSchedulerConfig; settings?: AppSettingsConfig; forms?: AppFormsConfig; marketingAssets?: AppMarketingAssetsConfig; additionalSourceRoots?: string[]; sourceIgnores?: string[]; /** The original config as parsed. Used for writebacks. */ json: AppConfigJson; }; export type AppBlocksConfig = { entry: string; }; /** Describes plugin usage. */ export type AppPermissionConfig = { blob: boolean; chromeless: boolean; externalEndpoints: boolean; http: { enable: boolean; domains: string[]; }; journeys: boolean; media: boolean; menu: boolean; payments: boolean; realtime: boolean; redis: boolean; reddit: { enable: boolean; scope: AppScopeConfig; asUser: RunAsScope[]; }; settings: boolean; triggers: boolean; }; export type AppPostConfig = { dir: string; entrypoints: AppPostEntrypointsConfig; }; export type AppPostEntrypointsConfig = { [name: string]: AppPostEntrypointConfig; default: AppPostEntrypointConfig; }; export type AppPostEntrypointConfig = { entry: string; name: string; height: AppPostHeightConfig; inline?: boolean; styles?: AppPostEntrypointStylesConfig; }; export type AppPostHeightConfig = 'short' | 'regular' | 'tall'; export type AppPostEntrypointStyleHeightConfig = AppPostHeightConfig | number; export type AppPostEntrypointStylesConfig = { backgroundColor?: string; backgroundColorDark?: string; height?: AppPostEntrypointStyleHeightConfig; shareImageUrl?: string; }; export type AppScopeConfig = 'user' | 'moderator'; export type AppServerConfig = { dir: string; entry: string; externalEndpoints?: ExternalEndpointsConfig; }; export type ExternalEndpointsConfig = { [name: string]: ExternalEndpointConfig; }; export type ExternalEndpointConfig = { endpoint: string; name: string; scopes: ExternalEndpointsScope[]; }; /** * Keys are assumed to have the format of `on${keyof TriggerEventType}` in * blocks.template.ts. Values are empty when callback is provided by Blocks. */ export type AppTriggersConfig = { onAppInstall?: string; onAppUpgrade?: string; onAutomoderatorFilterComment?: string; onAutomoderatorFilterPost?: string; onCommentCreate?: string; onCommentDelete?: string; onCommentReport?: string; onCommentSubmit?: string; onCommentUpdate?: string; onMentionInCommentCreate?: string; onModAction?: string; onModMail?: string; onPostCreate?: string; onPostDelete?: string; onPostFlairUpdate?: string; onPostNsfwUpdate?: string; onPostReport?: string; onPostSpoilerUpdate?: string; onPostSubmit?: string; onPostUpdate?: string; }; export type AppMenuUserTypeConfig = 'moderator' | 'user'; export type AppMenuLocationConfig = 'comment' | 'post' | 'subreddit'; export type AppMenuPostFilterConfig = 'currentApp' | 'none'; export type AppMenuItemConfig = { label: string; description: string; forUserType: AppMenuUserTypeConfig; location: AppMenuLocationConfig[]; endpoint: string; postFilter: AppMenuPostFilterConfig; }; export type AppMenuConfig = { items: AppMenuItemConfig[]; }; export type AppPaymentsConfig = { products: Product[]; productsFile?: string; endpoints: { fulfillOrder: string; refundOrder?: string; }; }; export type AppFormsConfig = { [formName: string]: string; }; export type AppMarketingAssetsConfig = { icon?: string; }; export type AppDevConfig = { subreddit?: string; }; export type AppScriptsConfig = { dev?: string; build?: string; }; export type AppSchedulerConfig = { tasks: { [name: string]: AppSchedulerTaskConfig; }; }; export type AppSchedulerTaskConfig = { endpoint: string; cron?: string; data?: JsonObject; }; export type AppSettingsConfig = { global?: { [name: string]: Exclude; }; subreddit?: { [name: string]: AppSettingConfig; }; }; export type AppSettingConfig = AppStringSettingConfig | AppParagraphSettingConfig | AppNumberSettingConfig | AppBooleanSettingConfig | AppSelectSettingConfig | AppMultiSelectSettingConfig | AppSettingGroupConfig; export type AppBaseSettingConfig = { name: string; label: string; helpText?: string; validationEndpoint?: string; }; export type AppStringSettingConfig = AppBaseSettingConfig & { type: 'string'; placeholder?: string; defaultValue?: string; isSecret?: boolean; }; export type AppParagraphSettingConfig = AppBaseSettingConfig & { type: 'paragraph'; placeholder?: string; defaultValue?: string; }; export type AppNumberSettingConfig = AppBaseSettingConfig & { type: 'number'; defaultValue?: number; }; export type AppBooleanSettingConfig = AppBaseSettingConfig & { type: 'boolean'; defaultValue?: boolean; }; export type AppSelectSettingConfig = AppBaseSettingConfig & { type: 'select'; options: Array<{ label: string; value: string; }>; defaultValue?: string; }; export type AppMultiSelectSettingConfig = AppBaseSettingConfig & { type: 'multiSelect'; options: Array<{ label: string; value: string; }>; defaultValue?: string[]; }; export type AppSettingGroupConfig = Omit & { type: 'group'; fields: { [name: string]: AppSettingConfig; }; }; export type AppBlocksConfigJson = { entry?: string; forms?: { enable?: boolean; }; menu?: { enable?: boolean; }; settings?: { enable?: boolean; }; triggers?: (keyof AppTriggersConfig)[]; }; export type AppExternalEndpointsScopeJSON = 'install' | 'global'; export type AppFormsConfigJson = { [formName: string]: string; }; export type AppMenuConfigJson = { items?: { label: string; description?: string; forUserType: AppMenuUserTypeConfig; location: AppMenuLocationConfig | AppMenuLocationConfig[]; endpoint: string; postFilter: AppMenuPostFilterConfig; }[]; }; export type AppPaymentsConfigJson = { endpoints: { fulfillOrder: string; refundOrder?: string; }; } & ({ products: Product[]; } | { productsFile: string; }); export type AppPermissionConfigJson = { blob?: boolean; chromeless?: boolean; http?: { enable?: boolean; domains?: string[]; }; journeys?: boolean; media?: boolean; payments?: boolean; realtime?: boolean; redis?: boolean; reddit?: { enable?: boolean; scope?: AppScopeConfig; asUser?: string[]; } | boolean; }; export type AppPostConfigJson = { dir?: string; entrypoints?: { [name: string]: AppPostEntrypointConfigJson; } & { default: Partial; }; }; export type AppPostEntrypointConfigJson = { entry: string; height?: AppPostHeightConfig; inline?: boolean; styles?: AppPostEntrypointStylesConfig; }; export type AppSchedulerConfigJson = { tasks: { [name: string]: AppSchedulerTaskConfig | string; }; }; export type AppSettingConfigJson = Omit | Omit | Omit | Omit | Omit | Omit | AppSettingGroupConfigJson; export type AppSettingsConfigJson = { global?: { [name: string]: Exclude; }; subreddit?: { [name: string]: AppSettingConfigJson; }; }; export type AppSettingGroupConfigJson = Omit & { fields: { [name: string]: AppSettingConfigJson; }; }; export declare function parseAppConfig(str: string, allowUninitializedConfig: boolean): AppConfig; export declare function parseAppConfigJson(json: JsonValue, allowUninitializedConfig: boolean): AppConfig; //# sourceMappingURL=config-file.v1.d.ts.map