@fluid-topics/public-api 1.0.27 → 1.0.29

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/dist/cjs/index.js CHANGED
@@ -54,12 +54,83 @@ function getBody(response) {
54
54
  }
55
55
  class FluidTopicsApi {
56
56
  constructor(tenantBaseUrl, integrationIdentifier, overrideIdentifierIfOnTenant) {
57
- var _a, _b, _c, _d, _e;
58
- this.authorization = {};
57
+ var _a, _b, _c, _d, _e, _f;
58
+ this.endpoints = {
59
+ authentication: {
60
+ login: `api/authentication/login`,
61
+ logout: `api/authentication/logout`,
62
+ currentSession: `api/authentication/current-session`,
63
+ },
64
+ khub: {
65
+ maps: {
66
+ mapId: (mapId) => ({
67
+ info: `api/khub/maps/${mapId}`,
68
+ toc: `api/khub/maps/${mapId}/toc`,
69
+ pages: `api/khub/maps/${mapId}/pages`,
70
+ feedback: `api/khub/maps/${mapId}/feedback`,
71
+ rating: `api/khub/maps/${mapId}/rating`,
72
+ attachments: {
73
+ list: `api/khub/maps/${mapId}/attachments`,
74
+ attachmentId: (attachmentId) => ({
75
+ content: `api/khub/maps/${mapId}/attachments/${attachmentId}/content`,
76
+ })
77
+ },
78
+ resources: {
79
+ list: `api/khub/maps/${mapId}/resources`,
80
+ resourceId: (resourceId) => ({
81
+ content: `api/khub/maps/${mapId}/resources/${resourceId}/content`,
82
+ })
83
+ },
84
+ topics: {
85
+ contentId: (contentId) => ({
86
+ info: `api/khub/maps/${mapId}/topics/${contentId}`,
87
+ content: `api/khub/maps/${mapId}/topics/${contentId}/content`,
88
+ }),
89
+ tocId: (tocId) => ({
90
+ feedback: `api/khub/maps/${mapId}/topics/${tocId}/feedback`,
91
+ rating: `api/khub/maps/${mapId}/topics/${tocId}/rating`,
92
+ })
93
+ },
94
+ })
95
+ },
96
+ documents: {
97
+ documentId: (documentId) => ({
98
+ info: `api/khub/documents/${documentId}`,
99
+ content: `api/khub/documents/${documentId}/content`,
100
+ text: `api/khub/documents/${documentId}/content/text`,
101
+ feedback: `api/khub/documents/${documentId}/feedback`,
102
+ rating: `api/khub/documents/${documentId}/rating`,
103
+ })
104
+ },
105
+ suggest: `api/khub/suggest`,
106
+ clusteredSearch: `api/khub/clustered-search`,
107
+ locales: `api/khub/locales`,
108
+ },
109
+ users: {
110
+ userId: (userId) => ({
111
+ collections: {
112
+ collectionId: (collectionId) => ({
113
+ documents: `api/users/${userId}/collections/${collectionId}/documents`,
114
+ })
115
+ }
116
+ })
117
+ },
118
+ stylesheets: {
119
+ fonts: `api/stylesheets/fonts.css`,
120
+ theme: `api/stylesheets/theme.css`,
121
+ content: {
122
+ title: `api/stylesheets/content/title.css`,
123
+ topic: `api/stylesheets/content/topic.css`,
124
+ },
125
+ },
126
+ configuration: {
127
+ reader: `api/configuration/reader`
128
+ },
129
+ };
59
130
  //@ts-ignore
60
- tenantBaseUrl = (_c = (_a = tenantBaseUrl !== null && tenantBaseUrl !== void 0 ? tenantBaseUrl : wnd.__gwt_ft_moduleBase) !== null && _a !== void 0 ? _a : (_b = wnd.fluidtopicsclient) === null || _b === void 0 ? void 0 : _b.__moduleBase) !== null && _c !== void 0 ? _c : (_e = (_d = wnd.__gwt_activeModules) === null || _d === void 0 ? void 0 : _d.fluidtopicsclient) === null || _e === void 0 ? void 0 : _e.moduleBase;
61
- this.tenantBaseUrl = tenantBaseUrl.trim().replace(/\/$/, "");
62
- if (overrideIdentifierIfOnTenant && typeof wnd.location !== "undefined" && wnd.location.href.startsWith(this.tenantBaseUrl + "/")) {
131
+ tenantBaseUrl = ((_f = (_c = (_a = tenantBaseUrl !== null && tenantBaseUrl !== void 0 ? tenantBaseUrl : wnd.__gwt_ft_moduleBase) !== null && _a !== void 0 ? _a : (_b = wnd.fluidtopicsclient) === null || _b === void 0 ? void 0 : _b.__moduleBase) !== null && _c !== void 0 ? _c : (_e = (_d = wnd.__gwt_activeModules) === null || _d === void 0 ? void 0 : _d.fluidtopicsclient) === null || _e === void 0 ? void 0 : _e.moduleBase) !== null && _f !== void 0 ? _f : "").trim();
132
+ this.tenantBaseUrl = tenantBaseUrl.endsWith("/") ? tenantBaseUrl : tenantBaseUrl + "/";
133
+ if (overrideIdentifierIfOnTenant && typeof wnd.location !== "undefined" && wnd.location.href.startsWith(this.tenantBaseUrl)) {
63
134
  this.ftCallingApp = integrationIdentifier;
64
135
  }
65
136
  else {
@@ -90,99 +161,104 @@ class FluidTopicsApi {
90
161
  password: password,
91
162
  rememberMe: true
92
163
  };
93
- return this.post(`/api/authentication/login`, credentials)
164
+ return this.post(this.endpoints.authentication.login, credentials)
94
165
  .then(result => {
95
166
  this.setCredentials(login, password);
96
167
  return result;
97
168
  });
98
169
  }
99
170
  logout() {
100
- return this.post(`/api/authentication/logout`)
171
+ return this.post(this.endpoints.authentication.logout)
101
172
  .then(() => this.clearAuthentication());
102
173
  }
103
174
  getCurrentSession() {
104
- return this.get(`/api/authentication/current-session`);
175
+ return this.get(this.endpoints.authentication.currentSession);
176
+ }
177
+ getReaderConfiguration() {
178
+ return this.get(this.endpoints.configuration.reader);
105
179
  }
106
180
  getMap(mapId) {
107
- return this.get(`/api/khub/maps/${mapId}`);
181
+ return this.get(this.endpoints.khub.maps.mapId(mapId).info);
108
182
  }
109
183
  getTableOfContent(mapId) {
110
- return this.get(`/api/khub/maps/${mapId}/toc`);
184
+ return this.get(this.endpoints.khub.maps.mapId(mapId).toc);
111
185
  }
112
186
  getPages(mapId) {
113
- return this.get(`/api/khub/maps/${mapId}/pages`);
187
+ return this.get(this.endpoints.khub.maps.mapId(mapId).pages);
114
188
  }
115
189
  getTopic(mapId, topicContentId) {
116
- return this.get(`/api/khub/maps/${mapId}/topics/${topicContentId}`);
190
+ return this.get(this.endpoints.khub.maps.mapId(mapId).topics.contentId(topicContentId).info);
117
191
  }
118
192
  getTopicHTMLContent(mapId, topicContentId, target) {
119
- return this.get(`/api/khub/maps/${mapId}/topics/${topicContentId}/content${target ? "?target=" + target : ""}`);
193
+ return this.get(this.endpoints.khub.maps.mapId(mapId).topics.contentId(topicContentId).content + (target ? "?target=" + target : ""));
120
194
  }
121
195
  getMapAttachments(mapId) {
122
- return this.get(`/api/khub/maps/${mapId}/attachments`);
196
+ return this.get(this.endpoints.khub.maps.mapId(mapId).attachments.list);
123
197
  }
124
198
  getMapAttachmentContent(mapId, attachmentId) {
125
- return this.fetchRawData(`/api/khub/maps/${mapId}/attachments/${attachmentId}/content`);
199
+ return this.fetchRawData(this.endpoints.khub.maps.mapId(mapId).attachments.attachmentId(attachmentId).content);
126
200
  }
127
201
  getMapResources(mapId) {
128
- return this.get(`/api/khub/maps/${mapId}/resources`);
202
+ return this.get(this.endpoints.khub.maps.mapId(mapId).resources.list);
129
203
  }
130
204
  getMapResourceContent(mapId, resourceId) {
131
- return this.fetchRawData(`/api/khub/maps/${mapId}/resources/${resourceId}/content`);
205
+ return this.fetchRawData(this.endpoints.khub.maps.mapId(mapId).resources.resourceId(resourceId).content);
132
206
  }
133
207
  getUnstructuredDocument(documentId) {
134
- return this.get(`/api/khub/documents/${documentId}`);
208
+ return this.get(this.endpoints.khub.documents.documentId(documentId).info);
135
209
  }
136
210
  getUnstructuredDocumentContent(documentId) {
137
- return this.fetchRawData(`/api/khub/documents/${documentId}/content`);
211
+ return this.fetchRawData(this.endpoints.khub.documents.documentId(documentId).content);
138
212
  }
139
213
  getUnstructuredDocumentTextContent(documentId) {
140
- return this.get(`/api/khub/documents/${documentId}/content/text`);
214
+ return this.get(this.endpoints.khub.documents.documentId(documentId).text);
141
215
  }
142
216
  getCollectionDocuments(userId, collectionId) {
143
- return this.get(`/api/users/${userId}/collections/${collectionId}/documents`);
217
+ return this.get(this.endpoints.users.userId(userId).collections.collectionId(collectionId).documents);
144
218
  }
145
219
  getSuggestions(request) {
146
- return this.post("/api/khub/suggest", request);
220
+ return this.post(this.endpoints.khub.suggest, request);
147
221
  }
148
222
  search(request) {
149
- return this.post("/api/khub/clustered-search", request);
223
+ return this.post(this.endpoints.khub.clusteredSearch, request);
150
224
  }
151
225
  getAvailableSearchLocales() {
152
- return this.get("/api/khub/locales");
226
+ return this.get(this.endpoints.khub.locales);
153
227
  }
154
228
  getMapRating(mapId) {
155
- return this.get(`/api/khub/maps/${mapId}/rating`);
156
- }
157
- getDocumentRating(docId) {
158
- return this.get(`/api/khub/documents/${docId}/rating`);
229
+ return this.get(this.endpoints.khub.maps.mapId(mapId).rating);
159
230
  }
160
231
  rateMap(mapId, type, value) {
161
- return this.post(`/api/khub/maps/${mapId}/rating`, { type, value });
232
+ return this.post(this.endpoints.khub.maps.mapId(mapId).rating, { type, value });
162
233
  }
163
234
  unrateMap(mapId) {
164
- return this.delete(`/api/khub/maps/${mapId}/rating`);
235
+ return this.delete(this.endpoints.khub.maps.mapId(mapId).rating);
165
236
  }
166
237
  sendMapFeedback(mapId, message) {
167
- return this.post(`/api/khub/maps/${mapId}/feedback`, { message });
238
+ return this.post(this.endpoints.khub.maps.mapId(mapId).feedback, { message });
168
239
  }
169
240
  rateTopic(mapId, tocId, type, value) {
170
- return this.post(`/api/khub/maps/${mapId}/topics/${tocId}/rating`, { type, value });
241
+ return this.post(this.endpoints.khub.maps.mapId(mapId).topics.tocId(tocId).rating, {
242
+ type, value
243
+ });
171
244
  }
172
245
  unrateTopic(mapId, tocId) {
173
- return this.delete(`/api/khub/maps/${mapId}/topics/${tocId}/rating`);
246
+ return this.delete(this.endpoints.khub.maps.mapId(mapId).topics.tocId(tocId).rating);
174
247
  }
175
248
  sendTopicFeedback(mapId, tocId, message) {
176
- return this.post(`/api/khub/maps/${mapId}/topics/${tocId}/feedback`, { message });
249
+ return this.post(this.endpoints.khub.maps.mapId(mapId).topics.tocId(tocId).feedback, { message });
250
+ }
251
+ getDocumentRating(docId) {
252
+ return this.get(this.endpoints.khub.documents.documentId(docId).rating);
177
253
  }
178
254
  rateDocument(docId, type, value) {
179
- return this.post(`/api/khub/documents/${docId}/rating`, { type, value });
255
+ return this.post(this.endpoints.khub.documents.documentId(docId).rating, { type, value });
180
256
  }
181
257
  unrateDocument(docId) {
182
- return this.delete(`/api/khub/documents/${docId}/rating`);
258
+ return this.delete(this.endpoints.khub.documents.documentId(docId).rating);
183
259
  }
184
260
  sendDocumentFeedback(docId, message) {
185
- return this.post(`/api/khub/documents/${docId}/feedback`, { message });
261
+ return this.post(this.endpoints.khub.documents.documentId(docId).feedback, { message });
186
262
  }
187
263
  get(endpoint) {
188
264
  return this.makeRequest("GET", endpoint);
@@ -196,18 +272,18 @@ class FluidTopicsApi {
196
272
  delete(endpoint) {
197
273
  return this.makeRequest("DELETE", endpoint);
198
274
  }
275
+ makeAbsolute(endpoint) {
276
+ return this.tenantBaseUrl + endpoint.replace(/^\//, "");
277
+ }
199
278
  fetch(endpoint, init) {
200
279
  var _a;
201
280
  return __awaiter(this, void 0, void 0, function* () {
202
281
  const requestInit = init;
203
- if (!endpoint.startsWith("/")) {
204
- endpoint = "/" + endpoint;
205
- }
206
- return yield fetch(this.tenantBaseUrl + endpoint, Object.assign(Object.assign({}, (requestInit !== null && requestInit !== void 0 ? requestInit : {})), { headers: Object.assign(Object.assign({}, this.defaultHeaders), ((_a = requestInit === null || requestInit === void 0 ? void 0 : requestInit.headers) !== null && _a !== void 0 ? _a : {})) }));
282
+ return yield fetch(this.makeAbsolute(endpoint), Object.assign(Object.assign({}, (requestInit !== null && requestInit !== void 0 ? requestInit : {})), { headers: Object.assign(Object.assign({}, this.defaultHeaders), ((_a = requestInit === null || requestInit === void 0 ? void 0 : requestInit.headers) !== null && _a !== void 0 ? _a : {})) }));
207
283
  });
208
284
  }
209
285
  upload(method, endpoint, body, onProgress = () => undefined) {
210
- return __awaiter(this, void 0, void 0, function* () {
286
+ if (typeof XMLHttpRequest !== "undefined") {
211
287
  return new Promise((resolve, reject) => {
212
288
  let xhr = new XMLHttpRequest();
213
289
  xhr.onload = () => {
@@ -220,22 +296,29 @@ class FluidTopicsApi {
220
296
  }
221
297
  };
222
298
  xhr.upload.onprogress = (e) => onProgress(e);
223
- xhr.open(method, this.tenantBaseUrl + endpoint, true);
299
+ xhr.open(method, this.makeAbsolute(endpoint), true);
224
300
  xhr.send(body);
225
301
  });
226
- });
302
+ }
303
+ else {
304
+ return this.fetch(endpoint, { method, body }).then(handleError).then(getBody);
305
+ }
227
306
  }
228
307
  makeRequest(method, endpoint, data) {
229
308
  return this.fetch(endpoint, {
230
309
  method: method,
231
310
  headers: Object.assign({}, (data != null ? { "Content-Type": "application/json" } : {})),
232
- body: data != null ? JSON.stringify(data) : undefined
311
+ body: data != null ? JSON.stringify(data) : undefined,
312
+ credentials: this.authorization == null ? "include" : undefined
233
313
  })
234
314
  .then(handleError)
235
315
  .then(getBody);
236
316
  }
237
317
  fetchRawData(endpoint) {
238
- return fetch(this.tenantBaseUrl + endpoint, { headers: this.defaultHeaders })
318
+ return fetch(this.makeAbsolute(endpoint), {
319
+ headers: this.defaultHeaders,
320
+ credentials: this.authorization == null ? "include" : undefined
321
+ })
239
322
  .then(handleError)
240
323
  .then(response => response.arrayBuffer());
241
324
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isFtTopicResource = exports.isFtSpellcheck = exports.isFtSearchSortCriterion = exports.isFtSearchFacetEntry = exports.isFtSearchFacetConf = exports.isFtSearchFacet = exports.isFtSearchResultType = exports.FtSearchResultType = exports.isFtSearchResultTopic = exports.isFtSearchResultMap = exports.isFtSearchResultUnstructuredDocument = exports.isFtSearchResultClusterEntry = exports.isFtSearchResultCluster = exports.isFtSearchRequest = exports.isFtSearchPrior = exports.isFtSearchResults = exports.isFtCollectionDocumentType = exports.FtCollectionDocumentType = exports.isFtPageRequest = exports.isFtOpenMode = exports.FtOpenMode = exports.isFtEditorialType = exports.FtEditorialType = exports.isFtSearchResultsPageInfo = exports.isFtSearchPreset = exports.isFtSearchFilter = exports.isFtSearchPreferencesConfiguration = exports.isFtMetadataPreferenceConfiguration = exports.isFtMapResource = exports.isFtTopicsRatingSummary = exports.isFtTopicRating = exports.isFtRatingSummary = exports.isFtRatingCreation = exports.isFtPublicationRatingSummary = exports.isFtPublicationRating = exports.isFtRatingType = exports.FtRatingType = exports.isFtMetadata = exports.isFtSearchLocales = exports.isFtSearchLocale = exports.isFtFeedbackCreation = exports.isFtTopicContentTarget = exports.FtTopicContentTarget = exports.isFtUnstructuredDocument = exports.isFtTopic = exports.isFtTocNode = exports.isFtMapStyles = exports.isFtMap = exports.isFtCollectionDocument = exports.isFtCredentials = void 0;
4
- exports.isFtAuthenticationIdentifier = exports.isFtSuggestResults = exports.isFtSuggestResult = exports.isFtSuggestRequest = void 0;
4
+ exports.isFtAuthenticationIdentifier = exports.isFtUserRole = exports.FtUserRole = exports.isFtSuggestResults = exports.isFtSuggestResult = exports.isFtSuggestRequest = void 0;
5
5
  const isObject = (o) => typeof o === "object" && o != null;
6
6
  const isBoolean = (o) => typeof o === "boolean";
7
7
  const isNumber = (o) => typeof o === "number";
@@ -36,7 +36,6 @@ const isFtMap = (o) => {
36
36
  && ((0, exports.isFtEditorialType)(o.editorialType))
37
37
  && (isString(o.baseId))
38
38
  && (isString(o.clusterId))
39
- && (o.shouldSplitCurrentPageToc == null || isBoolean(o.shouldSplitCurrentPageToc))
40
39
  && (isString(o.title))
41
40
  && (isString(o.lastPublication))
42
41
  && (isString(o.lastEdition))
@@ -61,6 +60,7 @@ exports.isFtMapStyles = isFtMapStyles;
61
60
  const isFtTocNode = (o) => {
62
61
  return isObject(o)
63
62
  && (o.prettyUrl == null || isString(o.prettyUrl))
63
+ && (o.hasRating == null || isBoolean(o.hasRating))
64
64
  && (isString(o.tocId))
65
65
  && ((Array.isArray(o.children)
66
66
  && o.children.every((v) => (0, exports.isFtTocNode)(v))))
@@ -474,6 +474,33 @@ const isFtSuggestResults = (o) => {
474
474
  && o.suggestions.every((v) => (0, exports.isFtSuggestResult)(v))));
475
475
  };
476
476
  exports.isFtSuggestResults = isFtSuggestResults;
477
+ // From: Role
478
+ var FtUserRole;
479
+ (function (FtUserRole) {
480
+ FtUserRole["PERSONAL_BOOK_USER"] = "PERSONAL_BOOK_USER";
481
+ FtUserRole["PERSONAL_BOOK_SHARE_USER"] = "PERSONAL_BOOK_SHARE_USER";
482
+ FtUserRole["HTML_EXPORT_USER"] = "HTML_EXPORT_USER";
483
+ FtUserRole["PDF_EXPORT_USER"] = "PDF_EXPORT_USER";
484
+ FtUserRole["SAVED_SEARCH_USER"] = "SAVED_SEARCH_USER";
485
+ FtUserRole["COLLECTION_USER"] = "COLLECTION_USER";
486
+ FtUserRole["OFFLINE_USER"] = "OFFLINE_USER";
487
+ FtUserRole["ANALYTICS_USER"] = "ANALYTICS_USER";
488
+ FtUserRole["BETA_USER"] = "BETA_USER";
489
+ FtUserRole["DEBUG_USER"] = "DEBUG_USER";
490
+ FtUserRole["PRINT_USER"] = "PRINT_USER";
491
+ FtUserRole["RATING_USER"] = "RATING_USER";
492
+ FtUserRole["FEEDBACK_USER"] = "FEEDBACK_USER";
493
+ FtUserRole["CONTENT_PUBLISHER"] = "CONTENT_PUBLISHER";
494
+ FtUserRole["KHUB_ADMIN"] = "KHUB_ADMIN";
495
+ FtUserRole["USERS_ADMIN"] = "USERS_ADMIN";
496
+ FtUserRole["PORTAL_ADMIN"] = "PORTAL_ADMIN";
497
+ FtUserRole["ADMIN"] = "ADMIN";
498
+ FtUserRole["DEVELOPER"] = "DEVELOPER";
499
+ })(FtUserRole = exports.FtUserRole || (exports.FtUserRole = {}));
500
+ const isFtUserRole = (o) => {
501
+ return ["PERSONAL_BOOK_USER", "PERSONAL_BOOK_SHARE_USER", "HTML_EXPORT_USER", "PDF_EXPORT_USER", "SAVED_SEARCH_USER", "COLLECTION_USER", "OFFLINE_USER", "ANALYTICS_USER", "BETA_USER", "DEBUG_USER", "PRINT_USER", "RATING_USER", "FEEDBACK_USER", "CONTENT_PUBLISHER", "KHUB_ADMIN", "USERS_ADMIN", "PORTAL_ADMIN", "ADMIN", "DEVELOPER"].includes(o);
502
+ };
503
+ exports.isFtUserRole = isFtUserRole;
477
504
  const isFtAuthenticationIdentifier = (o) => {
478
505
  return isObject(o)
479
506
  && (isString(o.identifier))
@@ -1,10 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFtPaginationConfiguration = exports.isFtPaginatedTocNode = exports.isFtPaginatedToc = exports.isFtPageConfiguration = exports.isFtMapAttachment = exports.isFtUserProfile = exports.isFtSession = exports.isFtAuthenticatedSession = void 0;
3
+ exports.isFtPaginationConfiguration = exports.isFtPaginatedTocNode = exports.isFtPaginatedToc = exports.isFtPageConfiguration = exports.isFtMapAttachment = exports.isFtUserProfile = exports.isFtSession = exports.isFtAuthenticatedSession = exports.isFtReaderConfiguration = void 0;
4
4
  const isObject = (o) => typeof o === "object" && o != null;
5
5
  const isBoolean = (o) => typeof o === "boolean";
6
6
  const isNumber = (o) => typeof o === "number";
7
7
  const isString = (o) => typeof o === "string";
8
+ const isFtReaderConfiguration = (o) => {
9
+ return isObject(o)
10
+ && (isNumber(o.loadAfterLastVisibleTopic))
11
+ && (isBoolean(o.feedbackMailsSentByFluidTopics))
12
+ && (isNumber(o.loadBeforeFirstVisibleTopic));
13
+ };
14
+ exports.isFtReaderConfiguration = isFtReaderConfiguration;
8
15
  const isFtAuthenticatedSession = (o) => {
9
16
  return isObject(o)
10
17
  && ((0, exports.isFtUserProfile)(o.profile));
@@ -13,7 +20,7 @@ exports.isFtAuthenticatedSession = isFtAuthenticatedSession;
13
20
  const isFtSession = (o) => {
14
21
  return isObject(o)
15
22
  && (isNumber(o.idleTimeoutInMillis))
16
- && (o.profile == null || (0, exports.isFtUserProfile)(o.profile))
23
+ && ((0, exports.isFtUserProfile)(o.profile))
17
24
  && (isBoolean(o.sessionAuthenticated));
18
25
  };
19
26
  exports.isFtSession = isFtSession;
@@ -22,7 +29,7 @@ const isFtUserProfile = (o) => {
22
29
  && (o.emailAddress == null || isString(o.emailAddress))
23
30
  && (o.displayName == null || isString(o.displayName))
24
31
  && ((Array.isArray(o.roles)))
25
- && (isString(o.userId));
32
+ && (o.userId == null || isString(o.userId));
26
33
  };
27
34
  exports.isFtUserProfile = isFtUserProfile;
28
35
  const isFtMapAttachment = (o) => {
@@ -53,6 +60,7 @@ exports.isFtPaginatedToc = isFtPaginatedToc;
53
60
  const isFtPaginatedTocNode = (o) => {
54
61
  return isObject(o)
55
62
  && (o.prettyUrl == null || isString(o.prettyUrl))
63
+ && (o.hasRating == null || isBoolean(o.hasRating))
56
64
  && (o.pageToc == null || (Array.isArray(o.pageToc)))
57
65
  && (o.tocId == null || isString(o.tocId))
58
66
  && ((Array.isArray(o.children)
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).fluidtopics={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r={exports:{}},a={exports:{}};!function(e,t){var r=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r)return r;throw new Error("unable to locate global object")}();e.exports=t=r.fetch,r.fetch&&(t.default=r.fetch.bind(r)),t.Headers=r.Headers,t.Request=r.Request,t.Response=r.Response}(a,a.exports),function(e,t){const r=a.exports,i=r.default||r,n=function(e,t){return/^\/\//.test(e)&&(e="https:"+e),i.call(this,e,t)};n.ponyfill=!0,e.exports=t=n,t.fetch=n,t.Headers=r.Headers,t.Request=r.Request,t.Response=r.Response,t.default=n}(r,r.exports);const i=r.exports,n=i.fetch.bind({});n.polyfill=!0,t.fetch||(t.fetch=n,t.Response=i.Response,t.Headers=i.Headers,t.Request=i.Request);const s=e=>"object"==typeof e&&null!=e,l=e=>"boolean"==typeof e,o=e=>"number"==typeof e,u=e=>"string"==typeof e,c=e=>s(e)&&u(e.topicStylesheetUrl)&&u(e.titleStylesheetUrl)&&Array.isArray(e.customCssClasses)&&e.customCssClasses.every((e=>u(e))),p=e=>s(e)&&(null==e.prettyUrl||u(e.prettyUrl))&&u(e.tocId)&&Array.isArray(e.children)&&e.children.every((e=>p(e)))&&u(e.contentId)&&u(e.title);var d;e.FtTopicContentTarget=void 0,(d=e.FtTopicContentTarget||(e.FtTopicContentTarget={})).THIRD_PARTY="THIRD_PARTY",d.OFF_THE_GRID="OFF_THE_GRID",d.CONTENT_PACKAGER="CONTENT_PACKAGER",d.PAGES="PAGES",d.DESIGNED_READER="DESIGNED_READER";const h=e=>s(e)&&o(e.count)&&u(e.label)&&(null==e.lang||u(e.lang)),y=e=>s(e)&&Array.isArray(e.values)&&e.values.every((e=>u(e)))&&(null==e.hierarchicalValues||Array.isArray(e.hierarchicalValues)&&e.hierarchicalValues.every((e=>Array.isArray(e)&&e.every((e=>u(e))))))&&u(e.label)&&u(e.key);var g;e.FtRatingType=void 0,(g=e.FtRatingType||(e.FtRatingType={})).STARS="STARS",g.LIKE="LIKE",g.DICHOTOMOUS="DICHOTOMOUS",g.NO_RATING="NO_RATING";const f=e=>["STARS","LIKE","DICHOTOMOUS","NO_RATING"].includes(e),m=e=>s(e)&&u(e.date)&&f(e.type)&&o(e.value),A=e=>s(e)&&(null==e.rating||m(e.rating))&&f(e.type),T=e=>s(e)&&u(e.date)&&u(e.tocId)&&f(e.type)&&o(e.value),b=e=>s(e)&&Array.isArray(e.ratings)&&e.ratings.every((e=>T(e)))&&f(e.type),F=e=>s(e)&&Array.isArray(e.filter)&&e.filter.every((e=>u(e)))&&Array.isArray(e.prior)&&e.prior.every((e=>u(e))),R=e=>s(e)&&l(e.negative)&&Array.isArray(e.values)&&e.values.every((e=>u(e)))&&u(e.key),S=e=>s(e)&&o(e.totalResultsCount)&&l(e.lastPage)&&o(e.currentPage)&&o(e.totalClustersCount);var v;e.FtEditorialType=void 0,(v=e.FtEditorialType||(e.FtEditorialType={})).ARTICLE="ARTICLE",v.BOOK="BOOK";const C=e=>["ARTICLE","BOOK"].includes(e);var E;e.FtOpenMode=void 0,(E=e.FtOpenMode||(e.FtOpenMode={})).FLUIDTOPICS="FLUIDTOPICS",E.EXTERNAL="EXTERNAL";const U=e=>["FLUIDTOPICS","EXTERNAL"].includes(e),O=e=>s(e)&&(null==e.perPage||o(e.perPage))&&o(e.page);var P;e.FtCollectionDocumentType=void 0,(P=e.FtCollectionDocumentType||(e.FtCollectionDocumentType={})).MAP="MAP",P.DOCUMENT="DOCUMENT",P.TOPIC="TOPIC",P.PERSONAL_BOOK="PERSONAL_BOOK",P.SHARED_BOOK="SHARED_BOOK";const D=e=>["MAP","DOCUMENT","TOPIC","PERSONAL_BOOK","SHARED_BOOK"].includes(e),I=e=>s(e)&&o(e.weight)&&u(e.value)&&u(e.key),k=e=>s(e)&&Array.isArray(e.entries)&&e.entries.every((e=>M(e)))&&(null==e.metadataVariableAxis||u(e.metadataVariableAxis)),M=e=>s(e)&&(null==e.document||w(e.document))&&(null==e.topic||L(e.topic))&&x(e.type)&&(null==e.map||$(e.map)),w=e=>s(e)&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&U(e.openMode)&&u(e.documentUrl)&&u(e.mimeType)&&u(e.title)&&(null==e.lastPublicationDate||u(e.lastPublicationDate))&&u(e.viewerUrl)&&u(e.contentUrl)&&u(e.filename)&&u(e.htmlTitle)&&(null==e.originUrl||u(e.originUrl))&&u(e.documentId)&&u(e.lastEditionDate)&&u(e.htmlExcerpt),$=e=>s(e)&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&(null==e.openMode||U(e.openMode))&&C(e.editorialType)&&u(e.title)&&(null==e.lastPublicationDate||u(e.lastPublicationDate))&&u(e.htmlTitle)&&(null==e.originUrl||u(e.originUrl))&&u(e.mapUrl)&&u(e.readerUrl)&&u(e.mapId)&&(null==e.lastEditionDate||u(e.lastEditionDate))&&u(e.htmlExcerpt),L=e=>s(e)&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&U(e.openMode)&&u(e.contentId)&&Array.isArray(e.resources)&&e.resources.every((e=>K(e)))&&u(e.title)&&u(e.mapTitle)&&u(e.topicUrl)&&u(e.contentUrl)&&u(e.htmlTitle)&&Array.isArray(e.breadcrumb)&&e.breadcrumb.every((e=>u(e)))&&u(e.tocId)&&(null==e.originUrl||u(e.originUrl))&&u(e.readerUrl)&&u(e.mapId)&&(null==e.lastEditionDate||u(e.lastEditionDate))&&u(e.htmlExcerpt);var N;e.FtSearchResultType=void 0,(N=e.FtSearchResultType||(e.FtSearchResultType={})).MAP="MAP",N.DOCUMENT="DOCUMENT",N.TOPIC="TOPIC";const x=e=>["MAP","DOCUMENT","TOPIC"].includes(e),_=e=>s(e)&&l(e.hierarchical)&&u(e.label)&&l(e.multiSelectionable)&&u(e.key)&&Array.isArray(e.rootNodes)&&e.rootNodes.every((e=>B(e))),H=e=>s(e)&&(null==e.maxDepth||o(e.maxDepth))&&u(e.id),B=e=>s(e)&&o(e.totalResultsCount)&&l(e.descendantSelected)&&Array.isArray(e.childNodes)&&e.childNodes.every((e=>B(e)))&&u(e.label)&&u(e.value)&&l(e.selected),q=e=>s(e)&&u(e.key),G=e=>s(e)&&u(e.suggestedQuery)&&u(e.htmlSuggestedQuery),K=e=>s(e)&&u(e.filename)&&u(e.resourceUrl)&&u(e.id)&&u(e.mimeType)&&u(e.resourceContentUrl)&&u(e.viewerUrl),V=e=>s(e)&&(null==e.filenameExtension||u(e.filenameExtension))&&(null==e.editorialType||C(e.editorialType))&&(null==e.mimeType||u(e.mimeType))&&x(e.type)&&u(e.value),j=e=>"object"==typeof e&&null!=e,z=e=>"boolean"==typeof e,J=e=>"number"==typeof e,X=e=>"string"==typeof e,Y=e=>j(e)&&(null==e.emailAddress||X(e.emailAddress))&&(null==e.displayName||X(e.displayName))&&Array.isArray(e.roles)&&X(e.userId),Q=e=>j(e)&&(null==e.parentsVisibility||Array.isArray(e.parentsVisibility)&&e.parentsVisibility.every((e=>z(e))))&&z(e.isVisible),W=e=>j(e)&&(null==e.prettyUrl||X(e.prettyUrl))&&(null==e.pageToc||Array.isArray(e.pageToc))&&(null==e.tocId||X(e.tocId))&&Array.isArray(e.children)&&e.children.every((e=>W(e)))&&(null==e.pageConfiguration||Q(e.pageConfiguration))&&(null==e.contentId||X(e.contentId))&&(null==e.title||X(e.title)),Z=e=>j(e)&&z(e.splitCurrentPageToc),ee="undefined"==typeof window?globalThis:window;function te(e){let t={};for(let r in e){let a=e[r];("object"!=typeof a||Array.isArray(a))&&(a={prior:a});for(let e of["prior","filter"])a[e]=Array.isArray(a[e])?a[e]:[a[e]],a[e]=a[e].map((e=>null!=e?""+e:"")).filter((e=>""!==e));t[r]=a}return t}function re(e){return`${e}-FluidTopicsUnauthenticatedUserSearchPreferences`}const ae="undefined"==typeof window?globalThis:window;class ie extends Error{status;statusText;body;constructor(e,t,r){super(`${e} - ${t}: ${r}`),this.status=e,this.statusText=t,this.body=r}}async function ne(e){if(!e.ok)throw new ie(e.status,e.statusText,await e.text());return e}function se(e){return"application/json"===e.headers.get("Content-Type")?e.json():e.text()}class le{tenantBaseUrl;ftCallingApp;authorization={};searchLabel;get defaultHeaders(){return{...this.authorization,...this.searchLabel,"Ft-Calling-App":this.ftCallingApp}}constructor(e,t,r){e=e??ae.__gwt_ft_moduleBase??ae.fluidtopicsclient?.__moduleBase??ae.__gwt_activeModules?.fluidtopicsclient?.moduleBase,this.tenantBaseUrl=e.trim().replace(/\/$/,""),r&&void 0!==ae.location&&ae.location.href.startsWith(this.tenantBaseUrl+"/")?this.ftCallingApp=t:this.ftCallingApp=`ft-public-api/${t}`}setApiKey(e){this.authorization={Authorization:"Bearer "+e}}setCredentials(e,t){var r;this.authorization={Authorization:"Basic "+(r=`${e}:${t}`,"undefined"!=typeof Buffer?Buffer.from(r).toString("base64"):btoa(r))}}clearAuthentication(){this.authorization=void 0}setSearchLabel(e){this.searchLabel={"FT-search-label":e}}clearSearchLabel(){this.searchLabel=void 0}login(e,t){let r={login:e,password:t,rememberMe:!0};return this.post("/api/authentication/login",r).then((r=>(this.setCredentials(e,t),r)))}logout(){return this.post("/api/authentication/logout").then((()=>this.clearAuthentication()))}getCurrentSession(){return this.get("/api/authentication/current-session")}getMap(e){return this.get(`/api/khub/maps/${e}`)}getTableOfContent(e){return this.get(`/api/khub/maps/${e}/toc`)}getPages(e){return this.get(`/api/khub/maps/${e}/pages`)}getTopic(e,t){return this.get(`/api/khub/maps/${e}/topics/${t}`)}getTopicHTMLContent(e,t,r){return this.get(`/api/khub/maps/${e}/topics/${t}/content${r?"?target="+r:""}`)}getMapAttachments(e){return this.get(`/api/khub/maps/${e}/attachments`)}getMapAttachmentContent(e,t){return this.fetchRawData(`/api/khub/maps/${e}/attachments/${t}/content`)}getMapResources(e){return this.get(`/api/khub/maps/${e}/resources`)}getMapResourceContent(e,t){return this.fetchRawData(`/api/khub/maps/${e}/resources/${t}/content`)}getUnstructuredDocument(e){return this.get(`/api/khub/documents/${e}`)}getUnstructuredDocumentContent(e){return this.fetchRawData(`/api/khub/documents/${e}/content`)}getUnstructuredDocumentTextContent(e){return this.get(`/api/khub/documents/${e}/content/text`)}getCollectionDocuments(e,t){return this.get(`/api/users/${e}/collections/${t}/documents`)}getSuggestions(e){return this.post("/api/khub/suggest",e)}search(e){return this.post("/api/khub/clustered-search",e)}getAvailableSearchLocales(){return this.get("/api/khub/locales")}getMapRating(e){return this.get(`/api/khub/maps/${e}/rating`)}getDocumentRating(e){return this.get(`/api/khub/documents/${e}/rating`)}rateMap(e,t,r){return this.post(`/api/khub/maps/${e}/rating`,{type:t,value:r})}unrateMap(e){return this.delete(`/api/khub/maps/${e}/rating`)}sendMapFeedback(e,t){return this.post(`/api/khub/maps/${e}/feedback`,{message:t})}rateTopic(e,t,r,a){return this.post(`/api/khub/maps/${e}/topics/${t}/rating`,{type:r,value:a})}unrateTopic(e,t){return this.delete(`/api/khub/maps/${e}/topics/${t}/rating`)}sendTopicFeedback(e,t,r){return this.post(`/api/khub/maps/${e}/topics/${t}/feedback`,{message:r})}rateDocument(e,t,r){return this.post(`/api/khub/documents/${e}/rating`,{type:t,value:r})}unrateDocument(e){return this.delete(`/api/khub/documents/${e}/rating`)}sendDocumentFeedback(e,t){return this.post(`/api/khub/documents/${e}/feedback`,{message:t})}get(e){return this.makeRequest("GET",e)}post(e,t){return this.makeRequest("POST",e,t)}put(e,t){return this.makeRequest("PUT",e,t)}delete(e){return this.makeRequest("DELETE",e)}async fetch(e,t){const r=t;return e.startsWith("/")||(e="/"+e),await fetch(this.tenantBaseUrl+e,{...r??{},headers:{...this.defaultHeaders,...r?.headers??{}}})}async upload(e,t,r,a=(()=>{})){return new Promise(((i,n)=>{let s=new XMLHttpRequest;s.onload=()=>{if(s.status>=200&&s.status<300){let e="application/json"===s.getResponseHeader("Content-Type")?JSON.parse(s.responseText):s.responseText;i(e)}else n(new ie(s.status,s.statusText,s.responseText))},s.upload.onprogress=e=>a(e),s.open(e,this.tenantBaseUrl+t,!0),s.send(r)}))}makeRequest(e,t,r){return this.fetch(t,{method:e,headers:{...null!=r?{"Content-Type":"application/json"}:{}},body:null!=r?JSON.stringify(r):void 0}).then(ne).then(se)}fetchRawData(e){return fetch(this.tenantBaseUrl+e,{headers:this.defaultHeaders}).then(ne).then((e=>e.arrayBuffer()))}}e.FluidTopicsApi=le,e.HttpError=ie,e.addUnauthenticatedUserSearchPreferencesChangeHandler=function(e,t){if(ee.localStorage){const r=re(e),a=e=>{e.storageArea===ee.localStorage&&e.key===r&&t(JSON.parse(e.newValue??"{}"))};return ee.addEventListener("storage",a),{removeHandler:()=>ee.removeEventListener("storage",a)}}console.error("Cannot handle unauthenticated preferences: local storage is unavailable.")},e.default=le,e.getUnauthenticatedUserSearchPreferences=function(e){if(ee.localStorage)return JSON.parse(ee.localStorage.getItem(re(e))??"{}");console.error("Cannot get unauthenticated preferences: local storage is unavailable.")},e.isFtAuthenticatedSession=e=>j(e)&&Y(e.profile),e.isFtAuthenticationIdentifier=e=>s(e)&&u(e.identifier)&&u(e.realm),e.isFtCollectionDocument=e=>s(e)&&l(e.deleted)&&(null==e.apiUrl||u(e.apiUrl))&&(null==e.portalUrl||u(e.portalUrl))&&u(e.id)&&u(e.title)&&D(e.type),e.isFtCollectionDocumentType=D,e.isFtCredentials=e=>s(e)&&u(e.password)&&(null==e.newPassword||u(e.newPassword))&&l(e.rememberMe)&&u(e.login),e.isFtEditorialType=C,e.isFtFeedbackCreation=e=>s(e)&&u(e.message),e.isFtMap=e=>s(e)&&(null==e.prettyUrl||u(e.prettyUrl))&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&U(e.openMode)&&u(e.topicsApiEndpoint)&&(null==e.description||u(e.description))&&u(e.attachmentsApiEndpoint)&&C(e.editorialType)&&u(e.baseId)&&u(e.clusterId)&&(null==e.shouldSplitCurrentPageToc||l(e.shouldSplitCurrentPageToc))&&u(e.title)&&u(e.lastPublication)&&u(e.lastEdition)&&u(e.originId)&&u(e.rightsApiEndpoint)&&c(e.contentStyles)&&(null==e.originUrl||u(e.originUrl))&&u(e.readerUrl)&&(null==e.khubVersion||u(e.khubVersion))&&u(e.id)&&(null==e.lang||u(e.lang)),e.isFtMapAttachment=e=>j(e)&&X(e.file)&&(null==e.size||J(e.size))&&z(e.externalLink)&&X(e.name)&&X(e.id)&&(null==e.mimeType||X(e.mimeType))&&(null==e.viewerUrl||X(e.viewerUrl)),e.isFtMapResource=e=>s(e)&&u(e.contentUrl)&&u(e.filename)&&u(e.id)&&u(e.mimeType),e.isFtMapStyles=c,e.isFtMetadata=y,e.isFtMetadataPreferenceConfiguration=F,e.isFtOpenMode=U,e.isFtPageConfiguration=Q,e.isFtPageRequest=O,e.isFtPaginatedToc=e=>j(e)&&Z(e.configuration)&&Array.isArray(e.paginatedToc)&&e.paginatedToc.every((e=>W(e))),e.isFtPaginatedTocNode=W,e.isFtPaginationConfiguration=Z,e.isFtPublicationRating=m,e.isFtPublicationRatingSummary=A,e.isFtRatingCreation=e=>s(e)&&f(e.type)&&o(e.value),e.isFtRatingSummary=e=>s(e)&&(null==e.topics||b(e.topics))&&A(e.publication),e.isFtRatingType=f,e.isFtSearchFacet=_,e.isFtSearchFacetConf=H,e.isFtSearchFacetEntry=B,e.isFtSearchFilter=R,e.isFtSearchLocale=h,e.isFtSearchLocales=e=>s(e)&&Array.isArray(e.contentLocales)&&e.contentLocales.every((e=>h(e))),e.isFtSearchPreferencesConfiguration=e=>s(e)&&s(e.metadata)&&Object.keys(e.metadata).every((e=>u(e)))&&Object.values(e.metadata).every((e=>F(e))),e.isFtSearchPreset=e=>s(e)&&u(e.name)&&Array.isArray(e.filters)&&e.filters.every((e=>R(e)))&&o(e.priority)&&(null==e.contentLocale||u(e.contentLocale)),e.isFtSearchPrior=I,e.isFtSearchRequest=e=>s(e)&&u(e.query)&&O(e.paging)&&Array.isArray(e.filters)&&e.filters.every((e=>R(e)))&&Array.isArray(e.sort)&&e.sort.every((e=>q(e)))&&(null==e.uiLocale||u(e.uiLocale))&&(null==e.contentLocale||u(e.contentLocale))&&(null==e.priors||Array.isArray(e.priors)&&e.priors.every((e=>I(e))))&&Array.isArray(e.facets)&&e.facets.every((e=>H(e))),e.isFtSearchResultCluster=k,e.isFtSearchResultClusterEntry=M,e.isFtSearchResultMap=$,e.isFtSearchResultTopic=L,e.isFtSearchResultType=x,e.isFtSearchResultUnstructuredDocument=w,e.isFtSearchResults=e=>s(e)&&(null==e.spellcheck||G(e.spellcheck))&&S(e.paging)&&Array.isArray(e.results)&&e.results.every((e=>k(e)))&&Array.isArray(e.facets)&&e.facets.every((e=>_(e))),e.isFtSearchResultsPageInfo=S,e.isFtSearchSortCriterion=q,e.isFtSession=e=>j(e)&&J(e.idleTimeoutInMillis)&&(null==e.profile||Y(e.profile))&&z(e.sessionAuthenticated),e.isFtSpellcheck=G,e.isFtSuggestRequest=e=>s(e)&&u(e.input)&&Array.isArray(e.filters)&&e.filters.every((e=>R(e)))&&Array.isArray(e.sort)&&e.sort.every((e=>q(e)))&&(null==e.maxCount||o(e.maxCount))&&(null==e.contentLocale||u(e.contentLocale)),e.isFtSuggestResult=V,e.isFtSuggestResults=e=>s(e)&&Array.isArray(e.suggestions)&&e.suggestions.every((e=>V(e))),e.isFtTocNode=p,e.isFtTopic=e=>s(e)&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&u(e.id)&&u(e.contentApiEndpoint)&&u(e.title),e.isFtTopicContentTarget=e=>["THIRD_PARTY","OFF_THE_GRID","CONTENT_PACKAGER","PAGES","DESIGNED_READER"].includes(e),e.isFtTopicRating=T,e.isFtTopicResource=K,e.isFtTopicsRatingSummary=b,e.isFtUnstructuredDocument=e=>s(e)&&(null==e.prettyUrl||u(e.prettyUrl))&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&u(e.openMode)&&(null==e.description||u(e.description))&&u(e.mimeType)&&(null==e.baseId||u(e.baseId))&&(null==e.clusterId||u(e.clusterId))&&u(e.contentApiEndpoint)&&u(e.title)&&(null==e.lastPublication||u(e.lastPublication))&&u(e.viewerUrl)&&u(e.lastEdition)&&u(e.filename)&&(null==e.originId||u(e.originId))&&u(e.rightsApiEndpoint)&&(null==e.originUrl||u(e.originUrl))&&(null==e.khubVersion||u(e.khubVersion))&&u(e.id)&&(null==e.lang||u(e.lang)),e.isFtUserProfile=Y,e.setUnauthenticatedUserSearchPreferences=function(e,t){if(ee.localStorage){let r={...t,metadata:te(t.metadata??{})};const a=re(e),i=JSON.stringify(r);return ee.localStorage.setItem(a,i),ee.dispatchEvent(new StorageEvent("storage",{key:a,newValue:i,storageArea:ee.localStorage,url:ee.location.href})),r}console.error("Cannot set unauthenticated preferences: local storage is unavailable.")}}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).fluidtopics={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i={exports:{}},n={exports:{}};!function(e,t){var i=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==i)return i;throw new Error("unable to locate global object")}();e.exports=t=i.fetch,i.fetch&&(t.default=i.fetch.bind(i)),t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response}(n,n.exports),function(e,t){const i=n.exports,a=i.default||i,s=function(e,t){return/^\/\//.test(e)&&(e="https:"+e),a.call(this,e,t)};s.ponyfill=!0,e.exports=t=s,t.fetch=s,t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response,t.default=s}(i,i.exports);const a=i.exports,s=a.fetch.bind({});s.polyfill=!0,t.fetch||(t.fetch=s,t.Response=a.Response,t.Headers=a.Headers,t.Request=a.Request);const r=e=>"object"==typeof e&&null!=e,o=e=>"boolean"==typeof e,l=e=>"number"==typeof e,u=e=>"string"==typeof e,c=e=>r(e)&&u(e.topicStylesheetUrl)&&u(e.titleStylesheetUrl)&&Array.isArray(e.customCssClasses)&&e.customCssClasses.every((e=>u(e))),d=e=>r(e)&&(null==e.prettyUrl||u(e.prettyUrl))&&(null==e.hasRating||o(e.hasRating))&&u(e.tocId)&&Array.isArray(e.children)&&e.children.every((e=>d(e)))&&u(e.contentId)&&u(e.title);var p;e.FtTopicContentTarget=void 0,(p=e.FtTopicContentTarget||(e.FtTopicContentTarget={})).THIRD_PARTY="THIRD_PARTY",p.OFF_THE_GRID="OFF_THE_GRID",p.CONTENT_PACKAGER="CONTENT_PACKAGER",p.PAGES="PAGES",p.DESIGNED_READER="DESIGNED_READER";const h=e=>r(e)&&l(e.count)&&u(e.label)&&(null==e.lang||u(e.lang)),y=e=>r(e)&&Array.isArray(e.values)&&e.values.every((e=>u(e)))&&(null==e.hierarchicalValues||Array.isArray(e.hierarchicalValues)&&e.hierarchicalValues.every((e=>Array.isArray(e)&&e.every((e=>u(e))))))&&u(e.label)&&u(e.key);var g;e.FtRatingType=void 0,(g=e.FtRatingType||(e.FtRatingType={})).STARS="STARS",g.LIKE="LIKE",g.DICHOTOMOUS="DICHOTOMOUS",g.NO_RATING="NO_RATING";const m=e=>["STARS","LIKE","DICHOTOMOUS","NO_RATING"].includes(e),A=e=>r(e)&&u(e.date)&&m(e.type)&&l(e.value),f=e=>r(e)&&(null==e.rating||A(e.rating))&&m(e.type),E=e=>r(e)&&u(e.date)&&u(e.tocId)&&m(e.type)&&l(e.value),R=e=>r(e)&&Array.isArray(e.ratings)&&e.ratings.every((e=>E(e)))&&m(e.type),T=e=>r(e)&&Array.isArray(e.filter)&&e.filter.every((e=>u(e)))&&Array.isArray(e.prior)&&e.prior.every((e=>u(e))),S=e=>r(e)&&o(e.negative)&&Array.isArray(e.values)&&e.values.every((e=>u(e)))&&u(e.key),b=e=>r(e)&&l(e.totalResultsCount)&&o(e.lastPage)&&l(e.currentPage)&&l(e.totalClustersCount);var I;e.FtEditorialType=void 0,(I=e.FtEditorialType||(e.FtEditorialType={})).ARTICLE="ARTICLE",I.BOOK="BOOK";const U=e=>["ARTICLE","BOOK"].includes(e);var F;e.FtOpenMode=void 0,(F=e.FtOpenMode||(e.FtOpenMode={})).FLUIDTOPICS="FLUIDTOPICS",F.EXTERNAL="EXTERNAL";const O=e=>["FLUIDTOPICS","EXTERNAL"].includes(e),C=e=>r(e)&&(null==e.perPage||l(e.perPage))&&l(e.page);var _;e.FtCollectionDocumentType=void 0,(_=e.FtCollectionDocumentType||(e.FtCollectionDocumentType={})).MAP="MAP",_.DOCUMENT="DOCUMENT",_.TOPIC="TOPIC",_.PERSONAL_BOOK="PERSONAL_BOOK",_.SHARED_BOOK="SHARED_BOOK";const v=e=>["MAP","DOCUMENT","TOPIC","PERSONAL_BOOK","SHARED_BOOK"].includes(e),P=e=>r(e)&&l(e.weight)&&u(e.value)&&u(e.key),k=e=>r(e)&&Array.isArray(e.entries)&&e.entries.every((e=>D(e)))&&(null==e.metadataVariableAxis||u(e.metadataVariableAxis)),D=e=>r(e)&&(null==e.document||N(e.document))&&(null==e.topic||M(e.topic))&&B(e.type)&&(null==e.map||L(e.map)),N=e=>r(e)&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&O(e.openMode)&&u(e.documentUrl)&&u(e.mimeType)&&u(e.title)&&(null==e.lastPublicationDate||u(e.lastPublicationDate))&&u(e.viewerUrl)&&u(e.contentUrl)&&u(e.filename)&&u(e.htmlTitle)&&(null==e.originUrl||u(e.originUrl))&&u(e.documentId)&&u(e.lastEditionDate)&&u(e.htmlExcerpt),L=e=>r(e)&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&(null==e.openMode||O(e.openMode))&&U(e.editorialType)&&u(e.title)&&(null==e.lastPublicationDate||u(e.lastPublicationDate))&&u(e.htmlTitle)&&(null==e.originUrl||u(e.originUrl))&&u(e.mapUrl)&&u(e.readerUrl)&&u(e.mapId)&&(null==e.lastEditionDate||u(e.lastEditionDate))&&u(e.htmlExcerpt),M=e=>r(e)&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&O(e.openMode)&&u(e.contentId)&&Array.isArray(e.resources)&&e.resources.every((e=>G(e)))&&u(e.title)&&u(e.mapTitle)&&u(e.topicUrl)&&u(e.contentUrl)&&u(e.htmlTitle)&&Array.isArray(e.breadcrumb)&&e.breadcrumb.every((e=>u(e)))&&u(e.tocId)&&(null==e.originUrl||u(e.originUrl))&&u(e.readerUrl)&&u(e.mapId)&&(null==e.lastEditionDate||u(e.lastEditionDate))&&u(e.htmlExcerpt);var w;e.FtSearchResultType=void 0,(w=e.FtSearchResultType||(e.FtSearchResultType={})).MAP="MAP",w.DOCUMENT="DOCUMENT",w.TOPIC="TOPIC";const B=e=>["MAP","DOCUMENT","TOPIC"].includes(e),H=e=>r(e)&&o(e.hierarchical)&&u(e.label)&&o(e.multiSelectionable)&&u(e.key)&&Array.isArray(e.rootNodes)&&e.rootNodes.every((e=>$(e))),x=e=>r(e)&&(null==e.maxDepth||l(e.maxDepth))&&u(e.id),$=e=>r(e)&&l(e.totalResultsCount)&&o(e.descendantSelected)&&Array.isArray(e.childNodes)&&e.childNodes.every((e=>$(e)))&&u(e.label)&&u(e.value)&&o(e.selected),K=e=>r(e)&&u(e.key),V=e=>r(e)&&u(e.suggestedQuery)&&u(e.htmlSuggestedQuery),G=e=>r(e)&&u(e.filename)&&u(e.resourceUrl)&&u(e.id)&&u(e.mimeType)&&u(e.resourceContentUrl)&&u(e.viewerUrl),q=e=>r(e)&&(null==e.filenameExtension||u(e.filenameExtension))&&(null==e.editorialType||U(e.editorialType))&&(null==e.mimeType||u(e.mimeType))&&B(e.type)&&u(e.value);var j;e.FtUserRole=void 0,(j=e.FtUserRole||(e.FtUserRole={})).PERSONAL_BOOK_USER="PERSONAL_BOOK_USER",j.PERSONAL_BOOK_SHARE_USER="PERSONAL_BOOK_SHARE_USER",j.HTML_EXPORT_USER="HTML_EXPORT_USER",j.PDF_EXPORT_USER="PDF_EXPORT_USER",j.SAVED_SEARCH_USER="SAVED_SEARCH_USER",j.COLLECTION_USER="COLLECTION_USER",j.OFFLINE_USER="OFFLINE_USER",j.ANALYTICS_USER="ANALYTICS_USER",j.BETA_USER="BETA_USER",j.DEBUG_USER="DEBUG_USER",j.PRINT_USER="PRINT_USER",j.RATING_USER="RATING_USER",j.FEEDBACK_USER="FEEDBACK_USER",j.CONTENT_PUBLISHER="CONTENT_PUBLISHER",j.KHUB_ADMIN="KHUB_ADMIN",j.USERS_ADMIN="USERS_ADMIN",j.PORTAL_ADMIN="PORTAL_ADMIN",j.ADMIN="ADMIN",j.DEVELOPER="DEVELOPER";const z=e=>"object"==typeof e&&null!=e,X=e=>"boolean"==typeof e,Y=e=>"number"==typeof e,J=e=>"string"==typeof e,Q=e=>z(e)&&(null==e.emailAddress||J(e.emailAddress))&&(null==e.displayName||J(e.displayName))&&Array.isArray(e.roles)&&(null==e.userId||J(e.userId)),W=e=>z(e)&&(null==e.parentsVisibility||Array.isArray(e.parentsVisibility)&&e.parentsVisibility.every((e=>X(e))))&&X(e.isVisible),Z=e=>z(e)&&(null==e.prettyUrl||J(e.prettyUrl))&&(null==e.hasRating||X(e.hasRating))&&(null==e.pageToc||Array.isArray(e.pageToc))&&(null==e.tocId||J(e.tocId))&&Array.isArray(e.children)&&e.children.every((e=>Z(e)))&&(null==e.pageConfiguration||W(e.pageConfiguration))&&(null==e.contentId||J(e.contentId))&&(null==e.title||J(e.title)),ee=e=>z(e)&&X(e.splitCurrentPageToc),te="undefined"==typeof window?globalThis:window;function ie(e){let t={};for(let i in e){let n=e[i];("object"!=typeof n||Array.isArray(n))&&(n={prior:n});for(let e of["prior","filter"])n[e]=Array.isArray(n[e])?n[e]:[n[e]],n[e]=n[e].map((e=>null!=e?""+e:"")).filter((e=>""!==e));t[i]=n}return t}function ne(e){return`${e}-FluidTopicsUnauthenticatedUserSearchPreferences`}const ae="undefined"==typeof window?globalThis:window;class se extends Error{status;statusText;body;constructor(e,t,i){super(`${e} - ${t}: ${i}`),this.status=e,this.statusText=t,this.body=i}}async function re(e){if(!e.ok)throw new se(e.status,e.statusText,await e.text());return e}function oe(e){return"application/json"===e.headers.get("Content-Type")?e.json():e.text()}class le{tenantBaseUrl;ftCallingApp;authorization;searchLabel;endpoints={authentication:{login:"api/authentication/login",logout:"api/authentication/logout",currentSession:"api/authentication/current-session"},khub:{maps:{mapId:e=>({info:`api/khub/maps/${e}`,toc:`api/khub/maps/${e}/toc`,pages:`api/khub/maps/${e}/pages`,feedback:`api/khub/maps/${e}/feedback`,rating:`api/khub/maps/${e}/rating`,attachments:{list:`api/khub/maps/${e}/attachments`,attachmentId:t=>({content:`api/khub/maps/${e}/attachments/${t}/content`})},resources:{list:`api/khub/maps/${e}/resources`,resourceId:t=>({content:`api/khub/maps/${e}/resources/${t}/content`})},topics:{contentId:t=>({info:`api/khub/maps/${e}/topics/${t}`,content:`api/khub/maps/${e}/topics/${t}/content`}),tocId:t=>({feedback:`api/khub/maps/${e}/topics/${t}/feedback`,rating:`api/khub/maps/${e}/topics/${t}/rating`})}})},documents:{documentId:e=>({info:`api/khub/documents/${e}`,content:`api/khub/documents/${e}/content`,text:`api/khub/documents/${e}/content/text`,feedback:`api/khub/documents/${e}/feedback`,rating:`api/khub/documents/${e}/rating`})},suggest:"api/khub/suggest",clusteredSearch:"api/khub/clustered-search",locales:"api/khub/locales"},users:{userId:e=>({collections:{collectionId:t=>({documents:`api/users/${e}/collections/${t}/documents`})}})},stylesheets:{fonts:"api/stylesheets/fonts.css",theme:"api/stylesheets/theme.css",content:{title:"api/stylesheets/content/title.css",topic:"api/stylesheets/content/topic.css"}},configuration:{reader:"api/configuration/reader"}};get defaultHeaders(){return{...this.authorization,...this.searchLabel,"Ft-Calling-App":this.ftCallingApp}}constructor(e,t,i){e=(e??ae.__gwt_ft_moduleBase??ae.fluidtopicsclient?.__moduleBase??ae.__gwt_activeModules?.fluidtopicsclient?.moduleBase??"").trim(),this.tenantBaseUrl=e.endsWith("/")?e:e+"/",i&&void 0!==ae.location&&ae.location.href.startsWith(this.tenantBaseUrl)?this.ftCallingApp=t:this.ftCallingApp=`ft-public-api/${t}`}setApiKey(e){this.authorization={Authorization:"Bearer "+e}}setCredentials(e,t){var i;this.authorization={Authorization:"Basic "+(i=`${e}:${t}`,"undefined"!=typeof Buffer?Buffer.from(i).toString("base64"):btoa(i))}}clearAuthentication(){this.authorization=void 0}setSearchLabel(e){this.searchLabel={"FT-search-label":e}}clearSearchLabel(){this.searchLabel=void 0}login(e,t){let i={login:e,password:t,rememberMe:!0};return this.post(this.endpoints.authentication.login,i).then((i=>(this.setCredentials(e,t),i)))}logout(){return this.post(this.endpoints.authentication.logout).then((()=>this.clearAuthentication()))}getCurrentSession(){return this.get(this.endpoints.authentication.currentSession)}getReaderConfiguration(){return this.get(this.endpoints.configuration.reader)}getMap(e){return this.get(this.endpoints.khub.maps.mapId(e).info)}getTableOfContent(e){return this.get(this.endpoints.khub.maps.mapId(e).toc)}getPages(e){return this.get(this.endpoints.khub.maps.mapId(e).pages)}getTopic(e,t){return this.get(this.endpoints.khub.maps.mapId(e).topics.contentId(t).info)}getTopicHTMLContent(e,t,i){return this.get(this.endpoints.khub.maps.mapId(e).topics.contentId(t).content+(i?"?target="+i:""))}getMapAttachments(e){return this.get(this.endpoints.khub.maps.mapId(e).attachments.list)}getMapAttachmentContent(e,t){return this.fetchRawData(this.endpoints.khub.maps.mapId(e).attachments.attachmentId(t).content)}getMapResources(e){return this.get(this.endpoints.khub.maps.mapId(e).resources.list)}getMapResourceContent(e,t){return this.fetchRawData(this.endpoints.khub.maps.mapId(e).resources.resourceId(t).content)}getUnstructuredDocument(e){return this.get(this.endpoints.khub.documents.documentId(e).info)}getUnstructuredDocumentContent(e){return this.fetchRawData(this.endpoints.khub.documents.documentId(e).content)}getUnstructuredDocumentTextContent(e){return this.get(this.endpoints.khub.documents.documentId(e).text)}getCollectionDocuments(e,t){return this.get(this.endpoints.users.userId(e).collections.collectionId(t).documents)}getSuggestions(e){return this.post(this.endpoints.khub.suggest,e)}search(e){return this.post(this.endpoints.khub.clusteredSearch,e)}getAvailableSearchLocales(){return this.get(this.endpoints.khub.locales)}getMapRating(e){return this.get(this.endpoints.khub.maps.mapId(e).rating)}rateMap(e,t,i){return this.post(this.endpoints.khub.maps.mapId(e).rating,{type:t,value:i})}unrateMap(e){return this.delete(this.endpoints.khub.maps.mapId(e).rating)}sendMapFeedback(e,t){return this.post(this.endpoints.khub.maps.mapId(e).feedback,{message:t})}rateTopic(e,t,i,n){return this.post(this.endpoints.khub.maps.mapId(e).topics.tocId(t).rating,{type:i,value:n})}unrateTopic(e,t){return this.delete(this.endpoints.khub.maps.mapId(e).topics.tocId(t).rating)}sendTopicFeedback(e,t,i){return this.post(this.endpoints.khub.maps.mapId(e).topics.tocId(t).feedback,{message:i})}getDocumentRating(e){return this.get(this.endpoints.khub.documents.documentId(e).rating)}rateDocument(e,t,i){return this.post(this.endpoints.khub.documents.documentId(e).rating,{type:t,value:i})}unrateDocument(e){return this.delete(this.endpoints.khub.documents.documentId(e).rating)}sendDocumentFeedback(e,t){return this.post(this.endpoints.khub.documents.documentId(e).feedback,{message:t})}get(e){return this.makeRequest("GET",e)}post(e,t){return this.makeRequest("POST",e,t)}put(e,t){return this.makeRequest("PUT",e,t)}delete(e){return this.makeRequest("DELETE",e)}makeAbsolute(e){return this.tenantBaseUrl+e.replace(/^\//,"")}async fetch(e,t){const i=t;return await fetch(this.makeAbsolute(e),{...i??{},headers:{...this.defaultHeaders,...i?.headers??{}}})}upload(e,t,i,n=(()=>{})){return"undefined"!=typeof XMLHttpRequest?new Promise(((a,s)=>{let r=new XMLHttpRequest;r.onload=()=>{if(r.status>=200&&r.status<300){let e="application/json"===r.getResponseHeader("Content-Type")?JSON.parse(r.responseText):r.responseText;a(e)}else s(new se(r.status,r.statusText,r.responseText))},r.upload.onprogress=e=>n(e),r.open(e,this.makeAbsolute(t),!0),r.send(i)})):this.fetch(t,{method:e,body:i}).then(re).then(oe)}makeRequest(e,t,i){return this.fetch(t,{method:e,headers:{...null!=i?{"Content-Type":"application/json"}:{}},body:null!=i?JSON.stringify(i):void 0,credentials:null==this.authorization?"include":void 0}).then(re).then(oe)}fetchRawData(e){return fetch(this.makeAbsolute(e),{headers:this.defaultHeaders,credentials:null==this.authorization?"include":void 0}).then(re).then((e=>e.arrayBuffer()))}}e.FluidTopicsApi=le,e.HttpError=se,e.addUnauthenticatedUserSearchPreferencesChangeHandler=function(e,t){if(te.localStorage){const i=ne(e),n=e=>{e.storageArea===te.localStorage&&e.key===i&&t(JSON.parse(e.newValue??"{}"))};return te.addEventListener("storage",n),{removeHandler:()=>te.removeEventListener("storage",n)}}console.error("Cannot handle unauthenticated preferences: local storage is unavailable.")},e.default=le,e.getUnauthenticatedUserSearchPreferences=function(e){if(te.localStorage)return JSON.parse(te.localStorage.getItem(ne(e))??"{}");console.error("Cannot get unauthenticated preferences: local storage is unavailable.")},e.isFtAuthenticatedSession=e=>z(e)&&Q(e.profile),e.isFtAuthenticationIdentifier=e=>r(e)&&u(e.identifier)&&u(e.realm),e.isFtCollectionDocument=e=>r(e)&&o(e.deleted)&&(null==e.apiUrl||u(e.apiUrl))&&(null==e.portalUrl||u(e.portalUrl))&&u(e.id)&&u(e.title)&&v(e.type),e.isFtCollectionDocumentType=v,e.isFtCredentials=e=>r(e)&&u(e.password)&&(null==e.newPassword||u(e.newPassword))&&o(e.rememberMe)&&u(e.login),e.isFtEditorialType=U,e.isFtFeedbackCreation=e=>r(e)&&u(e.message),e.isFtMap=e=>r(e)&&(null==e.prettyUrl||u(e.prettyUrl))&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&O(e.openMode)&&u(e.topicsApiEndpoint)&&(null==e.description||u(e.description))&&u(e.attachmentsApiEndpoint)&&U(e.editorialType)&&u(e.baseId)&&u(e.clusterId)&&u(e.title)&&u(e.lastPublication)&&u(e.lastEdition)&&u(e.originId)&&u(e.rightsApiEndpoint)&&c(e.contentStyles)&&(null==e.originUrl||u(e.originUrl))&&u(e.readerUrl)&&(null==e.khubVersion||u(e.khubVersion))&&u(e.id)&&(null==e.lang||u(e.lang)),e.isFtMapAttachment=e=>z(e)&&J(e.file)&&(null==e.size||Y(e.size))&&X(e.externalLink)&&J(e.name)&&J(e.id)&&(null==e.mimeType||J(e.mimeType))&&(null==e.viewerUrl||J(e.viewerUrl)),e.isFtMapResource=e=>r(e)&&u(e.contentUrl)&&u(e.filename)&&u(e.id)&&u(e.mimeType),e.isFtMapStyles=c,e.isFtMetadata=y,e.isFtMetadataPreferenceConfiguration=T,e.isFtOpenMode=O,e.isFtPageConfiguration=W,e.isFtPageRequest=C,e.isFtPaginatedToc=e=>z(e)&&ee(e.configuration)&&Array.isArray(e.paginatedToc)&&e.paginatedToc.every((e=>Z(e))),e.isFtPaginatedTocNode=Z,e.isFtPaginationConfiguration=ee,e.isFtPublicationRating=A,e.isFtPublicationRatingSummary=f,e.isFtRatingCreation=e=>r(e)&&m(e.type)&&l(e.value),e.isFtRatingSummary=e=>r(e)&&(null==e.topics||R(e.topics))&&f(e.publication),e.isFtRatingType=m,e.isFtReaderConfiguration=e=>z(e)&&Y(e.loadAfterLastVisibleTopic)&&X(e.feedbackMailsSentByFluidTopics)&&Y(e.loadBeforeFirstVisibleTopic),e.isFtSearchFacet=H,e.isFtSearchFacetConf=x,e.isFtSearchFacetEntry=$,e.isFtSearchFilter=S,e.isFtSearchLocale=h,e.isFtSearchLocales=e=>r(e)&&Array.isArray(e.contentLocales)&&e.contentLocales.every((e=>h(e))),e.isFtSearchPreferencesConfiguration=e=>r(e)&&r(e.metadata)&&Object.keys(e.metadata).every((e=>u(e)))&&Object.values(e.metadata).every((e=>T(e))),e.isFtSearchPreset=e=>r(e)&&u(e.name)&&Array.isArray(e.filters)&&e.filters.every((e=>S(e)))&&l(e.priority)&&(null==e.contentLocale||u(e.contentLocale)),e.isFtSearchPrior=P,e.isFtSearchRequest=e=>r(e)&&u(e.query)&&C(e.paging)&&Array.isArray(e.filters)&&e.filters.every((e=>S(e)))&&Array.isArray(e.sort)&&e.sort.every((e=>K(e)))&&(null==e.uiLocale||u(e.uiLocale))&&(null==e.contentLocale||u(e.contentLocale))&&(null==e.priors||Array.isArray(e.priors)&&e.priors.every((e=>P(e))))&&Array.isArray(e.facets)&&e.facets.every((e=>x(e))),e.isFtSearchResultCluster=k,e.isFtSearchResultClusterEntry=D,e.isFtSearchResultMap=L,e.isFtSearchResultTopic=M,e.isFtSearchResultType=B,e.isFtSearchResultUnstructuredDocument=N,e.isFtSearchResults=e=>r(e)&&(null==e.spellcheck||V(e.spellcheck))&&b(e.paging)&&Array.isArray(e.results)&&e.results.every((e=>k(e)))&&Array.isArray(e.facets)&&e.facets.every((e=>H(e))),e.isFtSearchResultsPageInfo=b,e.isFtSearchSortCriterion=K,e.isFtSession=e=>z(e)&&Y(e.idleTimeoutInMillis)&&Q(e.profile)&&X(e.sessionAuthenticated),e.isFtSpellcheck=V,e.isFtSuggestRequest=e=>r(e)&&u(e.input)&&Array.isArray(e.filters)&&e.filters.every((e=>S(e)))&&Array.isArray(e.sort)&&e.sort.every((e=>K(e)))&&(null==e.maxCount||l(e.maxCount))&&(null==e.contentLocale||u(e.contentLocale)),e.isFtSuggestResult=q,e.isFtSuggestResults=e=>r(e)&&Array.isArray(e.suggestions)&&e.suggestions.every((e=>q(e))),e.isFtTocNode=d,e.isFtTopic=e=>r(e)&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&u(e.id)&&u(e.contentApiEndpoint)&&u(e.title),e.isFtTopicContentTarget=e=>["THIRD_PARTY","OFF_THE_GRID","CONTENT_PACKAGER","PAGES","DESIGNED_READER"].includes(e),e.isFtTopicRating=E,e.isFtTopicResource=G,e.isFtTopicsRatingSummary=R,e.isFtUnstructuredDocument=e=>r(e)&&(null==e.prettyUrl||u(e.prettyUrl))&&Array.isArray(e.metadata)&&e.metadata.every((e=>y(e)))&&u(e.openMode)&&(null==e.description||u(e.description))&&u(e.mimeType)&&(null==e.baseId||u(e.baseId))&&(null==e.clusterId||u(e.clusterId))&&u(e.contentApiEndpoint)&&u(e.title)&&(null==e.lastPublication||u(e.lastPublication))&&u(e.viewerUrl)&&u(e.lastEdition)&&u(e.filename)&&(null==e.originId||u(e.originId))&&u(e.rightsApiEndpoint)&&(null==e.originUrl||u(e.originUrl))&&(null==e.khubVersion||u(e.khubVersion))&&u(e.id)&&(null==e.lang||u(e.lang)),e.isFtUserProfile=Q,e.isFtUserRole=e=>["PERSONAL_BOOK_USER","PERSONAL_BOOK_SHARE_USER","HTML_EXPORT_USER","PDF_EXPORT_USER","SAVED_SEARCH_USER","COLLECTION_USER","OFFLINE_USER","ANALYTICS_USER","BETA_USER","DEBUG_USER","PRINT_USER","RATING_USER","FEEDBACK_USER","CONTENT_PUBLISHER","KHUB_ADMIN","USERS_ADMIN","PORTAL_ADMIN","ADMIN","DEVELOPER"].includes(e),e.setUnauthenticatedUserSearchPreferences=function(e,t){if(te.localStorage){let i={...t,metadata:ie(t.metadata??{})};const n=ne(e),a=JSON.stringify(i);return te.localStorage.setItem(n,a),te.dispatchEvent(new StorageEvent("storage",{key:n,newValue:a,storageArea:te.localStorage,url:te.location.href})),i}console.error("Cannot set unauthenticated preferences: local storage is unavailable.")}}));
@@ -1,6 +1,6 @@
1
1
  import "cross-fetch/polyfill";
2
2
  import { FtCollectionDocument, FtMap, FtMapResource, FtRatingSummary, FtRatingType, FtSearchLocales, FtSearchRequest, FtSearchResults, FtSuggestRequest, FtSuggestResults, FtTocNode, FtTopic, FtTopicContentTarget, FtTopicContentTargetKeys, FtUnstructuredDocument } from "./types/ft-common/public";
3
- import { FtAuthenticatedSession, FtMapAttachment, FtPaginatedToc, FtSession } from "./types/ft-server/public";
3
+ import { FtAuthenticatedSession, FtMapAttachment, FtPaginatedToc, FtReaderConfiguration, FtSession } from "./types/ft-server/public";
4
4
  export * from "./types/ft-common/public";
5
5
  export * from "./types/ft-server/public";
6
6
  export * from "./preferences/unauthenticated-preferences";
@@ -13,8 +13,80 @@ export declare class HttpError extends Error {
13
13
  export declare class FluidTopicsApi {
14
14
  readonly tenantBaseUrl: string;
15
15
  private readonly ftCallingApp;
16
- private authorization;
17
- private searchLabel;
16
+ private authorization?;
17
+ private searchLabel?;
18
+ readonly endpoints: {
19
+ authentication: {
20
+ login: string;
21
+ logout: string;
22
+ currentSession: string;
23
+ };
24
+ khub: {
25
+ maps: {
26
+ mapId: (mapId: string) => {
27
+ info: string;
28
+ toc: string;
29
+ pages: string;
30
+ feedback: string;
31
+ rating: string;
32
+ attachments: {
33
+ list: string;
34
+ attachmentId: (attachmentId: string) => {
35
+ content: string;
36
+ };
37
+ };
38
+ resources: {
39
+ list: string;
40
+ resourceId: (resourceId: string) => {
41
+ content: string;
42
+ };
43
+ };
44
+ topics: {
45
+ contentId: (contentId: string) => {
46
+ info: string;
47
+ content: string;
48
+ };
49
+ tocId: (tocId: string) => {
50
+ feedback: string;
51
+ rating: string;
52
+ };
53
+ };
54
+ };
55
+ };
56
+ documents: {
57
+ documentId: (documentId: string) => {
58
+ info: string;
59
+ content: string;
60
+ text: string;
61
+ feedback: string;
62
+ rating: string;
63
+ };
64
+ };
65
+ suggest: string;
66
+ clusteredSearch: string;
67
+ locales: string;
68
+ };
69
+ users: {
70
+ userId: (userId: string) => {
71
+ collections: {
72
+ collectionId: (collectionId: string) => {
73
+ documents: string;
74
+ };
75
+ };
76
+ };
77
+ };
78
+ stylesheets: {
79
+ fonts: string;
80
+ theme: string;
81
+ content: {
82
+ title: string;
83
+ topic: string;
84
+ };
85
+ };
86
+ configuration: {
87
+ reader: string;
88
+ };
89
+ };
18
90
  private get defaultHeaders();
19
91
  constructor(tenantBaseUrl: string, integrationIdentifier: string, overrideIdentifierIfOnTenant?: boolean);
20
92
  setApiKey(apiKey: string): void;
@@ -25,6 +97,7 @@ export declare class FluidTopicsApi {
25
97
  login(login: string, password: string): Promise<FtAuthenticatedSession>;
26
98
  logout(): Promise<void>;
27
99
  getCurrentSession(): Promise<FtSession>;
100
+ getReaderConfiguration(): Promise<FtReaderConfiguration>;
28
101
  getMap(mapId: string): Promise<FtMap>;
29
102
  getTableOfContent(mapId: string): Promise<Array<FtTocNode>>;
30
103
  getPages(mapId: string): Promise<FtPaginatedToc>;
@@ -42,13 +115,13 @@ export declare class FluidTopicsApi {
42
115
  search(request: FtSearchRequest): Promise<FtSearchResults>;
43
116
  getAvailableSearchLocales(): Promise<FtSearchLocales>;
44
117
  getMapRating(mapId: string): Promise<FtRatingSummary>;
45
- getDocumentRating(docId: string): Promise<FtRatingSummary>;
46
118
  rateMap(mapId: string, type: FtRatingType, value: number): Promise<void>;
47
119
  unrateMap(mapId: string): Promise<void>;
48
120
  sendMapFeedback(mapId: string, message: string): Promise<void>;
49
121
  rateTopic(mapId: string, tocId: string, type: FtRatingType, value: number): Promise<void>;
50
122
  unrateTopic(mapId: string, tocId: string): Promise<void>;
51
123
  sendTopicFeedback(mapId: string, tocId: string, message: string): Promise<void>;
124
+ getDocumentRating(docId: string): Promise<FtRatingSummary>;
52
125
  rateDocument(docId: string, type: FtRatingType, value: number): Promise<void>;
53
126
  unrateDocument(docId: string): Promise<void>;
54
127
  sendDocumentFeedback(docId: string, message: string): Promise<void>;
@@ -56,8 +129,9 @@ export declare class FluidTopicsApi {
56
129
  post<T>(endpoint: string, data?: any): Promise<T>;
57
130
  put<T>(endpoint: string, data?: any): Promise<T>;
58
131
  delete<T>(endpoint: string): Promise<T>;
132
+ makeAbsolute(endpoint: string): string;
59
133
  fetch<FetchRequestInit, FetchResponse>(endpoint: string, init?: FetchRequestInit): Promise<FetchResponse>;
60
- upload<T>(method: string, endpoint: string, body: Document | XMLHttpRequestBodyInit, onProgress?: (e: ProgressEvent) => void): Promise<T>;
134
+ upload<T>(method: string, endpoint: string, body: any, onProgress?: (e: any) => void): Promise<T>;
61
135
  private makeRequest;
62
136
  private fetchRawData;
63
137
  }
package/dist/mjs/index.js CHANGED
@@ -29,8 +29,80 @@ function getBody(response) {
29
29
  export class FluidTopicsApi {
30
30
  tenantBaseUrl;
31
31
  ftCallingApp;
32
- authorization = {};
32
+ authorization;
33
33
  searchLabel;
34
+ endpoints = {
35
+ authentication: {
36
+ login: `api/authentication/login`,
37
+ logout: `api/authentication/logout`,
38
+ currentSession: `api/authentication/current-session`,
39
+ },
40
+ khub: {
41
+ maps: {
42
+ mapId: (mapId) => ({
43
+ info: `api/khub/maps/${mapId}`,
44
+ toc: `api/khub/maps/${mapId}/toc`,
45
+ pages: `api/khub/maps/${mapId}/pages`,
46
+ feedback: `api/khub/maps/${mapId}/feedback`,
47
+ rating: `api/khub/maps/${mapId}/rating`,
48
+ attachments: {
49
+ list: `api/khub/maps/${mapId}/attachments`,
50
+ attachmentId: (attachmentId) => ({
51
+ content: `api/khub/maps/${mapId}/attachments/${attachmentId}/content`,
52
+ })
53
+ },
54
+ resources: {
55
+ list: `api/khub/maps/${mapId}/resources`,
56
+ resourceId: (resourceId) => ({
57
+ content: `api/khub/maps/${mapId}/resources/${resourceId}/content`,
58
+ })
59
+ },
60
+ topics: {
61
+ contentId: (contentId) => ({
62
+ info: `api/khub/maps/${mapId}/topics/${contentId}`,
63
+ content: `api/khub/maps/${mapId}/topics/${contentId}/content`,
64
+ }),
65
+ tocId: (tocId) => ({
66
+ feedback: `api/khub/maps/${mapId}/topics/${tocId}/feedback`,
67
+ rating: `api/khub/maps/${mapId}/topics/${tocId}/rating`,
68
+ })
69
+ },
70
+ })
71
+ },
72
+ documents: {
73
+ documentId: (documentId) => ({
74
+ info: `api/khub/documents/${documentId}`,
75
+ content: `api/khub/documents/${documentId}/content`,
76
+ text: `api/khub/documents/${documentId}/content/text`,
77
+ feedback: `api/khub/documents/${documentId}/feedback`,
78
+ rating: `api/khub/documents/${documentId}/rating`,
79
+ })
80
+ },
81
+ suggest: `api/khub/suggest`,
82
+ clusteredSearch: `api/khub/clustered-search`,
83
+ locales: `api/khub/locales`,
84
+ },
85
+ users: {
86
+ userId: (userId) => ({
87
+ collections: {
88
+ collectionId: (collectionId) => ({
89
+ documents: `api/users/${userId}/collections/${collectionId}/documents`,
90
+ })
91
+ }
92
+ })
93
+ },
94
+ stylesheets: {
95
+ fonts: `api/stylesheets/fonts.css`,
96
+ theme: `api/stylesheets/theme.css`,
97
+ content: {
98
+ title: `api/stylesheets/content/title.css`,
99
+ topic: `api/stylesheets/content/topic.css`,
100
+ },
101
+ },
102
+ configuration: {
103
+ reader: `api/configuration/reader`
104
+ },
105
+ };
34
106
  get defaultHeaders() {
35
107
  return {
36
108
  ...this.authorization,
@@ -40,9 +112,9 @@ export class FluidTopicsApi {
40
112
  }
41
113
  constructor(tenantBaseUrl, integrationIdentifier, overrideIdentifierIfOnTenant) {
42
114
  //@ts-ignore
43
- tenantBaseUrl = tenantBaseUrl ?? wnd.__gwt_ft_moduleBase ?? wnd.fluidtopicsclient?.__moduleBase ?? wnd.__gwt_activeModules?.fluidtopicsclient?.moduleBase;
44
- this.tenantBaseUrl = tenantBaseUrl.trim().replace(/\/$/, "");
45
- if (overrideIdentifierIfOnTenant && typeof wnd.location !== "undefined" && wnd.location.href.startsWith(this.tenantBaseUrl + "/")) {
115
+ tenantBaseUrl = (tenantBaseUrl ?? wnd.__gwt_ft_moduleBase ?? wnd.fluidtopicsclient?.__moduleBase ?? wnd.__gwt_activeModules?.fluidtopicsclient?.moduleBase ?? "").trim();
116
+ this.tenantBaseUrl = tenantBaseUrl.endsWith("/") ? tenantBaseUrl : tenantBaseUrl + "/";
117
+ if (overrideIdentifierIfOnTenant && typeof wnd.location !== "undefined" && wnd.location.href.startsWith(this.tenantBaseUrl)) {
46
118
  this.ftCallingApp = integrationIdentifier;
47
119
  }
48
120
  else {
@@ -70,99 +142,104 @@ export class FluidTopicsApi {
70
142
  password: password,
71
143
  rememberMe: true
72
144
  };
73
- return this.post(`/api/authentication/login`, credentials)
145
+ return this.post(this.endpoints.authentication.login, credentials)
74
146
  .then(result => {
75
147
  this.setCredentials(login, password);
76
148
  return result;
77
149
  });
78
150
  }
79
151
  logout() {
80
- return this.post(`/api/authentication/logout`)
152
+ return this.post(this.endpoints.authentication.logout)
81
153
  .then(() => this.clearAuthentication());
82
154
  }
83
155
  getCurrentSession() {
84
- return this.get(`/api/authentication/current-session`);
156
+ return this.get(this.endpoints.authentication.currentSession);
157
+ }
158
+ getReaderConfiguration() {
159
+ return this.get(this.endpoints.configuration.reader);
85
160
  }
86
161
  getMap(mapId) {
87
- return this.get(`/api/khub/maps/${mapId}`);
162
+ return this.get(this.endpoints.khub.maps.mapId(mapId).info);
88
163
  }
89
164
  getTableOfContent(mapId) {
90
- return this.get(`/api/khub/maps/${mapId}/toc`);
165
+ return this.get(this.endpoints.khub.maps.mapId(mapId).toc);
91
166
  }
92
167
  getPages(mapId) {
93
- return this.get(`/api/khub/maps/${mapId}/pages`);
168
+ return this.get(this.endpoints.khub.maps.mapId(mapId).pages);
94
169
  }
95
170
  getTopic(mapId, topicContentId) {
96
- return this.get(`/api/khub/maps/${mapId}/topics/${topicContentId}`);
171
+ return this.get(this.endpoints.khub.maps.mapId(mapId).topics.contentId(topicContentId).info);
97
172
  }
98
173
  getTopicHTMLContent(mapId, topicContentId, target) {
99
- return this.get(`/api/khub/maps/${mapId}/topics/${topicContentId}/content${target ? "?target=" + target : ""}`);
174
+ return this.get(this.endpoints.khub.maps.mapId(mapId).topics.contentId(topicContentId).content + (target ? "?target=" + target : ""));
100
175
  }
101
176
  getMapAttachments(mapId) {
102
- return this.get(`/api/khub/maps/${mapId}/attachments`);
177
+ return this.get(this.endpoints.khub.maps.mapId(mapId).attachments.list);
103
178
  }
104
179
  getMapAttachmentContent(mapId, attachmentId) {
105
- return this.fetchRawData(`/api/khub/maps/${mapId}/attachments/${attachmentId}/content`);
180
+ return this.fetchRawData(this.endpoints.khub.maps.mapId(mapId).attachments.attachmentId(attachmentId).content);
106
181
  }
107
182
  getMapResources(mapId) {
108
- return this.get(`/api/khub/maps/${mapId}/resources`);
183
+ return this.get(this.endpoints.khub.maps.mapId(mapId).resources.list);
109
184
  }
110
185
  getMapResourceContent(mapId, resourceId) {
111
- return this.fetchRawData(`/api/khub/maps/${mapId}/resources/${resourceId}/content`);
186
+ return this.fetchRawData(this.endpoints.khub.maps.mapId(mapId).resources.resourceId(resourceId).content);
112
187
  }
113
188
  getUnstructuredDocument(documentId) {
114
- return this.get(`/api/khub/documents/${documentId}`);
189
+ return this.get(this.endpoints.khub.documents.documentId(documentId).info);
115
190
  }
116
191
  getUnstructuredDocumentContent(documentId) {
117
- return this.fetchRawData(`/api/khub/documents/${documentId}/content`);
192
+ return this.fetchRawData(this.endpoints.khub.documents.documentId(documentId).content);
118
193
  }
119
194
  getUnstructuredDocumentTextContent(documentId) {
120
- return this.get(`/api/khub/documents/${documentId}/content/text`);
195
+ return this.get(this.endpoints.khub.documents.documentId(documentId).text);
121
196
  }
122
197
  getCollectionDocuments(userId, collectionId) {
123
- return this.get(`/api/users/${userId}/collections/${collectionId}/documents`);
198
+ return this.get(this.endpoints.users.userId(userId).collections.collectionId(collectionId).documents);
124
199
  }
125
200
  getSuggestions(request) {
126
- return this.post("/api/khub/suggest", request);
201
+ return this.post(this.endpoints.khub.suggest, request);
127
202
  }
128
203
  search(request) {
129
- return this.post("/api/khub/clustered-search", request);
204
+ return this.post(this.endpoints.khub.clusteredSearch, request);
130
205
  }
131
206
  getAvailableSearchLocales() {
132
- return this.get("/api/khub/locales");
207
+ return this.get(this.endpoints.khub.locales);
133
208
  }
134
209
  getMapRating(mapId) {
135
- return this.get(`/api/khub/maps/${mapId}/rating`);
136
- }
137
- getDocumentRating(docId) {
138
- return this.get(`/api/khub/documents/${docId}/rating`);
210
+ return this.get(this.endpoints.khub.maps.mapId(mapId).rating);
139
211
  }
140
212
  rateMap(mapId, type, value) {
141
- return this.post(`/api/khub/maps/${mapId}/rating`, { type, value });
213
+ return this.post(this.endpoints.khub.maps.mapId(mapId).rating, { type, value });
142
214
  }
143
215
  unrateMap(mapId) {
144
- return this.delete(`/api/khub/maps/${mapId}/rating`);
216
+ return this.delete(this.endpoints.khub.maps.mapId(mapId).rating);
145
217
  }
146
218
  sendMapFeedback(mapId, message) {
147
- return this.post(`/api/khub/maps/${mapId}/feedback`, { message });
219
+ return this.post(this.endpoints.khub.maps.mapId(mapId).feedback, { message });
148
220
  }
149
221
  rateTopic(mapId, tocId, type, value) {
150
- return this.post(`/api/khub/maps/${mapId}/topics/${tocId}/rating`, { type, value });
222
+ return this.post(this.endpoints.khub.maps.mapId(mapId).topics.tocId(tocId).rating, {
223
+ type, value
224
+ });
151
225
  }
152
226
  unrateTopic(mapId, tocId) {
153
- return this.delete(`/api/khub/maps/${mapId}/topics/${tocId}/rating`);
227
+ return this.delete(this.endpoints.khub.maps.mapId(mapId).topics.tocId(tocId).rating);
154
228
  }
155
229
  sendTopicFeedback(mapId, tocId, message) {
156
- return this.post(`/api/khub/maps/${mapId}/topics/${tocId}/feedback`, { message });
230
+ return this.post(this.endpoints.khub.maps.mapId(mapId).topics.tocId(tocId).feedback, { message });
231
+ }
232
+ getDocumentRating(docId) {
233
+ return this.get(this.endpoints.khub.documents.documentId(docId).rating);
157
234
  }
158
235
  rateDocument(docId, type, value) {
159
- return this.post(`/api/khub/documents/${docId}/rating`, { type, value });
236
+ return this.post(this.endpoints.khub.documents.documentId(docId).rating, { type, value });
160
237
  }
161
238
  unrateDocument(docId) {
162
- return this.delete(`/api/khub/documents/${docId}/rating`);
239
+ return this.delete(this.endpoints.khub.documents.documentId(docId).rating);
163
240
  }
164
241
  sendDocumentFeedback(docId, message) {
165
- return this.post(`/api/khub/documents/${docId}/feedback`, { message });
242
+ return this.post(this.endpoints.khub.documents.documentId(docId).feedback, { message });
166
243
  }
167
244
  get(endpoint) {
168
245
  return this.makeRequest("GET", endpoint);
@@ -176,12 +253,12 @@ export class FluidTopicsApi {
176
253
  delete(endpoint) {
177
254
  return this.makeRequest("DELETE", endpoint);
178
255
  }
256
+ makeAbsolute(endpoint) {
257
+ return this.tenantBaseUrl + endpoint.replace(/^\//, "");
258
+ }
179
259
  async fetch(endpoint, init) {
180
260
  const requestInit = init;
181
- if (!endpoint.startsWith("/")) {
182
- endpoint = "/" + endpoint;
183
- }
184
- return await fetch(this.tenantBaseUrl + endpoint, {
261
+ return await fetch(this.makeAbsolute(endpoint), {
185
262
  ...(requestInit ?? {}),
186
263
  headers: {
187
264
  ...this.defaultHeaders,
@@ -189,22 +266,27 @@ export class FluidTopicsApi {
189
266
  }
190
267
  });
191
268
  }
192
- async upload(method, endpoint, body, onProgress = () => undefined) {
193
- return new Promise((resolve, reject) => {
194
- let xhr = new XMLHttpRequest();
195
- xhr.onload = () => {
196
- if (xhr.status >= 200 && xhr.status < 300) {
197
- let data = xhr.getResponseHeader("Content-Type") === "application/json" ? JSON.parse(xhr.responseText) : xhr.responseText;
198
- resolve(data);
199
- }
200
- else {
201
- reject(new HttpError(xhr.status, xhr.statusText, xhr.responseText));
202
- }
203
- };
204
- xhr.upload.onprogress = (e) => onProgress(e);
205
- xhr.open(method, this.tenantBaseUrl + endpoint, true);
206
- xhr.send(body);
207
- });
269
+ upload(method, endpoint, body, onProgress = () => undefined) {
270
+ if (typeof XMLHttpRequest !== "undefined") {
271
+ return new Promise((resolve, reject) => {
272
+ let xhr = new XMLHttpRequest();
273
+ xhr.onload = () => {
274
+ if (xhr.status >= 200 && xhr.status < 300) {
275
+ let data = xhr.getResponseHeader("Content-Type") === "application/json" ? JSON.parse(xhr.responseText) : xhr.responseText;
276
+ resolve(data);
277
+ }
278
+ else {
279
+ reject(new HttpError(xhr.status, xhr.statusText, xhr.responseText));
280
+ }
281
+ };
282
+ xhr.upload.onprogress = (e) => onProgress(e);
283
+ xhr.open(method, this.makeAbsolute(endpoint), true);
284
+ xhr.send(body);
285
+ });
286
+ }
287
+ else {
288
+ return this.fetch(endpoint, { method, body }).then(handleError).then(getBody);
289
+ }
208
290
  }
209
291
  makeRequest(method, endpoint, data) {
210
292
  return this.fetch(endpoint, {
@@ -212,13 +294,17 @@ export class FluidTopicsApi {
212
294
  headers: {
213
295
  ...(data != null ? { "Content-Type": "application/json" } : {})
214
296
  },
215
- body: data != null ? JSON.stringify(data) : undefined
297
+ body: data != null ? JSON.stringify(data) : undefined,
298
+ credentials: this.authorization == null ? "include" : undefined
216
299
  })
217
300
  .then(handleError)
218
301
  .then(getBody);
219
302
  }
220
303
  fetchRawData(endpoint) {
221
- return fetch(this.tenantBaseUrl + endpoint, { headers: this.defaultHeaders })
304
+ return fetch(this.makeAbsolute(endpoint), {
305
+ headers: this.defaultHeaders,
306
+ credentials: this.authorization == null ? "include" : undefined
307
+ })
222
308
  .then(handleError)
223
309
  .then(response => response.arrayBuffer());
224
310
  }
@@ -24,7 +24,6 @@ export interface FtMap {
24
24
  editorialType: FtEditorialType;
25
25
  baseId: string;
26
26
  clusterId: string;
27
- shouldSplitCurrentPageToc?: boolean;
28
27
  title: string;
29
28
  lastPublication: string;
30
29
  lastEdition: string;
@@ -46,6 +45,7 @@ export interface FtMapStyles {
46
45
  export declare const isFtMapStyles: (o: any) => o is FtMapStyles;
47
46
  export interface FtTocNode {
48
47
  prettyUrl?: string;
48
+ hasRating?: boolean;
49
49
  tocId: string;
50
50
  children: Array<FtTocNode>;
51
51
  contentId: string;
@@ -120,7 +120,7 @@ export declare enum FtRatingType {
120
120
  export declare type FtRatingTypeKeys = keyof typeof FtRatingType;
121
121
  export declare const isFtRatingType: (o: any) => o is FtRatingType;
122
122
  export interface FtPublicationRating {
123
- date: Date;
123
+ date: Date | string;
124
124
  type: FtRatingType;
125
125
  value: number;
126
126
  }
@@ -141,7 +141,7 @@ export interface FtRatingSummary {
141
141
  }
142
142
  export declare const isFtRatingSummary: (o: any) => o is FtRatingSummary;
143
143
  export interface FtTopicRating {
144
- date: Date;
144
+ date: Date | string;
145
145
  tocId: string;
146
146
  type: FtRatingType;
147
147
  value: number;
@@ -374,6 +374,29 @@ export interface FtSuggestResults {
374
374
  suggestions: Array<FtSuggestResult>;
375
375
  }
376
376
  export declare const isFtSuggestResults: (o: any) => o is FtSuggestResults;
377
+ export declare enum FtUserRole {
378
+ PERSONAL_BOOK_USER = "PERSONAL_BOOK_USER",
379
+ PERSONAL_BOOK_SHARE_USER = "PERSONAL_BOOK_SHARE_USER",
380
+ HTML_EXPORT_USER = "HTML_EXPORT_USER",
381
+ PDF_EXPORT_USER = "PDF_EXPORT_USER",
382
+ SAVED_SEARCH_USER = "SAVED_SEARCH_USER",
383
+ COLLECTION_USER = "COLLECTION_USER",
384
+ OFFLINE_USER = "OFFLINE_USER",
385
+ ANALYTICS_USER = "ANALYTICS_USER",
386
+ BETA_USER = "BETA_USER",
387
+ DEBUG_USER = "DEBUG_USER",
388
+ PRINT_USER = "PRINT_USER",
389
+ RATING_USER = "RATING_USER",
390
+ FEEDBACK_USER = "FEEDBACK_USER",
391
+ CONTENT_PUBLISHER = "CONTENT_PUBLISHER",
392
+ KHUB_ADMIN = "KHUB_ADMIN",
393
+ USERS_ADMIN = "USERS_ADMIN",
394
+ PORTAL_ADMIN = "PORTAL_ADMIN",
395
+ ADMIN = "ADMIN",
396
+ DEVELOPER = "DEVELOPER"
397
+ }
398
+ export declare type FtUserRoleKeys = keyof typeof FtUserRole;
399
+ export declare const isFtUserRole: (o: any) => o is FtUserRole;
377
400
  export interface FtAuthenticationIdentifier {
378
401
  identifier: string;
379
402
  realm: string;
@@ -30,7 +30,6 @@ export const isFtMap = (o) => {
30
30
  && (isFtEditorialType(o.editorialType))
31
31
  && (isString(o.baseId))
32
32
  && (isString(o.clusterId))
33
- && (o.shouldSplitCurrentPageToc == null || isBoolean(o.shouldSplitCurrentPageToc))
34
33
  && (isString(o.title))
35
34
  && (isString(o.lastPublication))
36
35
  && (isString(o.lastEdition))
@@ -53,6 +52,7 @@ export const isFtMapStyles = (o) => {
53
52
  export const isFtTocNode = (o) => {
54
53
  return isObject(o)
55
54
  && (o.prettyUrl == null || isString(o.prettyUrl))
55
+ && (o.hasRating == null || isBoolean(o.hasRating))
56
56
  && (isString(o.tocId))
57
57
  && ((Array.isArray(o.children)
58
58
  && o.children.every((v) => isFtTocNode(v))))
@@ -423,6 +423,32 @@ export const isFtSuggestResults = (o) => {
423
423
  && ((Array.isArray(o.suggestions)
424
424
  && o.suggestions.every((v) => isFtSuggestResult(v))));
425
425
  };
426
+ // From: Role
427
+ export var FtUserRole;
428
+ (function (FtUserRole) {
429
+ FtUserRole["PERSONAL_BOOK_USER"] = "PERSONAL_BOOK_USER";
430
+ FtUserRole["PERSONAL_BOOK_SHARE_USER"] = "PERSONAL_BOOK_SHARE_USER";
431
+ FtUserRole["HTML_EXPORT_USER"] = "HTML_EXPORT_USER";
432
+ FtUserRole["PDF_EXPORT_USER"] = "PDF_EXPORT_USER";
433
+ FtUserRole["SAVED_SEARCH_USER"] = "SAVED_SEARCH_USER";
434
+ FtUserRole["COLLECTION_USER"] = "COLLECTION_USER";
435
+ FtUserRole["OFFLINE_USER"] = "OFFLINE_USER";
436
+ FtUserRole["ANALYTICS_USER"] = "ANALYTICS_USER";
437
+ FtUserRole["BETA_USER"] = "BETA_USER";
438
+ FtUserRole["DEBUG_USER"] = "DEBUG_USER";
439
+ FtUserRole["PRINT_USER"] = "PRINT_USER";
440
+ FtUserRole["RATING_USER"] = "RATING_USER";
441
+ FtUserRole["FEEDBACK_USER"] = "FEEDBACK_USER";
442
+ FtUserRole["CONTENT_PUBLISHER"] = "CONTENT_PUBLISHER";
443
+ FtUserRole["KHUB_ADMIN"] = "KHUB_ADMIN";
444
+ FtUserRole["USERS_ADMIN"] = "USERS_ADMIN";
445
+ FtUserRole["PORTAL_ADMIN"] = "PORTAL_ADMIN";
446
+ FtUserRole["ADMIN"] = "ADMIN";
447
+ FtUserRole["DEVELOPER"] = "DEVELOPER";
448
+ })(FtUserRole || (FtUserRole = {}));
449
+ export const isFtUserRole = (o) => {
450
+ return ["PERSONAL_BOOK_USER", "PERSONAL_BOOK_SHARE_USER", "HTML_EXPORT_USER", "PDF_EXPORT_USER", "SAVED_SEARCH_USER", "COLLECTION_USER", "OFFLINE_USER", "ANALYTICS_USER", "BETA_USER", "DEBUG_USER", "PRINT_USER", "RATING_USER", "FEEDBACK_USER", "CONTENT_PUBLISHER", "KHUB_ADMIN", "USERS_ADMIN", "PORTAL_ADMIN", "ADMIN", "DEVELOPER"].includes(o);
451
+ };
426
452
  export const isFtAuthenticationIdentifier = (o) => {
427
453
  return isObject(o)
428
454
  && (isString(o.identifier))
@@ -1,3 +1,9 @@
1
+ export interface FtReaderConfiguration {
2
+ loadAfterLastVisibleTopic: number;
3
+ feedbackMailsSentByFluidTopics: boolean;
4
+ loadBeforeFirstVisibleTopic: number;
5
+ }
6
+ export declare const isFtReaderConfiguration: (o: any) => o is FtReaderConfiguration;
1
7
  export interface FtAuthenticatedSession {
2
8
  authenticationIdentifier: any;
3
9
  profile: FtUserProfile;
@@ -6,7 +12,7 @@ export declare const isFtAuthenticatedSession: (o: any) => o is FtAuthenticatedS
6
12
  export interface FtSession {
7
13
  authenticationIdentifier?: any;
8
14
  idleTimeoutInMillis: number;
9
- profile?: FtUserProfile;
15
+ profile: FtUserProfile;
10
16
  sessionAuthenticated: boolean;
11
17
  }
12
18
  export declare const isFtSession: (o: any) => o is FtSession;
@@ -14,7 +20,7 @@ export interface FtUserProfile {
14
20
  emailAddress?: string;
15
21
  displayName?: string;
16
22
  roles: Array<any>;
17
- userId: string;
23
+ userId?: string;
18
24
  }
19
25
  export declare const isFtUserProfile: (o: any) => o is FtUserProfile;
20
26
  export interface FtMapAttachment {
@@ -39,6 +45,7 @@ export interface FtPaginatedToc {
39
45
  export declare const isFtPaginatedToc: (o: any) => o is FtPaginatedToc;
40
46
  export interface FtPaginatedTocNode {
41
47
  prettyUrl?: string;
48
+ hasRating?: boolean;
42
49
  pageToc?: Array<any>;
43
50
  tocId?: string;
44
51
  children: Array<FtPaginatedTocNode>;
@@ -2,6 +2,12 @@ const isObject = (o) => typeof o === "object" && o != null;
2
2
  const isBoolean = (o) => typeof o === "boolean";
3
3
  const isNumber = (o) => typeof o === "number";
4
4
  const isString = (o) => typeof o === "string";
5
+ export const isFtReaderConfiguration = (o) => {
6
+ return isObject(o)
7
+ && (isNumber(o.loadAfterLastVisibleTopic))
8
+ && (isBoolean(o.feedbackMailsSentByFluidTopics))
9
+ && (isNumber(o.loadBeforeFirstVisibleTopic));
10
+ };
5
11
  export const isFtAuthenticatedSession = (o) => {
6
12
  return isObject(o)
7
13
  && (isFtUserProfile(o.profile));
@@ -9,7 +15,7 @@ export const isFtAuthenticatedSession = (o) => {
9
15
  export const isFtSession = (o) => {
10
16
  return isObject(o)
11
17
  && (isNumber(o.idleTimeoutInMillis))
12
- && (o.profile == null || isFtUserProfile(o.profile))
18
+ && (isFtUserProfile(o.profile))
13
19
  && (isBoolean(o.sessionAuthenticated));
14
20
  };
15
21
  export const isFtUserProfile = (o) => {
@@ -17,7 +23,7 @@ export const isFtUserProfile = (o) => {
17
23
  && (o.emailAddress == null || isString(o.emailAddress))
18
24
  && (o.displayName == null || isString(o.displayName))
19
25
  && ((Array.isArray(o.roles)))
20
- && (isString(o.userId));
26
+ && (o.userId == null || isString(o.userId));
21
27
  };
22
28
  export const isFtMapAttachment = (o) => {
23
29
  return isObject(o)
@@ -44,6 +50,7 @@ export const isFtPaginatedToc = (o) => {
44
50
  export const isFtPaginatedTocNode = (o) => {
45
51
  return isObject(o)
46
52
  && (o.prettyUrl == null || isString(o.prettyUrl))
53
+ && (o.hasRating == null || isBoolean(o.hasRating))
47
54
  && (o.pageToc == null || (Array.isArray(o.pageToc)))
48
55
  && (o.tocId == null || isString(o.tocId))
49
56
  && ((Array.isArray(o.children)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-topics/public-api",
3
- "version": "1.0.27",
3
+ "version": "1.0.29",
4
4
  "description": "Fluid Topics Public API",
5
5
  "author": "Fluid Topics dev team <opensource@antidot.net>",
6
6
  "license": "LGPL-3.0-only",