@devvit/build-pack 0.11.19 → 0.11.20-next-2025-07-23-16-35-06-4e9bd2820.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.
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-spec-util.d.ts","sourceRoot":"","sources":["../../src/esbuild/dependency-spec-util.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAEhF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EACzC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAC7B,cAAc,CAsGhB"}
1
+ {"version":3,"file":"dependency-spec-util.d.ts","sourceRoot":"","sources":["../../src/esbuild/dependency-spec-util.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAEhF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EACzC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAC7B,cAAc,CAwGhB"}
@@ -36,9 +36,11 @@ export function createDependencySpec(actorSpec, config, namespace) {
36
36
  use(spec, FlairDefinition, GraphQLDefinition, LinksAndCommentsDefinition, ListingsDefinition, ModerationDefinition, ModNoteDefinition, NewModmailDefinition, PrivateMessagesDefinition, SubredditsDefinition, UsersDefinition, WidgetsDefinition, WikiDefinition);
37
37
  if (config.permissions.reddit.scope === 'moderator')
38
38
  use(spec, ModlogDefinition);
39
- if (config.permissions.reddit.asUser.length > 0) {
39
+ if (config.permissions.reddit.scope === 'user' || config.permissions.reddit.asUser.length > 0) {
40
40
  use(spec, UserActionsDefinition);
41
- permissions.asUserScopes.push(...config.permissions.reddit.asUser);
41
+ if (config.permissions.reddit.asUser.length > 0) {
42
+ permissions.asUserScopes.push(...config.permissions.reddit.asUser);
43
+ }
42
44
  }
43
45
  }
44
46
  if (config.permissions.redis)
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.template.d.ts","sourceRoot":"","sources":["../../../src/esbuild/templatizer/blocks.template.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,MAAM,EACN,KAAK,OAAO,EAKb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAiBtE,oFAAoF;AACpF,eAAO,MAAM,UAAU,EAAE;IAAE,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CAAO,CAAC;AA8F7D,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CA4D/D;AA+JD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"blocks.template.d.ts","sourceRoot":"","sources":["../../../src/esbuild/templatizer/blocks.template.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,MAAM,EACN,KAAK,OAAO,EAKb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAmBtE,oFAAoF;AACpF,eAAO,MAAM,UAAU,EAAE;IAAE,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CAAO,CAAC;AA8F7D,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CA4D/D;AAgKD,eAAe,MAAM,CAAC"}
@@ -3,9 +3,11 @@ import { Devvit, useWebView, } from '@devvit/public-api';
3
3
  import { getServerPort } from '@devvit/server';
4
4
  import { getDevvitConfig } from '@devvit/server/get-devvit-config.js';
5
5
  import { StringUtil } from '@devvit/shared-types/StringUtil.js';
6
+ // Hack: rename config2 to workaround declaration in
7
+ // packages/runtime-lite/src/runtime/SandboxedRuntimeLite.ts.
6
8
  // __devvit__ is undefined in tests only.
7
9
  // @ts-expect-error no type.
8
- const config = globalThis.__devvit__?.config;
10
+ const config2 = globalThis.__devvit__?.config;
9
11
  /** @internal [state] Map of devvit.json form keys to Devvit-singleton form keys. */
10
12
  export const formKeyMap = {};
11
13
  function configurePermissions(permissions) {
@@ -35,8 +37,8 @@ function configurePost(post) {
35
37
  height: 'tall',
36
38
  });
37
39
  }
38
- function configureMenuActions(menuActions) {
39
- for (const action of menuActions) {
40
+ function configureMenuItems(menuItems) {
41
+ for (const action of menuItems) {
40
42
  const menuItem = {
41
43
  label: action.label,
42
44
  location: action.location,
@@ -95,7 +97,7 @@ export function validateUiResponse(uiResponse) {
95
97
  const validKeys = ['showToast', 'navigateTo', 'showForm'];
96
98
  const invalidKeys = Object.keys(uiResponse).filter((key) => !validKeys.includes(key));
97
99
  if (invalidKeys.length > 0) {
98
- throw new Error(`Invalid fields found in UiResponse: ${invalidKeys.join(', ')}. Valid fields are: ${validKeys.join(', ')}`);
100
+ throw new Error(`Invalid fields found in UiResponse: "${invalidKeys.join('", "')}". Valid fields are: "${validKeys.join('", "')}"`);
99
101
  }
100
102
  // (2) showForm must have a name that exists in the formKeyMap.
101
103
  if (uiResponse.showForm) {
@@ -103,7 +105,7 @@ export function validateUiResponse(uiResponse) {
103
105
  throw new Error('showForm must have a name');
104
106
  }
105
107
  if (!formKeyMap[uiResponse.showForm.name]) {
106
- throw new Error(`Form with name ${uiResponse.showForm.name} not found in devvit.json. Consider adding '"forms"."${uiResponse.showForm.name}"="/internal/your/endpoint"'.`);
108
+ throw new Error(`Form with name "${uiResponse.showForm.name}" not found in devvit.json. Consider adding:\n\n "forms": {"${uiResponse.showForm.name}":"/internal/your/endpoint"}\n\n`);
107
109
  }
108
110
  }
109
111
  // (3) showToast must be a string or an object with only fields [text, appearance]
@@ -118,7 +120,7 @@ export function validateUiResponse(uiResponse) {
118
120
  const validToastKeys = ['text', 'appearance'];
119
121
  const invalidToastKeys = toastKeys.filter((key) => !validToastKeys.includes(key));
120
122
  if (invalidToastKeys.length > 0) {
121
- throw new Error(`Invalid fields found in showToast: ${invalidToastKeys.join(', ')}. Valid fields are: ${validToastKeys.join(', ')}`);
123
+ throw new Error(`Invalid fields found in showToast: "${invalidToastKeys.join('", "')}". Valid fields are: "${validToastKeys.join('", ')}"`);
122
124
  }
123
125
  if (typeof uiResponse.showToast.text !== 'string') {
124
126
  throw new Error('showToast.text is required and must be a string');
@@ -189,8 +191,6 @@ async function callWebbitEndpoint(endpoint, body, metadata) {
189
191
  }
190
192
  }
191
193
  function configureScheduler(schedulerConfig) {
192
- const config = getDevvitConfig();
193
- const logger = config.use(LoggerDefinition);
194
194
  const cronTasks = {};
195
195
  for (const [name, task] of Object.entries(schedulerConfig.tasks)) {
196
196
  Devvit.addSchedulerJob({
@@ -221,6 +221,7 @@ function configureScheduler(schedulerConfig) {
221
221
  await Promise.all(jobsToCancel.map((job) => context.scheduler.cancelJob(job.id)));
222
222
  // Schedule all the cron tasks we were given in the config
223
223
  await Promise.all(Object.entries(cronTasks).map(async ([name, task]) => {
224
+ const logger = getDevvitConfig().use(LoggerDefinition);
224
225
  try {
225
226
  await context.scheduler.runJob({
226
227
  name: name,
@@ -248,17 +249,18 @@ function renderModal(path) {
248
249
  Devvit.createElement("button", { onPress: webView.mount }, "Launch App"),
249
250
  ";"));
250
251
  }
251
- if (config) {
252
- configurePermissions(config.permissions);
253
- if (config.post)
254
- configurePost(config.post);
255
- if (config.menuActions)
256
- configureMenuActions(config.menuActions);
257
- if (config.scheduler)
258
- configureScheduler(config.scheduler);
259
- if (config.forms)
260
- configureForms(config.forms);
261
- if (config.triggers)
262
- configureTriggers(config.triggers);
252
+ if (config2) {
253
+ configurePermissions(config2.permissions);
254
+ if (config2.post)
255
+ configurePost(config2.post);
256
+ if (config2.menu?.items) {
257
+ configureMenuItems(config2.menu.items);
258
+ }
259
+ if (config2.scheduler)
260
+ configureScheduler(config2.scheduler);
261
+ if (config2.forms)
262
+ configureForms(config2.forms);
263
+ if (config2.triggers)
264
+ configureTriggers(config2.triggers);
263
265
  }
264
266
  export default Devvit;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devvit/build-pack",
3
- "version": "0.11.19",
3
+ "version": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "type": "git",
@@ -23,8 +23,8 @@
23
23
  },
24
24
  "types": "./index.d.ts",
25
25
  "dependencies": {
26
- "@devvit/protos": "0.11.19",
27
- "@devvit/shared-types": "0.11.19",
26
+ "@devvit/protos": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
27
+ "@devvit/shared-types": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
28
28
  "esbuild": "0.23.0",
29
29
  "rxjs": "7.8.1",
30
30
  "tsv": "0.2.0",
@@ -35,12 +35,12 @@
35
35
  "@devvit/shared": "*"
36
36
  },
37
37
  "devDependencies": {
38
- "@devvit/public-api": "0.11.19",
39
- "@devvit/repo-tools": "0.11.19",
40
- "@devvit/scheduler": "0.11.19",
41
- "@devvit/server": "0.11.19",
42
- "@devvit/shared": "0.11.19",
43
- "@devvit/tsconfig": "0.11.19",
38
+ "@devvit/public-api": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
39
+ "@devvit/repo-tools": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
40
+ "@devvit/scheduler": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
41
+ "@devvit/server": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
42
+ "@devvit/shared": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
43
+ "@devvit/tsconfig": "0.11.20-next-2025-07-23-16-35-06-4e9bd2820.0",
44
44
  "@types/tsv": "0.2.1",
45
45
  "eslint": "9.11.1",
46
46
  "vitest": "1.6.1"
@@ -49,5 +49,5 @@
49
49
  "directory": "dist"
50
50
  },
51
51
  "source": "./src/index.ts",
52
- "gitHead": "f730f695127ca675c4c651e691b9475e35e91ca2"
52
+ "gitHead": "3907b5ce758ea9f664816b328bed931603106bb7"
53
53
  }