@devvit/public-api 0.12.0-next-2025-03-31-fec8fadd5.0 → 0.12.0-next-2025-04-10-2ee75c532.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/apis/makeAPIClients.d.ts.map +1 -1
- package/apis/makeAPIClients.js +0 -3
- package/apis/reddit/RedditAPIClient.d.ts +37 -1
- package/apis/reddit/RedditAPIClient.d.ts.map +1 -1
- package/apis/reddit/RedditAPIClient.js +150 -113
- package/apis/reddit/common.d.ts +4 -1
- package/apis/reddit/common.d.ts.map +1 -1
- package/apis/reddit/index.d.ts +1104 -0
- package/apis/reddit/index.d.ts.map +1 -0
- package/apis/reddit/index.js +1435 -0
- package/apis/reddit/models/Comment.d.ts +2 -0
- package/apis/reddit/models/Comment.d.ts.map +1 -1
- package/apis/reddit/models/Comment.js +6 -2
- package/apis/reddit/models/ModAction.d.ts +0 -3
- package/apis/reddit/models/ModAction.d.ts.map +1 -1
- package/apis/reddit/models/ModAction.js +2 -1
- package/apis/reddit/models/Post.d.ts +3 -0
- package/apis/reddit/models/Post.d.ts.map +1 -1
- package/apis/reddit/models/Post.js +16 -7
- package/apis/reddit/models/Subreddit.d.ts +1 -19
- package/apis/reddit/models/Subreddit.d.ts.map +1 -1
- package/apis/reddit/models/Subreddit.js +15 -9
- package/apis/reddit/models/User.js +13 -0
- package/apis/reddit/models/Vault.d.ts +0 -3
- package/apis/reddit/models/Vault.d.ts.map +1 -1
- package/apis/reddit/models/Vault.js +7 -2
- package/apis/reddit/models/index.d.ts +1 -1
- package/apis/reddit/models/index.d.ts.map +1 -1
- package/apis/reddit/models/index.js +0 -1
- package/apis/reddit/tests/utils/createTestRedditApiContext.d.ts +7 -0
- package/apis/reddit/tests/utils/createTestRedditApiContext.d.ts.map +1 -0
- package/apis/reddit/tests/utils/{createTestRedditApiClient.js → createTestRedditApiContext.js} +12 -5
- package/apis/settings/SettingsClient.d.ts +3 -1
- package/apis/settings/SettingsClient.d.ts.map +1 -1
- package/apis/settings/SettingsClient.js +34 -0
- package/devvit/Devvit.d.ts.map +1 -1
- package/devvit/Devvit.js +11 -0
- package/devvit/internals/async-metadata.d.ts +2 -0
- package/devvit/internals/async-metadata.d.ts.map +1 -0
- package/devvit/internals/async-metadata.js +65 -0
- package/devvit/internals/blocks/BlocksReconciler.d.ts.map +1 -1
- package/devvit/internals/blocks/BlocksReconciler.js +12 -14
- package/devvit/internals/blocks/handler/BlocksHandler.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/BlocksHandler.js +6 -3
- package/devvit/internals/blocks/handler/ContextBuilder.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/ContextBuilder.js +0 -3
- package/devvit/internals/blocks/handler/useWebView.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/useWebView.js +9 -8
- package/devvit/internals/context.d.ts.map +1 -1
- package/devvit/internals/context.js +3 -1
- package/devvit/internals/csrf.d.ts.map +1 -1
- package/devvit/internals/csrf.js +7 -8
- package/devvit/internals/helpers/devvitInternalMessage.d.ts +12 -0
- package/devvit/internals/helpers/devvitInternalMessage.d.ts.map +1 -0
- package/devvit/internals/helpers/devvitInternalMessage.js +17 -0
- package/devvit/internals/helpers/extendDevvitPrototype.d.ts +6 -1
- package/devvit/internals/helpers/extendDevvitPrototype.d.ts.map +1 -1
- package/devvit/internals/helpers/extendDevvitPrototype.js +9 -1
- package/devvit/internals/menu-items.d.ts.map +1 -1
- package/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +2 -0
- package/meta.json +231 -154
- package/meta.min.json +281 -127
- package/package.json +9 -9
- package/public-api.d.ts +2706 -2060
- package/public-api.iife.js +1734 -2217
- package/public-api.min.js +6 -6
- package/public-api.min.js.map +4 -4
- package/types/configuration.d.ts +2 -0
- package/types/configuration.d.ts.map +1 -1
- package/types/context.d.ts +2 -4
- package/types/context.d.ts.map +1 -1
- package/version.json +2 -2
- package/apis/reddit/tests/utils/createTestRedditApiClient.d.ts +0 -7
- package/apis/reddit/tests/utils/createTestRedditApiClient.d.ts.map +0 -1
package/devvit/Devvit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Devvit.d.ts","sourceRoot":"","sources":["../../src/devvit/Devvit.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAItD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAG/D,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,IAAI,EAEJ,YAAY,EACZ,wBAAwB,EACxB,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,sBAAsB,EAGtB,gBAAgB,EAChB,iBAAiB,EAGjB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Devvit.d.ts","sourceRoot":"","sources":["../../src/devvit/Devvit.ts"],"names":[],"mappings":"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"}
|
package/devvit/Devvit.js
CHANGED
|
@@ -77,6 +77,9 @@ export class Devvit extends Actor {
|
|
|
77
77
|
if (pluginIsEnabled(config.realtime)) {
|
|
78
78
|
this.use(protos.RealtimeDefinition);
|
|
79
79
|
}
|
|
80
|
+
if (pluginIsEnabled(config.userActions)) {
|
|
81
|
+
this.use(protos.UserActionsDefinition);
|
|
82
|
+
}
|
|
80
83
|
}
|
|
81
84
|
/**
|
|
82
85
|
* Add a menu item to the Reddit UI.
|
|
@@ -369,6 +372,14 @@ export class Devvit extends Actor {
|
|
|
369
372
|
return realtime;
|
|
370
373
|
}
|
|
371
374
|
/** @internal */
|
|
375
|
+
static get userActionsPlugin() {
|
|
376
|
+
const userActionsAndRedditApiEnabled = pluginIsEnabled(__classPrivateFieldGet(this, _a, "f", _Devvit_config).userActions) && pluginIsEnabled(__classPrivateFieldGet(this, _a, "f", _Devvit_config).redditAPI);
|
|
377
|
+
if (!userActionsAndRedditApiEnabled) {
|
|
378
|
+
throw new Error('UserActions is not enabled. You can enable it by passing both `userActions: true` and `redditAPI: true` to `Devvit.configure`');
|
|
379
|
+
}
|
|
380
|
+
return __classPrivateFieldGet(this, _a, "f", _Devvit_pluginClients)[protos.UserActionsDefinition.fullName];
|
|
381
|
+
}
|
|
382
|
+
/** @internal */
|
|
372
383
|
static get menuItems() {
|
|
373
384
|
return __classPrivateFieldGet(this, _a, "f", _Devvit_menuItems);
|
|
374
385
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-metadata.d.ts","sourceRoot":"","sources":["../../../src/devvit/internals/async-metadata.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Do this as an IIFE so that we can have the storage be a const
|
|
2
|
+
const asyncLocalStorage = (function () {
|
|
3
|
+
try {
|
|
4
|
+
// This require() will fail during bundling, and on browsers. That's OK. Leave
|
|
5
|
+
// the async local storage undefined in those cases, and we'll let follow on
|
|
6
|
+
// code decide if they're OK running with that, or if they want to CircuitBreak.
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
8
|
+
const { AsyncLocalStorage } = require('node:async_hooks');
|
|
9
|
+
return new AsyncLocalStorage();
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
// nop
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
})();
|
|
16
|
+
// Only set localMetadata if we're not in a remote runtime. If we are in a remote
|
|
17
|
+
// runtime, then we should be using asyncLocalStorage.
|
|
18
|
+
let localMetadata;
|
|
19
|
+
/**
|
|
20
|
+
* Get the current metadata. If called outside a request, this will throw an
|
|
21
|
+
* error.
|
|
22
|
+
* @internal
|
|
23
|
+
* @returns {Metadata} The current metadata.
|
|
24
|
+
*/
|
|
25
|
+
export function getMetadata() {
|
|
26
|
+
// Q: How does this work, without jumbling up the metadata between requests?
|
|
27
|
+
// A: If we're running in a remote runtime, we use the async local storage to
|
|
28
|
+
// get the metadata, which guarantees that we get the correct metadata for the
|
|
29
|
+
// current thread. If we're not in a remote runtime, then we'll use the
|
|
30
|
+
// metadata saved in localMetadata; this is set by `withMetadata()` when
|
|
31
|
+
// invoked in a local runtime, and since local runtimes can't handle
|
|
32
|
+
// multiple requests at once, we can safely use this saved metadata without
|
|
33
|
+
// fear of jumbling them up.
|
|
34
|
+
if (asyncLocalStorage) {
|
|
35
|
+
const metadata = asyncLocalStorage.getStore();
|
|
36
|
+
if (!metadata) {
|
|
37
|
+
throw Error('API error; metadata should never be accessed outside a request');
|
|
38
|
+
}
|
|
39
|
+
return metadata;
|
|
40
|
+
}
|
|
41
|
+
if (!localMetadata) {
|
|
42
|
+
throw Error('Devvit metadata can only be accessed within a request');
|
|
43
|
+
}
|
|
44
|
+
return localMetadata;
|
|
45
|
+
}
|
|
46
|
+
/** @internal */
|
|
47
|
+
export async function withMetadata(metadata, callback) {
|
|
48
|
+
if (asyncLocalStorage) {
|
|
49
|
+
// If asyncLocalStorage is available, we use it to run the function with
|
|
50
|
+
// access to the metadata.
|
|
51
|
+
return asyncLocalStorage.run(metadata, callback);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// If asyncLocalStorage is not available, set the value on localMetadata,
|
|
55
|
+
// then run the function directly.
|
|
56
|
+
try {
|
|
57
|
+
localMetadata = metadata;
|
|
58
|
+
return await callback();
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
// Unset the localMetadata after we're done, to prevent any leakage.
|
|
62
|
+
localMetadata = undefined;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlocksReconciler.d.ts","sourceRoot":"","sources":["../../../../src/devvit/internals/blocks/BlocksReconciler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BlocksReconciler.d.ts","sourceRoot":"","sources":["../../../../src/devvit/internals/blocks/BlocksReconciler.ts"],"names":[],"mappings":"AA6CA,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;IAC9C,QAAQ,EAAE,4BAA4B,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAYxE,wBAAgB,eAAe,CAC7B,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,OAAO,IAAI,mBAAmB,CAIxC"}
|
|
@@ -123,7 +123,6 @@ export class BlocksReconciler {
|
|
|
123
123
|
});
|
|
124
124
|
this.cache = apiClients.cache;
|
|
125
125
|
this.modLog = apiClients.modLog;
|
|
126
|
-
this.reddit = apiClients.reddit;
|
|
127
126
|
this.kvStore = apiClients.kvStore;
|
|
128
127
|
this.redis = apiClients.redis;
|
|
129
128
|
this.settings = apiClients.settings;
|
|
@@ -211,6 +210,14 @@ export class BlocksReconciler {
|
|
|
211
210
|
}
|
|
212
211
|
}
|
|
213
212
|
async processBlock(element, idGenerator = makeUniqueIdGenerator(), path = []) {
|
|
213
|
+
// Strings - return as is
|
|
214
|
+
if (typeof element === 'string') {
|
|
215
|
+
return element;
|
|
216
|
+
}
|
|
217
|
+
// Numbers - transform to string
|
|
218
|
+
if (typeof element === 'number') {
|
|
219
|
+
return `${element}`;
|
|
220
|
+
}
|
|
214
221
|
const blockElement = element;
|
|
215
222
|
// Intrinsic elements
|
|
216
223
|
if (typeof blockElement.type === 'string') {
|
|
@@ -234,12 +241,11 @@ export class BlocksReconciler {
|
|
|
234
241
|
const children = childrens.flat();
|
|
235
242
|
const collapsedChildren = __classPrivateFieldGet(this, _BlocksReconciler_instances, "m", _BlocksReconciler_flatten).call(this, children);
|
|
236
243
|
await this.processProps(blockElement);
|
|
237
|
-
|
|
244
|
+
return {
|
|
238
245
|
type: blockElement.type,
|
|
239
246
|
props: blockElement.props,
|
|
240
247
|
children: collapsedChildren,
|
|
241
248
|
};
|
|
242
|
-
return reified;
|
|
243
249
|
}
|
|
244
250
|
// Function components
|
|
245
251
|
if (typeof blockElement.type === 'function') {
|
|
@@ -250,15 +256,16 @@ export class BlocksReconciler {
|
|
|
250
256
|
this.renderState[componentKey] = {};
|
|
251
257
|
}
|
|
252
258
|
const children = blockElement.children.flatMap((c) => c);
|
|
259
|
+
const ctx = __classPrivateFieldGet(this, _BlocksReconciler_instances, "m", _BlocksReconciler_makeContextProps).call(this);
|
|
253
260
|
const props = {
|
|
254
|
-
...
|
|
261
|
+
...ctx,
|
|
255
262
|
...blockElement.props,
|
|
256
263
|
children,
|
|
257
264
|
};
|
|
258
265
|
let result;
|
|
259
266
|
while (result === undefined) {
|
|
260
267
|
try {
|
|
261
|
-
result = await blockElement.type(props,
|
|
268
|
+
result = await blockElement.type(props, ctx);
|
|
262
269
|
}
|
|
263
270
|
catch (promiseOrError) {
|
|
264
271
|
// If the component throws a promise, wait for it to resolve and try again.
|
|
@@ -292,14 +299,6 @@ export class BlocksReconciler {
|
|
|
292
299
|
return this.processBlock(result, idGenerator, [...path, blockElement.type.name]);
|
|
293
300
|
}
|
|
294
301
|
}
|
|
295
|
-
// Strings - return as is
|
|
296
|
-
if (typeof blockElement === 'string') {
|
|
297
|
-
return blockElement;
|
|
298
|
-
}
|
|
299
|
-
// Numbers - transform to string
|
|
300
|
-
if (typeof blockElement === 'number') {
|
|
301
|
-
return `${blockElement}`;
|
|
302
|
-
}
|
|
303
302
|
let children = [];
|
|
304
303
|
let pathPrefix = '';
|
|
305
304
|
if (Array.isArray(blockElement)) {
|
|
@@ -456,7 +455,6 @@ _BlocksReconciler_rerenderAlreadyScheduled = new WeakMap(), _BlocksReconciler_in
|
|
|
456
455
|
const props = {
|
|
457
456
|
...getContextFromMetadata(this.metadata, this.state.__postData?.thingId),
|
|
458
457
|
modLog: this.modLog,
|
|
459
|
-
reddit: this.reddit,
|
|
460
458
|
cache: this.cache,
|
|
461
459
|
kvStore: this.kvStore,
|
|
462
460
|
redis: this.redis,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlocksHandler.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/BlocksHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAGb,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAgB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAe,IAAI,EAAE,UAAU,EAAE,WAAW,EAAS,MAAM,YAAY,CAAC;AAGpF;;;;;;GAMG;AACH,eAAO,IAAI,oBAAoB,EAAE,aAAa,GAAG,IAAW,CAAC;AAE7D,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CASxD;AAED,KAAK,mBAAmB,CAAC,CAAC,SAAS,IAAI,IAAI,WAAW,GAAG;IACvD;;;OAGG;IACH,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,EAC3C,WAAW,EACX,GAAG,WAAW,EACf,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAiC5B;AAED,eAAO,IAAI,oBAAoB,EAAE,aAAa,GAAG,IAAW,CAAC;AAO7D;;;;GAIG;AACH,qBAAa,aAAa;;IAMxB,oBAAoB,EAAE,aAAa,GAAG,IAAI,CAAQ;gBAEtC,IAAI,EAAE,GAAG,CAAC,iBAAiB;IAMjC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"BlocksHandler.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/BlocksHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAGb,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAgB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAe,IAAI,EAAE,UAAU,EAAE,WAAW,EAAS,MAAM,YAAY,CAAC;AAGpF;;;;;;GAMG;AACH,eAAO,IAAI,oBAAoB,EAAE,aAAa,GAAG,IAAW,CAAC;AAE7D,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CASxD;AAED,KAAK,mBAAmB,CAAC,CAAC,SAAS,IAAI,IAAI,WAAW,GAAG;IACvD;;;OAGG;IACH,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,EAC3C,WAAW,EACX,GAAG,WAAW,EACf,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAiC5B;AAED,eAAO,IAAI,oBAAoB,EAAE,aAAa,GAAG,IAAW,CAAC;AAO7D;;;;GAIG;AACH,qBAAa,aAAa;;IAMxB,oBAAoB,EAAE,aAAa,GAAG,IAAI,CAAQ;gBAEtC,IAAI,EAAE,GAAG,CAAC,iBAAiB;IAMjC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CAwZ1E"}
|
|
@@ -111,8 +111,7 @@ export class BlocksHandler {
|
|
|
111
111
|
}
|
|
112
112
|
async handle(request, metadata) {
|
|
113
113
|
const context = new RenderContext(request, metadata);
|
|
114
|
-
|
|
115
|
-
context.devvitContext = devvitContext;
|
|
114
|
+
context.devvitContext = __classPrivateFieldGet(this, _BlocksHandler_contextBuilder, "f").buildContext(context, request, metadata);
|
|
116
115
|
let blocks;
|
|
117
116
|
/**
|
|
118
117
|
* Events on the main queue must be handled in order, so that state is updated in the correct order. Events
|
|
@@ -445,7 +444,11 @@ async function _BlocksHandler_handleAsyncQueues(context, ...batch) {
|
|
|
445
444
|
return props[key](event.userAction.data);
|
|
446
445
|
}
|
|
447
446
|
else if (event.webView?.postMessage) {
|
|
448
|
-
|
|
447
|
+
// Fallback to deprecated message field for mobile client backwards compatibility
|
|
448
|
+
const message = event.webView.postMessage.jsonString
|
|
449
|
+
? JSON.parse(event.webView.postMessage.jsonString)
|
|
450
|
+
: event.webView.postMessage.message;
|
|
451
|
+
return props[key](message);
|
|
449
452
|
}
|
|
450
453
|
},
|
|
451
454
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/ContextBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ContextBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/ContextBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAY1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,qBAAa,cAAc;IAClB,YAAY,CACjB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,QAAQ,GACjB,MAAM,CAAC,OAAO;CA0ClB"}
|
|
@@ -4,7 +4,6 @@ import { KeyValueStorage } from '../../../../apis/key-value-storage/KeyValueStor
|
|
|
4
4
|
import { MediaClient } from '../../../../apis/media/MediaClient.js';
|
|
5
5
|
import { ModLogClient } from '../../../../apis/modLog/ModLogClient.js';
|
|
6
6
|
import { RealtimeClient } from '../../../../apis/realtime/RealtimeClient.js';
|
|
7
|
-
import { RedditAPIClient } from '../../../../apis/reddit/RedditAPIClient.js';
|
|
8
7
|
import { RedisClient } from '../../../../apis/redis/RedisClient.js';
|
|
9
8
|
import { SchedulerClient } from '../../../../apis/scheduler/SchedulerClient.js';
|
|
10
9
|
import { SettingsClient } from '../../../../apis/settings/SettingsClient.js';
|
|
@@ -20,7 +19,6 @@ export class ContextBuilder {
|
|
|
20
19
|
const modLog = new ModLogClient(metadata);
|
|
21
20
|
const kvStore = new KeyValueStorage(metadata);
|
|
22
21
|
const redis = new RedisClient(metadata);
|
|
23
|
-
const reddit = new RedditAPIClient(metadata);
|
|
24
22
|
const scheduler = new SchedulerClient(metadata);
|
|
25
23
|
const settings = new SettingsClient(metadata);
|
|
26
24
|
const ui = new UIClient(renderContext);
|
|
@@ -32,7 +30,6 @@ export class ContextBuilder {
|
|
|
32
30
|
modLog,
|
|
33
31
|
kvStore,
|
|
34
32
|
redis,
|
|
35
|
-
reddit,
|
|
36
33
|
scheduler,
|
|
37
34
|
settings,
|
|
38
35
|
media,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWebView.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/useWebView.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,KAAK,EAEV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"useWebView.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/useWebView.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,KAAK,EAEV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAmH9B;;KAEK;AACL,wBAAgB,UAAU,CAAC,IAAI,SAAS,SAAS,GAAG,SAAS,EAAE,EAAE,SAAS,SAAS,GAAG,SAAS,EAC7F,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,GACnC,gBAAgB,CAAC,EAAE,CAAC,CAUtB"}
|
|
@@ -13,6 +13,7 @@ var _WebViewHook_hookId, _WebViewHook_url, _WebViewHook_onMessage, _WebViewHook_
|
|
|
13
13
|
import { EffectType } from '@devvit/protos';
|
|
14
14
|
import { WebViewVisibility } from '@devvit/protos';
|
|
15
15
|
import { StringUtil } from '@devvit/shared-types/StringUtil.js';
|
|
16
|
+
import { webViewMessageIsInternalAndClientScope } from '../../helpers/devvitInternalMessage.js';
|
|
16
17
|
import { registerHook } from './BlocksHandler.js';
|
|
17
18
|
class WebViewHook {
|
|
18
19
|
constructor(params, options) {
|
|
@@ -99,14 +100,14 @@ class WebViewHook {
|
|
|
99
100
|
}
|
|
100
101
|
else if (event.webView?.postMessage) {
|
|
101
102
|
// Handle messages sent from web view -> Devvit app
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
103
|
+
// Fallback to deprecated message field for mobile client backwards compatibility
|
|
104
|
+
const message = event.webView.postMessage.jsonString
|
|
105
|
+
? JSON.parse(event.webView.postMessage.jsonString)
|
|
106
|
+
: event.webView.postMessage.message;
|
|
107
|
+
// TODO: Temporary. Remove this filter once clients are updated.
|
|
108
|
+
if (webViewMessageIsInternalAndClientScope(message))
|
|
109
|
+
return;
|
|
110
|
+
await __classPrivateFieldGet(this, _WebViewHook_onMessage, "f").call(this, message, this);
|
|
110
111
|
}
|
|
111
112
|
}
|
|
112
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/devvit/internals/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,wBAAwB,CAAC;AAG5E,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,WAAW,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/devvit/internals/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,wBAAwB,CAAC;AAG5E,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,WAAW,CA2Cb"}
|
|
@@ -24,6 +24,7 @@ export function getContextFromMetadata(metadata, postId, commentId) {
|
|
|
24
24
|
appName,
|
|
25
25
|
appVersion,
|
|
26
26
|
debug,
|
|
27
|
+
metadata,
|
|
27
28
|
toJSON() {
|
|
28
29
|
return {
|
|
29
30
|
appAccountId,
|
|
@@ -35,6 +36,7 @@ export function getContextFromMetadata(metadata, postId, commentId) {
|
|
|
35
36
|
postId,
|
|
36
37
|
commentId,
|
|
37
38
|
debug,
|
|
39
|
+
metadata,
|
|
38
40
|
};
|
|
39
41
|
},
|
|
40
42
|
};
|
|
@@ -79,5 +81,5 @@ export function parseDebug(meta) {
|
|
|
79
81
|
console.info(`[api] @devvit/public-api v${pkg.version} ${Object.entries(debug)
|
|
80
82
|
.map(([k, v]) => `${k}=${v}`)
|
|
81
83
|
.join(' ')}`);
|
|
82
|
-
return { ...debug
|
|
84
|
+
return { ...debug };
|
|
83
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../../src/devvit/internals/csrf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../../src/devvit/internals/csrf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AASjF,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAuB7E,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,WAAW,GAAG,iBAAiB,EACxC,GAAG,EAAE,oBAAoB,iBAkF1B;AAWD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,WAAW,GAAG,iBAAiB,EACxC,GAAG,EAAE,oBAAoB,iBAa1B"}
|
package/devvit/internals/csrf.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { Header } from '@devvit/shared-types/Header.js';
|
|
2
|
+
import { getCommentById, getModerators, getPostById, getSubredditInfoById, } from '../../apis/reddit/index.js';
|
|
2
3
|
import { getMenuItemById } from './menu-items.js';
|
|
3
4
|
function getUserHeader(context) {
|
|
4
|
-
const userHeader = context.
|
|
5
|
+
const userHeader = context.metadata[Header.User].values[0];
|
|
5
6
|
if (!userHeader) {
|
|
6
7
|
throw new Error('User missing from context');
|
|
7
8
|
}
|
|
8
9
|
return userHeader;
|
|
9
10
|
}
|
|
10
11
|
function getSubredditHeader(context) {
|
|
11
|
-
const subredditHeader = context.
|
|
12
|
+
const subredditHeader = context.metadata[Header.Subreddit].values[0];
|
|
12
13
|
if (!subredditHeader) {
|
|
13
14
|
throw new Error('Subreddit missing from context');
|
|
14
15
|
}
|
|
@@ -38,7 +39,7 @@ export async function addCSRFTokenToContext(context, req) {
|
|
|
38
39
|
* Validate user-provided commentId
|
|
39
40
|
*/
|
|
40
41
|
if (commentId) {
|
|
41
|
-
const comment = await
|
|
42
|
+
const comment = await getCommentById(commentId);
|
|
42
43
|
if (!comment) {
|
|
43
44
|
throw new Error(`Comment ${commentId} not found`);
|
|
44
45
|
}
|
|
@@ -50,7 +51,7 @@ export async function addCSRFTokenToContext(context, req) {
|
|
|
50
51
|
* Validate user-provided postId
|
|
51
52
|
*/
|
|
52
53
|
if (postId) {
|
|
53
|
-
const post = await
|
|
54
|
+
const post = await getPostById(postId);
|
|
54
55
|
if (!post) {
|
|
55
56
|
throw new Error(`Post ${postId} not found`);
|
|
56
57
|
}
|
|
@@ -83,13 +84,12 @@ export async function addCSRFTokenToContext(context, req) {
|
|
|
83
84
|
*/
|
|
84
85
|
await context.redis.set(`${userHeader}${subredditHeader}${targetId}${req.actionId}`, JSON.stringify(val));
|
|
85
86
|
await context.redis.expire(`${userHeader}${subredditHeader}${targetId}${req.actionId}`, 600);
|
|
86
|
-
console.debug('CSRF token added: ' + JSON.stringify(val));
|
|
87
87
|
}
|
|
88
88
|
async function isModerator(context) {
|
|
89
89
|
const userHeader = getUserHeader(context);
|
|
90
90
|
const subredditHeader = getSubredditHeader(context);
|
|
91
|
-
const subreddit = await
|
|
92
|
-
const mods = await
|
|
91
|
+
const subreddit = await getSubredditInfoById(subredditHeader);
|
|
92
|
+
const mods = await getModerators({ subredditName: subreddit.name }).all();
|
|
93
93
|
return !!mods.find((mod) => mod.id === userHeader);
|
|
94
94
|
}
|
|
95
95
|
export async function validateCSRFToken(context, req) {
|
|
@@ -104,5 +104,4 @@ export async function validateCSRFToken(context, req) {
|
|
|
104
104
|
if (csrf.needsModCheck && !(await isModerator(context))) {
|
|
105
105
|
throw new Error('User is not a moderator: ' + userHeader + '; ' + subredditHeader);
|
|
106
106
|
}
|
|
107
|
-
console.debug('CSRF token validated: ' + csrfData);
|
|
108
107
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { WebViewInternalMessage } from '@devvit/protos/types/devvit/ui/effects/web_view/v1alpha/post_message.js';
|
|
2
|
+
/**
|
|
3
|
+
* Messages which are scoped to "client" and are of type "devvit-internal" should not be sent to the app.
|
|
4
|
+
* These messages are designed to be handled by client platforms.
|
|
5
|
+
*
|
|
6
|
+
* Not all clients are updated yet, so this check is temporary until clients beging filtering these messages out.
|
|
7
|
+
*
|
|
8
|
+
* @param message - The web view message to check
|
|
9
|
+
* @returns True if the data is a WebViewInternalMessage
|
|
10
|
+
**/
|
|
11
|
+
export declare const webViewMessageIsInternalAndClientScope: (message: unknown) => message is WebViewInternalMessage;
|
|
12
|
+
//# sourceMappingURL=devvitInternalMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devvitInternalMessage.d.ts","sourceRoot":"","sources":["../../../../src/devvit/internals/helpers/devvitInternalMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,yEAAyE,CAAC;AAEjF;;;;;;;;IAQI;AACJ,eAAO,MAAM,sCAAsC,YACxC,OAAO,sCASjB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Messages which are scoped to "client" and are of type "devvit-internal" should not be sent to the app.
|
|
3
|
+
* These messages are designed to be handled by client platforms.
|
|
4
|
+
*
|
|
5
|
+
* Not all clients are updated yet, so this check is temporary until clients beging filtering these messages out.
|
|
6
|
+
*
|
|
7
|
+
* @param message - The web view message to check
|
|
8
|
+
* @returns True if the data is a WebViewInternalMessage
|
|
9
|
+
**/
|
|
10
|
+
export const webViewMessageIsInternalAndClientScope = (message) => {
|
|
11
|
+
if (message === null || typeof message !== 'object')
|
|
12
|
+
return false;
|
|
13
|
+
return ('scope' in message &&
|
|
14
|
+
message.scope === (0) &&
|
|
15
|
+
'type' in message &&
|
|
16
|
+
message.type === 'devvit-internal');
|
|
17
|
+
};
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Metadata } from '@devvit/protos';
|
|
2
|
+
type DevvitPrototypeFunctionWithMetadata = (arg1: any, arg2: Metadata, ...rest: any[]) => Promise<any> | void;
|
|
3
|
+
type DevvitPrototypeFunctionWithOptionalMetadata = (arg1: any, arg2: Metadata | undefined, ...rest: any[]) => Promise<any> | void;
|
|
4
|
+
type DevvitPrototypeFunction = DevvitPrototypeFunctionWithMetadata | DevvitPrototypeFunctionWithOptionalMetadata;
|
|
5
|
+
export declare function extendDevvitPrototype(key: string, value: DevvitPrototypeFunction): void;
|
|
6
|
+
export {};
|
|
2
7
|
//# sourceMappingURL=extendDevvitPrototype.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extendDevvitPrototype.d.ts","sourceRoot":"","sources":["../../../../src/devvit/internals/helpers/extendDevvitPrototype.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extendDevvitPrototype.d.ts","sourceRoot":"","sources":["../../../../src/devvit/internals/helpers/extendDevvitPrototype.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM/C,KAAK,mCAAmC,GAAG,CACzC,IAAI,EAAE,GAAG,EACT,IAAI,EAAE,QAAQ,EACd,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACzB,KAAK,2CAA2C,GAAG,CACjD,IAAI,EAAE,GAAG,EACT,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACzB,KAAK,uBAAuB,GACxB,mCAAmC,GACnC,2CAA2C,CAAC;AAGhD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,GAAG,IAAI,CASvF"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { Devvit } from '../../Devvit.js';
|
|
2
|
+
import { withMetadata } from '../async-metadata.js';
|
|
3
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
2
4
|
export function extendDevvitPrototype(key, value) {
|
|
3
5
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
4
|
-
Devvit.prototype[key] =
|
|
6
|
+
Devvit.prototype[key] = ((req, meta, ...rest) => {
|
|
7
|
+
// If the metadata is nullish, we set it to an empty object instead. This
|
|
8
|
+
// makes sure that when we call `getMetadata` later, we only get an error
|
|
9
|
+
// in "non-sane" cases, like if it's called outside a request.
|
|
10
|
+
const guaranteedMeta = meta ?? {};
|
|
11
|
+
return withMetadata(guaranteedMeta, () => value(req, guaranteedMeta, ...rest));
|
|
12
|
+
});
|
|
5
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-items.d.ts","sourceRoot":"","sources":["../../../src/devvit/internals/menu-items.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAM7D,OAAO,KAAK,EAAE,QAAQ,EAAwB,MAAM,sBAAsB,CAAC;AAU3E,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEhE;
|
|
1
|
+
{"version":3,"file":"menu-items.d.ts","sourceRoot":"","sources":["../../../src/devvit/internals/menu-items.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAM7D,OAAO,KAAK,EAAE,QAAQ,EAAwB,MAAM,sBAAsB,CAAC;AAU3E,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEhE;AA4ED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAItD"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export { RunAs } from './apis/reddit/common.js';
|
|
2
|
+
export * from './apis/reddit/index.js';
|
|
1
3
|
export * from './apis/reddit/models/index.js';
|
|
2
|
-
export type { RedditAPIClient } from './apis/reddit/RedditAPIClient.js';
|
|
3
4
|
export * from './apis/ui/helpers/svg.js';
|
|
4
5
|
export * from './devvit/Devvit.js';
|
|
5
6
|
export { useAsync } from './devvit/internals/blocks/handler/useAsync.js';
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,8CAA8C,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAC7E,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC"}
|