@openrails/contentkit-ui 0.104.0-rc.1 → 0.104.0-rc.3
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/README.md +6 -6
- package/dist/client/beacons.js +4 -1
- package/dist/client/beacons.js.map +1 -1
- package/dist/client/contents.d.ts +9 -1
- package/dist/client/contents.js +73 -55
- package/dist/client/contents.js.map +1 -1
- package/dist/client/discovery.d.ts +6 -2
- package/dist/client/discovery.js +1 -1
- package/dist/client/discovery.js.map +1 -1
- package/dist/client/generated/error-codes.d.ts +1 -1
- package/dist/client/generated/error-codes.js +4 -0
- package/dist/client/generated/error-codes.js.map +1 -1
- package/dist/client/generated/routes.d.ts +43 -30
- package/dist/client/generated/routes.js +70 -63
- package/dist/client/generated/routes.js.map +1 -1
- package/dist/client/generated/wire.d.ts +36 -74
- package/dist/client/generated/wire.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/media/windows.d.ts +2 -0
- package/dist/client/media/windows.js +4 -1
- package/dist/client/media/windows.js.map +1 -1
- package/dist/client/stats.d.ts +4 -20
- package/dist/client/stats.js +0 -11
- package/dist/client/stats.js.map +1 -1
- package/dist/client/versions.d.ts +8 -6
- package/dist/client/versions.js +15 -10
- package/dist/client/versions.js.map +1 -1
- package/dist/components/admin/bulk-drafts.d.ts +17 -0
- package/dist/components/admin/bulk-drafts.js +41 -0
- package/dist/components/admin/bulk-drafts.js.map +1 -0
- package/dist/components/admin/content-admin.d.ts +1 -1
- package/dist/components/admin/content-admin.js.map +1 -1
- package/dist/components/admin/content-manager.d.ts +11 -3
- package/dist/components/admin/content-manager.js +739 -380
- package/dist/components/admin/content-manager.js.map +1 -1
- package/dist/components/admin/group-manager.d.ts +8 -3
- package/dist/components/admin/group-manager.js +218 -146
- package/dist/components/admin/group-manager.js.map +1 -1
- package/dist/components/admin/page-notices.d.ts +16 -0
- package/dist/components/admin/page-notices.js +113 -0
- package/dist/components/admin/page-notices.js.map +1 -0
- package/dist/components/admin/page-picker.d.ts +38 -0
- package/dist/components/admin/page-picker.js +159 -0
- package/dist/components/admin/page-picker.js.map +1 -0
- package/dist/components/admin/reader-content-editor.js +537 -500
- package/dist/components/admin/reader-content-editor.js.map +1 -1
- package/dist/components/admin/reader-manifest.js +181 -179
- package/dist/components/admin/reader-manifest.js.map +1 -1
- package/dist/components/admin/shell.d.ts +10 -2
- package/dist/components/admin/shell.js +114 -42
- package/dist/components/admin/shell.js.map +1 -1
- package/dist/components/admin/stats-dashboard.d.ts +4 -9
- package/dist/components/admin/stats-dashboard.js +300 -202
- package/dist/components/admin/stats-dashboard.js.map +1 -1
- package/dist/components/admin/upload-queue.d.ts +14 -0
- package/dist/components/admin/upload-queue.js +115 -98
- package/dist/components/admin/upload-queue.js.map +1 -1
- package/dist/components/content/card.d.ts +31 -3
- package/dist/components/content/card.js +324 -158
- package/dist/components/content/card.js.map +1 -1
- package/dist/components/content/daily-releases.js +14 -12
- package/dist/components/content/daily-releases.js.map +1 -1
- package/dist/components/content/editor-save.js +27 -25
- package/dist/components/content/editor-save.js.map +1 -1
- package/dist/components/content/editors.js +274 -253
- package/dist/components/content/editors.js.map +1 -1
- package/dist/components/content/favorites.d.ts +1 -1
- package/dist/components/content/favorites.js +36 -22
- package/dist/components/content/favorites.js.map +1 -1
- package/dist/components/content/grid.d.ts +11 -4
- package/dist/components/content/grid.js +52 -43
- package/dist/components/content/grid.js.map +1 -1
- package/dist/components/content/history.js +83 -63
- package/dist/components/content/history.js.map +1 -1
- package/dist/components/content/index.d.ts +5 -3
- package/dist/components/content/listing.d.ts +14 -3
- package/dist/components/content/listing.js +65 -56
- package/dist/components/content/listing.js.map +1 -1
- package/dist/components/content/offer-fields.js +6 -6
- package/dist/components/content/paged-grid.d.ts +10 -0
- package/dist/components/content/paged-grid.js +116 -0
- package/dist/components/content/paged-grid.js.map +1 -0
- package/dist/components/content/pagination.d.ts +19 -0
- package/dist/components/content/pagination.js +97 -0
- package/dist/components/content/pagination.js.map +1 -0
- package/dist/components/content/paywall.d.ts +9 -0
- package/dist/components/content/paywall.js +27 -3
- package/dist/components/content/paywall.js.map +1 -1
- package/dist/components/content/post-list.d.ts +37 -0
- package/dist/components/content/post-list.js +203 -0
- package/dist/components/content/post-list.js.map +1 -0
- package/dist/components/content/reader-settings.d.ts +2 -0
- package/dist/components/content/reader-settings.js +1 -1
- package/dist/components/content/reader-settings.js.map +1 -1
- package/dist/components/groups/banner.d.ts +6 -2
- package/dist/components/groups/banner.js +79 -61
- package/dist/components/groups/banner.js.map +1 -1
- package/dist/components/groups/directory.d.ts +12 -2
- package/dist/components/groups/directory.js +168 -105
- package/dist/components/groups/directory.js.map +1 -1
- package/dist/components/groups/editor.js +10 -10
- package/dist/components/groups/editor.js.map +1 -1
- package/dist/components/groups/entity-chips.d.ts +61 -0
- package/dist/components/groups/entity-chips.js +382 -0
- package/dist/components/groups/entity-chips.js.map +1 -0
- package/dist/components/groups/group-members.d.ts +29 -0
- package/dist/components/groups/group-members.js +474 -0
- package/dist/components/groups/group-members.js.map +1 -0
- package/dist/components/groups/header.js +53 -45
- package/dist/components/groups/header.js.map +1 -1
- package/dist/components/groups/index.d.ts +3 -1
- package/dist/components/groups/memberships.d.ts +3 -36
- package/dist/components/groups/memberships.js +105 -480
- package/dist/components/groups/memberships.js.map +1 -1
- package/dist/components/groups/scoped.d.ts +23 -0
- package/dist/components/groups/scoped.js +92 -0
- package/dist/components/groups/scoped.js.map +1 -0
- package/dist/components/media-folder-editor.d.ts +5 -0
- package/dist/components/media-folder-editor.js +418 -230
- package/dist/components/media-folder-editor.js.map +1 -1
- package/dist/components/social/poll.js +57 -48
- package/dist/components/social/poll.js.map +1 -1
- package/dist/components/sortable-list.d.ts +5 -1
- package/dist/components/sortable-list.js +97 -81
- package/dist/components/sortable-list.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +41 -37
- package/dist/locales/admin/de.js +78 -45
- package/dist/locales/admin/de.js.map +1 -1
- package/dist/locales/admin/en.d.ts +74 -41
- package/dist/locales/admin/en.js +78 -45
- package/dist/locales/admin/en.js.map +1 -1
- package/dist/locales/admin/es.js +78 -45
- package/dist/locales/admin/es.js.map +1 -1
- package/dist/locales/admin/ja.js +78 -45
- package/dist/locales/admin/ja.js.map +1 -1
- package/dist/locales/admin/ko.js +78 -45
- package/dist/locales/admin/ko.js.map +1 -1
- package/dist/locales/admin/zh.js +78 -45
- package/dist/locales/admin/zh.js.map +1 -1
- package/dist/locales/de.js +2 -0
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/discovery/de.js +25 -1
- package/dist/locales/discovery/de.js.map +1 -1
- package/dist/locales/discovery/en.d.ts +24 -0
- package/dist/locales/discovery/en.js +25 -1
- package/dist/locales/discovery/en.js.map +1 -1
- package/dist/locales/discovery/es.js +25 -1
- package/dist/locales/discovery/es.js.map +1 -1
- package/dist/locales/discovery/ja.js +25 -1
- package/dist/locales/discovery/ja.js.map +1 -1
- package/dist/locales/discovery/ko.js +25 -1
- package/dist/locales/discovery/ko.js.map +1 -1
- package/dist/locales/discovery/zh.js +25 -1
- package/dist/locales/discovery/zh.js.map +1 -1
- package/dist/locales/en.d.ts +120 -43
- package/dist/locales/en.js +2 -0
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es.js +2 -0
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/groups/de.js +22 -4
- package/dist/locales/groups/de.js.map +1 -1
- package/dist/locales/groups/en.d.ts +20 -2
- package/dist/locales/groups/en.js +22 -4
- package/dist/locales/groups/en.js.map +1 -1
- package/dist/locales/groups/es.js +22 -4
- package/dist/locales/groups/es.js.map +1 -1
- package/dist/locales/groups/ja.js +22 -4
- package/dist/locales/groups/ja.js.map +1 -1
- package/dist/locales/groups/ko.js +22 -4
- package/dist/locales/groups/ko.js.map +1 -1
- package/dist/locales/groups/zh.js +22 -4
- package/dist/locales/groups/zh.js.map +1 -1
- package/dist/locales/ja.js +2 -0
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.js +2 -0
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/zh.js +2 -0
- package/dist/locales/zh.js.map +1 -1
- package/dist/react/contents.js +1 -1
- package/dist/react/contents.js.map +1 -1
- package/dist/react/discovery.d.ts +16 -0
- package/dist/react/discovery.js +69 -37
- package/dist/react/discovery.js.map +1 -1
- package/dist/react/groups.d.ts +19 -3
- package/dist/react/groups.js +49 -22
- package/dist/react/groups.js.map +1 -1
- package/dist/react/index.d.ts +6 -4
- package/dist/react/page-notices.d.ts +13 -0
- package/dist/react/page-notices.js +38 -0
- package/dist/react/page-notices.js.map +1 -0
- package/dist/react/post-reads.d.ts +23 -0
- package/dist/react/post-reads.js +90 -0
- package/dist/react/post-reads.js.map +1 -0
- package/dist/react/remembered-sort.d.ts +5 -0
- package/dist/react/remembered-sort.js +29 -0
- package/dist/react/remembered-sort.js.map +1 -0
- package/dist/react/resources.js +2 -2
- package/dist/react/resources.js.map +1 -1
- package/dist/react/stats.d.ts +3 -7
- package/dist/react/stats.js +2 -6
- package/dist/react/stats.js.map +1 -1
- package/dist/react/use-engagement.d.ts +2 -0
- package/dist/react/use-engagement.js +40 -34
- package/dist/react/use-engagement.js.map +1 -1
- package/dist/react.js +29 -27
- package/dist/styles.css +1 -1
- package/dist/urls/index.d.ts +1 -1
- package/dist/urls.js +2 -2
- package/dist/urls.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/admin/page-review.d.ts +0 -13
- package/dist/components/admin/page-review.js +0 -225
- package/dist/components/admin/page-review.js.map +0 -1
- package/dist/react/page-review.d.ts +0 -14
- package/dist/react/page-review.js +0 -37
- package/dist/react/page-review.js.map +0 -1
|
@@ -34,8 +34,10 @@ export interface ActivityContextsInput {
|
|
|
34
34
|
export interface ActivityDay {
|
|
35
35
|
date: string;
|
|
36
36
|
readers: number;
|
|
37
|
+
anon: number;
|
|
38
|
+
free: number;
|
|
39
|
+
premium: number;
|
|
37
40
|
active_ms: number;
|
|
38
|
-
users: number;
|
|
39
41
|
}
|
|
40
42
|
export interface ActivityTarget {
|
|
41
43
|
content_id: string;
|
|
@@ -195,6 +197,9 @@ export interface Card {
|
|
|
195
197
|
published_at?: string;
|
|
196
198
|
attributes: Record<string, unknown>;
|
|
197
199
|
ranking?: ContentRanking;
|
|
200
|
+
updated_at?: string;
|
|
201
|
+
deleted?: boolean;
|
|
202
|
+
excerpt?: string;
|
|
198
203
|
}
|
|
199
204
|
export interface CardAccess {
|
|
200
205
|
allowed: boolean;
|
|
@@ -326,6 +331,7 @@ export interface Content {
|
|
|
326
331
|
language: string;
|
|
327
332
|
title: string;
|
|
328
333
|
slug?: string;
|
|
334
|
+
slugs?: Record<string, string>;
|
|
329
335
|
description?: string;
|
|
330
336
|
body?: string;
|
|
331
337
|
decision: Decision;
|
|
@@ -380,6 +386,7 @@ export interface ContentFiltersUpdate {
|
|
|
380
386
|
export interface ContentGroups {
|
|
381
387
|
kinds?: string[];
|
|
382
388
|
memberships: Membership[];
|
|
389
|
+
create?: NewEntity[];
|
|
383
390
|
}
|
|
384
391
|
export interface ContentInput {
|
|
385
392
|
kind: string;
|
|
@@ -834,17 +841,20 @@ export interface GroupKind {
|
|
|
834
841
|
scoped_by?: string;
|
|
835
842
|
owner?: string;
|
|
836
843
|
max_per_owner?: number;
|
|
844
|
+
avatar?: boolean;
|
|
837
845
|
uploads?: UploadLimits;
|
|
838
846
|
sellable?: boolean;
|
|
839
847
|
auth_scope?: boolean;
|
|
840
848
|
windows?: boolean;
|
|
841
849
|
version_level?: boolean;
|
|
850
|
+
creatable?: boolean;
|
|
842
851
|
roles?: string[];
|
|
843
852
|
attributes?: Record<string, Attribute>;
|
|
844
853
|
}
|
|
845
854
|
export interface GroupPage {
|
|
846
855
|
entities: GroupCard[];
|
|
847
856
|
next_cursor?: string;
|
|
857
|
+
total?: number;
|
|
848
858
|
}
|
|
849
859
|
export interface GroupRecord {
|
|
850
860
|
external_id: string;
|
|
@@ -991,6 +1001,7 @@ export interface Item {
|
|
|
991
1001
|
}
|
|
992
1002
|
export interface Kind {
|
|
993
1003
|
route: string;
|
|
1004
|
+
path_entity?: string;
|
|
994
1005
|
presentation: string;
|
|
995
1006
|
versions: VersionRules;
|
|
996
1007
|
segments?: boolean;
|
|
@@ -1035,12 +1046,17 @@ export interface ListingSummary {
|
|
|
1035
1046
|
filtered_count: number;
|
|
1036
1047
|
filtered_entities: ReleaseFilteredEntity[];
|
|
1037
1048
|
locked_count: number;
|
|
1049
|
+
total: number;
|
|
1038
1050
|
truncated?: boolean;
|
|
1039
1051
|
}
|
|
1040
1052
|
export interface Locked {
|
|
1041
1053
|
show: string[];
|
|
1042
1054
|
preview?: Preview;
|
|
1043
1055
|
}
|
|
1056
|
+
export interface ManageCount {
|
|
1057
|
+
total: number;
|
|
1058
|
+
truncated?: boolean;
|
|
1059
|
+
}
|
|
1044
1060
|
export interface MemberPage {
|
|
1045
1061
|
members: Membership[];
|
|
1046
1062
|
next_cursor?: string;
|
|
@@ -1129,6 +1145,19 @@ export interface Name {
|
|
|
1129
1145
|
kind: "alias" | "name";
|
|
1130
1146
|
name: string;
|
|
1131
1147
|
}
|
|
1148
|
+
export interface NewEntity {
|
|
1149
|
+
kind: string;
|
|
1150
|
+
name: string;
|
|
1151
|
+
language?: string;
|
|
1152
|
+
}
|
|
1153
|
+
export interface NoticePage {
|
|
1154
|
+
id: string;
|
|
1155
|
+
source_name: string;
|
|
1156
|
+
reason?: string;
|
|
1157
|
+
from?: number;
|
|
1158
|
+
to?: number;
|
|
1159
|
+
preview_url?: string;
|
|
1160
|
+
}
|
|
1132
1161
|
export interface Offer {
|
|
1133
1162
|
id: string;
|
|
1134
1163
|
target: Target;
|
|
@@ -1192,7 +1221,6 @@ export interface OperationError {
|
|
|
1192
1221
|
export interface OperationResult {
|
|
1193
1222
|
path: string;
|
|
1194
1223
|
pages: number;
|
|
1195
|
-
page_review?: PageReviewSummary;
|
|
1196
1224
|
}
|
|
1197
1225
|
export interface Order {
|
|
1198
1226
|
members: MemberRef[];
|
|
@@ -1210,76 +1238,18 @@ export interface Page {
|
|
|
1210
1238
|
items: Item[];
|
|
1211
1239
|
next_cursor?: string;
|
|
1212
1240
|
}
|
|
1213
|
-
export interface PageAnalysis {
|
|
1214
|
-
recipe: string;
|
|
1215
|
-
source_sha256: string;
|
|
1216
|
-
status: string;
|
|
1217
|
-
width?: number;
|
|
1218
|
-
height?: number;
|
|
1219
|
-
frames?: number;
|
|
1220
|
-
pixel_sha256?: string;
|
|
1221
|
-
pixel_format?: string;
|
|
1222
|
-
profile_sha256?: string;
|
|
1223
|
-
blank: string;
|
|
1224
|
-
blank_reason?: string;
|
|
1225
|
-
confidence: string;
|
|
1226
|
-
metrics?: PageAnalysisMetrics;
|
|
1227
|
-
flags?: string[];
|
|
1228
|
-
}
|
|
1229
|
-
export interface PageAnalysisMetrics {
|
|
1230
|
-
pixels: number;
|
|
1231
|
-
visible_pixels: number;
|
|
1232
|
-
opaque_pixels: number;
|
|
1233
|
-
foreground_pixels: number;
|
|
1234
|
-
min_rgb: number[];
|
|
1235
|
-
max_rgb: number[];
|
|
1236
|
-
}
|
|
1237
|
-
export interface PageDecision {
|
|
1238
|
-
reason: string;
|
|
1239
|
-
confidence: string;
|
|
1240
|
-
related?: string[];
|
|
1241
|
-
}
|
|
1242
1241
|
export interface PageEngagement {
|
|
1243
1242
|
index: number;
|
|
1244
1243
|
ranges: CoverageRange[];
|
|
1245
1244
|
active_ms: number;
|
|
1246
1245
|
}
|
|
1247
|
-
export interface
|
|
1248
|
-
revision: string;
|
|
1249
|
-
pages: PageReviewEntry[];
|
|
1250
|
-
selected: number;
|
|
1251
|
-
flagged: number;
|
|
1252
|
-
}
|
|
1253
|
-
export interface PageReviewChange {
|
|
1254
|
-
id: string;
|
|
1255
|
-
mode: string;
|
|
1256
|
-
}
|
|
1257
|
-
export interface PageReviewEntry {
|
|
1246
|
+
export interface PageNotice {
|
|
1258
1247
|
id: string;
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
source_entry?: string;
|
|
1262
|
-
archive_sha256?: string;
|
|
1263
|
-
source_sha256: string;
|
|
1264
|
-
span?: PageSpan;
|
|
1265
|
-
included: boolean;
|
|
1266
|
-
mode: string;
|
|
1267
|
-
decision: PageDecision;
|
|
1268
|
-
flags: string[];
|
|
1269
|
-
analysis?: PageAnalysis;
|
|
1270
|
-
preview_url?: string;
|
|
1271
|
-
source_url?: string;
|
|
1272
|
-
}
|
|
1273
|
-
export interface PageReviewPatch {
|
|
1274
|
-
revision: string;
|
|
1275
|
-
pages?: PageReviewChange[];
|
|
1276
|
-
order?: string[];
|
|
1248
|
+
kind: string;
|
|
1249
|
+
pages: NoticePage[];
|
|
1277
1250
|
}
|
|
1278
|
-
export interface
|
|
1279
|
-
|
|
1280
|
-
selected: number;
|
|
1281
|
-
excluded: number;
|
|
1282
|
-
flagged: number;
|
|
1251
|
+
export interface PageNotices {
|
|
1252
|
+
notices: PageNotice[];
|
|
1283
1253
|
}
|
|
1284
1254
|
export interface PageSpan {
|
|
1285
1255
|
from: number;
|
|
@@ -1494,12 +1464,6 @@ export interface PublishInput {
|
|
|
1494
1464
|
export interface Published {
|
|
1495
1465
|
items: Item[];
|
|
1496
1466
|
}
|
|
1497
|
-
export interface RankedContent {
|
|
1498
|
-
id: string;
|
|
1499
|
-
title: string;
|
|
1500
|
-
path?: string;
|
|
1501
|
-
value: number;
|
|
1502
|
-
}
|
|
1503
1467
|
export interface RankingInfo {
|
|
1504
1468
|
policy: string;
|
|
1505
1469
|
mode: string;
|
|
@@ -1742,9 +1706,6 @@ export interface Terms {
|
|
|
1742
1706
|
export interface TicketBody {
|
|
1743
1707
|
ticket: string;
|
|
1744
1708
|
}
|
|
1745
|
-
export interface TopContents {
|
|
1746
|
-
contents: RankedContent[];
|
|
1747
|
-
}
|
|
1748
1709
|
export interface Total {
|
|
1749
1710
|
public: number;
|
|
1750
1711
|
tiers: Record<string, number>;
|
|
@@ -1862,6 +1823,7 @@ export interface VideoLimits {
|
|
|
1862
1823
|
}
|
|
1863
1824
|
export interface ViewerState {
|
|
1864
1825
|
favorited: boolean;
|
|
1826
|
+
reaction?: number;
|
|
1865
1827
|
seen: boolean;
|
|
1866
1828
|
completed: boolean;
|
|
1867
1829
|
progress: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","names":[],"sources":["../../../src/client/generated/wire.ts"],"sourcesContent":["// Generated by `go generate ./internal/contract` from ContentKit's route catalog. Do not edit.\n\nimport type { ErrorCode } from \"./error-codes.js\";\n\nexport type { ErrorCode };\n\n// Upload sizes: one PUT up to MAX_SINGLE_PUT bytes, else multipart parts.\nexport const MAX_SINGLE_PUT = 67108864;\nexport const MIN_PART_SIZE = 8388608;\nexport const MAX_PART_SIZE = 16777216;\n\nexport type OpName = \"put\" | \"edit\" | \"move\" | \"rename\" | \"remove\" | \"attach\" | \"copy\" | \"frame\" | \"meta\" | \"regenerate\";\nexport type Access = \"full\" | \"none\";\nexport type ItemState = \"ready\" | \"processing\" | \"failed\";\nexport type EncodePhase = \"queued\" | \"downloading\" | \"probing\" | \"encoding\" | \"muxing\" | \"uploading\" | \"publishing\" | \"images\";\nexport type PollKind = \"multiple_choice\" | \"free_text\";\nexport type ModerationState = \"approved\" | \"held\" | \"rejected\";\nexport type ContentState = \"draft\" | \"published\" | \"deleted\";\nexport type VersionState = \"draft\" | \"published\";\nexport type Listing = \"listed\" | \"members\" | \"unlisted\";\nexport type AliasStatus = \"found\" | \"not_found\" | \"gone\";\n\nexport interface Activity {\n days: ActivityDay[];\n}\n\nexport interface ActivityContext {\n content_id: string;\n version_id?: string;\n token: string;\n occurred_at: string;\n}\n\nexport interface ActivityContexts {\n enabled: boolean;\n contexts: ActivityContext[];\n}\n\nexport interface ActivityContextsInput {\n session?: string;\n language?: string;\n targets: ActivityTarget[];\n}\n\nexport interface ActivityDay {\n date: string;\n readers: number;\n active_ms: number;\n users: number;\n}\n\nexport interface ActivityTarget {\n content_id: string;\n version_id?: string;\n}\n\nexport interface AdminComment {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n language?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n deleted_at?: string;\n}\n\nexport interface AliasKey {\n source: string;\n kind: string;\n key: string;\n}\n\nexport interface AliasLookup {\n aliases: AliasKey[];\n}\n\nexport interface AliasRecord {\n kind: string;\n key: string;\n locator?: string;\n target: TargetRef;\n}\n\nexport interface AliasResult {\n source: string;\n kind: string;\n key: string;\n status: AliasStatus;\n resolved?: Resolved;\n locator?: string;\n}\n\nexport interface AliasResults {\n aliases: AliasResult[];\n}\n\nexport interface Anchor {\n id: string;\n page: string;\n offset_percent: number;\n duration_seconds?: number;\n}\n\nexport interface Anonymous {\n comments: boolean;\n reactions: boolean;\n votes: boolean;\n}\n\nexport interface AnswerGroup {\n id: string;\n label: string;\n count: number;\n}\n\nexport interface AnswerRecord {\n poll: Ref;\n user_id: string;\n text: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface Archive {\n name: string;\n size: number;\n sha256: string;\n}\n\nexport interface Attribute {\n type: string;\n values?: string[];\n filterable?: boolean;\n sortable?: boolean;\n}\n\nexport interface Avatar {\n image?: string;\n renditions?: Rendition[];\n}\n\nexport interface BackgroundCue {\n file: string;\n from_page?: string;\n to_page?: string;\n from_anchor?: string;\n to_anchor?: string;\n loop?: boolean;\n layer?: string;\n}\n\nexport interface BanInput {\n reason?: string;\n until?: string;\n}\n\nexport interface BanNotice {\n scope: string;\n reason?: string;\n until?: string;\n}\n\nexport interface BannedWord {\n word: string;\n action: \"mask\" | \"reject\";\n created_by: string;\n created_at: string;\n}\n\nexport interface BannedWordInput {\n word: string;\n action?: \"mask\" | \"reject\";\n}\n\nexport interface Batch {\n source: string;\n preference_floor?: number;\n provision_scopes?: boolean;\n entities?: GroupRecord[];\n contents?: ContentRecord[];\n memberships?: MembershipSet[];\n offers?: OfferRecord[];\n aliases?: AliasRecord[];\n comments?: CommentRecord[];\n reactions?: ReactionRecord[];\n favorites?: FavoriteRecord[];\n polls?: PollRecord[];\n votes?: VoteRecord[];\n answers?: AnswerRecord[];\n legacy_reading?: LegacyReadingRecord[];\n signals?: SignalRecord[];\n deletes?: DeleteRecord[];\n}\n\nexport interface BodyImageInput {\n image?: string;\n version: string;\n}\n\nexport interface Card {\n id: string;\n kind: string;\n code: string;\n path: string;\n title: string;\n language: string;\n cover: PublicRendition[];\n version: CardVersion;\n entities: Record<string, Chip[]>;\n owner?: GroupCard;\n counts: Counts;\n access: CardAccess;\n viewer?: ViewerState;\n published_at?: string;\n attributes: Record<string, unknown>;\n ranking?: ContentRanking;\n}\n\nexport interface CardAccess {\n allowed: boolean;\n level: \"group\" | \"group_ppv\" | \"ppv\" | \"public\" | \"tier\";\n tiers?: string[];\n unknown?: boolean;\n sell?: string[];\n requires?: string;\n preview?: Preview;\n free_after?: string;\n offers?: Sale[];\n}\n\nexport interface CardVersion {\n id: string;\n code: string;\n languages: string[];\n traits: string[];\n label?: string;\n pages?: number;\n duration_ms?: number;\n has_audio: boolean;\n hls?: string;\n}\n\nexport interface CatalogCover {\n image?: string;\n url?: string;\n renditions?: PublicRendition[];\n}\n\nexport interface CatalogText {\n title: string;\n slug?: string;\n description?: string;\n body?: string;\n sort_key?: string;\n aliases?: string[];\n}\n\nexport interface Chip {\n id: string;\n slug: string;\n name: string;\n path?: string;\n position?: number;\n}\n\nexport interface Comment {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n language?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CommentBan {\n user_id: string;\n user?: PublicUser;\n scope: string;\n reason?: string;\n until?: string;\n banned_by: string;\n banned_at: string;\n expired: boolean;\n}\n\nexport interface CommentEdit {\n body: string;\n}\n\nexport interface CommentInput {\n body: string;\n reply_to_id?: string;\n anon_name?: string;\n language?: string;\n}\n\nexport interface CommentRecord {\n external_id: string;\n id?: string;\n target: TargetRef;\n language?: string;\n reply_to?: Ref;\n user_id?: string;\n anon_name?: string;\n body: string;\n deleted_at?: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface CommentStanding {\n can_comment: boolean;\n comments: string;\n count?: number;\n locked: boolean;\n ban?: BanNotice;\n anonymous: boolean;\n max_length: number;\n user_id?: string;\n moderate: boolean;\n ban_scopes: (\"global\" | \"owner\")[];\n}\n\nexport interface CommitBody {\n ref: RefBody;\n operation_id: string;\n ops: Op[];\n}\n\nexport interface CommitReply {\n files: FileInfo[];\n}\n\nexport interface CompleteReply {\n blob: string;\n type: string;\n size: number;\n}\n\nexport type CompleteRequest = Record<string, never>;\n\nexport interface Config {\n anonymous: Anonymous;\n comment_max_length: number;\n}\n\nexport interface Content {\n id: string;\n kind: string;\n code: string;\n path: string;\n language: string;\n title: string;\n slug?: string;\n description?: string;\n body?: string;\n decision: Decision;\n images?: Record<string, string>;\n cover?: CatalogCover;\n state: ContentState;\n listing: Listing;\n comments: string;\n publish_at?: string;\n published_at?: string;\n live: boolean;\n access: Rule;\n restrictions: string[];\n attributes: Record<string, unknown>;\n owner_group_id?: string;\n owner?: GroupCard;\n creators: Creator[];\n entities: GroupSummary[];\n versions: Version[];\n viewer?: ViewerState;\n editor: boolean;\n text?: Record<string, CatalogText>;\n moderation?: ModerationState;\n moderation_reason?: string;\n ever_sold?: boolean;\n offer?: Offer;\n revision: number;\n created_at: string;\n updated_at: string;\n deleted_at?: string;\n}\n\nexport interface ContentFilterState {\n entity: GroupCard;\n default_visible: boolean;\n visible: boolean;\n overridden: boolean;\n}\n\nexport interface ContentFilters {\n applies_to: string[];\n filters: ContentFilterState[];\n include_deleted: boolean;\n}\n\nexport interface ContentFiltersInitialization {\n account_id: string;\n filters: GuestFilterSetting[];\n include_deleted: boolean;\n}\n\nexport interface ContentFiltersUpdate {\n filters?: GuestFilterSetting[];\n include_deleted?: boolean;\n}\n\nexport interface ContentGroups {\n kinds?: string[];\n memberships: Membership[];\n}\n\nexport interface ContentInput {\n kind: string;\n text?: Record<string, CatalogText>;\n listing?: Listing;\n comments?: string;\n access?: Rule;\n restrictions?: string[];\n attributes?: Record<string, unknown>;\n owner_group_id?: string;\n creators?: Creator[];\n versions?: VersionInput[];\n}\n\nexport interface ContentMemberships {\n content_id: string;\n memberships: Membership[];\n entities: GroupCard[];\n}\n\nexport interface ContentModel {\n languages: string[];\n tiers: string[];\n kinds: Record<string, Kind>;\n entity_kinds: Record<string, GroupKind>;\n signals: boolean;\n avatars?: PresetRule;\n}\n\nexport interface ContentPage {\n contents: Card[];\n summary?: ListingSummary;\n next_cursor?: string;\n ranking?: RankingInfo;\n}\n\nexport interface ContentPatch {\n listing?: Listing;\n comments?: string;\n access?: Rule;\n restrictions?: string[];\n attributes?: Record<string, unknown>;\n creators?: Creator[];\n revision?: number;\n}\n\nexport interface ContentRanking {\n score: number;\n participation: number;\n adjusted_participation: number;\n}\n\nexport interface ContentRecord {\n external_id: string;\n id?: string;\n kind: string;\n state: string;\n publish_at?: string;\n published_at?: string;\n deleted_at?: string;\n listing?: string;\n comments?: string;\n access?: Rule;\n restrictions?: string[];\n attributes?: Record<string, unknown>;\n owner_group?: Ref;\n creators?: Creator[];\n text?: Record<string, CatalogText>;\n versions?: VersionRecord[];\n code?: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface ContentRef {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n}\n\nexport interface CopyBody {\n ref: RefBody;\n files: CopyRequest[];\n}\n\nexport interface CopyFrom {\n id: string;\n version?: string;\n path: string;\n}\n\nexport interface CopyReply {\n files: StagedCopy[];\n}\n\nexport interface CopyRequest {\n path: string;\n type: string;\n from: string;\n size?: number;\n}\n\nexport interface Count {\n content_kind: string;\n language: string;\n count: number;\n}\n\nexport interface Counts {\n likes?: number;\n dislikes?: number;\n favorites?: number;\n}\n\nexport interface CoverageRange {\n from: number;\n to: number;\n}\n\nexport interface Creator {\n user_id: string;\n role?: string;\n position: number;\n}\n\nexport interface CreatorsInput {\n creators: Creator[];\n}\n\nexport interface Crop {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface DailyReleases {\n time_zone: string;\n from_date: string;\n through_date: string;\n days: ReleaseDay[];\n}\n\nexport interface DateCount {\n date: string;\n count: number;\n free: number;\n}\n\nexport interface Decision {\n allowed: boolean;\n unknown?: boolean;\n sell?: string[];\n requires?: string;\n preview?: Preview;\n free_after?: string;\n offers?: Sale[];\n}\n\nexport interface DeleteRecord {\n entity: string;\n external_id: string;\n}\n\nexport interface Download {\n off?: boolean;\n serve?: string;\n}\n\nexport interface Edge {\n from: string;\n relation: string;\n to: string;\n}\n\nexport interface EdgeInput {\n relation: string;\n to: string;\n}\n\nexport interface EdgeRecord {\n relation: string;\n to: Ref;\n}\n\nexport interface Edit {\n crop?: Crop;\n rotate?: number;\n}\n\nexport interface EncodeProgress {\n phase: EncodePhase;\n queue_position?: number;\n segments_done?: number;\n segments_total?: number;\n percent: number;\n speed?: number;\n eta?: number;\n at: number;\n stalled?: boolean;\n stage?: number;\n stages?: number;\n}\n\nexport interface EngagementBatch {\n session?: string;\n snapshots: EngagementSnapshot[];\n}\n\nexport interface EngagementSnapshot {\n content_id: string;\n version_id?: string;\n visit_id: string;\n segment_id: string;\n revision: number;\n activity_token: string;\n active_ms: number;\n resume?: string;\n pages?: PageEngagement[];\n watched?: WatchedRange[];\n}\n\nexport interface EntityReference {\n id?: string;\n kind?: string;\n name?: string;\n language?: string;\n scope?: EntityReference;\n}\n\nexport interface EntityResolution {\n id: string;\n kind: string;\n name: string;\n created: boolean;\n scope?: EntityResolution;\n}\n\nexport interface ErrorDetails {\n width?: number;\n height?: number;\n min_width?: number;\n max_pixels?: number;\n type?: string;\n allowed?: string[];\n size?: number;\n max_bytes?: number;\n frames?: number;\n max_frames?: number;\n seconds?: number;\n max_seconds?: number;\n min_aspect?: number;\n max_aspect?: number;\n max?: number;\n}\n\nexport interface ErrorReply {\n error: string;\n code: ErrorCode;\n retry_after?: number;\n action?: \"comment\" | \"comment_reaction\" | \"favorite\" | \"poll_vote\" | \"reaction\";\n ban?: BanNotice;\n blobs?: string[];\n details?: ErrorDetails;\n reason?: string;\n available_at?: string;\n}\n\nexport interface ExposureInput {\n render_id: string;\n stage: string;\n revision?: number;\n query_id?: string;\n surface?: string;\n ranker?: string;\n language?: string;\n occurred_at?: string;\n shown: Placement[];\n}\n\nexport interface Exposures {\n session?: string;\n exposures: ExposureInput[];\n}\n\nexport interface ExternalID {\n external_id: string;\n id: string;\n deleted: boolean;\n}\n\nexport interface ExternalIDList {\n entity: string;\n cursor?: string;\n limit?: number;\n}\n\nexport interface ExternalIDPage {\n entity: string;\n ids: ExternalID[];\n next_cursor?: string;\n}\n\nexport interface ExternalIDs {\n lists: ExternalIDPage[];\n}\n\nexport interface ExternalIDsQuery {\n source: string;\n lists: ExternalIDList[];\n}\n\nexport interface Failure {\n of: string;\n message: string;\n code?: ErrorCode;\n details?: ErrorDetails;\n}\n\nexport interface FavoriteRecord {\n target: TargetRef;\n user_id: string;\n created_at?: string;\n}\n\nexport interface FavoriteState {\n favorited: boolean;\n count?: number;\n}\n\nexport interface FeedItem {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n language?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n}\n\nexport interface FileDownload {\n url: string;\n name: string;\n type: string;\n size?: number;\n expires_at: string;\n}\n\nexport interface FileInfo {\n path: string;\n type: string;\n size?: number;\n w?: number;\n h?: number;\n dur?: number;\n download?: string;\n url?: string;\n create_id?: string;\n upload?: boolean;\n staged?: boolean;\n from?: string;\n edit?: Edit;\n frame?: Frame;\n meta?: Record<string, unknown>;\n unattached?: boolean;\n pending?: string[];\n failed?: Failure;\n editor_url?: string;\n progress?: EncodeProgress;\n}\n\nexport interface ForegroundCue {\n file: string;\n page?: string;\n anchor?: string;\n}\n\nexport interface ForkBody {\n from: string;\n playback?: boolean;\n segments?: boolean;\n}\n\nexport interface Frame {\n t?: number;\n auto?: boolean;\n of?: string;\n}\n\nexport interface Group {\n id: string;\n kind: string;\n slug: string;\n internal: boolean;\n scope_id?: string;\n parent_id?: string;\n state: \"active\" | \"deleted\" | \"merged\";\n merged_into?: string;\n attributes: Record<string, unknown>;\n cover?: GroupsCover;\n avatar?: Avatar;\n owner_user_id?: string;\n auth_scope?: string;\n created_at: string;\n updated_at: string;\n revision: number;\n}\n\nexport interface GroupAccess {\n key: string;\n offer?: Sale;\n member: boolean;\n editor?: boolean;\n unknown?: boolean;\n}\n\nexport interface GroupCard {\n id: string;\n kind: string;\n slug: string;\n internal: boolean;\n scope_id?: string;\n parent_id?: string;\n name: string;\n name_language?: string;\n code?: string;\n path?: string;\n cover?: GroupsCover;\n avatar?: Avatar;\n count: number;\n attributes: Record<string, unknown>;\n access?: GroupAccess;\n created_at: string;\n}\n\nexport interface GroupDetail {\n id: string;\n kind: string;\n slug: string;\n internal: boolean;\n scope_id?: string;\n parent_id?: string;\n state: \"active\" | \"deleted\" | \"merged\";\n merged_into?: string;\n attributes: Record<string, unknown>;\n cover?: GroupsCover;\n avatar?: Avatar;\n owner_user_id?: string;\n auth_scope?: string;\n created_at: string;\n updated_at: string;\n revision: number;\n name: string;\n name_language?: string;\n code?: string;\n path?: string;\n names: Name[];\n text: GroupsText[];\n parent?: GroupCard;\n scope?: GroupCard;\n children: GroupCard[];\n edges: Edge[];\n counts: Count[];\n access?: GroupAccess;\n offer?: Offer;\n}\n\nexport interface GroupInput {\n id?: string;\n kind: string;\n slug: string;\n internal?: boolean;\n scope_id?: string;\n parent_id?: string;\n attributes?: Record<string, unknown>;\n cover?: GroupsCover;\n avatar?: Avatar;\n owner_user_id?: string;\n auth_scope?: string;\n names?: Name[];\n text?: GroupsText[];\n}\n\nexport interface GroupJoin {\n group_id: string;\n key: string;\n member: boolean;\n}\n\nexport interface GroupKind {\n route?: string;\n ordered?: boolean;\n parent?: string;\n scoped_by?: string;\n owner?: string;\n max_per_owner?: number;\n uploads?: UploadLimits;\n sellable?: boolean;\n auth_scope?: boolean;\n windows?: boolean;\n version_level?: boolean;\n roles?: string[];\n attributes?: Record<string, Attribute>;\n}\n\nexport interface GroupPage {\n entities: GroupCard[];\n next_cursor?: string;\n}\n\nexport interface GroupRecord {\n external_id: string;\n id?: string;\n kind: string;\n slug: string;\n internal?: boolean;\n scope?: Ref;\n parent?: Ref;\n state?: string;\n names?: Name[];\n text?: GroupsText[];\n attributes?: Record<string, unknown>;\n cover_image?: string;\n cover_content?: Ref;\n avatar?: string;\n owner_user_id?: string;\n auth_scope?: string;\n edges?: EdgeRecord[];\n code?: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface GroupSummary {\n id: string;\n kind: string;\n slug: string;\n name: string;\n code?: string;\n path?: string;\n}\n\nexport interface GroupUpdate {\n slug?: string;\n internal?: boolean;\n scope_id?: string;\n parent_id?: string;\n state?: \"active\" | \"deleted\" | \"merged\";\n attributes?: Record<string, unknown>;\n cover?: GroupsCover;\n avatar?: Avatar;\n owner_user_id?: string;\n auth_scope?: string;\n names?: Name[];\n text?: GroupsText[];\n}\n\nexport interface GroupsCover {\n image?: string;\n content_id?: string;\n auto?: boolean;\n renditions?: Rendition[];\n}\n\nexport interface GroupsText {\n language: string;\n description?: string;\n sort_key?: string;\n}\n\nexport interface GuestFilterSetting {\n entity_id: string;\n visible?: boolean;\n default?: boolean;\n}\n\nexport interface HeldItem {\n kind: string;\n revision: number;\n id: string;\n ref: ContentRef;\n author_id?: string;\n author?: PublicUser;\n anon_name?: string;\n title?: string;\n body: string;\n reason: string;\n model?: string;\n prompt_version?: string;\n confidence?: number;\n error?: string;\n held_at: string;\n created_at: string;\n}\n\nexport interface HeldPage {\n items: HeldItem[];\n next?: string;\n}\n\nexport interface IPBan {\n network: string;\n reason?: string;\n until?: string;\n banned_by: string;\n banned_at: string;\n expired: boolean;\n}\n\nexport interface IPBanInput {\n network: string;\n reason?: string;\n until?: string;\n}\n\nexport interface ImageInput {\n image?: string;\n}\n\nexport interface InlineImage {\n ref: string;\n url: string | null;\n}\n\nexport interface Input {\n recipient: Recipient;\n origin: Origin;\n kind: string;\n data: unknown;\n created_at: string;\n visibility?: string;\n app_id?: string;\n status?: string;\n action_requested?: boolean;\n severity?: string;\n}\n\nexport interface Interaction {\n content?: Card;\n entity?: GroupCard;\n value: number;\n at: string;\n}\n\nexport interface InteractionPage {\n items: Interaction[];\n next_cursor?: string;\n summary?: ListingSummary;\n}\n\nexport interface Item {\n id: string;\n recipient: Recipient;\n origin: Origin;\n kind: string;\n data: unknown;\n created_at: string;\n visibility?: string;\n app_id?: string;\n status?: string;\n action_requested?: boolean;\n severity?: string;\n read_at: string | null;\n dismissed_at: string | null;\n resolved_at: string | null;\n updated_at: string;\n revision: number;\n}\n\nexport interface Kind {\n route: string;\n presentation: string;\n versions: VersionRules;\n segments?: boolean;\n entities?: string[];\n attributes?: Record<string, Attribute>;\n sort?: string;\n locked?: Locked;\n draft_ttl?: number;\n download?: Download;\n}\n\nexport interface LanguageTotal {\n public: number;\n tiers: Record<string, number>;\n}\n\nexport interface LegacyReadingRecord {\n target: TargetRef;\n user_id?: string;\n anon_key?: string;\n first_read_at?: string;\n last_read_at: string;\n progress: number;\n progress_max: number;\n completed: boolean;\n resume?: string;\n revision?: number;\n}\n\nexport interface LibraryItem {\n content_id: string;\n kind: string;\n title: string;\n language?: string;\n deleted: boolean;\n whole: boolean;\n version_ids: string[];\n}\n\nexport interface LibraryPage {\n items: LibraryItem[];\n next_cursor?: string;\n complete: boolean;\n}\n\nexport interface ListingSummary {\n filtered_count: number;\n filtered_entities: ReleaseFilteredEntity[];\n locked_count: number;\n truncated?: boolean;\n}\n\nexport interface Locked {\n show: string[];\n preview?: Preview;\n}\n\nexport interface MemberPage {\n members: Membership[];\n next_cursor?: string;\n}\n\nexport interface MemberRef {\n content_id: string;\n version_id?: string;\n}\n\nexport interface Membership {\n group_id?: string;\n content_id?: string;\n version_id?: string;\n role?: string;\n position?: number;\n active_from?: string;\n active_until?: string;\n state?: \"active\" | \"proposed\";\n}\n\nexport interface MembershipRecord {\n group: Ref;\n version?: Ref;\n role?: string;\n position?: number;\n active_from?: string;\n active_until?: string;\n state?: string;\n}\n\nexport interface MembershipSet {\n content: Ref;\n kinds: string[];\n memberships: MembershipRecord[];\n}\n\nexport interface MergeInput {\n into: string;\n}\n\nexport interface MergeReport {\n from: string;\n into: string;\n memberships_moved: number;\n names_moved: number;\n edges_moved: number;\n groups_moved: number;\n}\n\nexport interface MultipartReply {\n ticket: string;\n min_part_size: number;\n max_part_size: number;\n max_parts: number;\n}\n\nexport interface MyGroup {\n id: string;\n kind: string;\n slug: string;\n internal: boolean;\n scope_id?: string;\n parent_id?: string;\n name: string;\n name_language?: string;\n code?: string;\n path?: string;\n cover?: GroupsCover;\n avatar?: Avatar;\n count: number;\n attributes: Record<string, unknown>;\n access?: GroupAccess;\n created_at: string;\n owner: boolean;\n editor: boolean;\n writer: boolean;\n moderator: boolean;\n member: boolean;\n}\n\nexport interface MyGroupPage {\n entities: MyGroup[];\n next_cursor?: string;\n}\n\nexport interface MyStats {\n completed: Record<string, number>;\n access_seconds?: Record<string, number>;\n comments: number;\n comment_likes: number;\n comment_dislikes: number;\n}\n\nexport interface Name {\n language: string;\n kind: \"alias\" | \"name\";\n name: string;\n}\n\nexport interface Offer {\n id: string;\n target: Target;\n key: string;\n terms: Terms;\n state: \"active\" | \"withdrawn\";\n synced: boolean;\n product_id?: string;\n price_id?: string;\n last_error?: string;\n revision: number;\n updated_at: string;\n}\n\nexport interface OfferPage {\n offers: Offer[];\n next_cursor?: string;\n}\n\nexport interface OfferRecord {\n target: TargetRef;\n terms: Terms;\n}\n\nexport interface Op {\n op: OpName;\n source_name?: string;\n path?: string;\n blob?: string;\n create_id?: string;\n replace?: boolean;\n index?: number;\n meta?: Record<string, unknown>;\n edit?: Edit;\n unattached?: boolean;\n to?: string;\n from?: CopyFrom;\n t?: number;\n auto?: boolean;\n preset?: string;\n force?: boolean;\n takedown?: boolean;\n}\n\nexport interface Operation {\n id: string;\n state: \"awaiting_upload\" | \"blocked\" | \"failed\" | \"processing\" | \"published\" | \"publishing\" | \"ready\" | \"review_required\" | \"scheduled\";\n content_id: string;\n version_id: string;\n publish_at?: string;\n entities: EntityResolution[];\n progress: Progress;\n result?: OperationResult;\n error?: OperationError;\n upload?: PresignReply;\n created_at: string;\n updated_at: string;\n}\n\nexport interface OperationError {\n code: string;\n message: string;\n retryable: boolean;\n field?: string;\n}\n\nexport interface OperationResult {\n path: string;\n pages: number;\n page_review?: PageReviewSummary;\n}\n\nexport interface Order {\n members: MemberRef[];\n}\n\nexport interface OrderInput {\n ids: string[];\n}\n\nexport interface Origin {\n system: string;\n scope: string;\n id: string;\n subject?: string;\n}\n\nexport interface Page {\n items: Item[];\n next_cursor?: string;\n}\n\nexport interface PageAnalysis {\n recipe: string;\n source_sha256: string;\n status: string;\n width?: number;\n height?: number;\n frames?: number;\n pixel_sha256?: string;\n pixel_format?: string;\n profile_sha256?: string;\n blank: string;\n blank_reason?: string;\n confidence: string;\n metrics?: PageAnalysisMetrics;\n flags?: string[];\n}\n\nexport interface PageAnalysisMetrics {\n pixels: number;\n visible_pixels: number;\n opaque_pixels: number;\n foreground_pixels: number;\n min_rgb: number[];\n max_rgb: number[];\n}\n\nexport interface PageDecision {\n reason: string;\n confidence: string;\n related?: string[];\n}\n\nexport interface PageEngagement {\n index: number;\n ranges: CoverageRange[];\n active_ms: number;\n}\n\nexport interface PageReview {\n revision: string;\n pages: PageReviewEntry[];\n selected: number;\n flagged: number;\n}\n\nexport interface PageReviewChange {\n id: string;\n mode: string;\n}\n\nexport interface PageReviewEntry {\n id: string;\n path: string;\n source_name: string;\n source_entry?: string;\n archive_sha256?: string;\n source_sha256: string;\n span?: PageSpan;\n included: boolean;\n mode: string;\n decision: PageDecision;\n flags: string[];\n analysis?: PageAnalysis;\n preview_url?: string;\n source_url?: string;\n}\n\nexport interface PageReviewPatch {\n revision: string;\n pages?: PageReviewChange[];\n order?: string[];\n}\n\nexport interface PageReviewSummary {\n sources: number;\n selected: number;\n excluded: number;\n flagged: number;\n}\n\nexport interface PageSpan {\n from: number;\n to: number;\n}\n\nexport interface PartBody {\n number: number;\n size: number;\n sha256: string;\n}\n\nexport interface PartReply {\n number: number;\n size?: number;\n sha256?: string;\n request?: RequestReply;\n}\n\nexport interface PartsBody {\n ticket: string;\n parts: PartBody[];\n}\n\nexport interface PartsReply {\n parts: PartReply[];\n}\n\nexport interface Pending {\n status: string;\n}\n\nexport interface Placement {\n content_id: string;\n position: number;\n version_id?: string;\n activity_token?: string;\n}\n\nexport interface PlanPage {\n name: string;\n span?: PageSpan;\n w: number;\n h: number;\n files: Record<string, string>;\n}\n\nexport interface PlanPlayback {\n item: RefBody;\n tracks: PlanTrack[];\n}\n\nexport interface PlanPreview {\n index: number;\n name: string;\n url: string;\n w: number;\n h: number;\n}\n\nexport interface PlanSegment {\n position?: number;\n title?: string;\n start: number;\n end: number;\n released: boolean;\n release_at?: string;\n locked: boolean;\n item?: RefBody;\n pages?: PlanPage[];\n}\n\nexport interface PlanTrack {\n name: string;\n path: string;\n duration?: number;\n}\n\nexport interface Poll {\n id: string;\n kind: PollKind;\n question: string;\n language: string;\n is_active: boolean;\n image_url?: string;\n live_at: string;\n closes_at?: string;\n closed: boolean;\n total_votes: number;\n options: PollOption[];\n voted: boolean;\n my_option?: string;\n answer_count?: number;\n groups?: AnswerGroup[];\n my_answer?: PollAnswer;\n}\n\nexport interface PollAnswer {\n id: string;\n text: string;\n classified: boolean;\n updated_at: string;\n}\n\nexport interface PollAnswerInput {\n text: string;\n}\n\nexport interface PollImage {\n image_url: string | null;\n}\n\nexport interface PollInput {\n kind?: PollKind;\n question: string;\n language: string;\n live_at?: string;\n closes_at?: string;\n options?: PollOptionInput[];\n}\n\nexport interface PollOption {\n id: string;\n label: string;\n image_url?: string;\n position: number;\n vote_count: number;\n}\n\nexport interface PollOptionInput {\n label: string;\n position: number;\n}\n\nexport interface PollOptionPatch {\n label?: string;\n position?: number;\n}\n\nexport interface PollOptionRecord {\n external_id: string;\n id?: string;\n label: string;\n position: number;\n}\n\nexport interface PollRecord {\n external_id: string;\n id?: string;\n kind?: string;\n question: string;\n language?: string;\n active?: boolean;\n live_at?: string;\n closes_at?: string;\n deleted_at?: string;\n created_at?: string;\n updated_at?: string;\n options?: PollOptionRecord[];\n}\n\nexport interface PollUpdate {\n question?: string;\n is_active?: boolean;\n live_at?: string;\n closes_at?: string | null;\n}\n\nexport interface PollVote {\n option_id: string;\n}\n\nexport interface PresetRule {\n kind: string;\n name: string;\n from: string;\n base: string;\n namespace: string;\n root?: string;\n to: string;\n widths: number[];\n aspect?: string;\n min_width?: number;\n first?: number;\n default: boolean;\n stable?: boolean;\n}\n\nexport interface PresignBody {\n ref: RefBody;\n path: string;\n type: string;\n size: number;\n sha256: string;\n}\n\nexport interface PresignReply {\n path: string;\n source_name?: string;\n blob: string;\n exists?: boolean;\n put?: RequestReply;\n multipart?: MultipartReply;\n process_on_upload?: boolean;\n}\n\nexport interface Preview {\n pages?: number;\n segments?: number;\n}\n\nexport interface Progress {\n stage: string;\n completed: number;\n total: number;\n}\n\nexport interface PublicImage {\n from: string;\n preset: string;\n renditions: PublicRendition[];\n}\n\nexport interface PublicRendition {\n url: string;\n w: number;\n h: number;\n}\n\nexport interface PublicUser {\n id: string;\n name?: string;\n username: string;\n avatar?: string;\n avatar_srcset?: string;\n}\n\nexport interface Publication {\n notifications: Input[];\n}\n\nexport interface PublishInput {\n publish_at?: string;\n}\n\nexport interface Published {\n items: Item[];\n}\n\nexport interface RankedContent {\n id: string;\n title: string;\n path?: string;\n value: number;\n}\n\nexport interface RankingInfo {\n policy: string;\n mode: string;\n requested_from?: string;\n requested_until?: string;\n covered_from?: string;\n covered_until?: string;\n}\n\nexport interface ReactionCounts {\n likes?: number;\n dislikes?: number;\n mine: number;\n}\n\nexport interface ReactionRecord {\n target: TargetRef;\n user_id?: string;\n ip?: string;\n value: number;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface ReadResult {\n access: Access;\n expires: number;\n meta?: Record<string, unknown>;\n previews?: string[];\n public?: PublicImage[];\n locked?: boolean;\n total: number;\n offset: number;\n limit: number;\n hls?: string[];\n state?: ItemState;\n full?: boolean;\n uploads?: UploadRule[];\n files: FileInfo[];\n}\n\nexport interface ReaderDefaults {\n auto_advance_seconds?: number;\n}\n\nexport interface ReaderMeta {\n schema_version: number;\n defaults?: ReaderDefaults;\n anchors?: Anchor[];\n background?: BackgroundCue[];\n foreground?: ForegroundCue[];\n}\n\nexport interface ReaderPlan {\n content_id: string;\n version_id: string;\n publication_id: string;\n pages?: number;\n segments: PlanSegment[];\n previews: PlanPreview[];\n playback?: PlanPlayback;\n reader?: ReaderMeta;\n}\n\nexport interface RecentSearch {\n query: string;\n results: number;\n searched_at: string;\n}\n\nexport interface RecentSearches {\n searches: RecentSearch[];\n}\n\nexport interface Recipient {\n audience: string;\n id: string;\n}\n\nexport interface RecordFailure {\n section: string;\n index: number;\n external_id?: string;\n code: string;\n error: string;\n}\n\nexport interface Ref {\n id?: string;\n external_id?: string;\n}\n\nexport interface RefBody {\n kind: string;\n id: string;\n version?: string;\n}\n\nexport interface ReleaseDates {\n dates: DateCount[];\n next_cursor?: string;\n}\n\nexport interface ReleaseDay {\n date: string;\n contents: Card[];\n filtered_count: number;\n filtered_entities: ReleaseFilteredEntity[];\n}\n\nexport interface ReleaseFilteredEntity {\n entity: GroupCard;\n count: number;\n}\n\nexport interface Rendition {\n url: string;\n w: number;\n h: number;\n}\n\nexport interface Request {\n content: ContentInput;\n entities?: EntityReference[];\n archive: Archive;\n publish?: \"draft\" | \"when_ready\";\n publish_at?: string;\n create_missing_entities?: boolean;\n source?: Source;\n}\n\nexport interface RequestReply {\n method: string;\n url: string;\n headers: Record<string, string>;\n expires: string;\n}\n\nexport interface ResolveInput {\n decision: \"approve\" | \"reject\" | \"review\";\n revision: number;\n reason?: string;\n}\n\nexport interface Resolved {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n code: string;\n slug: string;\n slugs?: Record<string, string>;\n path: string;\n version_id?: string;\n}\n\nexport interface Restored {\n restored: boolean;\n}\n\nexport interface Result {\n written: Record<string, number>;\n skipped?: Record<string, number>;\n failed: RecordFailure[];\n ids: Record<string, Record<string, string>>;\n}\n\nexport interface ReviewOutcome {\n decision: \"approve\" | \"reject\" | \"review\";\n}\n\nexport interface Rule {\n level: \"group\" | \"group_ppv\" | \"ppv\" | \"public\" | \"tier\";\n tiers?: string[];\n group_id?: string;\n preview?: Preview;\n free_after?: string;\n}\n\nexport interface Sale {\n key: string;\n target: Target;\n terms: Terms;\n price_id?: string;\n}\n\nexport interface Segment {\n position: number;\n title?: string;\n start: number;\n end: number;\n release_at?: string;\n released: boolean;\n}\n\nexport interface SegmentsInput {\n segments: Segment[];\n}\n\nexport interface SignalInput {\n content_id: string;\n version_id?: string;\n type: string;\n event_id: string;\n revision?: number;\n occurred_at: string;\n render_id?: string;\n surface?: string;\n position?: number;\n activity_token?: string;\n}\n\nexport interface SignalRecord {\n target: TargetRef;\n user_id?: string;\n anon_key?: string;\n type: string;\n event_id: string;\n revision?: number;\n occurred_at: string;\n}\n\nexport interface Signals {\n session?: string;\n signals: SignalInput[];\n}\n\nexport interface SitemapAlias {\n language: string;\n path: string;\n image?: string;\n}\n\nexport interface SitemapEntry {\n id: string;\n code: string;\n path: string;\n lastmod: string;\n languages: SitemapAlias[];\n}\n\nexport interface SitemapPage {\n entries: SitemapEntry[];\n next_cursor?: string;\n}\n\nexport interface Source {\n provider: string;\n id: string;\n url?: string;\n}\n\nexport interface StagedCopy {\n path: string;\n blob: string;\n size: number;\n}\n\nexport interface Target {\n kind: \"content\" | \"group\" | \"version\";\n id: string;\n content_id?: string;\n}\n\nexport interface TargetRef {\n content?: Ref;\n version?: Ref;\n group?: Ref;\n comment?: Ref;\n}\n\nexport interface Terms {\n amount: string;\n currency: string;\n access_hours?: number;\n renew_hours?: number;\n}\n\nexport interface TicketBody {\n ticket: string;\n}\n\nexport interface TopContents {\n contents: RankedContent[];\n}\n\nexport interface Total {\n public: number;\n tiers: Record<string, number>;\n languages: Record<string, LanguageTotal>;\n}\n\nexport interface Totals {\n kinds: Record<string, Total>;\n}\n\nexport interface Typeahead {\n contents: Card[];\n entities: GroupCard[];\n}\n\nexport interface UploadLimits {\n files_per_hour?: number;\n bytes_per_day?: number;\n quota_bytes?: number;\n}\n\nexport interface UploadRule {\n path: string;\n types: string[];\n max_bytes: number;\n max?: number;\n named?: boolean;\n page?: boolean;\n body?: boolean;\n frames?: string;\n aspect?: string;\n min_width?: number;\n video?: VideoLimits;\n min_aspect?: number;\n max_aspect?: number;\n}\n\nexport interface Version {\n id: string;\n code: string;\n position: number;\n languages: string[];\n traits: string[];\n label?: string;\n title?: string;\n description?: string;\n state?: ContentState;\n publish_at?: string;\n published_at?: string;\n live: boolean;\n access?: Rule;\n attributes: Record<string, unknown>;\n pages?: number;\n duration_ms?: number;\n width?: number;\n height?: number;\n has_audio: boolean;\n ordinal?: number;\n cover?: CatalogCover;\n segments: Segment[];\n decision: Decision;\n text?: Record<string, VersionText>;\n offer?: Offer;\n viewer?: ViewerState;\n}\n\nexport interface VersionFork {\n from: string;\n playback?: boolean;\n segments?: boolean;\n}\n\nexport interface VersionInput {\n languages?: string[];\n traits?: string[];\n label?: string;\n state?: VersionState;\n publish_at?: string;\n access?: Rule;\n clear_access?: boolean;\n attributes?: Record<string, unknown>;\n text?: Record<string, VersionText>;\n segments?: Segment[];\n ordinal?: number;\n cover?: string;\n fork?: VersionFork;\n}\n\nexport interface VersionRecord {\n external_id: string;\n id?: string;\n code?: string;\n languages: string[];\n traits?: string[];\n label?: string;\n state?: string;\n publish_at?: string;\n published_at?: string;\n deleted_at?: string;\n access?: Rule;\n attributes?: Record<string, unknown>;\n ordinal?: number;\n cover?: string;\n text?: Record<string, VersionText>;\n segments?: Segment[];\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface VersionRules {\n languages: string;\n traits?: string[];\n hidden?: boolean;\n}\n\nexport interface VersionText {\n title?: string;\n description?: string;\n}\n\nexport interface VideoLimits {\n max_seconds?: number;\n max_fps?: number;\n max_pixels?: number;\n max_work?: number;\n}\n\nexport interface ViewerState {\n favorited: boolean;\n seen: boolean;\n completed: boolean;\n progress: number;\n progress_max: number;\n resume?: string;\n last_read_at?: string;\n}\n\nexport interface VoteRecord {\n poll: Ref;\n option: Ref;\n user_id?: string;\n ip?: string;\n created_at?: string;\n}\n\nexport interface WatchedRange {\n from_ms: number;\n to_ms: number;\n}\n\nexport interface Written {\n count: number;\n}\n"],"mappings":";AAOA,IAAa,IAAiB,UACjB,IAAgB,SAChB,IAAgB"}
|
|
1
|
+
{"version":3,"file":"wire.js","names":[],"sources":["../../../src/client/generated/wire.ts"],"sourcesContent":["// Generated by `go generate ./internal/contract` from ContentKit's route catalog. Do not edit.\n\nimport type { ErrorCode } from \"./error-codes.js\";\n\nexport type { ErrorCode };\n\n// Upload sizes: one PUT up to MAX_SINGLE_PUT bytes, else multipart parts.\nexport const MAX_SINGLE_PUT = 67108864;\nexport const MIN_PART_SIZE = 8388608;\nexport const MAX_PART_SIZE = 16777216;\n\nexport type OpName = \"put\" | \"edit\" | \"move\" | \"rename\" | \"remove\" | \"attach\" | \"copy\" | \"frame\" | \"meta\" | \"regenerate\";\nexport type Access = \"full\" | \"none\";\nexport type ItemState = \"ready\" | \"processing\" | \"failed\";\nexport type EncodePhase = \"queued\" | \"downloading\" | \"probing\" | \"encoding\" | \"muxing\" | \"uploading\" | \"publishing\" | \"images\";\nexport type PollKind = \"multiple_choice\" | \"free_text\";\nexport type ModerationState = \"approved\" | \"held\" | \"rejected\";\nexport type ContentState = \"draft\" | \"published\" | \"deleted\";\nexport type VersionState = \"draft\" | \"published\";\nexport type Listing = \"listed\" | \"members\" | \"unlisted\";\nexport type AliasStatus = \"found\" | \"not_found\" | \"gone\";\n\nexport interface Activity {\n days: ActivityDay[];\n}\n\nexport interface ActivityContext {\n content_id: string;\n version_id?: string;\n token: string;\n occurred_at: string;\n}\n\nexport interface ActivityContexts {\n enabled: boolean;\n contexts: ActivityContext[];\n}\n\nexport interface ActivityContextsInput {\n session?: string;\n language?: string;\n targets: ActivityTarget[];\n}\n\nexport interface ActivityDay {\n date: string;\n readers: number;\n anon: number;\n free: number;\n premium: number;\n active_ms: number;\n}\n\nexport interface ActivityTarget {\n content_id: string;\n version_id?: string;\n}\n\nexport interface AdminComment {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n language?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n deleted_at?: string;\n}\n\nexport interface AliasKey {\n source: string;\n kind: string;\n key: string;\n}\n\nexport interface AliasLookup {\n aliases: AliasKey[];\n}\n\nexport interface AliasRecord {\n kind: string;\n key: string;\n locator?: string;\n target: TargetRef;\n}\n\nexport interface AliasResult {\n source: string;\n kind: string;\n key: string;\n status: AliasStatus;\n resolved?: Resolved;\n locator?: string;\n}\n\nexport interface AliasResults {\n aliases: AliasResult[];\n}\n\nexport interface Anchor {\n id: string;\n page: string;\n offset_percent: number;\n duration_seconds?: number;\n}\n\nexport interface Anonymous {\n comments: boolean;\n reactions: boolean;\n votes: boolean;\n}\n\nexport interface AnswerGroup {\n id: string;\n label: string;\n count: number;\n}\n\nexport interface AnswerRecord {\n poll: Ref;\n user_id: string;\n text: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface Archive {\n name: string;\n size: number;\n sha256: string;\n}\n\nexport interface Attribute {\n type: string;\n values?: string[];\n filterable?: boolean;\n sortable?: boolean;\n}\n\nexport interface Avatar {\n image?: string;\n renditions?: Rendition[];\n}\n\nexport interface BackgroundCue {\n file: string;\n from_page?: string;\n to_page?: string;\n from_anchor?: string;\n to_anchor?: string;\n loop?: boolean;\n layer?: string;\n}\n\nexport interface BanInput {\n reason?: string;\n until?: string;\n}\n\nexport interface BanNotice {\n scope: string;\n reason?: string;\n until?: string;\n}\n\nexport interface BannedWord {\n word: string;\n action: \"mask\" | \"reject\";\n created_by: string;\n created_at: string;\n}\n\nexport interface BannedWordInput {\n word: string;\n action?: \"mask\" | \"reject\";\n}\n\nexport interface Batch {\n source: string;\n preference_floor?: number;\n provision_scopes?: boolean;\n entities?: GroupRecord[];\n contents?: ContentRecord[];\n memberships?: MembershipSet[];\n offers?: OfferRecord[];\n aliases?: AliasRecord[];\n comments?: CommentRecord[];\n reactions?: ReactionRecord[];\n favorites?: FavoriteRecord[];\n polls?: PollRecord[];\n votes?: VoteRecord[];\n answers?: AnswerRecord[];\n legacy_reading?: LegacyReadingRecord[];\n signals?: SignalRecord[];\n deletes?: DeleteRecord[];\n}\n\nexport interface BodyImageInput {\n image?: string;\n version: string;\n}\n\nexport interface Card {\n id: string;\n kind: string;\n code: string;\n path: string;\n title: string;\n language: string;\n cover: PublicRendition[];\n version: CardVersion;\n entities: Record<string, Chip[]>;\n owner?: GroupCard;\n counts: Counts;\n access: CardAccess;\n viewer?: ViewerState;\n published_at?: string;\n attributes: Record<string, unknown>;\n ranking?: ContentRanking;\n updated_at?: string;\n deleted?: boolean;\n excerpt?: string;\n}\n\nexport interface CardAccess {\n allowed: boolean;\n level: \"group\" | \"group_ppv\" | \"ppv\" | \"public\" | \"tier\";\n tiers?: string[];\n unknown?: boolean;\n sell?: string[];\n requires?: string;\n preview?: Preview;\n free_after?: string;\n offers?: Sale[];\n}\n\nexport interface CardVersion {\n id: string;\n code: string;\n languages: string[];\n traits: string[];\n label?: string;\n pages?: number;\n duration_ms?: number;\n has_audio: boolean;\n hls?: string;\n}\n\nexport interface CatalogCover {\n image?: string;\n url?: string;\n renditions?: PublicRendition[];\n}\n\nexport interface CatalogText {\n title: string;\n slug?: string;\n description?: string;\n body?: string;\n sort_key?: string;\n aliases?: string[];\n}\n\nexport interface Chip {\n id: string;\n slug: string;\n name: string;\n path?: string;\n position?: number;\n}\n\nexport interface Comment {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n language?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CommentBan {\n user_id: string;\n user?: PublicUser;\n scope: string;\n reason?: string;\n until?: string;\n banned_by: string;\n banned_at: string;\n expired: boolean;\n}\n\nexport interface CommentEdit {\n body: string;\n}\n\nexport interface CommentInput {\n body: string;\n reply_to_id?: string;\n anon_name?: string;\n language?: string;\n}\n\nexport interface CommentRecord {\n external_id: string;\n id?: string;\n target: TargetRef;\n language?: string;\n reply_to?: Ref;\n user_id?: string;\n anon_name?: string;\n body: string;\n deleted_at?: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface CommentStanding {\n can_comment: boolean;\n comments: string;\n count?: number;\n locked: boolean;\n ban?: BanNotice;\n anonymous: boolean;\n max_length: number;\n user_id?: string;\n moderate: boolean;\n ban_scopes: (\"global\" | \"owner\")[];\n}\n\nexport interface CommitBody {\n ref: RefBody;\n operation_id: string;\n ops: Op[];\n}\n\nexport interface CommitReply {\n files: FileInfo[];\n}\n\nexport interface CompleteReply {\n blob: string;\n type: string;\n size: number;\n}\n\nexport type CompleteRequest = Record<string, never>;\n\nexport interface Config {\n anonymous: Anonymous;\n comment_max_length: number;\n}\n\nexport interface Content {\n id: string;\n kind: string;\n code: string;\n path: string;\n language: string;\n title: string;\n slug?: string;\n slugs?: Record<string, string>;\n description?: string;\n body?: string;\n decision: Decision;\n images?: Record<string, string>;\n cover?: CatalogCover;\n state: ContentState;\n listing: Listing;\n comments: string;\n publish_at?: string;\n published_at?: string;\n live: boolean;\n access: Rule;\n restrictions: string[];\n attributes: Record<string, unknown>;\n owner_group_id?: string;\n owner?: GroupCard;\n creators: Creator[];\n entities: GroupSummary[];\n versions: Version[];\n viewer?: ViewerState;\n editor: boolean;\n text?: Record<string, CatalogText>;\n moderation?: ModerationState;\n moderation_reason?: string;\n ever_sold?: boolean;\n offer?: Offer;\n revision: number;\n created_at: string;\n updated_at: string;\n deleted_at?: string;\n}\n\nexport interface ContentFilterState {\n entity: GroupCard;\n default_visible: boolean;\n visible: boolean;\n overridden: boolean;\n}\n\nexport interface ContentFilters {\n applies_to: string[];\n filters: ContentFilterState[];\n include_deleted: boolean;\n}\n\nexport interface ContentFiltersInitialization {\n account_id: string;\n filters: GuestFilterSetting[];\n include_deleted: boolean;\n}\n\nexport interface ContentFiltersUpdate {\n filters?: GuestFilterSetting[];\n include_deleted?: boolean;\n}\n\nexport interface ContentGroups {\n kinds?: string[];\n memberships: Membership[];\n create?: NewEntity[];\n}\n\nexport interface ContentInput {\n kind: string;\n text?: Record<string, CatalogText>;\n listing?: Listing;\n comments?: string;\n access?: Rule;\n restrictions?: string[];\n attributes?: Record<string, unknown>;\n owner_group_id?: string;\n creators?: Creator[];\n versions?: VersionInput[];\n}\n\nexport interface ContentMemberships {\n content_id: string;\n memberships: Membership[];\n entities: GroupCard[];\n}\n\nexport interface ContentModel {\n languages: string[];\n tiers: string[];\n kinds: Record<string, Kind>;\n entity_kinds: Record<string, GroupKind>;\n signals: boolean;\n avatars?: PresetRule;\n}\n\nexport interface ContentPage {\n contents: Card[];\n summary?: ListingSummary;\n next_cursor?: string;\n ranking?: RankingInfo;\n}\n\nexport interface ContentPatch {\n listing?: Listing;\n comments?: string;\n access?: Rule;\n restrictions?: string[];\n attributes?: Record<string, unknown>;\n creators?: Creator[];\n revision?: number;\n}\n\nexport interface ContentRanking {\n score: number;\n participation: number;\n adjusted_participation: number;\n}\n\nexport interface ContentRecord {\n external_id: string;\n id?: string;\n kind: string;\n state: string;\n publish_at?: string;\n published_at?: string;\n deleted_at?: string;\n listing?: string;\n comments?: string;\n access?: Rule;\n restrictions?: string[];\n attributes?: Record<string, unknown>;\n owner_group?: Ref;\n creators?: Creator[];\n text?: Record<string, CatalogText>;\n versions?: VersionRecord[];\n code?: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface ContentRef {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n}\n\nexport interface CopyBody {\n ref: RefBody;\n files: CopyRequest[];\n}\n\nexport interface CopyFrom {\n id: string;\n version?: string;\n path: string;\n}\n\nexport interface CopyReply {\n files: StagedCopy[];\n}\n\nexport interface CopyRequest {\n path: string;\n type: string;\n from: string;\n size?: number;\n}\n\nexport interface Count {\n content_kind: string;\n language: string;\n count: number;\n}\n\nexport interface Counts {\n likes?: number;\n dislikes?: number;\n favorites?: number;\n}\n\nexport interface CoverageRange {\n from: number;\n to: number;\n}\n\nexport interface Creator {\n user_id: string;\n role?: string;\n position: number;\n}\n\nexport interface CreatorsInput {\n creators: Creator[];\n}\n\nexport interface Crop {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface DailyReleases {\n time_zone: string;\n from_date: string;\n through_date: string;\n days: ReleaseDay[];\n}\n\nexport interface DateCount {\n date: string;\n count: number;\n free: number;\n}\n\nexport interface Decision {\n allowed: boolean;\n unknown?: boolean;\n sell?: string[];\n requires?: string;\n preview?: Preview;\n free_after?: string;\n offers?: Sale[];\n}\n\nexport interface DeleteRecord {\n entity: string;\n external_id: string;\n}\n\nexport interface Download {\n off?: boolean;\n serve?: string;\n}\n\nexport interface Edge {\n from: string;\n relation: string;\n to: string;\n}\n\nexport interface EdgeInput {\n relation: string;\n to: string;\n}\n\nexport interface EdgeRecord {\n relation: string;\n to: Ref;\n}\n\nexport interface Edit {\n crop?: Crop;\n rotate?: number;\n}\n\nexport interface EncodeProgress {\n phase: EncodePhase;\n queue_position?: number;\n segments_done?: number;\n segments_total?: number;\n percent: number;\n speed?: number;\n eta?: number;\n at: number;\n stalled?: boolean;\n stage?: number;\n stages?: number;\n}\n\nexport interface EngagementBatch {\n session?: string;\n snapshots: EngagementSnapshot[];\n}\n\nexport interface EngagementSnapshot {\n content_id: string;\n version_id?: string;\n visit_id: string;\n segment_id: string;\n revision: number;\n activity_token: string;\n active_ms: number;\n resume?: string;\n pages?: PageEngagement[];\n watched?: WatchedRange[];\n}\n\nexport interface EntityReference {\n id?: string;\n kind?: string;\n name?: string;\n language?: string;\n scope?: EntityReference;\n}\n\nexport interface EntityResolution {\n id: string;\n kind: string;\n name: string;\n created: boolean;\n scope?: EntityResolution;\n}\n\nexport interface ErrorDetails {\n width?: number;\n height?: number;\n min_width?: number;\n max_pixels?: number;\n type?: string;\n allowed?: string[];\n size?: number;\n max_bytes?: number;\n frames?: number;\n max_frames?: number;\n seconds?: number;\n max_seconds?: number;\n min_aspect?: number;\n max_aspect?: number;\n max?: number;\n}\n\nexport interface ErrorReply {\n error: string;\n code: ErrorCode;\n retry_after?: number;\n action?: \"comment\" | \"comment_reaction\" | \"favorite\" | \"poll_vote\" | \"reaction\";\n ban?: BanNotice;\n blobs?: string[];\n details?: ErrorDetails;\n reason?: string;\n available_at?: string;\n}\n\nexport interface ExposureInput {\n render_id: string;\n stage: string;\n revision?: number;\n query_id?: string;\n surface?: string;\n ranker?: string;\n language?: string;\n occurred_at?: string;\n shown: Placement[];\n}\n\nexport interface Exposures {\n session?: string;\n exposures: ExposureInput[];\n}\n\nexport interface ExternalID {\n external_id: string;\n id: string;\n deleted: boolean;\n}\n\nexport interface ExternalIDList {\n entity: string;\n cursor?: string;\n limit?: number;\n}\n\nexport interface ExternalIDPage {\n entity: string;\n ids: ExternalID[];\n next_cursor?: string;\n}\n\nexport interface ExternalIDs {\n lists: ExternalIDPage[];\n}\n\nexport interface ExternalIDsQuery {\n source: string;\n lists: ExternalIDList[];\n}\n\nexport interface Failure {\n of: string;\n message: string;\n code?: ErrorCode;\n details?: ErrorDetails;\n}\n\nexport interface FavoriteRecord {\n target: TargetRef;\n user_id: string;\n created_at?: string;\n}\n\nexport interface FavoriteState {\n favorited: boolean;\n count?: number;\n}\n\nexport interface FeedItem {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n language?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n}\n\nexport interface FileDownload {\n url: string;\n name: string;\n type: string;\n size?: number;\n expires_at: string;\n}\n\nexport interface FileInfo {\n path: string;\n type: string;\n size?: number;\n w?: number;\n h?: number;\n dur?: number;\n download?: string;\n url?: string;\n create_id?: string;\n upload?: boolean;\n staged?: boolean;\n from?: string;\n edit?: Edit;\n frame?: Frame;\n meta?: Record<string, unknown>;\n unattached?: boolean;\n pending?: string[];\n failed?: Failure;\n editor_url?: string;\n progress?: EncodeProgress;\n}\n\nexport interface ForegroundCue {\n file: string;\n page?: string;\n anchor?: string;\n}\n\nexport interface ForkBody {\n from: string;\n playback?: boolean;\n segments?: boolean;\n}\n\nexport interface Frame {\n t?: number;\n auto?: boolean;\n of?: string;\n}\n\nexport interface Group {\n id: string;\n kind: string;\n slug: string;\n internal: boolean;\n scope_id?: string;\n parent_id?: string;\n state: \"active\" | \"deleted\" | \"merged\";\n merged_into?: string;\n attributes: Record<string, unknown>;\n cover?: GroupsCover;\n avatar?: Avatar;\n owner_user_id?: string;\n auth_scope?: string;\n created_at: string;\n updated_at: string;\n revision: number;\n}\n\nexport interface GroupAccess {\n key: string;\n offer?: Sale;\n member: boolean;\n editor?: boolean;\n unknown?: boolean;\n}\n\nexport interface GroupCard {\n id: string;\n kind: string;\n slug: string;\n internal: boolean;\n scope_id?: string;\n parent_id?: string;\n name: string;\n name_language?: string;\n code?: string;\n path?: string;\n cover?: GroupsCover;\n avatar?: Avatar;\n count: number;\n attributes: Record<string, unknown>;\n access?: GroupAccess;\n created_at: string;\n}\n\nexport interface GroupDetail {\n id: string;\n kind: string;\n slug: string;\n internal: boolean;\n scope_id?: string;\n parent_id?: string;\n state: \"active\" | \"deleted\" | \"merged\";\n merged_into?: string;\n attributes: Record<string, unknown>;\n cover?: GroupsCover;\n avatar?: Avatar;\n owner_user_id?: string;\n auth_scope?: string;\n created_at: string;\n updated_at: string;\n revision: number;\n name: string;\n name_language?: string;\n code?: string;\n path?: string;\n names: Name[];\n text: GroupsText[];\n parent?: GroupCard;\n scope?: GroupCard;\n children: GroupCard[];\n edges: Edge[];\n counts: Count[];\n access?: GroupAccess;\n offer?: Offer;\n}\n\nexport interface GroupInput {\n id?: string;\n kind: string;\n slug: string;\n internal?: boolean;\n scope_id?: string;\n parent_id?: string;\n attributes?: Record<string, unknown>;\n cover?: GroupsCover;\n avatar?: Avatar;\n owner_user_id?: string;\n auth_scope?: string;\n names?: Name[];\n text?: GroupsText[];\n}\n\nexport interface GroupJoin {\n group_id: string;\n key: string;\n member: boolean;\n}\n\nexport interface GroupKind {\n route?: string;\n ordered?: boolean;\n parent?: string;\n scoped_by?: string;\n owner?: string;\n max_per_owner?: number;\n avatar?: boolean;\n uploads?: UploadLimits;\n sellable?: boolean;\n auth_scope?: boolean;\n windows?: boolean;\n version_level?: boolean;\n creatable?: boolean;\n roles?: string[];\n attributes?: Record<string, Attribute>;\n}\n\nexport interface GroupPage {\n entities: GroupCard[];\n next_cursor?: string;\n total?: number;\n}\n\nexport interface GroupRecord {\n external_id: string;\n id?: string;\n kind: string;\n slug: string;\n internal?: boolean;\n scope?: Ref;\n parent?: Ref;\n state?: string;\n names?: Name[];\n text?: GroupsText[];\n attributes?: Record<string, unknown>;\n cover_image?: string;\n cover_content?: Ref;\n avatar?: string;\n owner_user_id?: string;\n auth_scope?: string;\n edges?: EdgeRecord[];\n code?: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface GroupSummary {\n id: string;\n kind: string;\n slug: string;\n name: string;\n code?: string;\n path?: string;\n}\n\nexport interface GroupUpdate {\n slug?: string;\n internal?: boolean;\n scope_id?: string;\n parent_id?: string;\n state?: \"active\" | \"deleted\" | \"merged\";\n attributes?: Record<string, unknown>;\n cover?: GroupsCover;\n avatar?: Avatar;\n owner_user_id?: string;\n auth_scope?: string;\n names?: Name[];\n text?: GroupsText[];\n}\n\nexport interface GroupsCover {\n image?: string;\n content_id?: string;\n auto?: boolean;\n renditions?: Rendition[];\n}\n\nexport interface GroupsText {\n language: string;\n description?: string;\n sort_key?: string;\n}\n\nexport interface GuestFilterSetting {\n entity_id: string;\n visible?: boolean;\n default?: boolean;\n}\n\nexport interface HeldItem {\n kind: string;\n revision: number;\n id: string;\n ref: ContentRef;\n author_id?: string;\n author?: PublicUser;\n anon_name?: string;\n title?: string;\n body: string;\n reason: string;\n model?: string;\n prompt_version?: string;\n confidence?: number;\n error?: string;\n held_at: string;\n created_at: string;\n}\n\nexport interface HeldPage {\n items: HeldItem[];\n next?: string;\n}\n\nexport interface IPBan {\n network: string;\n reason?: string;\n until?: string;\n banned_by: string;\n banned_at: string;\n expired: boolean;\n}\n\nexport interface IPBanInput {\n network: string;\n reason?: string;\n until?: string;\n}\n\nexport interface ImageInput {\n image?: string;\n}\n\nexport interface InlineImage {\n ref: string;\n url: string | null;\n}\n\nexport interface Input {\n recipient: Recipient;\n origin: Origin;\n kind: string;\n data: unknown;\n created_at: string;\n visibility?: string;\n app_id?: string;\n status?: string;\n action_requested?: boolean;\n severity?: string;\n}\n\nexport interface Interaction {\n content?: Card;\n entity?: GroupCard;\n value: number;\n at: string;\n}\n\nexport interface InteractionPage {\n items: Interaction[];\n next_cursor?: string;\n summary?: ListingSummary;\n}\n\nexport interface Item {\n id: string;\n recipient: Recipient;\n origin: Origin;\n kind: string;\n data: unknown;\n created_at: string;\n visibility?: string;\n app_id?: string;\n status?: string;\n action_requested?: boolean;\n severity?: string;\n read_at: string | null;\n dismissed_at: string | null;\n resolved_at: string | null;\n updated_at: string;\n revision: number;\n}\n\nexport interface Kind {\n route: string;\n path_entity?: string;\n presentation: string;\n versions: VersionRules;\n segments?: boolean;\n entities?: string[];\n attributes?: Record<string, Attribute>;\n sort?: string;\n locked?: Locked;\n draft_ttl?: number;\n download?: Download;\n}\n\nexport interface LanguageTotal {\n public: number;\n tiers: Record<string, number>;\n}\n\nexport interface LegacyReadingRecord {\n target: TargetRef;\n user_id?: string;\n anon_key?: string;\n first_read_at?: string;\n last_read_at: string;\n progress: number;\n progress_max: number;\n completed: boolean;\n resume?: string;\n revision?: number;\n}\n\nexport interface LibraryItem {\n content_id: string;\n kind: string;\n title: string;\n language?: string;\n deleted: boolean;\n whole: boolean;\n version_ids: string[];\n}\n\nexport interface LibraryPage {\n items: LibraryItem[];\n next_cursor?: string;\n complete: boolean;\n}\n\nexport interface ListingSummary {\n filtered_count: number;\n filtered_entities: ReleaseFilteredEntity[];\n locked_count: number;\n total: number;\n truncated?: boolean;\n}\n\nexport interface Locked {\n show: string[];\n preview?: Preview;\n}\n\nexport interface ManageCount {\n total: number;\n truncated?: boolean;\n}\n\nexport interface MemberPage {\n members: Membership[];\n next_cursor?: string;\n}\n\nexport interface MemberRef {\n content_id: string;\n version_id?: string;\n}\n\nexport interface Membership {\n group_id?: string;\n content_id?: string;\n version_id?: string;\n role?: string;\n position?: number;\n active_from?: string;\n active_until?: string;\n state?: \"active\" | \"proposed\";\n}\n\nexport interface MembershipRecord {\n group: Ref;\n version?: Ref;\n role?: string;\n position?: number;\n active_from?: string;\n active_until?: string;\n state?: string;\n}\n\nexport interface MembershipSet {\n content: Ref;\n kinds: string[];\n memberships: MembershipRecord[];\n}\n\nexport interface MergeInput {\n into: string;\n}\n\nexport interface MergeReport {\n from: string;\n into: string;\n memberships_moved: number;\n names_moved: number;\n edges_moved: number;\n groups_moved: number;\n}\n\nexport interface MultipartReply {\n ticket: string;\n min_part_size: number;\n max_part_size: number;\n max_parts: number;\n}\n\nexport interface MyGroup {\n id: string;\n kind: string;\n slug: string;\n internal: boolean;\n scope_id?: string;\n parent_id?: string;\n name: string;\n name_language?: string;\n code?: string;\n path?: string;\n cover?: GroupsCover;\n avatar?: Avatar;\n count: number;\n attributes: Record<string, unknown>;\n access?: GroupAccess;\n created_at: string;\n owner: boolean;\n editor: boolean;\n writer: boolean;\n moderator: boolean;\n member: boolean;\n}\n\nexport interface MyGroupPage {\n entities: MyGroup[];\n next_cursor?: string;\n}\n\nexport interface MyStats {\n completed: Record<string, number>;\n access_seconds?: Record<string, number>;\n comments: number;\n comment_likes: number;\n comment_dislikes: number;\n}\n\nexport interface Name {\n language: string;\n kind: \"alias\" | \"name\";\n name: string;\n}\n\nexport interface NewEntity {\n kind: string;\n name: string;\n language?: string;\n}\n\nexport interface NoticePage {\n id: string;\n source_name: string;\n reason?: string;\n from?: number;\n to?: number;\n preview_url?: string;\n}\n\nexport interface Offer {\n id: string;\n target: Target;\n key: string;\n terms: Terms;\n state: \"active\" | \"withdrawn\";\n synced: boolean;\n product_id?: string;\n price_id?: string;\n last_error?: string;\n revision: number;\n updated_at: string;\n}\n\nexport interface OfferPage {\n offers: Offer[];\n next_cursor?: string;\n}\n\nexport interface OfferRecord {\n target: TargetRef;\n terms: Terms;\n}\n\nexport interface Op {\n op: OpName;\n source_name?: string;\n path?: string;\n blob?: string;\n create_id?: string;\n replace?: boolean;\n index?: number;\n meta?: Record<string, unknown>;\n edit?: Edit;\n unattached?: boolean;\n to?: string;\n from?: CopyFrom;\n t?: number;\n auto?: boolean;\n preset?: string;\n force?: boolean;\n takedown?: boolean;\n}\n\nexport interface Operation {\n id: string;\n state: \"awaiting_upload\" | \"blocked\" | \"failed\" | \"processing\" | \"published\" | \"publishing\" | \"ready\" | \"review_required\" | \"scheduled\";\n content_id: string;\n version_id: string;\n publish_at?: string;\n entities: EntityResolution[];\n progress: Progress;\n result?: OperationResult;\n error?: OperationError;\n upload?: PresignReply;\n created_at: string;\n updated_at: string;\n}\n\nexport interface OperationError {\n code: string;\n message: string;\n retryable: boolean;\n field?: string;\n}\n\nexport interface OperationResult {\n path: string;\n pages: number;\n}\n\nexport interface Order {\n members: MemberRef[];\n}\n\nexport interface OrderInput {\n ids: string[];\n}\n\nexport interface Origin {\n system: string;\n scope: string;\n id: string;\n subject?: string;\n}\n\nexport interface Page {\n items: Item[];\n next_cursor?: string;\n}\n\nexport interface PageEngagement {\n index: number;\n ranges: CoverageRange[];\n active_ms: number;\n}\n\nexport interface PageNotice {\n id: string;\n kind: string;\n pages: NoticePage[];\n}\n\nexport interface PageNotices {\n notices: PageNotice[];\n}\n\nexport interface PageSpan {\n from: number;\n to: number;\n}\n\nexport interface PartBody {\n number: number;\n size: number;\n sha256: string;\n}\n\nexport interface PartReply {\n number: number;\n size?: number;\n sha256?: string;\n request?: RequestReply;\n}\n\nexport interface PartsBody {\n ticket: string;\n parts: PartBody[];\n}\n\nexport interface PartsReply {\n parts: PartReply[];\n}\n\nexport interface Pending {\n status: string;\n}\n\nexport interface Placement {\n content_id: string;\n position: number;\n version_id?: string;\n activity_token?: string;\n}\n\nexport interface PlanPage {\n name: string;\n span?: PageSpan;\n w: number;\n h: number;\n files: Record<string, string>;\n}\n\nexport interface PlanPlayback {\n item: RefBody;\n tracks: PlanTrack[];\n}\n\nexport interface PlanPreview {\n index: number;\n name: string;\n url: string;\n w: number;\n h: number;\n}\n\nexport interface PlanSegment {\n position?: number;\n title?: string;\n start: number;\n end: number;\n released: boolean;\n release_at?: string;\n locked: boolean;\n item?: RefBody;\n pages?: PlanPage[];\n}\n\nexport interface PlanTrack {\n name: string;\n path: string;\n duration?: number;\n}\n\nexport interface Poll {\n id: string;\n kind: PollKind;\n question: string;\n language: string;\n is_active: boolean;\n image_url?: string;\n live_at: string;\n closes_at?: string;\n closed: boolean;\n total_votes: number;\n options: PollOption[];\n voted: boolean;\n my_option?: string;\n answer_count?: number;\n groups?: AnswerGroup[];\n my_answer?: PollAnswer;\n}\n\nexport interface PollAnswer {\n id: string;\n text: string;\n classified: boolean;\n updated_at: string;\n}\n\nexport interface PollAnswerInput {\n text: string;\n}\n\nexport interface PollImage {\n image_url: string | null;\n}\n\nexport interface PollInput {\n kind?: PollKind;\n question: string;\n language: string;\n live_at?: string;\n closes_at?: string;\n options?: PollOptionInput[];\n}\n\nexport interface PollOption {\n id: string;\n label: string;\n image_url?: string;\n position: number;\n vote_count: number;\n}\n\nexport interface PollOptionInput {\n label: string;\n position: number;\n}\n\nexport interface PollOptionPatch {\n label?: string;\n position?: number;\n}\n\nexport interface PollOptionRecord {\n external_id: string;\n id?: string;\n label: string;\n position: number;\n}\n\nexport interface PollRecord {\n external_id: string;\n id?: string;\n kind?: string;\n question: string;\n language?: string;\n active?: boolean;\n live_at?: string;\n closes_at?: string;\n deleted_at?: string;\n created_at?: string;\n updated_at?: string;\n options?: PollOptionRecord[];\n}\n\nexport interface PollUpdate {\n question?: string;\n is_active?: boolean;\n live_at?: string;\n closes_at?: string | null;\n}\n\nexport interface PollVote {\n option_id: string;\n}\n\nexport interface PresetRule {\n kind: string;\n name: string;\n from: string;\n base: string;\n namespace: string;\n root?: string;\n to: string;\n widths: number[];\n aspect?: string;\n min_width?: number;\n first?: number;\n default: boolean;\n stable?: boolean;\n}\n\nexport interface PresignBody {\n ref: RefBody;\n path: string;\n type: string;\n size: number;\n sha256: string;\n}\n\nexport interface PresignReply {\n path: string;\n source_name?: string;\n blob: string;\n exists?: boolean;\n put?: RequestReply;\n multipart?: MultipartReply;\n process_on_upload?: boolean;\n}\n\nexport interface Preview {\n pages?: number;\n segments?: number;\n}\n\nexport interface Progress {\n stage: string;\n completed: number;\n total: number;\n}\n\nexport interface PublicImage {\n from: string;\n preset: string;\n renditions: PublicRendition[];\n}\n\nexport interface PublicRendition {\n url: string;\n w: number;\n h: number;\n}\n\nexport interface PublicUser {\n id: string;\n name?: string;\n username: string;\n avatar?: string;\n avatar_srcset?: string;\n}\n\nexport interface Publication {\n notifications: Input[];\n}\n\nexport interface PublishInput {\n publish_at?: string;\n}\n\nexport interface Published {\n items: Item[];\n}\n\nexport interface RankingInfo {\n policy: string;\n mode: string;\n requested_from?: string;\n requested_until?: string;\n covered_from?: string;\n covered_until?: string;\n}\n\nexport interface ReactionCounts {\n likes?: number;\n dislikes?: number;\n mine: number;\n}\n\nexport interface ReactionRecord {\n target: TargetRef;\n user_id?: string;\n ip?: string;\n value: number;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface ReadResult {\n access: Access;\n expires: number;\n meta?: Record<string, unknown>;\n previews?: string[];\n public?: PublicImage[];\n locked?: boolean;\n total: number;\n offset: number;\n limit: number;\n hls?: string[];\n state?: ItemState;\n full?: boolean;\n uploads?: UploadRule[];\n files: FileInfo[];\n}\n\nexport interface ReaderDefaults {\n auto_advance_seconds?: number;\n}\n\nexport interface ReaderMeta {\n schema_version: number;\n defaults?: ReaderDefaults;\n anchors?: Anchor[];\n background?: BackgroundCue[];\n foreground?: ForegroundCue[];\n}\n\nexport interface ReaderPlan {\n content_id: string;\n version_id: string;\n publication_id: string;\n pages?: number;\n segments: PlanSegment[];\n previews: PlanPreview[];\n playback?: PlanPlayback;\n reader?: ReaderMeta;\n}\n\nexport interface RecentSearch {\n query: string;\n results: number;\n searched_at: string;\n}\n\nexport interface RecentSearches {\n searches: RecentSearch[];\n}\n\nexport interface Recipient {\n audience: string;\n id: string;\n}\n\nexport interface RecordFailure {\n section: string;\n index: number;\n external_id?: string;\n code: string;\n error: string;\n}\n\nexport interface Ref {\n id?: string;\n external_id?: string;\n}\n\nexport interface RefBody {\n kind: string;\n id: string;\n version?: string;\n}\n\nexport interface ReleaseDates {\n dates: DateCount[];\n next_cursor?: string;\n}\n\nexport interface ReleaseDay {\n date: string;\n contents: Card[];\n filtered_count: number;\n filtered_entities: ReleaseFilteredEntity[];\n}\n\nexport interface ReleaseFilteredEntity {\n entity: GroupCard;\n count: number;\n}\n\nexport interface Rendition {\n url: string;\n w: number;\n h: number;\n}\n\nexport interface Request {\n content: ContentInput;\n entities?: EntityReference[];\n archive: Archive;\n publish?: \"draft\" | \"when_ready\";\n publish_at?: string;\n create_missing_entities?: boolean;\n source?: Source;\n}\n\nexport interface RequestReply {\n method: string;\n url: string;\n headers: Record<string, string>;\n expires: string;\n}\n\nexport interface ResolveInput {\n decision: \"approve\" | \"reject\" | \"review\";\n revision: number;\n reason?: string;\n}\n\nexport interface Resolved {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n code: string;\n slug: string;\n slugs?: Record<string, string>;\n path: string;\n version_id?: string;\n}\n\nexport interface Restored {\n restored: boolean;\n}\n\nexport interface Result {\n written: Record<string, number>;\n skipped?: Record<string, number>;\n failed: RecordFailure[];\n ids: Record<string, Record<string, string>>;\n}\n\nexport interface ReviewOutcome {\n decision: \"approve\" | \"reject\" | \"review\";\n}\n\nexport interface Rule {\n level: \"group\" | \"group_ppv\" | \"ppv\" | \"public\" | \"tier\";\n tiers?: string[];\n group_id?: string;\n preview?: Preview;\n free_after?: string;\n}\n\nexport interface Sale {\n key: string;\n target: Target;\n terms: Terms;\n price_id?: string;\n}\n\nexport interface Segment {\n position: number;\n title?: string;\n start: number;\n end: number;\n release_at?: string;\n released: boolean;\n}\n\nexport interface SegmentsInput {\n segments: Segment[];\n}\n\nexport interface SignalInput {\n content_id: string;\n version_id?: string;\n type: string;\n event_id: string;\n revision?: number;\n occurred_at: string;\n render_id?: string;\n surface?: string;\n position?: number;\n activity_token?: string;\n}\n\nexport interface SignalRecord {\n target: TargetRef;\n user_id?: string;\n anon_key?: string;\n type: string;\n event_id: string;\n revision?: number;\n occurred_at: string;\n}\n\nexport interface Signals {\n session?: string;\n signals: SignalInput[];\n}\n\nexport interface SitemapAlias {\n language: string;\n path: string;\n image?: string;\n}\n\nexport interface SitemapEntry {\n id: string;\n code: string;\n path: string;\n lastmod: string;\n languages: SitemapAlias[];\n}\n\nexport interface SitemapPage {\n entries: SitemapEntry[];\n next_cursor?: string;\n}\n\nexport interface Source {\n provider: string;\n id: string;\n url?: string;\n}\n\nexport interface StagedCopy {\n path: string;\n blob: string;\n size: number;\n}\n\nexport interface Target {\n kind: \"content\" | \"group\" | \"version\";\n id: string;\n content_id?: string;\n}\n\nexport interface TargetRef {\n content?: Ref;\n version?: Ref;\n group?: Ref;\n comment?: Ref;\n}\n\nexport interface Terms {\n amount: string;\n currency: string;\n access_hours?: number;\n renew_hours?: number;\n}\n\nexport interface TicketBody {\n ticket: string;\n}\n\nexport interface Total {\n public: number;\n tiers: Record<string, number>;\n languages: Record<string, LanguageTotal>;\n}\n\nexport interface Totals {\n kinds: Record<string, Total>;\n}\n\nexport interface Typeahead {\n contents: Card[];\n entities: GroupCard[];\n}\n\nexport interface UploadLimits {\n files_per_hour?: number;\n bytes_per_day?: number;\n quota_bytes?: number;\n}\n\nexport interface UploadRule {\n path: string;\n types: string[];\n max_bytes: number;\n max?: number;\n named?: boolean;\n page?: boolean;\n body?: boolean;\n frames?: string;\n aspect?: string;\n min_width?: number;\n video?: VideoLimits;\n min_aspect?: number;\n max_aspect?: number;\n}\n\nexport interface Version {\n id: string;\n code: string;\n position: number;\n languages: string[];\n traits: string[];\n label?: string;\n title?: string;\n description?: string;\n state?: ContentState;\n publish_at?: string;\n published_at?: string;\n live: boolean;\n access?: Rule;\n attributes: Record<string, unknown>;\n pages?: number;\n duration_ms?: number;\n width?: number;\n height?: number;\n has_audio: boolean;\n ordinal?: number;\n cover?: CatalogCover;\n segments: Segment[];\n decision: Decision;\n text?: Record<string, VersionText>;\n offer?: Offer;\n viewer?: ViewerState;\n}\n\nexport interface VersionFork {\n from: string;\n playback?: boolean;\n segments?: boolean;\n}\n\nexport interface VersionInput {\n languages?: string[];\n traits?: string[];\n label?: string;\n state?: VersionState;\n publish_at?: string;\n access?: Rule;\n clear_access?: boolean;\n attributes?: Record<string, unknown>;\n text?: Record<string, VersionText>;\n segments?: Segment[];\n ordinal?: number;\n cover?: string;\n fork?: VersionFork;\n}\n\nexport interface VersionRecord {\n external_id: string;\n id?: string;\n code?: string;\n languages: string[];\n traits?: string[];\n label?: string;\n state?: string;\n publish_at?: string;\n published_at?: string;\n deleted_at?: string;\n access?: Rule;\n attributes?: Record<string, unknown>;\n ordinal?: number;\n cover?: string;\n text?: Record<string, VersionText>;\n segments?: Segment[];\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface VersionRules {\n languages: string;\n traits?: string[];\n hidden?: boolean;\n}\n\nexport interface VersionText {\n title?: string;\n description?: string;\n}\n\nexport interface VideoLimits {\n max_seconds?: number;\n max_fps?: number;\n max_pixels?: number;\n max_work?: number;\n}\n\nexport interface ViewerState {\n favorited: boolean;\n reaction?: number;\n seen: boolean;\n completed: boolean;\n progress: number;\n progress_max: number;\n resume?: string;\n last_read_at?: string;\n}\n\nexport interface VoteRecord {\n poll: Ref;\n option: Ref;\n user_id?: string;\n ip?: string;\n created_at?: string;\n}\n\nexport interface WatchedRange {\n from_ms: number;\n to_ms: number;\n}\n\nexport interface Written {\n count: number;\n}\n"],"mappings":";AAOA,IAAa,IAAiB,UACjB,IAAgB,SAChB,IAAgB"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export { DiscoveryClient, popularQuery, popularBetween, type AccessMode, type Ad
|
|
|
15
15
|
export { VersionsClient, isPending } from './versions.js';
|
|
16
16
|
export { emptyReaderMeta, matchAudio, readerMetaProblems, readerNames, type AudioMatch, type ReaderMetaProblem, type ReaderNames } from './reader-meta.js';
|
|
17
17
|
export { OffersClient } from './offers.js';
|
|
18
|
-
export { StatsClient, type ActivityQuery
|
|
18
|
+
export { StatsClient, type ActivityQuery } from './stats.js';
|
|
19
19
|
export { Beacons, eventId, readerSession, type Attribution, type BeaconOptions } from './beacons.js';
|
|
20
20
|
export { LETTERS, attributeInput, fold, fromLocalInput, humanize, letterOf, parseAttribute, parseAttributes, slugify, toLocalInput } from './group-fields.js';
|
|
21
21
|
export { CodesClient } from './codes.js';
|
|
@@ -13,3 +13,5 @@ export declare function mergeReads(reads: readonly (ReadResult | null | undefine
|
|
|
13
13
|
export declare const isProcessing: (f: FileInfo) => boolean;
|
|
14
14
|
/** An editor read with uploads still processing (not stalled because the item is full). */
|
|
15
15
|
export declare function processing(read: ReadResult | null | undefined): boolean;
|
|
16
|
+
/** A page automatic processing removed (blank, duplicate or covered by a spread); a notice offers it back. */
|
|
17
|
+
export declare function pageRemoved(f: FileInfo): boolean;
|
|
@@ -33,7 +33,10 @@ var r = (e) => !!e.upload && !e.failed && (!!e.staged || (e.pending?.length ?? 0
|
|
|
33
33
|
function i(e) {
|
|
34
34
|
return !e || e.full ? !1 : e.state === "processing" || e.files.some(r);
|
|
35
35
|
}
|
|
36
|
+
function a(e) {
|
|
37
|
+
return e.meta?.page?.included === !1;
|
|
38
|
+
}
|
|
36
39
|
//#endregion
|
|
37
|
-
export { e as READ_CHUNK, t as chunkOffsets, r as isProcessing, n as mergeReads, i as processing };
|
|
40
|
+
export { e as READ_CHUNK, t as chunkOffsets, r as isProcessing, n as mergeReads, a as pageRemoved, i as processing };
|
|
38
41
|
|
|
39
42
|
//# sourceMappingURL=windows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.js","names":[],"sources":["../../../src/client/media/windows.ts"],"sourcesContent":["import type { FileInfo, ReadResult } from \"../generated/wire.js\";\n\n/** Files per window when a read is split into windows. */\nexport const READ_CHUNK = 50;\n\n/** Offsets of chunk-sized windows covering files [start, end), clipped to total when known. */\nexport function chunkOffsets(start: number, end: number, total?: number, chunk = READ_CHUNK): number[] {\n const out: number[] = [];\n const stop = total === undefined ? end : Math.min(end, total);\n if (start >= stop) return out;\n for (let o = Math.floor(Math.max(start, 0) / chunk) * chunk; o < stop; o += chunk) out.push(o);\n return out;\n}\n\n/**\n * One item's window reads as one read: the newest window's listing and\n * metadata, each file's URL from the newest window that signed it, and the\n * earliest expiry. Every window lists every file; only its range has URLs.\n */\nexport function mergeReads(reads: readonly (ReadResult | null | undefined)[]): ReadResult | null {\n const present = reads.filter((r): r is ReadResult => !!r);\n if (present.length === 0) return null;\n if (present.length === 1) return present[0]!;\n const newest = present.reduce((a, b) => (b.expires >= a.expires ? b : a));\n const urls = new Map<string, FileInfo>();\n for (const r of [...present].sort((a, b) => a.expires - b.expires)) for (const f of r.files) if (f.url) urls.set(f.path, f);\n const files = newest.files.map((f) => {\n if (f.url) return f;\n const signed = urls.get(f.path);\n return signed ? { ...f, url: signed.url, ...(signed.download ? { download: signed.download } : {}) } : f;\n });\n const start = Math.min(...present.map((r) => r.offset));\n const end = Math.max(...present.map((r) => r.offset + r.limit));\n return { ...newest, files, offset: start, limit: end - start, expires: Math.min(...present.map((r) => r.expires)) };\n}\n\n/** An upload the worker has not finished: staged, or with work pending, and not failed. */\nexport const isProcessing = (f: FileInfo) => !!f.upload && !f.failed && (!!f.staged || (f.pending?.length ?? 0) > 0);\n\n/** An editor read with uploads still processing (not stalled because the item is full). */\nexport function processing(read: ReadResult | null | undefined): boolean {\n if (!read || read.full) return false;\n return read.state === \"processing\" || read.files.some(isProcessing);\n}\n"],"mappings":";AAGA,IAAa,IAAa;AAG1B,SAAgB,EAAa,GAAe,GAAa,GAAgB,IAAA,IAA8B;CACrG,IAAM,IAAgB,CAAC,GACjB,IAAO,MAAU,KAAA,IAAY,IAAM,KAAK,IAAI,GAAK,CAAK;CAC5D,IAAI,KAAS,GAAM,OAAO;CAC1B,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,GAAO,CAAC,IAAI,CAAK,IAAI,GAAO,IAAI,GAAM,KAAK,GAAO,EAAI,KAAK,CAAC;CAC7F,OAAO;AACT;AAOA,SAAgB,EAAW,GAAsE;CAC/F,IAAM,IAAU,EAAM,QAAQ,MAAuB,CAAC,CAAC,CAAC;CACxD,IAAI,EAAQ,WAAW,GAAG,OAAO;CACjC,IAAI,EAAQ,WAAW,GAAG,OAAO,EAAQ;CACzC,IAAM,IAAS,EAAQ,QAAQ,GAAG,MAAO,EAAE,WAAW,EAAE,UAAU,IAAI,CAAE,GAClE,oBAAO,IAAI,IAAsB;CACvC,KAAK,IAAM,KAAK,CAAC,GAAG,CAAO,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,KAAK,IAAM,KAAK,EAAE,OAAO,AAAI,EAAE,OAAK,EAAK,IAAI,EAAE,MAAM,CAAC;CAC1H,IAAM,IAAQ,EAAO,MAAM,KAAK,MAAM;EACpC,IAAI,EAAE,KAAK,OAAO;EAClB,IAAM,IAAS,EAAK,IAAI,EAAE,IAAI;EAC9B,OAAO,IAAS;GAAE,GAAG;GAAG,KAAK,EAAO;GAAK,GAAI,EAAO,WAAW,EAAE,UAAU,EAAO,SAAS,IAAI,CAAC;EAAG,IAAI;CACzG,CAAC,GACK,IAAQ,KAAK,IAAI,GAAG,EAAQ,KAAK,MAAM,EAAE,MAAM,CAAC,GAChD,IAAM,KAAK,IAAI,GAAG,EAAQ,KAAK,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC;CAC9D,OAAO;EAAE,GAAG;EAAQ;EAAO,QAAQ;EAAO,OAAO,IAAM;EAAO,SAAS,KAAK,IAAI,GAAG,EAAQ,KAAK,MAAM,EAAE,OAAO,CAAC;CAAE;AACpH;AAGA,IAAa,KAAgB,MAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,UAAU,KAAK;AAGlH,SAAgB,EAAW,GAA8C;CAEvE,OADI,CAAC,KAAQ,EAAK,OAAa,KACxB,EAAK,UAAU,gBAAgB,EAAK,MAAM,KAAK,CAAY;AACpE"}
|
|
1
|
+
{"version":3,"file":"windows.js","names":[],"sources":["../../../src/client/media/windows.ts"],"sourcesContent":["import type { FileInfo, ReadResult } from \"../generated/wire.js\";\n\n/** Files per window when a read is split into windows. */\nexport const READ_CHUNK = 50;\n\n/** Offsets of chunk-sized windows covering files [start, end), clipped to total when known. */\nexport function chunkOffsets(start: number, end: number, total?: number, chunk = READ_CHUNK): number[] {\n const out: number[] = [];\n const stop = total === undefined ? end : Math.min(end, total);\n if (start >= stop) return out;\n for (let o = Math.floor(Math.max(start, 0) / chunk) * chunk; o < stop; o += chunk) out.push(o);\n return out;\n}\n\n/**\n * One item's window reads as one read: the newest window's listing and\n * metadata, each file's URL from the newest window that signed it, and the\n * earliest expiry. Every window lists every file; only its range has URLs.\n */\nexport function mergeReads(reads: readonly (ReadResult | null | undefined)[]): ReadResult | null {\n const present = reads.filter((r): r is ReadResult => !!r);\n if (present.length === 0) return null;\n if (present.length === 1) return present[0]!;\n const newest = present.reduce((a, b) => (b.expires >= a.expires ? b : a));\n const urls = new Map<string, FileInfo>();\n for (const r of [...present].sort((a, b) => a.expires - b.expires)) for (const f of r.files) if (f.url) urls.set(f.path, f);\n const files = newest.files.map((f) => {\n if (f.url) return f;\n const signed = urls.get(f.path);\n return signed ? { ...f, url: signed.url, ...(signed.download ? { download: signed.download } : {}) } : f;\n });\n const start = Math.min(...present.map((r) => r.offset));\n const end = Math.max(...present.map((r) => r.offset + r.limit));\n return { ...newest, files, offset: start, limit: end - start, expires: Math.min(...present.map((r) => r.expires)) };\n}\n\n/** An upload the worker has not finished: staged, or with work pending, and not failed. */\nexport const isProcessing = (f: FileInfo) => !!f.upload && !f.failed && (!!f.staged || (f.pending?.length ?? 0) > 0);\n\n/** An editor read with uploads still processing (not stalled because the item is full). */\nexport function processing(read: ReadResult | null | undefined): boolean {\n if (!read || read.full) return false;\n return read.state === \"processing\" || read.files.some(isProcessing);\n}\n\n/** A page automatic processing removed (blank, duplicate or covered by a spread); a notice offers it back. */\nexport function pageRemoved(f: FileInfo): boolean {\n return (f.meta?.page as { included?: boolean } | undefined)?.included === false;\n}\n"],"mappings":";AAGA,IAAa,IAAa;AAG1B,SAAgB,EAAa,GAAe,GAAa,GAAgB,IAAA,IAA8B;CACrG,IAAM,IAAgB,CAAC,GACjB,IAAO,MAAU,KAAA,IAAY,IAAM,KAAK,IAAI,GAAK,CAAK;CAC5D,IAAI,KAAS,GAAM,OAAO;CAC1B,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,GAAO,CAAC,IAAI,CAAK,IAAI,GAAO,IAAI,GAAM,KAAK,GAAO,EAAI,KAAK,CAAC;CAC7F,OAAO;AACT;AAOA,SAAgB,EAAW,GAAsE;CAC/F,IAAM,IAAU,EAAM,QAAQ,MAAuB,CAAC,CAAC,CAAC;CACxD,IAAI,EAAQ,WAAW,GAAG,OAAO;CACjC,IAAI,EAAQ,WAAW,GAAG,OAAO,EAAQ;CACzC,IAAM,IAAS,EAAQ,QAAQ,GAAG,MAAO,EAAE,WAAW,EAAE,UAAU,IAAI,CAAE,GAClE,oBAAO,IAAI,IAAsB;CACvC,KAAK,IAAM,KAAK,CAAC,GAAG,CAAO,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,KAAK,IAAM,KAAK,EAAE,OAAO,AAAI,EAAE,OAAK,EAAK,IAAI,EAAE,MAAM,CAAC;CAC1H,IAAM,IAAQ,EAAO,MAAM,KAAK,MAAM;EACpC,IAAI,EAAE,KAAK,OAAO;EAClB,IAAM,IAAS,EAAK,IAAI,EAAE,IAAI;EAC9B,OAAO,IAAS;GAAE,GAAG;GAAG,KAAK,EAAO;GAAK,GAAI,EAAO,WAAW,EAAE,UAAU,EAAO,SAAS,IAAI,CAAC;EAAG,IAAI;CACzG,CAAC,GACK,IAAQ,KAAK,IAAI,GAAG,EAAQ,KAAK,MAAM,EAAE,MAAM,CAAC,GAChD,IAAM,KAAK,IAAI,GAAG,EAAQ,KAAK,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC;CAC9D,OAAO;EAAE,GAAG;EAAQ;EAAO,QAAQ;EAAO,OAAO,IAAM;EAAO,SAAS,KAAK,IAAI,GAAG,EAAQ,KAAK,MAAM,EAAE,OAAO,CAAC;CAAE;AACpH;AAGA,IAAa,KAAgB,MAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,UAAU,KAAK;AAGlH,SAAgB,EAAW,GAA8C;CAEvE,OADI,CAAC,KAAQ,EAAK,OAAa,KACxB,EAAK,UAAU,gBAAgB,EAAK,MAAM,KAAK,CAAY;AACpE;AAGA,SAAgB,EAAY,GAAsB;CAChD,OAAQ,EAAE,MAAM,MAA6C,aAAa;AAC5E"}
|
package/dist/client/stats.d.ts
CHANGED
|
@@ -1,32 +1,16 @@
|
|
|
1
|
-
import { Activity, MyStats
|
|
2
|
-
import { Period } from './discovery.js';
|
|
1
|
+
import { Activity, MyStats } from './generated/wire.js';
|
|
3
2
|
import { Http } from './http.js';
|
|
4
3
|
export interface ActivityQuery {
|
|
5
4
|
kind: string;
|
|
6
|
-
/** The last days, today included:
|
|
5
|
+
/** The last days, today included: 10 by default, at most 90. */
|
|
7
6
|
days?: number;
|
|
8
7
|
}
|
|
9
|
-
|
|
10
|
-
kind: string;
|
|
11
|
-
/** Distinct people with measured attention (the default), or published comments. */
|
|
12
|
-
metric?: "readers" | "comments";
|
|
13
|
-
/** 30d by default. */
|
|
14
|
-
period?: Period;
|
|
15
|
-
access?: readonly ("public" | "tier" | "group" | "ppv" | "group_ppv")[];
|
|
16
|
-
tiers?: readonly string[];
|
|
17
|
-
/** Titles and paths in this language; the site's first by default. */
|
|
18
|
-
language?: string;
|
|
19
|
-
/** 10 by default, at most 100. */
|
|
20
|
-
limit?: number;
|
|
21
|
-
}
|
|
22
|
-
/** Content statistics: staff activity and rankings (content statistics permission), and the signed-in reader's own. */
|
|
8
|
+
/** Content statistics: staff activity (content statistics permission) and the signed-in reader's own. */
|
|
23
9
|
export declare class StatsClient {
|
|
24
10
|
private readonly http;
|
|
25
11
|
constructor(http: Http);
|
|
26
|
-
/** A kind's measured activity
|
|
12
|
+
/** A kind's measured activity for every UTC day of the period, newest first: distinct people who read or played, by audience (anon, free, premium), and focused active milliseconds. */
|
|
27
13
|
activity(q: ActivityQuery, signal?: AbortSignal): Promise<Activity>;
|
|
28
|
-
/** A kind's live, listed content ranked by distinct engaged people or published comments over a period. */
|
|
29
|
-
top(q: TopQuery, signal?: AbortSignal): Promise<TopContents>;
|
|
30
14
|
/** The signed-in reader's statistics: contents finished per kind, comments, reactions received and elapsed access per tier when billing supplies its history. */
|
|
31
15
|
mine(signal?: AbortSignal): Promise<MyStats>;
|
|
32
16
|
}
|
package/dist/client/stats.js
CHANGED
|
@@ -14,17 +14,6 @@ var t = class {
|
|
|
14
14
|
signal: n
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
-
top(t, n) {
|
|
18
|
-
let { access: r, tiers: i, ...a } = t;
|
|
19
|
-
return e(this.http, "GET", "/stats/top", {
|
|
20
|
-
query: {
|
|
21
|
-
...a,
|
|
22
|
-
access: r?.join(","),
|
|
23
|
-
tiers: i?.join(",")
|
|
24
|
-
},
|
|
25
|
-
signal: n
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
17
|
mine(t) {
|
|
29
18
|
return e(this.http, "GET", "/me/stats", { signal: t });
|
|
30
19
|
}
|
package/dist/client/stats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","names":[],"sources":["../../src/client/stats.ts"],"sourcesContent":["import type { Activity, MyStats
|
|
1
|
+
{"version":3,"file":"stats.js","names":[],"sources":["../../src/client/stats.ts"],"sourcesContent":["import type { Activity, MyStats } from \"./generated/wire.js\";\nimport type { Http } from \"./http.js\";\nimport { call } from \"./route.js\";\n\nexport interface ActivityQuery {\n kind: string;\n /** The last days, today included: 10 by default, at most 90. */\n days?: number;\n}\n\n/** Content statistics: staff activity (content statistics permission) and the signed-in reader's own. */\nexport class StatsClient {\n constructor(private readonly http: Http) {}\n\n /** A kind's measured activity for every UTC day of the period, newest first: distinct people who read or played, by audience (anon, free, premium), and focused active milliseconds. */\n activity(q: ActivityQuery, signal?: AbortSignal): Promise<Activity> {\n return call(this.http, \"GET\", \"/stats/activity\", { query: { kind: q.kind, days: q.days }, signal });\n }\n /** The signed-in reader's statistics: contents finished per kind, comments, reactions received and elapsed access per tier when billing supplies its history. */\n mine(signal?: AbortSignal): Promise<MyStats> {\n return call(this.http, \"GET\", \"/me/stats\", { signal });\n }\n}\n"],"mappings":";;AAWA,IAAa,IAAb,MAAyB;CACM;CAA7B,YAAY,GAA6B;EAAZ,KAAA,OAAA;CAAa;CAG1C,SAAS,GAAkB,GAAyC;EAClE,OAAO,EAAK,KAAK,MAAM,OAAO,mBAAmB;GAAE,OAAO;IAAE,MAAM,EAAE;IAAM,MAAM,EAAE;GAAK;GAAG;EAAO,CAAC;CACpG;CAEA,KAAK,GAAwC;EAC3C,OAAO,EAAK,KAAK,MAAM,OAAO,aAAa,EAAE,UAAO,CAAC;CACvD;AACF"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { FileDownload, ForkBody,
|
|
1
|
+
import { FileDownload, ForkBody, PageNotices, Pending, ReaderMeta, ReaderPlan } from './generated/wire.js';
|
|
2
2
|
import { Http } from './http.js';
|
|
3
3
|
/** A version's answer while it is prepared (202). */
|
|
4
4
|
export declare const isPending: (x: unknown) => x is Pending;
|
|
5
|
-
/** Content versions: page
|
|
5
|
+
/** Content versions: page notices, reader plans, reader metadata, forks and downloads. */
|
|
6
6
|
export declare class VersionsClient {
|
|
7
7
|
private readonly http;
|
|
8
8
|
constructor(http: Http);
|
|
9
|
-
/** Editors:
|
|
10
|
-
|
|
11
|
-
/** Editors:
|
|
12
|
-
|
|
9
|
+
/** Editors: undismissed notes about automatic page changes (removed or reordered pages). */
|
|
10
|
+
pageNotices(content: string, version: string, signal?: AbortSignal): Promise<PageNotices>;
|
|
11
|
+
/** Editors: hides a page notice. */
|
|
12
|
+
dismissPageNotice(content: string, version: string, notice: string): Promise<void>;
|
|
13
|
+
/** Editors: puts a removed-pages notice's pages back where they were. */
|
|
14
|
+
restorePageNotice(content: string, version: string, notice: string): Promise<PageNotices>;
|
|
13
15
|
/** The version's reader plan for this viewer; Pending while it has no current publication. */
|
|
14
16
|
reader(content: string, version: string, signal?: AbortSignal): Promise<ReaderPlan | Pending>;
|
|
15
17
|
/** Editors: replaces the version's reader metadata (anchors, audio cues, defaults). */
|
package/dist/client/versions.js
CHANGED
|
@@ -5,8 +5,8 @@ var n = (e) => !!e && typeof e == "object" && "status" in e && !("pages" in e) &
|
|
|
5
5
|
constructor(e) {
|
|
6
6
|
this.http = e;
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
return e(this.http, "GET", "/contents/{id}/versions/{version}/
|
|
8
|
+
pageNotices(t, n, r) {
|
|
9
|
+
return e(this.http, "GET", "/contents/{id}/versions/{version}/page-notices", {
|
|
10
10
|
params: {
|
|
11
11
|
id: t,
|
|
12
12
|
version: n
|
|
@@ -14,14 +14,19 @@ var n = (e) => !!e && typeof e == "object" && "status" in e && !("pages" in e) &
|
|
|
14
14
|
signal: r
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
dismissPageNotice(t, n, r) {
|
|
18
|
+
return e(this.http, "POST", "/contents/{id}/versions/{version}/page-notices/{notice}/dismiss", { params: {
|
|
19
|
+
id: t,
|
|
20
|
+
version: n,
|
|
21
|
+
notice: r
|
|
22
|
+
} });
|
|
23
|
+
}
|
|
24
|
+
async restorePageNotice(t, n, r) {
|
|
25
|
+
let i = this.http.captureChanges(), a = await e(this.http, "POST", "/contents/{id}/versions/{version}/page-notices/{notice}/restore", { params: {
|
|
26
|
+
id: t,
|
|
27
|
+
version: n,
|
|
28
|
+
notice: r
|
|
29
|
+
} });
|
|
25
30
|
return i({
|
|
26
31
|
type: "content.changed",
|
|
27
32
|
id: t
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","names":[],"sources":["../../src/client/versions.ts"],"sourcesContent":["import type { FileDownload, ForkBody,
|
|
1
|
+
{"version":3,"file":"versions.js","names":[],"sources":["../../src/client/versions.ts"],"sourcesContent":["import type { FileDownload, ForkBody, PageNotices, Pending, ReaderMeta, ReaderPlan } from \"./generated/wire.js\";\nimport type { Http } from \"./http.js\";\nimport { call, routeURL } from \"./route.js\";\n\n/** A version's answer while it is prepared (202). */\nexport const isPending = (x: unknown): x is Pending => !!x && typeof x === \"object\" && \"status\" in x && !(\"pages\" in x) && !(\"url\" in x);\n\n/** Content versions: page notices, reader plans, reader metadata, forks and downloads. */\nexport class VersionsClient {\n constructor(private readonly http: Http) {}\n\n /** Editors: undismissed notes about automatic page changes (removed or reordered pages). */\n pageNotices(content: string, version: string, signal?: AbortSignal): Promise<PageNotices> {\n return call(this.http, \"GET\", \"/contents/{id}/versions/{version}/page-notices\", { params: { id: content, version }, signal });\n }\n /** Editors: hides a page notice. */\n dismissPageNotice(content: string, version: string, notice: string): Promise<void> {\n return call(this.http, \"POST\", \"/contents/{id}/versions/{version}/page-notices/{notice}/dismiss\", { params: { id: content, version, notice } });\n }\n /** Editors: puts a removed-pages notice's pages back where they were. */\n async restorePageNotice(content: string, version: string, notice: string): Promise<PageNotices> {\n const emit = this.http.captureChanges();\n const next: PageNotices = await call(this.http, \"POST\", \"/contents/{id}/versions/{version}/page-notices/{notice}/restore\", { params: { id: content, version, notice } });\n emit({ type: \"content.changed\", id: content });\n emit({ type: \"reader.changed\", content, version });\n return next;\n }\n /** The version's reader plan for this viewer; Pending while it has no current publication. */\n reader(content: string, version: string, signal?: AbortSignal): Promise<ReaderPlan | Pending> {\n return call(this.http, \"GET\", \"/contents/{id}/versions/{version}/reader\", { params: { id: content, version }, signal });\n }\n /** Editors: replaces the version's reader metadata (anchors, audio cues, defaults). */\n async setReader(content: string, version: string, meta: ReaderMeta): Promise<void> {\n const emit = this.http.captureChanges();\n await call(this.http, \"PUT\", \"/contents/{id}/versions/{version}/reader\", { params: { id: content, version }, body: meta });\n emit({ type: \"reader.changed\", content, version });\n }\n /** Editors: fills a version without media from a sibling, in a durable job. */\n fork(content: string, version: string, body: ForkBody): Promise<Pending> {\n return call(this.http, \"POST\", \"/contents/{id}/versions/{version}/fork\", { params: { id: content, version }, body });\n }\n /**\n * Grants the version's download, what its kind serves (the original, a\n * rendition, its pages as a zip), charged to the viewer's download quota:\n * `url` (absolute) serves it as an attachment until `expires_at`. Pending\n * while it is prepared (ask again).\n */\n async download(content: string, version: string, signal?: AbortSignal): Promise<FileDownload | Pending> {\n const url = routeURL(this.http, \"GET\", \"/contents/{id}/versions/{version}/download\", { params: { id: content, version } });\n const out = await this.http.request<FileDownload | Pending>(url, { signal });\n if (isPending(out)) return out;\n // A marked zip's URL is the archive route's, relative to this one.\n const base = new URL(url, globalThis.location?.href ?? \"http://localhost/\");\n return { ...out, url: new URL(out.url, base).toString() };\n }\n}\n"],"mappings":";;AAKA,IAAa,KAAa,MAA6B,CAAC,CAAC,KAAK,OAAO,KAAM,YAAY,YAAY,KAAK,EAAE,WAAW,MAAM,EAAE,SAAS,IAGzH,IAAb,MAA4B;CACG;CAA7B,YAAY,GAA6B;EAAZ,KAAA,OAAA;CAAa;CAG1C,YAAY,GAAiB,GAAiB,GAA4C;EACxF,OAAO,EAAK,KAAK,MAAM,OAAO,kDAAkD;GAAE,QAAQ;IAAE,IAAI;IAAS;GAAQ;GAAG;EAAO,CAAC;CAC9H;CAEA,kBAAkB,GAAiB,GAAiB,GAA+B;EACjF,OAAO,EAAK,KAAK,MAAM,QAAQ,mEAAmE,EAAE,QAAQ;GAAE,IAAI;GAAS;GAAS;EAAO,EAAE,CAAC;CAChJ;CAEA,MAAM,kBAAkB,GAAiB,GAAiB,GAAsC;EAC9F,IAAM,IAAO,KAAK,KAAK,eAAe,GAChC,IAAoB,MAAM,EAAK,KAAK,MAAM,QAAQ,mEAAmE,EAAE,QAAQ;GAAE,IAAI;GAAS;GAAS;EAAO,EAAE,CAAC;EAGvK,OAFA,EAAK;GAAE,MAAM;GAAmB,IAAI;EAAQ,CAAC,GAC7C,EAAK;GAAE,MAAM;GAAkB;GAAS;EAAQ,CAAC,GAC1C;CACT;CAEA,OAAO,GAAiB,GAAiB,GAAqD;EAC5F,OAAO,EAAK,KAAK,MAAM,OAAO,4CAA4C;GAAE,QAAQ;IAAE,IAAI;IAAS;GAAQ;GAAG;EAAO,CAAC;CACxH;CAEA,MAAM,UAAU,GAAiB,GAAiB,GAAiC;EACjF,IAAM,IAAO,KAAK,KAAK,eAAe;EAEtC,AADA,MAAM,EAAK,KAAK,MAAM,OAAO,4CAA4C;GAAE,QAAQ;IAAE,IAAI;IAAS;GAAQ;GAAG,MAAM;EAAK,CAAC,GACzH,EAAK;GAAE,MAAM;GAAkB;GAAS;EAAQ,CAAC;CACnD;CAEA,KAAK,GAAiB,GAAiB,GAAkC;EACvE,OAAO,EAAK,KAAK,MAAM,QAAQ,0CAA0C;GAAE,QAAQ;IAAE,IAAI;IAAS;GAAQ;GAAG;EAAK,CAAC;CACrH;CAOA,MAAM,SAAS,GAAiB,GAAiB,GAAuD;EACtG,IAAM,IAAM,EAAS,KAAK,MAAM,OAAO,8CAA8C,EAAE,QAAQ;GAAE,IAAI;GAAS;EAAQ,EAAE,CAAC,GACnH,IAAM,MAAM,KAAK,KAAK,QAAgC,GAAK,EAAE,UAAO,CAAC;EAC3E,IAAI,EAAU,CAAG,GAAG,OAAO;EAE3B,IAAM,IAAO,IAAI,IAAI,GAAK,WAAW,UAAU,QAAQ,mBAAmB;EAC1E,OAAO;GAAE,GAAG;GAAK,KAAK,IAAI,IAAI,EAAI,KAAK,CAAI,CAAC,CAAC,SAAS;EAAE;CAC1D;AACF"}
|