@devvit/shared-types 0.12.1-next-2025-08-14-20-10-44-8b182fd0d.0 → 0.12.1-next-2025-08-14-23-15-57-1e08dab01.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devvit/shared-types",
3
- "version": "0.12.1-next-2025-08-14-20-10-44-8b182fd0d.0",
3
+ "version": "0.12.1-next-2025-08-14-23-15-57-1e08dab01.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,13 +33,13 @@
33
33
  },
34
34
  "types": "./dist/index.d.ts",
35
35
  "dependencies": {
36
- "@devvit/protos": "0.12.1-next-2025-08-14-20-10-44-8b182fd0d.0",
36
+ "@devvit/protos": "0.12.1-next-2025-08-14-23-15-57-1e08dab01.0",
37
37
  "jsonschema": "1.4.1",
38
38
  "uuid": "9.0.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@devvit/repo-tools": "0.12.1-next-2025-08-14-20-10-44-8b182fd0d.0",
42
- "@devvit/tsconfig": "0.12.1-next-2025-08-14-20-10-44-8b182fd0d.0",
41
+ "@devvit/repo-tools": "0.12.1-next-2025-08-14-23-15-57-1e08dab01.0",
42
+ "@devvit/tsconfig": "0.12.1-next-2025-08-14-23-15-57-1e08dab01.0",
43
43
  "@types/redis-mock": "0.17.1",
44
44
  "@types/uuid": "9.0.0",
45
45
  "chokidar-cli": "3.0.0",
@@ -51,5 +51,5 @@
51
51
  "vitest": "1.6.1"
52
52
  },
53
53
  "source": "./src/index.ts",
54
- "gitHead": "7e9269bc23945c891669aa32fef0807c69d48454"
54
+ "gitHead": "e86c954e16e43e10b9a42d29edad07f4415fce38"
55
55
  }
@@ -72,7 +72,7 @@ export type AppServerConfig = {
72
72
  };
73
73
  /**
74
74
  * Keys are assumed to have the format of `on${keyof TriggerEventType}` in
75
- * blocks.template.tsx.
75
+ * blocks.template.tsx. Values are empty when callback is provided by Blocks.
76
76
  */
77
77
  export type AppTriggersConfig = {
78
78
  onAppInstall?: string;
@@ -178,6 +178,19 @@ export type AppMultiSelectSettingConfig = AppBaseSettingConfig & {
178
178
  }>;
179
179
  defaultValue?: string[];
180
180
  };
181
+ export type AppBlocksConfigJson = {
182
+ entry?: string;
183
+ forms?: {
184
+ enable?: boolean;
185
+ };
186
+ menu?: {
187
+ enable?: boolean;
188
+ };
189
+ settings?: {
190
+ enable?: boolean;
191
+ };
192
+ triggers?: (keyof AppTriggersConfig)[];
193
+ };
181
194
  /**
182
195
  * https://transform.tools/json-schema-to-typescript
183
196
  * @internal
@@ -188,74 +201,63 @@ export type AppConfigJson = {
188
201
  media?: {
189
202
  dir?: string;
190
203
  };
191
- permissions?: {
192
- http?: {
193
- enable?: boolean;
194
- domains?: string[];
195
- };
196
- media?: boolean;
197
- payments?: boolean;
198
- realtime?: boolean;
199
- redis?: boolean;
200
- reddit?: {
201
- enable?: boolean;
202
- scope?: AppScopeConfig;
203
- asUser?: string[];
204
- };
205
- };
206
- post?: {
207
- dir?: string;
208
- entrypoints?: {
209
- [name: string]: AppPostEntrypointConfigJson;
210
- } & {
211
- default: Partial<AppPostEntrypointConfigJson>;
212
- };
213
- };
204
+ permissions?: AppPermissionConfigJson;
205
+ post?: AppPostConfigJson;
214
206
  server?: {
215
207
  dir?: string;
216
208
  entry?: string;
217
209
  };
218
210
  triggers?: AppTriggersConfig;
219
- blocks?: {
220
- entry?: string;
221
- menu?: {
222
- enable?: boolean;
223
- };
224
- settings?: {
225
- enable?: boolean;
226
- };
227
- };
228
- menu?: {
229
- items?: {
230
- label: string;
231
- description?: string;
232
- forUserType: AppMenuUserTypeConfig;
233
- location: AppMenuLocationConfig | AppMenuLocationConfig[];
234
- endpoint: string;
235
- postFilter: AppMenuPostFilterConfig;
236
- }[];
237
- };
238
- forms?: {
239
- [formName: string]: string;
240
- };
211
+ blocks?: AppBlocksConfigJson;
212
+ menu?: AppMenuConfigJson;
213
+ forms?: AppFormsConfigJson;
241
214
  dev?: {
242
215
  subreddit?: string;
243
216
  };
244
217
  scheduler?: AppSchedulerConfigJson;
245
- settings?: {
246
- global?: {
247
- [name: string]: AppSettingConfigJson;
248
- };
249
- subreddit?: {
250
- [name: string]: AppSettingConfigJson;
251
- };
252
- };
218
+ settings?: AppSettingsConfigJson;
253
219
  marketingAssets?: {
254
220
  icon?: string;
255
221
  };
256
222
  /** User data. */
