@devvit/shared-types 0.11.0-next-2024-09-12-d093e68b5.0 → 0.11.0-next-2024-09-12-6bed9ac1b.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,39 @@
1
+ import type { LinkedBundle, Bundle } from '@devvit/protos/index.js';
2
+ export declare enum AppCapability {
3
+ Unrecognized = "Unrecognized",
4
+ AppTriggers = "AppTriggers",
5
+ Assets = "Assets",
6
+ Data = "Data",
7
+ HTTP = "HTTP",
8
+ Modlog = "Modlog",
9
+ RedditAPI = "RedditAPI",
10
+ RedditTriggers = "RedditTriggers",
11
+ Scheduler = "Scheduler",
12
+ UI = "UI",
13
+ Moderator = "Moderator",
14
+ Webview = "Webview",
15
+ Payments = "Payments",
16
+ CustomPost = "CustomPost"
17
+ }
18
+ /** Actor API as recorded in Prisma. */
19
+ export type AppCapabilitiesActor = {
20
+ types: readonly {
21
+ readonly name: string;
22
+ }[];
23
+ plugins: readonly {
24
+ readonly fullname: string;
25
+ }[];
26
+ };
27
+ /**
28
+ * Finds all of the capabilities that an app has based on its actor.
29
+ */
30
+ export declare function appCapabilitiesFromActor(actor: Readonly<AppCapabilitiesActor>, hasAssets: boolean, hasWebview: boolean): AppCapability[];
31
+ /**
32
+ * Finds all of the capabilities that an app has based on its linked bundle.
33
+ */
34
+ export declare function appCapabilitiesFromLinkedBundle(bundle: Readonly<LinkedBundle>): AppCapability[];
35
+ /**
36
+ * Finds all of the capabilities that an app has based on its bundle.
37
+ */
38
+ export declare function appCapabilitiesFromBundle(bundle: Readonly<Bundle>): AppCapability[];
39
+ //# sourceMappingURL=AppCapabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppCapabilities.d.ts","sourceRoot":"","sources":["../src/AppCapabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AA+CpE,oBAAY,aAAa;IACvB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,EAAE,OAAO;IACT,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,UAAU,eAAe;CAC1B;AAED,uCAAuC;AACvC,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACnD,CAAC;AAEF;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACrC,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,OAAO,GAClB,aAAa,EAAE,CAMjB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,aAAa,EAAE,CAiB/F;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,EAAE,CAQnF"}
@@ -0,0 +1,144 @@
1
+ import { AssetResolverDefinition, ContextActionDefinition, CustomPostDefinition, FlairDefinition, GraphQLDefinition, HTTPDefinition, InstallationSettingsDefinition, KVStoreDefinition, LinksAndCommentsDefinition, ListingsDefinition, MediaServiceDefinition, ModerationDefinition, ModlogDefinition, ModNoteDefinition, NewModmailDefinition, OnAccountDeleteDefinition, OnAppInstallDefinition, OnAppUpgradeDefinition, OnCommentCreateDefinition, OnCommentDeleteDefinition, OnCommentReportDefinition, OnCommentSubmitDefinition, OnCommentUpdateDefinition, OnModActionDefinition, OnModMailDefinition, OnPostCreateDefinition, OnPostDeleteDefinition, OnPostFlairUpdateDefinition, OnPostReportDefinition, OnPostSubmitDefinition, OnPostUpdateDefinition, OnSubredditSubscribeDefinition, PrivateMessagesDefinition, RedisAPIDefinition, SchedulerDefinition, SchedulerHandlerDefinition, SettingsDefinition, SubredditsDefinition, UIEventHandlerDefinition, UsersDefinition, WidgetsDefinition, WikiDefinition, } from '@devvit/protos';
2
+ import { PaymentProcessorDefinition, PaymentsServiceDefinition } from '@devvit/protos/payments.js';
3
+ export var AppCapability;
4
+ (function (AppCapability) {
5
+ AppCapability["Unrecognized"] = "Unrecognized";
6
+ AppCapability["AppTriggers"] = "AppTriggers";
7
+ AppCapability["Assets"] = "Assets";
8
+ AppCapability["Data"] = "Data";
9
+ AppCapability["HTTP"] = "HTTP";
10
+ AppCapability["Modlog"] = "Modlog";
11
+ AppCapability["RedditAPI"] = "RedditAPI";
12
+ AppCapability["RedditTriggers"] = "RedditTriggers";
13
+ AppCapability["Scheduler"] = "Scheduler";
14
+ AppCapability["UI"] = "UI";
15
+ AppCapability["Moderator"] = "Moderator";
16
+ AppCapability["Webview"] = "Webview";
17
+ AppCapability["Payments"] = "Payments";
18
+ AppCapability["CustomPost"] = "CustomPost";
19
+ })(AppCapability || (AppCapability = {}));
20
+ /**
21
+ * Finds all of the capabilities that an app has based on its actor.
22
+ */
23
+ export function appCapabilitiesFromActor(actor, hasAssets, hasWebview) {
24
+ const names = [
25
+ ...actor.types.map((provide) => provide.name),
26
+ ...actor.plugins.map((use) => use.fullname),
27
+ ];
28
+ return appCapabilitiesFromFullNames(names, hasAssets, hasWebview);
29
+ }
30
+ /**
31
+ * Finds all of the capabilities that an app has based on its linked bundle.
32
+ */
33
+ export function appCapabilitiesFromLinkedBundle(bundle) {
34
+ const getFlatListOfServiceDefinitions = (bundle) => [
35
+ ...(bundle.provides ?? []),
36
+ // Recursively get the provides from child uses.
37
+ ...(bundle.uses?.length ? bundle.uses.flatMap(getFlatListOfServiceDefinitions) : []),
38
+ ];
39
+ const names = getFlatListOfServiceDefinitions(bundle)
40
+ // If undefined, there is still an unknown provide that should not be
41
+ // filtered out.
42
+ .map((definition) => definition.fullName ?? '');
43
+ const hasAssets = Object.keys(bundle.assets).length > 0;
44
+ const hasWebview = Object.keys(bundle.webviewAssets).length > 0;
45
+ return appCapabilitiesFromFullNames(names, hasAssets, hasWebview).flatMap((capablity) => capablity);
46
+ }
47
+ /**
48
+ * Finds all of the capabilities that an app has based on its bundle.
49
+ */
50
+ export function appCapabilitiesFromBundle(bundle) {
51
+ const names = [
52
+ ...(bundle.dependencies?.provides ?? []).map((provide) => provide.definition?.fullName ?? ''),
53
+ ...(bundle.dependencies?.uses ?? []).map((use) => use.typeName),
54
+ ];
55
+ const hasAssets = Object.keys(bundle.assetIds).length > 0;
56
+ const hasWebview = Object.keys(bundle.webviewAssetIds).length > 0;
57
+ return appCapabilitiesFromFullNames(names, hasAssets, hasWebview);
58
+ }
59
+ function appCapabilitiesFromFullNames(fullNames, hasAssets, hasWebview) {
60
+ const appCapabilities = fullNames
61
+ .flatMap((name) => appCapabilityFromFullName(name, hasAssets))
62
+ .filter((capability) => capability != null);
63
+ // All apps have moderator permissions implicitly.
64
+ appCapabilities.push(AppCapability.Moderator);
65
+ if (hasWebview) {
66
+ appCapabilities.push(AppCapability.Webview);
67
+ }
68
+ // Filter out dups.
69
+ return [...new Set(appCapabilities)];
70
+ }
71
+ /**
72
+ * Definition.fullName to AppCapability. We don't really care about the
73
+ * server / client-ness--we consider the worst-case scenario. For example, the
74
+ * worst-case for any Reddit API is an app _using_ the API but the worst-case
75
+ * for any trigger is _providing_ it. Another example is the scheduler, if an
76
+ * app provides a scheduler job callback OR uses the scheduler plugin, we assume
77
+ * the scheduler capability.
78
+ *
79
+ * Returns an array because some definitions can map to multiple capability categories.
80
+ */
81
+ function appCapabilityFromFullName(fullName, hasAssets) {
82
+ switch (fullName) {
83
+ case AssetResolverDefinition.fullName:
84
+ // Every app depends on the asset resolver. The resolver is used for
85
+ // conventional URLs like https://example.com/foo.gif, data URLs, and
86
+ // relative URLs to static assets. We can only report on static assets and
87
+ // that requires more detail.
88
+ return [hasAssets ? AppCapability.Assets : undefined];
89
+ case CustomPostDefinition.fullName:
90
+ return [AppCapability.CustomPost, AppCapability.UI];
91
+ case ContextActionDefinition.fullName:
92
+ case UIEventHandlerDefinition.fullName:
93
+ return [AppCapability.UI];
94
+ case InstallationSettingsDefinition.fullName:
95
+ case SettingsDefinition.fullName:
96
+ case KVStoreDefinition.fullName:
97
+ case MediaServiceDefinition.fullName:
98
+ case RedisAPIDefinition.fullName:
99
+ return [AppCapability.Data];
100
+ case HTTPDefinition.fullName:
101
+ return [AppCapability.HTTP];
102
+ case ModlogDefinition.fullName:
103
+ return [AppCapability.Modlog];
104
+ case SchedulerHandlerDefinition.fullName:
105
+ case SchedulerDefinition.fullName:
106
+ return [AppCapability.Scheduler];
107
+ case OnAccountDeleteDefinition.fullName:
108
+ case OnAppInstallDefinition.fullName:
109
+ case OnAppUpgradeDefinition.fullName:
110
+ return [AppCapability.AppTriggers];
111
+ case OnCommentCreateDefinition.fullName:
112
+ case OnCommentDeleteDefinition.fullName:
113
+ case OnCommentReportDefinition.fullName:
114
+ case OnCommentSubmitDefinition.fullName:
115
+ case OnCommentUpdateDefinition.fullName:
116
+ case OnModActionDefinition.fullName:
117
+ case OnModMailDefinition.fullName:
118
+ case OnPostCreateDefinition.fullName:
119
+ case OnPostDeleteDefinition.fullName:
120
+ case OnPostUpdateDefinition.fullName:
121
+ case OnPostFlairUpdateDefinition.fullName:
122
+ case OnPostReportDefinition.fullName:
123
+ case OnPostSubmitDefinition.fullName:
124
+ case OnSubredditSubscribeDefinition.fullName:
125
+ return [AppCapability.RedditTriggers];
126
+ case FlairDefinition.fullName:
127
+ case GraphQLDefinition.fullName:
128
+ case LinksAndCommentsDefinition.fullName:
129
+ case ListingsDefinition.fullName:
130
+ case ModerationDefinition.fullName:
131
+ case ModNoteDefinition.fullName:
132
+ case NewModmailDefinition.fullName:
133
+ case PrivateMessagesDefinition.fullName:
134
+ case SubredditsDefinition.fullName:
135
+ case UsersDefinition.fullName:
136
+ case WidgetsDefinition.fullName:
137
+ case WikiDefinition.fullName:
138
+ return [AppCapability.RedditAPI];
139
+ case PaymentsServiceDefinition.fullName:
140
+ case PaymentProcessorDefinition.fullName:
141
+ return [AppCapability.Payments];
142
+ }
143
+ return [AppCapability.Unrecognized];
144
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppCapabilities.test.d.ts","sourceRoot":"","sources":["../src/AppCapabilities.test.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devvit/shared-types",
3
- "version": "0.11.0-next-2024-09-12-d093e68b5.0",
3
+ "version": "0.11.0-next-2024-09-12-6bed9ac1b.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,14 +24,14 @@
24
24
  },
