@devvit/server 0.11.19-next-2025-07-01-15-23-37-e346f8ae5.0 → 0.11.19-next-2025-07-01-17-04-17-76d17d8d9.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/define-config.d.ts +2 -1
- package/define-config.d.ts.map +1 -1
- package/define-config.js +45 -0
- package/package.json +8 -8
package/define-config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Devvit } from '@devvit/public-api';
|
|
2
|
-
import type { AppConfig, AppFormsConfig, AppMenuActionConfig, AppPermissionConfig, AppPostCreateConfig } from '@devvit/shared-types/schemas/config-file.v1.js';
|
|
2
|
+
import type { AppConfig, AppFormsConfig, AppMenuActionConfig, AppPermissionConfig, AppPostCreateConfig, AppSchedulerConfig } from '@devvit/shared-types/schemas/config-file.v1.js';
|
|
3
3
|
/**
|
|
4
4
|
* A subset of AppConfig (see config-file.v1.json) available in V8-flavored
|
|
5
5
|
* LinkedBundles except for the deprecated Blocks callbacks. This config is used
|
|
@@ -13,6 +13,7 @@ export type DynamicAppConfig = {
|
|
|
13
13
|
permissions: AppPermissionConfig;
|
|
14
14
|
post?: DynamicAppPostConfig | undefined;
|
|
15
15
|
menuActions?: AppMenuActionConfig[];
|
|
16
|
+
scheduler?: AppSchedulerConfig | undefined;
|
|
16
17
|
forms?: AppFormsConfig;
|
|
17
18
|
};
|
|
18
19
|
/** @experimental */
|
package/define-config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../src/define-config.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EAOP,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../src/define-config.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EAOP,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,gDAAgD,CAAC;AAIxD;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,mBAAmB,CAAC;IACjC,IAAI,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC3C,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB,CAAC;AAEF,oBAAoB;AACpB,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,kBAAkB;QAClB,MAAM,CAAC,EAAE;YACP,iDAAiD;YACjD,MAAM,CAAC,EACH,QAAQ,GACR;gBACE,IAAI,EAAE,OAAO,CAAC;gBACd;;;mBAGG;gBACH,KAAK,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;aACpC,GACD,MAAM,CAAC,mBAAmB,GAC1B,SAAS,CAAC;SACf,CAAC;KACH,CAAC;IACF,MAAM,EAAE,0BAA0B,CAAC;CACpC,CAAC;AAEF,oBAAoB;AACpB,MAAM,MAAM,0BAA0B,GAAG,mBAAmB,GAAG;IAC7D,kBAAkB;IAClB,MAAM,CAAC,EACH;QACE;;;;WAIG;QACH,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;QACnC;;;WAGG;QACH,KAAK,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;KAChD,GACD,SAAS,CAAC;CACf,CAAC;AAKF,oBAAoB;AACpB,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,OAAO,MAAM,CAO1F"}
|
package/define-config.js
CHANGED
|
@@ -9,6 +9,8 @@ export function defineConfig(config) {
|
|
|
9
9
|
configurePost(config.post);
|
|
10
10
|
if (config.menuActions)
|
|
11
11
|
configureMenuActions(config.menuActions);
|
|
12
|
+
if (config.scheduler)
|
|
13
|
+
configureScheduler(config.scheduler);
|
|
12
14
|
if (config.forms)
|
|
13
15
|
configureForms(config.forms);
|
|
14
16
|
return Devvit;
|
|
@@ -146,6 +148,49 @@ async function callWebbitEndpoint(endpoint, body, metadata) {
|
|
|
146
148
|
}
|
|
147
149
|
return await response.json();
|
|
148
150
|
}
|
|
151
|
+
function configureScheduler(schedulerConfig) {
|
|
152
|
+
const cronTasks = {};
|
|
153
|
+
for (const [name, task] of Object.entries(schedulerConfig.tasks)) {
|
|
154
|
+
Devvit.addSchedulerJob({
|
|
155
|
+
name: name,
|
|
156
|
+
onRun: async (event, context) => {
|
|
157
|
+
await callWebbitEndpoint(task.endpoint, {
|
|
158
|
+
name: event.name,
|
|
159
|
+
data: event.data ?? null, // JSONObject wants null not undefined
|
|
160
|
+
}, context.debug.metadata);
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
// Tasks with cron specified require a bit more work further down
|
|
164
|
+
if (task.cron) {
|
|
165
|
+
cronTasks[name] = task;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// If provided, schedule any cron tasks the user asked for on install/upgrade, being careful to
|
|
169
|
+
// un-schedule any previously scheduled instances of these tasks
|
|
170
|
+
if (Object.keys(cronTasks).length > 0) {
|
|
171
|
+
Devvit.addTrigger({
|
|
172
|
+
events: ['AppInstall', 'AppUpgrade'],
|
|
173
|
+
onEvent: async (_event, context) => {
|
|
174
|
+
// Get all jobs
|
|
175
|
+
const existingJobs = await context.scheduler.listJobs();
|
|
176
|
+
// Filter down to just cron jobs
|
|
177
|
+
const jobsToCancel = existingJobs.filter((job) => {
|
|
178
|
+
// Only cancel cron jobs
|
|
179
|
+
return 'cron' in job;
|
|
180
|
+
});
|
|
181
|
+
// Cancel everything we need to
|
|
182
|
+
await Promise.all(jobsToCancel.map((job) => context.scheduler.cancelJob(job.id)));
|
|
183
|
+
// Schedule all the cron tasks we were given in the config
|
|
184
|
+
await Promise.all(Object.entries(cronTasks).map(async ([name, task]) => {
|
|
185
|
+
await context.scheduler.runJob({
|
|
186
|
+
name: name,
|
|
187
|
+
cron: task.cron,
|
|
188
|
+
});
|
|
189
|
+
}));
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
149
194
|
async function createPost(ctx, create) {
|
|
150
195
|
if (!ctx.subredditName)
|
|
151
196
|
throw Error('no sub name');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devvit/server",
|
|
3
|
-
"version": "0.11.19-next-2025-07-01-
|
|
3
|
+
"version": "0.11.19-next-2025-07-01-17-04-17-76d17d8d9.0",
|
|
4
4
|
"license": "BSD-3-Clause",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
},
|
|
24
24
|
"types": "./index.d.ts",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@devvit/protos": "0.11.19-next-2025-07-01-
|
|
27
|
-
"@devvit/public-api": "0.11.19-next-2025-07-01-
|
|
28
|
-
"@devvit/shared": "0.11.19-next-2025-07-01-
|
|
29
|
-
"@devvit/shared-types": "0.11.19-next-2025-07-01-
|
|
26
|
+
"@devvit/protos": "0.11.19-next-2025-07-01-17-04-17-76d17d8d9.0",
|
|
27
|
+
"@devvit/public-api": "0.11.19-next-2025-07-01-17-04-17-76d17d8d9.0",
|
|
28
|
+
"@devvit/shared": "0.11.19-next-2025-07-01-17-04-17-76d17d8d9.0",
|
|
29
|
+
"@devvit/shared-types": "0.11.19-next-2025-07-01-17-04-17-76d17d8d9.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@devvit/repo-tools": "0.11.19-next-2025-07-01-
|
|
33
|
-
"@devvit/tsconfig": "0.11.19-next-2025-07-01-
|
|
32
|
+
"@devvit/repo-tools": "0.11.19-next-2025-07-01-17-04-17-76d17d8d9.0",
|
|
33
|
+
"@devvit/tsconfig": "0.11.19-next-2025-07-01-17-04-17-76d17d8d9.0",
|
|
34
34
|
"eslint": "9.11.1",
|
|
35
35
|
"typescript": "5.8.3",
|
|
36
36
|
"vitest": "1.6.1"
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"directory": "dist"
|
|
40
40
|
},
|
|
41
41
|
"source": "./src/index.ts",
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "c2f0162348ad3bf31ebcf8688024223229b7bb2e"
|
|
43
43
|
}
|