257
223
  [key: string]: JsonValue;
258
224
  };
225
+ export type AppFormsConfigJson = {
226
+ [formName: string]: string;
227
+ };
228
+ export type AppMenuConfigJson = {
229
+ items?: {
230
+ label: string;
231
+ description?: string;
232
+ forUserType: AppMenuUserTypeConfig;
233
+ location: AppMenuLocationConfig | AppMenuLocationConfig[];
234
+ endpoint: string;
235
+ postFilter: AppMenuPostFilterConfig;
236
+ }[];
237
+ };
238
+ export type AppPermissionConfigJson = {
239
+ http?: {
240
+ enable?: boolean;
241
+ domains?: string[];
242
+ };
243
+ media?: boolean;
244
+ payments?: boolean;
245
+ realtime?: boolean;
246
+ redis?: boolean;
247
+ reddit?: {
248
+ enable?: boolean;
249
+ scope?: AppScopeConfig;
250
+ asUser?: string[];
251
+ };
252
+ };
253
+ export type AppPostConfigJson = {
254
+ dir?: string;
255
+ entrypoints?: {
256
+ [name: string]: AppPostEntrypointConfigJson;
257
+ } & {
258
+ default: Partial<AppPostEntrypointConfigJson>;
259
+ };
260
+ };
259
261
  export type AppPostEntrypointConfigJson = {
260
262
  entry: string;
261
263
  height?: AppPostHeightConfig;
@@ -267,6 +269,14 @@ export type AppSchedulerConfigJson = {
267
269
  };
268
270
  };
269
271
  export type AppSettingConfigJson = Omit<AppStringSettingConfig, 'name'> | Omit<AppParagraphSettingConfig, 'name'> | Omit<AppNumberSettingConfig, 'name'> | Omit<AppBooleanSettingConfig, 'name'> | Omit<AppSelectSettingConfig, 'name'> | Omit<AppMultiSelectSettingConfig, 'name'>;
272
+ export type AppSettingsConfigJson = {
273
+ global?: {
274
+ [name: string]: AppSettingConfigJson;
275
+ };
276
+ subreddit?: {
277
+ [name: string]: AppSettingConfigJson;
278
+ };
279
+ };
270
280
  export declare function parseAppConfig(str: string, allowUninitializedConfig: boolean): AppConfig;
271
281
  export declare function parseAppConfigJson(json: JsonValue, allowUninitializedConfig: boolean): AppConfig;