25
25
  "types": "./index.d.ts",
26
26
  "dependencies": {
27
- "@devvit/protos": "0.11.0-next-2024-09-12-d093e68b5.0",
27
+ "@devvit/protos": "0.11.0-next-2024-09-12-6bed9ac1b.0",
28
28
  "jsonschema": "1.4.1",
29
29
  "uuid": "9.0.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@devvit/eslint-config": "0.11.0-next-2024-09-12-d093e68b5.0",
33
- "@devvit/repo-tools": "0.11.0-next-2024-09-12-d093e68b5.0",
34
- "@devvit/tsconfig": "0.11.0-next-2024-09-12-d093e68b5.0",
32
+ "@devvit/eslint-config": "0.11.0-next-2024-09-12-6bed9ac1b.0",
33
+ "@devvit/repo-tools": "0.11.0-next-2024-09-12-6bed9ac1b.0",
34
+ "@devvit/tsconfig": "0.11.0-next-2024-09-12-6bed9ac1b.0",
35
35
  "@types/redis-mock": "0.17.1",
36
36
  "@types/uuid": "9.0.0",
37
37
  "eslint": "8.9.0",
@@ -45,5 +45,5 @@
45
45
  "directory": "dist"
46
46
  },
47
47
  "source": "./src/index.ts",
48
- "gitHead": "ba682abe5761b3d159dae5e5614691b870e4b645"
48
+ "gitHead": "ca4e0cab623cfe07bdd82b2201c850bfb8a104c2"
49
49
  }