272
282
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"config-file.v1.d.ts","sourceRoot":"","sources":["../../src/schemas/config-file.v1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-file.v1.d.ts","sourceRoot":"","sources":["../../src/schemas/config-file.v1.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,14 @@ export function parseAppConfigJson(json, allowUninitializedConfig) {
55
55
  // still missing (https://github.com/ajv-validator/ajv/issues/1158). Even if the
56
56
  // feature is added, we need the defaults in the properties for documentation
57
57
  // and the same dynamic default adjustments as above are required.
58
+ //
59
+ // If there's an explicit permission, use it. If the permission is inferred, add
60
+ // a Blocks permission config that defaults to true to avoid having to evaluate
61
+ // user Blocks code. Model hydration should consider Blocks permissions.
62
+ //
63
+ // The current pattern is to avoid being smart about item / entry lengths. If a
64
+ // user defines a config, hydrate it regardless of whether any members are
65
+ // provided. This is so that Blocks apps can use the same hydrated models.
58
66
  function AppConfig(json) {
59
67
  const partial = {
60
68
  schema: 'v1', // Always assume v1 since that's all that's supported.
@@ -66,24 +74,39 @@ function AppConfig(json) {
66
74
  dir: json.media.dir ?? schema.properties.media.properties.dir.default,
67
75
  };
68
76
  if (json.post)
69
- partial.post = AppPostConfig(json);
77
+ partial.post = AppPostConfig(json.post);
70
78
  if (json.server)
71
79
  partial.server = {
72
80
  dir: json.server.dir ?? schema.properties.server.properties.dir.default,
73
81
  entry: json.server.entry ?? schema.properties.server.properties.entry.default,
74
82
  };
75
- if (json.triggers && Object.keys(json.triggers).length)
76
- partial.triggers = json.triggers;
83
+ const blocksTriggers = json.blocks
84
+ ? (json.blocks.triggers ?? schema.properties.blocks.properties.triggers.default)
85
+ : undefined;
86
+ if (json.triggers || blocksTriggers)
87
+ partial.triggers = AppTriggersConfig(blocksTriggers, json.triggers);
77
88
  if (json.blocks)
78
- partial.blocks = AppBlocksConfig(json);
79
- if (json.menu)
80
- partial.menu = AppMenuConfig(json);
89
+ partial.blocks = AppBlocksConfig(json.blocks);
90
+ const blocksMenu = json.blocks
91
+ ? (json.blocks.menu?.enable ??
92
+ schema.properties.blocks.properties.menu.properties.enable.default)
93
+ : false;
94
+ if (json.menu || blocksMenu)
95
+ partial.menu = AppMenuConfig(json.menu);
81
96
  if (json.scheduler)
82
- partial.scheduler = AppSchedulerConfig(json);
83
- if (json.settings)
84
- partial.settings = AppSettingsConfig(json);
85
- if (json.forms)
86
- partial.forms = json.forms;
97
+ partial.scheduler = AppSchedulerConfig(json.scheduler);
98
+ const blocksSettings = json.blocks
99
+ ? (json.blocks.settings?.enable ??
100
+ schema.properties.blocks.properties.settings.properties.enable.default)
101
+ : false;
102
+ if (json.settings || blocksSettings)
103
+ partial.settings = AppSettingsConfig(blocksSettings, json.settings);
104
+ const blocksForms = json.blocks
105
+ ? (json.blocks.forms?.enable ??
106
+ schema.properties.blocks.properties.forms.properties.enable.default)
107
+ : false;
108
+ if (json.forms || blocksForms)
109
+ partial.forms = json.forms ?? {};
87
110
  if (json.marketingAssets)
88
111
  partial.marketingAssets = json.marketingAssets;
89
112
  if (json.dev) {
@@ -91,90 +114,81 @@ function AppConfig(json) {
91
114
  if (json.dev.subreddit)
92
115
  partial.dev.subreddit = json.dev.subreddit;
93
116
  }
94
- const config = { ...partial, permissions: AppPermissionConfig(json, partial) };
117
+ const config = { ...partial, permissions: AppPermissionConfig(json.permissions, partial) };
95
118
  validate(config);
96
119
  // Deep copy so schema is not mutated.
97
120
  return structuredClone(config);
98
121
  }
99
- function AppSchedulerConfig(json) {
100
- const appSchedulerConfig = { tasks: {} };
101
- if (json.scheduler?.tasks) {
102
- for (const [name, taskSpec] of Object.entries(json.scheduler.tasks)) {
103
- if (typeof taskSpec === 'string') {
104
- // If the task is a string, it is an endpoint.
105
- appSchedulerConfig.tasks[name] = {
106
- endpoint: taskSpec,
107
- };
108
- }
109
- else {
110
- // Otherwise, it is an object with an endpoint and optionally a cron.
111
- appSchedulerConfig.tasks[name] = {
112
- endpoint: taskSpec.endpoint,
113
- ...(taskSpec.cron
114
- ? { cron: taskSpec.cron, ...(taskSpec.data ? { data: taskSpec.data } : {}) }
115
- : {}),
116
- };
117
- }
122
+ function AppSchedulerConfig(scheduler) {
123
+ const config = { tasks: {} };
124
+ for (const [name, taskSpec] of Object.entries(scheduler.tasks)) {
125
+ if (typeof taskSpec === 'string') {
126
+ // If the task is a string, it is an endpoint.
127
+ config.tasks[name] = { endpoint: taskSpec };
128
+ }
129
+ else {
130
+ // Otherwise, it is an object with an endpoint and optionally a cron.
131
+ config.tasks[name] = {
132
+ endpoint: taskSpec.endpoint,
133
+ ...(taskSpec.cron
134
+ ? { cron: taskSpec.cron, ...(taskSpec.data ? { data: taskSpec.data } : {}) }
135
+ : {}),
136
+ };
118
137
  }
119
138
  }
120
- return appSchedulerConfig;
139
+ return config;
121
140
  }
122
- function AppPermissionConfig(json, partial) {
141
+ function AppPermissionConfig(permissions, partial) {
123
142
  return {
124
143
  http: {
125
- enable: json.permissions?.http?.enable ??
126
- (json.permissions?.http
144
+ enable: permissions?.http?.enable ??
145
+ (permissions?.http
127
146
  ? schema.properties.permissions.properties.http.properties.enable.default
128
147
  : false),
129
- domains: json.permissions?.http?.domains ??
148
+ domains: permissions?.http?.domains ??
130
149
  schema.properties.permissions.properties.http.properties.domains.default,
131
150
  },
132
- media: json.permissions?.media ?? schema.properties.permissions.properties.media.default,
133
- menu: !!partial.menu?.items?.length ||
134
- (json.blocks?.menu?.enable ??
135
- (json.blocks ? schema.properties.blocks.properties.menu.properties.enable.default : false)),
136
- payments: json.permissions?.payments ?? schema.properties.permissions.properties.payments.default,
137
- realtime: json.permissions?.realtime ?? schema.properties.permissions.properties.realtime.default,
138
- redis: json.permissions?.redis ??
151
+ media: permissions?.media ?? schema.properties.permissions.properties.media.default,
152
+ menu: !!partial.menu,
153
+ payments: permissions?.payments ?? schema.properties.permissions.properties.payments.default,
154
+ realtime: permissions?.realtime ?? schema.properties.permissions.properties.realtime.default,
155
+ redis: permissions?.redis ??
139
156
  // Menu items call addCSRFTokenToContext() which uses Redis.
140
- (partial.menu?.items?.length
157
+ (partial.menu
141
158
  ? true
142
159
  : partial.post
143
160
  ? true
144
161
  : schema.properties.permissions.properties.redis.default),
145
162
  reddit: {
146
- enable: json.permissions?.reddit?.enable ??
163
+ enable: permissions?.reddit?.enable ??
147
164
  (partial.post
148
165
  ? true
149
- : json.permissions?.reddit
166
+ : permissions?.reddit
150
167
  ? schema.properties.permissions.properties.reddit.properties.enable.default
151
168
  : false),
152
- scope: json.permissions?.reddit?.scope ??
169
+ scope: permissions?.reddit?.scope ??
153
170
  schema.properties.permissions.properties.reddit.properties.scope
154
171
  .default,
155
- asUser: json.permissions?.reddit?.asUser?.map((x) => scopeFromJSON(x)) ??
172
+ asUser: permissions?.reddit?.asUser?.map((x) => scopeFromJSON(x)) ??
156
173
  schema.properties.permissions.properties.reddit.properties.asUser.default,
157
174
  },
158
- settings: json.blocks?.settings?.enable ??
159
- (json.blocks
160
- ? schema.properties.blocks.properties.settings.properties.enable.default
161
- : false),
175
+ settings: !!partial.settings,
162
176
  triggers: !!partial.triggers,
163
177
  };
164
178
  }
165
- function AppPostConfig(json) {
166
- const dir = json.post?.dir ?? schema.properties.post.properties.dir.default;
179
+ function AppPostConfig(post) {
180
+ const dir = post.dir ?? schema.properties.post.properties.dir.default;
167
181
  const defaultHeight = schema.$defs.Entrypoint.properties.height.default;
168
182
  const entrypoints = {
169
183
  [defaultPostEntry]: {
170
184
  name: defaultPostEntry,
171
- entry: json.post?.entrypoints?.default.entry ??
185
+ entry: post.entrypoints?.default.entry ??
172
186
  schema.properties.post.properties.entrypoints.properties.default.properties.entry.default,
173
- height: json.post?.entrypoints?.default.height ?? defaultHeight,
174
- inline: json.post?.entrypoints?.default.inline ?? false,
187
+ height: post.entrypoints?.default.height ?? defaultHeight,
188
+ inline: post.entrypoints?.default.inline ?? false,
175
189
  },
176
190
  };
177
- for (const [name, pt] of Object.entries(json.post?.entrypoints ?? {})) {
191
+ for (const [name, pt] of Object.entries(post.entrypoints ?? {})) {
178
192
  if (name !== defaultPostEntry)
179
193
  entrypoints[name] = {
180
194
  name,
@@ -183,19 +197,16 @@ function AppPostConfig(json) {
183
197
  inline: pt.inline ?? false,
184
198
  };
185
199
  }
186
- return {
187
- dir,
188
- entrypoints,
189
- };
200
+ return { dir, entrypoints };
190
201
  }
191
- function AppBlocksConfig(json) {
202
+ function AppBlocksConfig(blocks) {
192
203
  return {
193
- entry: json.blocks?.entry ?? schema.properties.blocks.properties.entry.default,
204
+ entry: blocks.entry ?? schema.properties.blocks.properties.entry.default,
194
205
  };
195
206
  }
196
- function AppMenuConfig(json) {
207
+ function AppMenuConfig(menu) {
197
208
  const items = [];
198
- for (const item of json.menu?.items ?? []) {
209
+ for (const item of menu?.items ?? []) {
199
210
  items.push({
200
211
  label: item.label,
201
212
  description: item.description ?? '',
@@ -207,27 +218,27 @@ function AppMenuConfig(json) {
207
218
  }
208
219
  return { items };
209
220
  }
210
- function AppSettingsConfig(json) {
211
- const appSettingsConfig = {};
212
- if (json.settings?.global) {
213
- appSettingsConfig.global = {};
214
- for (const [name, setting] of Object.entries(json.settings.global)) {
215
- appSettingsConfig.global[name] = {
216
- ...setting,
217
- name: name,
218
- };
221
+ function AppSettingsConfig(blocksSettings, settings) {
222
+ const config = {};
223
+ if (settings?.global || blocksSettings) {
224
+ config.global = {};
225
+ for (const [name, setting] of Object.entries(settings?.global ?? {})) {
226
+ config.global[name] = { ...setting, name: name };
219
227
  }
220
228
  }
221
- if (json.settings?.subreddit) {
222
- appSettingsConfig.subreddit = {};
223
- for (const [name, setting] of Object.entries(json.settings.subreddit)) {
224
- appSettingsConfig.subreddit[name] = {
225
- ...setting,
226
- name: name,
227
- };
229
+ if (settings?.subreddit || blocksSettings) {
230
+ config.subreddit = {};
231
+ for (const [name, setting] of Object.entries(settings?.subreddit ?? {})) {
232
+ config.subreddit[name] = { ...setting, name: name };
228
233
  }
229
234
  }
230
- return appSettingsConfig;
235
+ return config;
236
+ }
237
+ function AppTriggersConfig(blocksTriggers, triggers) {
238
+ const config = {};
239
+ for (const trigger of blocksTriggers ?? [])
240
+ config[trigger] = '';
241
+ return { ...config, ...triggers };
231
242
  }
232
243
  /** @internal */
233
244
  export function validate(config) {
@@ -488,6 +488,18 @@
488
488
  "description": "TypeScript or JavaScript Blocks client entrypoint relative project root. Use for migration.",
489
489
  "default": "src/main.tsx"
490
490
  },
491
+ "forms": {
492
+ "type": "object",
493
+ "description": "Blocks forms config.",
494
+ "additionalProperties": false,
495
+ "properties": {
496
+ "enable": {
497
+ "type": "boolean",
498
+ "description": "Whether forms are added through Blocks.",
499
+ "default": true
500
+ }
501
+ }
502
+ },
491
503
  "menu": {
492
504
  "type": "object",
493
505
  "description": "Blocks menu config.",
@@ -511,6 +523,35 @@
511
523
  "default": true
512
524
  }
513
525
  }
526
+ },
527
+ "triggers": {
528
+ "type": "array",
529
+ "description": "Event triggers that are added through Blocks.",
530
+ "items": {
531
+ "enum": [
532
+ "onAppInstall",
533
+ "onAppUpgrade",
534
+ "onAutomoderatorFilterComment",
535
+ "onAutomoderatorFilterPost",
536
+ "onCommentCreate",
537
+ "onCommentDelete",
538
+ "onCommentReport",
539
+ "onCommentSubmit",
540
+ "onCommentUpdate",
541
+ "onModAction",
542
+ "onModMail",
543
+ "onPostCreate",
544
+ "onPostDelete",
545
+ "onPostFlairUpdate",
546
+ "onPostNsfwUpdate",
547
+ "onPostReport",
548
+ "onPostSpoilerUpdate",
549
+ "onPostSubmit",
550
+ "onPostUpdate"
551
+ ]
552
+ },
553
+ "uniqueItems": true,
554
+ "default": []
514
555
  }
515
556
  }
516
557
  },