@gyldendalas/gyldendal-divine-api 0.1.1 → 0.1.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/dist/index.cjs +172 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +146 -5
- package/dist/index.d.ts +146 -5
- package/dist/index.js +168 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -22,7 +22,10 @@ var index_exports = {};
|
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
TaggingService: () => TaggingService,
|
|
24
24
|
UserFolders: () => UserFolders,
|
|
25
|
-
|
|
25
|
+
UserSettingsBookmarks: () => UserSettingsBookmarks,
|
|
26
|
+
UserSettingsClientSettings: () => UserSettingsClientSettings,
|
|
27
|
+
UserSettingsContinue: () => UserSettingsContinue,
|
|
28
|
+
UserSettingsMRU: () => UserSettingsMRU
|
|
26
29
|
});
|
|
27
30
|
module.exports = __toCommonJS(index_exports);
|
|
28
31
|
|
|
@@ -110,6 +113,9 @@ var BaseService = class {
|
|
|
110
113
|
}) {
|
|
111
114
|
const method = "DELETE";
|
|
112
115
|
const response = await this.callAsync({ url, body: null, method, headers, timeout });
|
|
116
|
+
if (response.status === 204) {
|
|
117
|
+
return {};
|
|
118
|
+
}
|
|
113
119
|
return response.json();
|
|
114
120
|
}
|
|
115
121
|
async callAsync({
|
|
@@ -141,11 +147,10 @@ var base_service_default = BaseService;
|
|
|
141
147
|
var TaggingService = class extends base_service_default {
|
|
142
148
|
discoverUrlPrefix() {
|
|
143
149
|
switch (this.environment) {
|
|
144
|
-
case "local":
|
|
145
|
-
return "http://localhost:4000";
|
|
146
150
|
case "production":
|
|
147
151
|
return `https://tagging.services.${this.baseDomain}`;
|
|
148
152
|
case "development":
|
|
153
|
+
case "local":
|
|
149
154
|
return `https://staging-tagging.services.${this.baseDomain}`;
|
|
150
155
|
default:
|
|
151
156
|
throw new Error(`Unknown environment: ${this.environment}`);
|
|
@@ -205,27 +210,39 @@ var TaggingService = class extends base_service_default {
|
|
|
205
210
|
};
|
|
206
211
|
var tagging_service_default = TaggingService;
|
|
207
212
|
|
|
208
|
-
// src/services/
|
|
209
|
-
var
|
|
213
|
+
// src/services/user_settings_base.ts
|
|
214
|
+
var UserSettingsBase = class extends base_service_default {
|
|
210
215
|
discoverUrlPrefix() {
|
|
211
216
|
switch (this.environment) {
|
|
212
|
-
case "local":
|
|
213
|
-
return "http://localhost:4000";
|
|
214
217
|
case "production":
|
|
215
218
|
return `https://user-settings-service.services.${this.baseDomain}`;
|
|
216
219
|
case "development":
|
|
217
|
-
|
|
220
|
+
case "local":
|
|
221
|
+
return `https://staging-user-settings-service.services.${this.baseDomain}`;
|
|
218
222
|
default:
|
|
219
223
|
throw new Error(`Unknown environment: ${this.environment}`);
|
|
220
224
|
}
|
|
221
225
|
}
|
|
226
|
+
};
|
|
227
|
+
var user_settings_base_default = UserSettingsBase;
|
|
228
|
+
|
|
229
|
+
// src/services/user_settings_clientsettings.ts
|
|
230
|
+
var UserSettingsClientSettings = class extends user_settings_base_default {
|
|
222
231
|
async getSettings({
|
|
223
232
|
isbn,
|
|
224
233
|
timeout = 5e3
|
|
225
234
|
}) {
|
|
226
235
|
const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
|
|
227
236
|
const headers = new Headers();
|
|
228
|
-
|
|
237
|
+
try {
|
|
238
|
+
return await this.getAsync({ url, headers, timeout });
|
|
239
|
+
} catch (Error2) {
|
|
240
|
+
if (Error2 instanceof HTTPError && Error2.response.status === 404) {
|
|
241
|
+
return {};
|
|
242
|
+
} else {
|
|
243
|
+
throw HTTPError;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
229
246
|
}
|
|
230
247
|
async setSettings({
|
|
231
248
|
isbn,
|
|
@@ -237,6 +254,148 @@ var UserSettings = class extends base_service_default {
|
|
|
237
254
|
headers.set("Content-Type", "application/json");
|
|
238
255
|
return await this.putAsync({ url, headers, body: JSON.stringify(settings), timeout });
|
|
239
256
|
}
|
|
257
|
+
async deleteSettings({
|
|
258
|
+
isbn,
|
|
259
|
+
timeout = 5e3
|
|
260
|
+
}) {
|
|
261
|
+
const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
|
|
262
|
+
const headers = new Headers();
|
|
263
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
// src/services/user_settings_bookmarks.ts
|
|
269
|
+
var UserSettingsBookmarks = class extends user_settings_base_default {
|
|
270
|
+
async setBookmark({
|
|
271
|
+
isbn,
|
|
272
|
+
bookmark,
|
|
273
|
+
externalUserId,
|
|
274
|
+
timeout = 5e3
|
|
275
|
+
}) {
|
|
276
|
+
const url = `${this.getUrlPrefix()}/bookmark/isbn/${isbn}`;
|
|
277
|
+
const headers = new Headers();
|
|
278
|
+
if (externalUserId) {
|
|
279
|
+
headers.set("external-user-id", externalUserId);
|
|
280
|
+
}
|
|
281
|
+
headers.set("Content-Type", "application/json");
|
|
282
|
+
return await this.putAsync({ url, headers, body: JSON.stringify(bookmark), timeout });
|
|
283
|
+
}
|
|
284
|
+
async deleteBookmark({
|
|
285
|
+
isbn,
|
|
286
|
+
pageId,
|
|
287
|
+
contentId,
|
|
288
|
+
timeout = 5e3
|
|
289
|
+
}) {
|
|
290
|
+
const url = `${this.getUrlPrefix()}/bookmark/isbn/${isbn}/page/${pageId}/content/${contentId}`;
|
|
291
|
+
const headers = new Headers();
|
|
292
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
async getBookmark({
|
|
296
|
+
isbn,
|
|
297
|
+
pageId,
|
|
298
|
+
timeout = 5e3
|
|
299
|
+
}) {
|
|
300
|
+
if (!isbn && pageId) {
|
|
301
|
+
throw new Error("The isbn parameter is required if pageId is provided.");
|
|
302
|
+
}
|
|
303
|
+
let url = `${this.getUrlPrefix()}/bookmark/`;
|
|
304
|
+
if (isbn) {
|
|
305
|
+
url += `isbn/${isbn}`;
|
|
306
|
+
}
|
|
307
|
+
if (pageId) {
|
|
308
|
+
url += `/page/${pageId}`;
|
|
309
|
+
}
|
|
310
|
+
const headers = new Headers();
|
|
311
|
+
return await this.getAsync({ url, headers, timeout });
|
|
312
|
+
}
|
|
313
|
+
// Favourites are bookmarks that are ISBN specific, with a pageId of 0.
|
|
314
|
+
async getFavourite({
|
|
315
|
+
timeout = 5e3
|
|
316
|
+
}) {
|
|
317
|
+
let url = `${this.getUrlPrefix()}/bookmark/favourite`;
|
|
318
|
+
const headers = new Headers();
|
|
319
|
+
return await this.getAsync({ url, headers, timeout });
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
// src/services/user_settings_continue.ts
|
|
324
|
+
var UserSettingsContinue = class extends user_settings_base_default {
|
|
325
|
+
async setContinue({
|
|
326
|
+
isbn,
|
|
327
|
+
pageId,
|
|
328
|
+
externalUserId,
|
|
329
|
+
timeout = 5e3
|
|
330
|
+
}) {
|
|
331
|
+
const continueBody = {
|
|
332
|
+
pageId
|
|
333
|
+
};
|
|
334
|
+
const url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;
|
|
335
|
+
const headers = new Headers();
|
|
336
|
+
if (externalUserId) {
|
|
337
|
+
headers.set("external-user-id", externalUserId);
|
|
338
|
+
}
|
|
339
|
+
headers.set("Content-Type", "application/json");
|
|
340
|
+
return await this.putAsync({ url, headers, body: JSON.stringify(continueBody), timeout });
|
|
341
|
+
}
|
|
342
|
+
async deleteContinue({
|
|
343
|
+
isbn,
|
|
344
|
+
timeout = 5e3
|
|
345
|
+
}) {
|
|
346
|
+
const url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;
|
|
347
|
+
const headers = new Headers();
|
|
348
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
async getContinue({
|
|
352
|
+
isbn,
|
|
353
|
+
timeout = 5e3
|
|
354
|
+
}) {
|
|
355
|
+
let url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;
|
|
356
|
+
const headers = new Headers();
|
|
357
|
+
try {
|
|
358
|
+
return await this.getAsync({ url, headers, timeout });
|
|
359
|
+
} catch (Error2) {
|
|
360
|
+
if (Error2 instanceof HTTPError && Error2.response.status === 404) {
|
|
361
|
+
return {};
|
|
362
|
+
} else {
|
|
363
|
+
throw HTTPError;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
// src/services/user_settings_mru.ts
|
|
370
|
+
var UserSettingsMRU = class extends user_settings_base_default {
|
|
371
|
+
async setMRU({
|
|
372
|
+
mru,
|
|
373
|
+
externalUserId,
|
|
374
|
+
timeout = 5e3
|
|
375
|
+
}) {
|
|
376
|
+
const url = `${this.getUrlPrefix()}/mru`;
|
|
377
|
+
const headers = new Headers();
|
|
378
|
+
if (externalUserId) {
|
|
379
|
+
headers.set("external-user-id", externalUserId);
|
|
380
|
+
}
|
|
381
|
+
headers.set("Content-Type", "application/json");
|
|
382
|
+
return await this.postAsync({ url, headers, body: JSON.stringify(mru), timeout });
|
|
383
|
+
}
|
|
384
|
+
async clearMRU({
|
|
385
|
+
timeout = 5e3
|
|
386
|
+
}) {
|
|
387
|
+
const url = `${this.getUrlPrefix()}/mru`;
|
|
388
|
+
const headers = new Headers();
|
|
389
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
async getMRU({
|
|
393
|
+
timeout = 5e3
|
|
394
|
+
}) {
|
|
395
|
+
let url = `${this.getUrlPrefix()}/mru`;
|
|
396
|
+
const headers = new Headers();
|
|
397
|
+
return await this.getAsync({ url, headers, timeout });
|
|
398
|
+
}
|
|
240
399
|
};
|
|
241
400
|
|
|
242
401
|
// src/services/highlevel/tagging/user_folders.ts
|
|
@@ -593,6 +752,9 @@ var UserFolders = class extends tagging_service_default {
|
|
|
593
752
|
0 && (module.exports = {
|
|
594
753
|
TaggingService,
|
|
595
754
|
UserFolders,
|
|
596
|
-
|
|
755
|
+
UserSettingsBookmarks,
|
|
756
|
+
UserSettingsClientSettings,
|
|
757
|
+
UserSettingsContinue,
|
|
758
|
+
UserSettingsMRU
|
|
597
759
|
});
|
|
598
760
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/user_settings.ts","../src/services/highlevel/tagging/user_folders.ts"],"sourcesContent":["export * from 'services/tagging_service.js';\nexport * from 'services/user_settings.js';\nexport * from 'services/highlevel/tagging/user_folders.js';\n","class HTTPError extends Error {\n public response: Response;\n \n constructor(message: string, response: Response) {\n super();\n this.message = message;\n this.response = response;\n }\n}\n\nexport class BaseService {\n public bearerToken: string | undefined;\n public apiKey: string | undefined;\n public serviceUrl: string | undefined;\n public environment: string;\n public myAccountId: string;\n public baseDomain: string;\n\n constructor({\n bearerToken = undefined,\n apiKey = undefined,\n serviceUrl = undefined,\n environment = 'production',\n myAccountId = 'SYSTIMEMYACCOUNT',\n baseDomain = 'systime.dk',\n } : {\n bearerToken?: string,\n apiKey?: string,\n serviceUrl?: string,\n environment: string,\n myAccountId: string,\n baseDomain?: string\n }) {\n this.bearerToken = bearerToken;\n this.apiKey = apiKey;\n this.serviceUrl = serviceUrl;\n this.environment = environment;\n this.myAccountId = myAccountId;\n this.baseDomain = baseDomain;\n }\n\n protected discoverUrlPrefix(): string {\n throw new Error('Method not implemented.');\n }\n\n public getUrlPrefix(): string {\n // If the URL has been explicitly set, return it.\n if (this.serviceUrl) {\n return this.serviceUrl;\n }\n return this.discoverUrlPrefix()\n }\n\n public async addAuthHeaders(requestHeaders: Headers): Promise<Headers> {\n if (this.bearerToken) {\n requestHeaders.set('Authorization', `Bearer ${this.bearerToken}`);\n } else if (this.apiKey) {\n requestHeaders.set('x-api-key', this.apiKey);\n }\n return requestHeaders;\n }\n\n async getAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'GET';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async putAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'PUT';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async postAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'POST';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async deleteAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'DELETE';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n headers = await this.addAuthHeaders(headers);\n const response = await fetch(url, {\n\t method: method,\n body: body,\n headers: headers,\n signal: AbortSignal.timeout(timeout)\n });\n\n if (!response.ok) {\n\t\tthrow new HTTPError(`Got ${response.status} while calling ${response.url}`, response);\n }\n return response;\n }\n}\nexport default BaseService;\n","import BaseService from './base_service.js';\n\nexport interface Tag {\n identity: string;\n resource_type: string;\n resource_name: string;\n tag_name: string;\n tag_value: string;\n}\n\nexport interface TagOutput extends Tag {\n created_at: number;\n}\n\nexport class TaggingService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'local':\n return 'http://localhost:4000';\n case 'production':\n return `https://tagging.services.${this.baseDomain}`;\n case 'development':\n return `https://staging-tagging.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async getTagsByResource(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n tag_name?: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<TagOutput[]> {\n const url = `${this.getUrlPrefix()}/tags/by_resource/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as TagOutput[];\n }\n\n async getTagsByName(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n tag_name: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<TagOutput[]> {\n const url = `${this.getUrlPrefix()}/tags/by_tag_name/${identity}/${tag_name}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as TagOutput[];\n }\n\n async createTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<TagOutput> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.postAsync({url, headers, body: JSON.stringify(tag), timeout}) as TagOutput;\n }\n\n async updateTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<TagOutput> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.putAsync({url, headers, body: JSON.stringify(tag), timeout}) as TagOutput;\n }\n\n async deleteTag(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n resource_type?: string,\n resource_name?: string,\n tag_name?: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/tags/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n await this.deleteAsync({url, headers, timeout});\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport class UserSettings extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'local':\n return 'http://localhost:4000';\n case 'production':\n return `https://user-settings-service.services.${this.baseDomain}`;\n case 'development':\n return `https://${this.environment}-user-settings-service.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async getSettings(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<object> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout});\n }\n\n async setSettings(\n {\n isbn,\n settings,\n timeout = 5000\n }: \n {\n isbn: string,\n settings: object,\n timeout?: number\n }\n ): Promise<object> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(settings), timeout});\n }\n}\n\nexport default UserSettings;\n","import TaggingService from '../../tagging_service.js';\nimport {v4 as uuidv4} from 'uuid';\n\nexport interface FolderObject {\n created_at: number;\n}\n\nexport interface Folder extends FolderObject {\n name: string;\n color: string;\n uuid: string;\n parent?: string;\n}\n\nexport interface FolderContent extends FolderObject {\n type: string;\n identifier: string;\n folder_uuid: string;\n}\n\n/**\n * UserFolders is a service that allows users to create folders in their account. It's built on top of the Tagging service.\n * Folders are created with a name and an optional parent folder. If no parent folder is provided, the folder is created at the root level.\n * Folders are created with a unique UUID that can be used to reference the folder in future requests. The folder properties are stored as a base64 encoded JSON string.\n**/\nexport class UserFolders extends TaggingService {\n private readonly hasNoParent: string = '-';\n private identity?: string = undefined;\n\n async getIdentity() : Promise<string> {\n if (this.identity) {\n return this.identity;\n }\n\n if (this.bearerToken) {\n const tokenParts = this.bearerToken.split('.');\n const payload = Buffer.from(tokenParts[1], 'base64').toString();\n const payloadObject = JSON.parse(payload);\n // The identity is the keyword user, the user's authns and the ekeysuserid (user) concatenated with an underscore\n // This value is enforced by the Tagging service and this is the only identity\n // that the Service will accept when invoked with a user specific bearer token.\n return `user_${payloadObject.authns}_${payloadObject.user}`;\n }\n\n throw new Error('The UserFolders service must be invoked with a valid bearer token');\n }\n\n /**\n * Create a folder.\n * @param folder_name The name of the folder.\n * @param parent_folder_uuid The UUID of the parent folder. If no parent folder is provided, the folder is created at the root level.\n * @param color The color of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder\n **/\n async createFolder(\n {\n folder_name,\n parent_folder_uuid,\n color,\n timeout = 3000\n }:\n {\n folder_name: string,\n color: string,\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const folder_payload = JSON.stringify({\"folder\": folder_name, \"color\": color});\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: uuidv4(),\n tag_name: parent_folder_uuid ?? this.hasNoParent,\n tag_value: Buffer.from(folder_payload).toString('base64'),\n },\n timeout\n }\n );\n return {name: folder_name, uuid: tag['resource_name'], parent: parent_folder_uuid, created_at: tag['created_at']} as Folder;\n }\n\n /**\n * Update a folder. Only name and color can be changed.\n *\n * @param folder_uuid The UUID of the folder.\n * @param folder_name The new name of the folder.\n * @param color The new color of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder\n **/\n async updateFolder(\n {\n folder_uuid,\n folder_name,\n color,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n folder_name?: string,\n color?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const tags = await this.getTagsByResource(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n\n if (tags.length === 0) {\n throw new Error(`Folder with UUID ${folder_uuid} not found`);\n }\n\n const tag = tags[0];\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n const new_folder_name = folder_name ?? folder_payload['folder'];\n const new_color = color ?? folder_payload['color'];\n\n const new_folder_payload = JSON.stringify({\"folder\": new_folder_name, \"color\": new_color});\n\n const updatedTag = await this.updateTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n tag_name: tag['tag_name'],\n tag_value: Buffer.from(new_folder_payload).toString('base64'),\n },\n timeout\n }\n );\n\n const parent = tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'];\n return {name: new_folder_name, uuid: folder_uuid, parent: parent, created_at: updatedTag['created_at']} as Folder;\n }\n\n /**\n * List all folders in the user's account.\n * \n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder[]\n **/\n async listAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<Folder[]> {\n const tags = await this.getTagsByResource(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n\n let folders = [];\n\n for (const tag of tags) {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n folders.push(\n {\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'],\n created_at: tag['created_at']\n } as Folder\n );\n }\n\n return folders;\n }\n\n /**\n * List the next level of folders in the user's account.\n *\n * @param parent_folder_uuid The UUID of the parent folder. If no parent folder is provided, the folder is created at the root level.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder[]\n **/\n async listNextFolderLevel(\n {\n parent_folder_uuid,\n timeout = 3000\n }:\n {\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder[]> {\n let tags;\n if (!parent_folder_uuid) {\n parent_folder_uuid = this.hasNoParent;\n }\n\n tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n tag_name: parent_folder_uuid,\n timeout\n }\n );\n\n let folders = [];\n\n for (const tag of tags) {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n folders.push(\n {\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'],\n created_at: tag['created_at']\n } as Folder\n );\n }\n\n return folders;\n }\n\n /**\n * List the content of a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n* @return (Folder | FolderContent)[]\n **/\n async getFolderContent(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<(Folder|FolderContent)[]> {\n let tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n tag_name: folder_uuid,\n timeout\n }\n );\n\n let content = [];\n\n for (const tag of tags) {\n if (tag['resource_type'] === 'myaccount_user_folder') {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n content.push({\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'],\n created_at: tag['created_at']\n } as Folder)\n } else {\n content.push(\n {\n type: tag['resource_type'],\n identifier: tag['resource_name'],\n folder_uuid: tag['tag_name'],\n created_at: tag['created_at']\n } as FolderContent\n );\n }\n }\n\n return content;\n }\n\n /**\n * Add a book to a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param isbn The ISBN of the book.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return FolderContent\n **/\n async addInternetbookToFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n return await this.addContentToFolder(\n {\n folder_uuid,\n resource_type: 'internetbook',\n resource_name: isbn,\n timeout\n },\n );\n }\n\n /**\n * Remove a book from a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param isbn The ISBN of the book.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async removeInternetbookFromFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.removeContentFromFolder(\n {\n folder_uuid,\n resource_type: 'internetbook',\n resource_name: isbn,\n timeout\n },\n );\n }\n\n /**\n * Create a new folder content element.\n *\n * @param folder_uuid The UUID of the folder.\n * @param resource_name The name of the resource.\n * @param resource_type The type of the resource.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return FolderContent\n **/\n async addContentToFolder(\n {\n folder_uuid,\n resource_type,\n resource_name,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: folder_uuid,\n tag_value: 'MYACCOUNT_USER_FOLDER'\n },\n timeout\n }\n );\n return {type: resource_type, identifier: resource_name, folder_uuid, created_at: tag['created_at']} as FolderContent;\n }\n\n /**\n * Remove a folder content element.\n *\n * @param folder_uuid The UUID of the folder.\n * @param resource_name The name of the resource.\n * @param resource_type The type of the resource.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async removeContentFromFolder(\n {\n folder_uuid,\n resource_name,\n resource_type,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: folder_uuid,\n timeout\n }\n );\n }\n\n /**\n * Delete a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async deleteFolder(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n }\n\n /**\n * Delete all folders. Note, this will not delete the content of the folders.\n *\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async deleteAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n }\n}\n\nexport default UserFolders;\n"],"mappings":"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","names":["uuidv4"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/user_settings_base.ts","../src/services/user_settings_clientsettings.ts","../src/services/user_settings_bookmarks.ts","../src/services/user_settings_continue.ts","../src/services/user_settings_mru.ts","../src/services/highlevel/tagging/user_folders.ts"],"sourcesContent":["export * from 'services/tagging_service.js';\nexport * from 'services/user_settings_clientsettings.js';\nexport * from 'services/user_settings_bookmarks.js';\nexport * from 'services/user_settings_continue.js';\nexport * from 'services/user_settings_mru.js';\nexport * from 'services/highlevel/tagging/user_folders.js';\n","export class HTTPError extends Error {\n public response: Response;\n \n constructor(message: string, response: Response) {\n super();\n this.message = message;\n this.response = response;\n }\n}\n\nexport class BaseService {\n public bearerToken: string | undefined;\n public apiKey: string | undefined;\n public serviceUrl: string | undefined;\n public environment: string;\n public myAccountId: string;\n public baseDomain: string;\n\n constructor({\n bearerToken = undefined,\n apiKey = undefined,\n serviceUrl = undefined,\n environment = 'production',\n myAccountId = 'SYSTIMEMYACCOUNT',\n baseDomain = 'systime.dk',\n } : {\n bearerToken?: string,\n apiKey?: string,\n serviceUrl?: string,\n environment: string,\n myAccountId: string,\n baseDomain?: string\n }) {\n this.bearerToken = bearerToken;\n this.apiKey = apiKey;\n this.serviceUrl = serviceUrl;\n this.environment = environment;\n this.myAccountId = myAccountId;\n this.baseDomain = baseDomain;\n }\n\n protected discoverUrlPrefix(): string {\n throw new Error('Method not implemented.');\n }\n\n public getUrlPrefix(): string {\n // If the URL has been explicitly set, return it.\n if (this.serviceUrl) {\n return this.serviceUrl;\n }\n return this.discoverUrlPrefix()\n }\n\n public async addAuthHeaders(requestHeaders: Headers): Promise<Headers> {\n if (this.bearerToken) {\n requestHeaders.set('Authorization', `Bearer ${this.bearerToken}`);\n } else if (this.apiKey) {\n requestHeaders.set('x-api-key', this.apiKey);\n }\n return requestHeaders;\n }\n\n async getAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'GET';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async putAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'PUT';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async postAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'POST';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async deleteAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'DELETE';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n if (response.status === 204) {\n return {};\n }\n return response.json();\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n headers = await this.addAuthHeaders(headers);\n const response = await fetch(url, {\n\t method: method,\n body: body,\n headers: headers,\n signal: AbortSignal.timeout(timeout)\n });\n\n if (!response.ok) {\n\t\tthrow new HTTPError(`Got ${response.status} while calling ${response.url}`, response);\n }\n return response;\n }\n}\nexport default BaseService;\n","import BaseService from './base_service.js';\n\nexport interface Tag {\n identity: string;\n resource_type: string;\n resource_name: string;\n tag_name: string;\n tag_value: string;\n}\n\nexport interface TagOutput extends Tag {\n created_at: number;\n}\n\nexport class TaggingService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://tagging.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n return `https://staging-tagging.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async getTagsByResource(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n tag_name?: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<TagOutput[]> {\n const url = `${this.getUrlPrefix()}/tags/by_resource/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as TagOutput[];\n }\n\n async getTagsByName(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n tag_name: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<TagOutput[]> {\n const url = `${this.getUrlPrefix()}/tags/by_tag_name/${identity}/${tag_name}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as TagOutput[];\n }\n\n async createTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<TagOutput> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.postAsync({url, headers, body: JSON.stringify(tag), timeout}) as TagOutput;\n }\n\n async updateTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<TagOutput> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.putAsync({url, headers, body: JSON.stringify(tag), timeout}) as TagOutput;\n }\n\n async deleteTag(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n resource_type?: string,\n resource_name?: string,\n tag_name?: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/tags/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n await this.deleteAsync({url, headers, timeout});\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport class UserSettingsBase extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://user-settings-service.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n return `https://staging-user-settings-service.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\n\nexport default UserSettingsBase;\n","import UserSettingsBase from './user_settings_base.js';\nimport {HTTPError} from './base_service.js'\n\nexport interface ClientSettings {\n readabilities?: Readability;\n darkMode?: boolean;\n displayMode?: string;\n enableKeyboardShortcuts?: boolean;\n showBookmarks?: boolean;\n showNoteHighlights?: boolean;\n featureGalleryVersion?: number;\n readAloudStore?: ReadAloudStore;\n leftDrawerWidth?: number;\n recentSearches?: string[];\n materialListImagesView?: string;\n frontPageSections?: FrontPageSection[];\n activePublicationFilters?: ActivePublicationFilters;\n cardsView?: string;\n cardsSorting?: string;\n foldersView?: string;\n foldersSorting?: string;\n onboardingPromptTime?: string;\n}\n\nexport interface ActivePublicationFilters {\n educations?: string[];\n displaySubjects?: string[];\n categoriesNames?: string[];\n categoriesLevels?: string[];\n publishers?: string[];\n}\n\nexport interface Readability {\n letterSpacing?: number;\n lineHeight?: number;\n textSize?: number;\n fontFamily?: fontFamily;\n}\n\nexport interface fontFamily {\n name?: string;\n defaultSize?: string;\n url?: string;\n}\n\nexport interface ReadAloudStore {\n currentVoiceSelection?: currentVoiceSelection;\n currentSpeedSelection?: currentSpeedSelection;\n}\n\nexport interface currentSpeedSelection {\n speed?: number;\n text?: string;\n}\n\nexport interface currentVoiceSelection {\n voice?: number;\n gender?: number;\n language?: number;\n}\n\nexport interface FrontPageSection {\n changeable?: boolean;\n code?: string;\n enabled?: boolean;\n name?: string;\n position?: number;\n}\n\nexport class UserSettingsClientSettings extends UserSettingsBase {\n async getSettings(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<ClientSettings> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n try {\n return await this.getAsync({url, headers, timeout}) as ClientSettings;\n } catch (Error) {\n if (Error instanceof HTTPError && Error.response.status === 404) {\n return {} as ClientSettings;\n } else {\n throw HTTPError;\n }\n }\n }\n\n async setSettings(\n {\n isbn,\n settings,\n timeout = 5000\n }: \n {\n isbn: string,\n settings: ClientSettings,\n timeout?: number\n }\n ): Promise<ClientSettings> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(settings), timeout}) as ClientSettings;\n }\n\n async deleteSettings(\n {\n isbn,\n timeout = 5000\n }: \n {\n isbn: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n await this.deleteAsync({url, headers, timeout});\n return;\n }\n}\n\nexport default UserSettingsClientSettings;\n","import UserSettingsBase from './user_settings_base.js';\n\nexport interface Bookmark extends BookmarkUpdate {\n createdTimeStamp: number;\n isbn?: string;\n}\n\nexport interface BookmarkUpdate {\n pageId: number;\n contentId: number;\n}\n\nexport interface BookmarkResponse {\n bookmarks: Bookmark[];\n}\n\nexport class UserSettingsBookmarks extends UserSettingsBase {\n async setBookmark(\n {\n isbn,\n bookmark,\n externalUserId,\n timeout = 5000\n }:\n {\n isbn: string,\n bookmark: BookmarkUpdate,\n externalUserId?: string,\n timeout?: number\n }\n ): Promise<Bookmark> {\n const url = `${this.getUrlPrefix()}/bookmark/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n if (externalUserId) {\n headers.set('external-user-id', externalUserId);\n }\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(bookmark), timeout}) as Bookmark;\n }\n\n async deleteBookmark(\n {\n isbn,\n pageId,\n contentId,\n timeout = 5000\n }:\n {\n isbn: string,\n pageId: number,\n contentId: number,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/bookmark/isbn/${isbn}/page/${pageId}/content/${contentId}`;\n const headers: HeadersInit = new Headers();\n\n await this.deleteAsync({url, headers, timeout});\n return\n }\n\n async getBookmark(\n {\n isbn,\n pageId,\n timeout = 5000\n }:\n {\n isbn?: string,\n pageId?: number,\n timeout?: number\n }\n ): Promise<BookmarkResponse> {\n if (!isbn && pageId) {\n throw new Error('The isbn parameter is required if pageId is provided.');\n }\n\n let url = `${this.getUrlPrefix()}/bookmark/`;\n if (isbn) {\n url += `isbn/${isbn}`;\n }\n\n if (pageId) {\n url += `/page/${pageId}`;\n }\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout}) as BookmarkResponse;\n }\n\n // Favourites are bookmarks that are ISBN specific, with a pageId of 0.\n async getFavourite(\n {\n timeout = 5000\n }:\n {\n timeout?: number\n }\n ): Promise<BookmarkResponse> {\n let url = `${this.getUrlPrefix()}/bookmark/favourite`;\n\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout}) as BookmarkResponse;\n }\n\n}\n\nexport default UserSettingsBookmarks;\n","import UserSettingsBase from './user_settings_base.js';\nimport {HTTPError} from './base_service.js'\n\nexport interface Continue extends ContinueUpdate {\n createdTimeStamp?: number;\n}\n\nexport interface ContinueUpdate {\n pageId: number;\n}\n\nexport class UserSettingsContinue extends UserSettingsBase {\n async setContinue(\n {\n isbn,\n pageId,\n externalUserId,\n timeout = 5000\n }:\n {\n isbn: string,\n pageId: number,\n externalUserId?: string,\n timeout?: number\n }\n ): Promise<Continue> {\n\n const continueBody: ContinueUpdate = {\n pageId\n };\n const url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n if (externalUserId) {\n headers.set('external-user-id', externalUserId);\n }\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(continueBody), timeout}) as Continue;\n }\n\n async deleteContinue(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n await this.deleteAsync({url, headers, timeout});\n return\n }\n\n async getContinue(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<Continue> {\n let url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;\n\n const headers: HeadersInit = new Headers();\n\n try {\n return await this.getAsync({url, headers, timeout}) as Continue;\n } catch (Error) {\n if (Error instanceof HTTPError && Error.response.status === 404) {\n return {} as Continue;\n } else {\n throw HTTPError;\n }\n }\n }\n\n}\n\nexport default UserSettingsContinue;\n","import UserSettingsBase from './user_settings_base.js';\n\nexport interface MRU {\n isbn: string;\n link: string;\n title: string;\n}\n\nexport class UserSettingsMRU extends UserSettingsBase {\n async setMRU(\n {\n mru,\n externalUserId,\n timeout = 5000\n }:\n {\n mru: MRU,\n externalUserId?: string,\n timeout?: number\n }\n ): Promise<MRU[]> {\n\n const url = `${this.getUrlPrefix()}/mru`;\n const headers: HeadersInit = new Headers();\n\n if (externalUserId) {\n headers.set('external-user-id', externalUserId);\n }\n\n headers.set('Content-Type', 'application/json');\n return await this.postAsync({url, headers, body: JSON.stringify(mru), timeout}) as MRU[];\n }\n\n async clearMRU(\n {\n timeout = 5000\n }:\n {\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/mru`;\n const headers: HeadersInit = new Headers();\n\n await this.deleteAsync({url, headers, timeout});\n return\n }\n\n async getMRU(\n {\n timeout = 5000\n }:\n {\n timeout?: number\n }\n ): Promise<MRU[]> {\n let url = `${this.getUrlPrefix()}/mru`;\n\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout}) as MRU[];\n }\n\n}\n\nexport default UserSettingsMRU;\n","import TaggingService from '../../tagging_service.js';\nimport {v4 as uuidv4} from 'uuid';\n\nexport interface FolderObject {\n created_at: number;\n}\n\nexport interface Folder extends FolderObject {\n name: string;\n color: string;\n uuid: string;\n parent?: string;\n}\n\nexport interface FolderContent extends FolderObject {\n type: string;\n identifier: string;\n folder_uuid: string;\n}\n\n/**\n * UserFolders is a service that allows users to create folders in their account. It's built on top of the Tagging service.\n * Folders are created with a name and an optional parent folder. If no parent folder is provided, the folder is created at the root level.\n * Folders are created with a unique UUID that can be used to reference the folder in future requests. The folder properties are stored as a base64 encoded JSON string.\n**/\nexport class UserFolders extends TaggingService {\n private readonly hasNoParent: string = '-';\n private identity?: string = undefined;\n\n async getIdentity() : Promise<string> {\n if (this.identity) {\n return this.identity;\n }\n\n if (this.bearerToken) {\n const tokenParts = this.bearerToken.split('.');\n const payload = Buffer.from(tokenParts[1], 'base64').toString();\n const payloadObject = JSON.parse(payload);\n // The identity is the keyword user, the user's authns and the ekeysuserid (user) concatenated with an underscore\n // This value is enforced by the Tagging service and this is the only identity\n // that the Service will accept when invoked with a user specific bearer token.\n return `user_${payloadObject.authns}_${payloadObject.user}`;\n }\n\n throw new Error('The UserFolders service must be invoked with a valid bearer token');\n }\n\n /**\n * Create a folder.\n * @param folder_name The name of the folder.\n * @param parent_folder_uuid The UUID of the parent folder. If no parent folder is provided, the folder is created at the root level.\n * @param color The color of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder\n **/\n async createFolder(\n {\n folder_name,\n parent_folder_uuid,\n color,\n timeout = 3000\n }:\n {\n folder_name: string,\n color: string,\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const folder_payload = JSON.stringify({\"folder\": folder_name, \"color\": color});\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: uuidv4(),\n tag_name: parent_folder_uuid ?? this.hasNoParent,\n tag_value: Buffer.from(folder_payload).toString('base64'),\n },\n timeout\n }\n );\n return {name: folder_name, uuid: tag['resource_name'], parent: parent_folder_uuid, created_at: tag['created_at']} as Folder;\n }\n\n /**\n * Update a folder. Only name and color can be changed.\n *\n * @param folder_uuid The UUID of the folder.\n * @param folder_name The new name of the folder.\n * @param color The new color of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder\n **/\n async updateFolder(\n {\n folder_uuid,\n folder_name,\n color,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n folder_name?: string,\n color?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const tags = await this.getTagsByResource(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n\n if (tags.length === 0) {\n throw new Error(`Folder with UUID ${folder_uuid} not found`);\n }\n\n const tag = tags[0];\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n const new_folder_name = folder_name ?? folder_payload['folder'];\n const new_color = color ?? folder_payload['color'];\n\n const new_folder_payload = JSON.stringify({\"folder\": new_folder_name, \"color\": new_color});\n\n const updatedTag = await this.updateTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n tag_name: tag['tag_name'],\n tag_value: Buffer.from(new_folder_payload).toString('base64'),\n },\n timeout\n }\n );\n\n const parent = tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'];\n return {name: new_folder_name, uuid: folder_uuid, parent: parent, created_at: updatedTag['created_at']} as Folder;\n }\n\n /**\n * List all folders in the user's account.\n * \n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder[]\n **/\n async listAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<Folder[]> {\n const tags = await this.getTagsByResource(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n\n let folders = [];\n\n for (const tag of tags) {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n folders.push(\n {\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'],\n created_at: tag['created_at']\n } as Folder\n );\n }\n\n return folders;\n }\n\n /**\n * List the next level of folders in the user's account.\n *\n * @param parent_folder_uuid The UUID of the parent folder. If no parent folder is provided, the folder is created at the root level.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder[]\n **/\n async listNextFolderLevel(\n {\n parent_folder_uuid,\n timeout = 3000\n }:\n {\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder[]> {\n let tags;\n if (!parent_folder_uuid) {\n parent_folder_uuid = this.hasNoParent;\n }\n\n tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n tag_name: parent_folder_uuid,\n timeout\n }\n );\n\n let folders = [];\n\n for (const tag of tags) {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n folders.push(\n {\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'],\n created_at: tag['created_at']\n } as Folder\n );\n }\n\n return folders;\n }\n\n /**\n * List the content of a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n* @return (Folder | FolderContent)[]\n **/\n async getFolderContent(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<(Folder|FolderContent)[]> {\n let tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n tag_name: folder_uuid,\n timeout\n }\n );\n\n let content = [];\n\n for (const tag of tags) {\n if (tag['resource_type'] === 'myaccount_user_folder') {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n content.push({\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'],\n created_at: tag['created_at']\n } as Folder)\n } else {\n content.push(\n {\n type: tag['resource_type'],\n identifier: tag['resource_name'],\n folder_uuid: tag['tag_name'],\n created_at: tag['created_at']\n } as FolderContent\n );\n }\n }\n\n return content;\n }\n\n /**\n * Add a book to a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param isbn The ISBN of the book.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return FolderContent\n **/\n async addInternetbookToFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n return await this.addContentToFolder(\n {\n folder_uuid,\n resource_type: 'internetbook',\n resource_name: isbn,\n timeout\n },\n );\n }\n\n /**\n * Remove a book from a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param isbn The ISBN of the book.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async removeInternetbookFromFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.removeContentFromFolder(\n {\n folder_uuid,\n resource_type: 'internetbook',\n resource_name: isbn,\n timeout\n },\n );\n }\n\n /**\n * Create a new folder content element.\n *\n * @param folder_uuid The UUID of the folder.\n * @param resource_name The name of the resource.\n * @param resource_type The type of the resource.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return FolderContent\n **/\n async addContentToFolder(\n {\n folder_uuid,\n resource_type,\n resource_name,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: folder_uuid,\n tag_value: 'MYACCOUNT_USER_FOLDER'\n },\n timeout\n }\n );\n return {type: resource_type, identifier: resource_name, folder_uuid, created_at: tag['created_at']} as FolderContent;\n }\n\n /**\n * Remove a folder content element.\n *\n * @param folder_uuid The UUID of the folder.\n * @param resource_name The name of the resource.\n * @param resource_type The type of the resource.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async removeContentFromFolder(\n {\n folder_uuid,\n resource_name,\n resource_type,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: folder_uuid,\n timeout\n }\n );\n }\n\n /**\n * Delete a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async deleteFolder(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n }\n\n /**\n * Delete all folders. Note, this will not delete the content of the folders.\n *\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async deleteAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n }\n}\n\nexport default UserFolders;\n"],"mappings":"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","names":["Error","Error","uuidv4"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -90,17 +90,158 @@ declare class TaggingService extends BaseService {
|
|
|
90
90
|
}): Promise<void>;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
declare class
|
|
93
|
+
declare class UserSettingsBase extends BaseService {
|
|
94
94
|
discoverUrlPrefix(): string;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
interface ClientSettings {
|
|
98
|
+
readabilities?: Readability;
|
|
99
|
+
darkMode?: boolean;
|
|
100
|
+
displayMode?: string;
|
|
101
|
+
enableKeyboardShortcuts?: boolean;
|
|
102
|
+
showBookmarks?: boolean;
|
|
103
|
+
showNoteHighlights?: boolean;
|
|
104
|
+
featureGalleryVersion?: number;
|
|
105
|
+
readAloudStore?: ReadAloudStore;
|
|
106
|
+
leftDrawerWidth?: number;
|
|
107
|
+
recentSearches?: string[];
|
|
108
|
+
materialListImagesView?: string;
|
|
109
|
+
frontPageSections?: FrontPageSection[];
|
|
110
|
+
activePublicationFilters?: ActivePublicationFilters;
|
|
111
|
+
cardsView?: string;
|
|
112
|
+
cardsSorting?: string;
|
|
113
|
+
foldersView?: string;
|
|
114
|
+
foldersSorting?: string;
|
|
115
|
+
onboardingPromptTime?: string;
|
|
116
|
+
}
|
|
117
|
+
interface ActivePublicationFilters {
|
|
118
|
+
educations?: string[];
|
|
119
|
+
displaySubjects?: string[];
|
|
120
|
+
categoriesNames?: string[];
|
|
121
|
+
categoriesLevels?: string[];
|
|
122
|
+
publishers?: string[];
|
|
123
|
+
}
|
|
124
|
+
interface Readability {
|
|
125
|
+
letterSpacing?: number;
|
|
126
|
+
lineHeight?: number;
|
|
127
|
+
textSize?: number;
|
|
128
|
+
fontFamily?: fontFamily;
|
|
129
|
+
}
|
|
130
|
+
interface fontFamily {
|
|
131
|
+
name?: string;
|
|
132
|
+
defaultSize?: string;
|
|
133
|
+
url?: string;
|
|
134
|
+
}
|
|
135
|
+
interface ReadAloudStore {
|
|
136
|
+
currentVoiceSelection?: currentVoiceSelection;
|
|
137
|
+
currentSpeedSelection?: currentSpeedSelection;
|
|
138
|
+
}
|
|
139
|
+
interface currentSpeedSelection {
|
|
140
|
+
speed?: number;
|
|
141
|
+
text?: string;
|
|
142
|
+
}
|
|
143
|
+
interface currentVoiceSelection {
|
|
144
|
+
voice?: number;
|
|
145
|
+
gender?: number;
|
|
146
|
+
language?: number;
|
|
147
|
+
}
|
|
148
|
+
interface FrontPageSection {
|
|
149
|
+
changeable?: boolean;
|
|
150
|
+
code?: string;
|
|
151
|
+
enabled?: boolean;
|
|
152
|
+
name?: string;
|
|
153
|
+
position?: number;
|
|
154
|
+
}
|
|
155
|
+
declare class UserSettingsClientSettings extends UserSettingsBase {
|
|
95
156
|
getSettings({ isbn, timeout }: {
|
|
96
157
|
isbn: string;
|
|
97
158
|
timeout?: number;
|
|
98
|
-
}): Promise<
|
|
159
|
+
}): Promise<ClientSettings>;
|
|
99
160
|
setSettings({ isbn, settings, timeout }: {
|
|
100
161
|
isbn: string;
|
|
101
|
-
settings:
|
|
162
|
+
settings: ClientSettings;
|
|
102
163
|
timeout?: number;
|
|
103
|
-
}): Promise<
|
|
164
|
+
}): Promise<ClientSettings>;
|
|
165
|
+
deleteSettings({ isbn, timeout }: {
|
|
166
|
+
isbn: string;
|
|
167
|
+
timeout?: number;
|
|
168
|
+
}): Promise<void>;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
interface Bookmark extends BookmarkUpdate {
|
|
172
|
+
createdTimeStamp: number;
|
|
173
|
+
isbn?: string;
|
|
174
|
+
}
|
|
175
|
+
interface BookmarkUpdate {
|
|
176
|
+
pageId: number;
|
|
177
|
+
contentId: number;
|
|
178
|
+
}
|
|
179
|
+
interface BookmarkResponse {
|
|
180
|
+
bookmarks: Bookmark[];
|
|
181
|
+
}
|
|
182
|
+
declare class UserSettingsBookmarks extends UserSettingsBase {
|
|
183
|
+
setBookmark({ isbn, bookmark, externalUserId, timeout }: {
|
|
184
|
+
isbn: string;
|
|
185
|
+
bookmark: BookmarkUpdate;
|
|
186
|
+
externalUserId?: string;
|
|
187
|
+
timeout?: number;
|
|
188
|
+
}): Promise<Bookmark>;
|
|
189
|
+
deleteBookmark({ isbn, pageId, contentId, timeout }: {
|
|
190
|
+
isbn: string;
|
|
191
|
+
pageId: number;
|
|
192
|
+
contentId: number;
|
|
193
|
+
timeout?: number;
|
|
194
|
+
}): Promise<void>;
|
|
195
|
+
getBookmark({ isbn, pageId, timeout }: {
|
|
196
|
+
isbn?: string;
|
|
197
|
+
pageId?: number;
|
|
198
|
+
timeout?: number;
|
|
199
|
+
}): Promise<BookmarkResponse>;
|
|
200
|
+
getFavourite({ timeout }: {
|
|
201
|
+
timeout?: number;
|
|
202
|
+
}): Promise<BookmarkResponse>;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
interface Continue extends ContinueUpdate {
|
|
206
|
+
createdTimeStamp?: number;
|
|
207
|
+
}
|
|
208
|
+
interface ContinueUpdate {
|
|
209
|
+
pageId: number;
|
|
210
|
+
}
|
|
211
|
+
declare class UserSettingsContinue extends UserSettingsBase {
|
|
212
|
+
setContinue({ isbn, pageId, externalUserId, timeout }: {
|
|
213
|
+
isbn: string;
|
|
214
|
+
pageId: number;
|
|
215
|
+
externalUserId?: string;
|
|
216
|
+
timeout?: number;
|
|
217
|
+
}): Promise<Continue>;
|
|
218
|
+
deleteContinue({ isbn, timeout }: {
|
|
219
|
+
isbn: string;
|
|
220
|
+
timeout?: number;
|
|
221
|
+
}): Promise<void>;
|
|
222
|
+
getContinue({ isbn, timeout }: {
|
|
223
|
+
isbn: string;
|
|
224
|
+
timeout?: number;
|
|
225
|
+
}): Promise<Continue>;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
interface MRU {
|
|
229
|
+
isbn: string;
|
|
230
|
+
link: string;
|
|
231
|
+
title: string;
|
|
232
|
+
}
|
|
233
|
+
declare class UserSettingsMRU extends UserSettingsBase {
|
|
234
|
+
setMRU({ mru, externalUserId, timeout }: {
|
|
235
|
+
mru: MRU;
|
|
236
|
+
externalUserId?: string;
|
|
237
|
+
timeout?: number;
|
|
238
|
+
}): Promise<MRU[]>;
|
|
239
|
+
clearMRU({ timeout }: {
|
|
240
|
+
timeout?: number;
|
|
241
|
+
}): Promise<void>;
|
|
242
|
+
getMRU({ timeout }: {
|
|
243
|
+
timeout?: number;
|
|
244
|
+
}): Promise<MRU[]>;
|
|
104
245
|
}
|
|
105
246
|
|
|
106
247
|
interface FolderObject {
|
|
@@ -275,4 +416,4 @@ declare class UserFolders extends TaggingService {
|
|
|
275
416
|
}): Promise<void>;
|
|
276
417
|
}
|
|
277
418
|
|
|
278
|
-
export { type Folder, type FolderContent, type FolderObject, type Tag, type TagOutput, TaggingService, UserFolders,
|
|
419
|
+
export { type ActivePublicationFilters, type Bookmark, type BookmarkResponse, type BookmarkUpdate, type ClientSettings, type Continue, type ContinueUpdate, type Folder, type FolderContent, type FolderObject, type FrontPageSection, type MRU, type ReadAloudStore, type Readability, type Tag, type TagOutput, TaggingService, UserFolders, UserSettingsBookmarks, UserSettingsClientSettings, UserSettingsContinue, UserSettingsMRU, type currentSpeedSelection, type currentVoiceSelection, type fontFamily };
|
package/dist/index.d.ts
CHANGED
|
@@ -90,17 +90,158 @@ declare class TaggingService extends BaseService {
|
|
|
90
90
|
}): Promise<void>;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
declare class
|
|
93
|
+
declare class UserSettingsBase extends BaseService {
|
|
94
94
|
discoverUrlPrefix(): string;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
interface ClientSettings {
|
|
98
|
+
readabilities?: Readability;
|
|
99
|
+
darkMode?: boolean;
|
|
100
|
+
displayMode?: string;
|
|
101
|
+
enableKeyboardShortcuts?: boolean;
|
|
102
|
+
showBookmarks?: boolean;
|
|
103
|
+
showNoteHighlights?: boolean;
|
|
104
|
+
featureGalleryVersion?: number;
|
|
105
|
+
readAloudStore?: ReadAloudStore;
|
|
106
|
+
leftDrawerWidth?: number;
|
|
107
|
+
recentSearches?: string[];
|
|
108
|
+
materialListImagesView?: string;
|
|
109
|
+
frontPageSections?: FrontPageSection[];
|
|
110
|
+
activePublicationFilters?: ActivePublicationFilters;
|
|
111
|
+
cardsView?: string;
|
|
112
|
+
cardsSorting?: string;
|
|
113
|
+
foldersView?: string;
|
|
114
|
+
foldersSorting?: string;
|
|
115
|
+
onboardingPromptTime?: string;
|
|
116
|
+
}
|
|
117
|
+
interface ActivePublicationFilters {
|
|
118
|
+
educations?: string[];
|
|
119
|
+
displaySubjects?: string[];
|
|
120
|
+
categoriesNames?: string[];
|
|
121
|
+
categoriesLevels?: string[];
|
|
122
|
+
publishers?: string[];
|
|
123
|
+
}
|
|
124
|
+
interface Readability {
|
|
125
|
+
letterSpacing?: number;
|
|
126
|
+
lineHeight?: number;
|
|
127
|
+
textSize?: number;
|
|
128
|
+
fontFamily?: fontFamily;
|
|
129
|
+
}
|
|
130
|
+
interface fontFamily {
|
|
131
|
+
name?: string;
|
|
132
|
+
defaultSize?: string;
|
|
133
|
+
url?: string;
|
|
134
|
+
}
|
|
135
|
+
interface ReadAloudStore {
|
|
136
|
+
currentVoiceSelection?: currentVoiceSelection;
|
|
137
|
+
currentSpeedSelection?: currentSpeedSelection;
|
|
138
|
+
}
|
|
139
|
+
interface currentSpeedSelection {
|
|
140
|
+
speed?: number;
|
|
141
|
+
text?: string;
|
|
142
|
+
}
|
|
143
|
+
interface currentVoiceSelection {
|
|
144
|
+
voice?: number;
|
|
145
|
+
gender?: number;
|
|
146
|
+
language?: number;
|
|
147
|
+
}
|
|
148
|
+
interface FrontPageSection {
|
|
149
|
+
changeable?: boolean;
|
|
150
|
+
code?: string;
|
|
151
|
+
enabled?: boolean;
|
|
152
|
+
name?: string;
|
|
153
|
+
position?: number;
|
|
154
|
+
}
|
|
155
|
+
declare class UserSettingsClientSettings extends UserSettingsBase {
|
|
95
156
|
getSettings({ isbn, timeout }: {
|
|
96
157
|
isbn: string;
|
|
97
158
|
timeout?: number;
|
|
98
|
-
}): Promise<
|
|
159
|
+
}): Promise<ClientSettings>;
|
|
99
160
|
setSettings({ isbn, settings, timeout }: {
|
|
100
161
|
isbn: string;
|
|
101
|
-
settings:
|
|
162
|
+
settings: ClientSettings;
|
|
102
163
|
timeout?: number;
|
|
103
|
-
}): Promise<
|
|
164
|
+
}): Promise<ClientSettings>;
|
|
165
|
+
deleteSettings({ isbn, timeout }: {
|
|
166
|
+
isbn: string;
|
|
167
|
+
timeout?: number;
|
|
168
|
+
}): Promise<void>;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
interface Bookmark extends BookmarkUpdate {
|
|
172
|
+
createdTimeStamp: number;
|
|
173
|
+
isbn?: string;
|
|
174
|
+
}
|
|
175
|
+
interface BookmarkUpdate {
|
|
176
|
+
pageId: number;
|
|
177
|
+
contentId: number;
|
|
178
|
+
}
|
|
179
|
+
interface BookmarkResponse {
|
|
180
|
+
bookmarks: Bookmark[];
|
|
181
|
+
}
|
|
182
|
+
declare class UserSettingsBookmarks extends UserSettingsBase {
|
|
183
|
+
setBookmark({ isbn, bookmark, externalUserId, timeout }: {
|
|
184
|
+
isbn: string;
|
|
185
|
+
bookmark: BookmarkUpdate;
|
|
186
|
+
externalUserId?: string;
|
|
187
|
+
timeout?: number;
|
|
188
|
+
}): Promise<Bookmark>;
|
|
189
|
+
deleteBookmark({ isbn, pageId, contentId, timeout }: {
|
|
190
|
+
isbn: string;
|
|
191
|
+
pageId: number;
|
|
192
|
+
contentId: number;
|
|
193
|
+
timeout?: number;
|
|
194
|
+
}): Promise<void>;
|
|
195
|
+
getBookmark({ isbn, pageId, timeout }: {
|
|
196
|
+
isbn?: string;
|
|
197
|
+
pageId?: number;
|
|
198
|
+
timeout?: number;
|
|
199
|
+
}): Promise<BookmarkResponse>;
|
|
200
|
+
getFavourite({ timeout }: {
|
|
201
|
+
timeout?: number;
|
|
202
|
+
}): Promise<BookmarkResponse>;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
interface Continue extends ContinueUpdate {
|
|
206
|
+
createdTimeStamp?: number;
|
|
207
|
+
}
|
|
208
|
+
interface ContinueUpdate {
|
|
209
|
+
pageId: number;
|
|
210
|
+
}
|
|
211
|
+
declare class UserSettingsContinue extends UserSettingsBase {
|
|
212
|
+
setContinue({ isbn, pageId, externalUserId, timeout }: {
|
|
213
|
+
isbn: string;
|
|
214
|
+
pageId: number;
|
|
215
|
+
externalUserId?: string;
|
|
216
|
+
timeout?: number;
|
|
217
|
+
}): Promise<Continue>;
|
|
218
|
+
deleteContinue({ isbn, timeout }: {
|
|
219
|
+
isbn: string;
|
|
220
|
+
timeout?: number;
|
|
221
|
+
}): Promise<void>;
|
|
222
|
+
getContinue({ isbn, timeout }: {
|
|
223
|
+
isbn: string;
|
|
224
|
+
timeout?: number;
|
|
225
|
+
}): Promise<Continue>;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
interface MRU {
|
|
229
|
+
isbn: string;
|
|
230
|
+
link: string;
|
|
231
|
+
title: string;
|
|
232
|
+
}
|
|
233
|
+
declare class UserSettingsMRU extends UserSettingsBase {
|
|
234
|
+
setMRU({ mru, externalUserId, timeout }: {
|
|
235
|
+
mru: MRU;
|
|
236
|
+
externalUserId?: string;
|
|
237
|
+
timeout?: number;
|
|
238
|
+
}): Promise<MRU[]>;
|
|
239
|
+
clearMRU({ timeout }: {
|
|
240
|
+
timeout?: number;
|
|
241
|
+
}): Promise<void>;
|
|
242
|
+
getMRU({ timeout }: {
|
|
243
|
+
timeout?: number;
|
|
244
|
+
}): Promise<MRU[]>;
|
|
104
245
|
}
|
|
105
246
|
|
|
106
247
|
interface FolderObject {
|
|
@@ -275,4 +416,4 @@ declare class UserFolders extends TaggingService {
|
|
|
275
416
|
}): Promise<void>;
|
|
276
417
|
}
|
|
277
418
|
|
|
278
|
-
export { type Folder, type FolderContent, type FolderObject, type Tag, type TagOutput, TaggingService, UserFolders,
|
|
419
|
+
export { type ActivePublicationFilters, type Bookmark, type BookmarkResponse, type BookmarkUpdate, type ClientSettings, type Continue, type ContinueUpdate, type Folder, type FolderContent, type FolderObject, type FrontPageSection, type MRU, type ReadAloudStore, type Readability, type Tag, type TagOutput, TaggingService, UserFolders, UserSettingsBookmarks, UserSettingsClientSettings, UserSettingsContinue, UserSettingsMRU, type currentSpeedSelection, type currentVoiceSelection, type fontFamily };
|
package/dist/index.js
CHANGED
|
@@ -82,6 +82,9 @@ var BaseService = class {
|
|
|
82
82
|
}) {
|
|
83
83
|
const method = "DELETE";
|
|
84
84
|
const response = await this.callAsync({ url, body: null, method, headers, timeout });
|
|
85
|
+
if (response.status === 204) {
|
|
86
|
+
return {};
|
|
87
|
+
}
|
|
85
88
|
return response.json();
|
|
86
89
|
}
|
|
87
90
|
async callAsync({
|
|
@@ -113,11 +116,10 @@ var base_service_default = BaseService;
|
|
|
113
116
|
var TaggingService = class extends base_service_default {
|
|
114
117
|
discoverUrlPrefix() {
|
|
115
118
|
switch (this.environment) {
|
|
116
|
-
case "local":
|
|
117
|
-
return "http://localhost:4000";
|
|
118
119
|
case "production":
|
|
119
120
|
return `https://tagging.services.${this.baseDomain}`;
|
|
120
121
|
case "development":
|
|
122
|
+
case "local":
|
|
121
123
|
return `https://staging-tagging.services.${this.baseDomain}`;
|
|
122
124
|
default:
|
|
123
125
|
throw new Error(`Unknown environment: ${this.environment}`);
|
|
@@ -177,27 +179,39 @@ var TaggingService = class extends base_service_default {
|
|
|
177
179
|
};
|
|
178
180
|
var tagging_service_default = TaggingService;
|
|
179
181
|
|
|
180
|
-
// src/services/
|
|
181
|
-
var
|
|
182
|
+
// src/services/user_settings_base.ts
|
|
183
|
+
var UserSettingsBase = class extends base_service_default {
|
|
182
184
|
discoverUrlPrefix() {
|
|
183
185
|
switch (this.environment) {
|
|
184
|
-
case "local":
|
|
185
|
-
return "http://localhost:4000";
|
|
186
186
|
case "production":
|
|
187
187
|
return `https://user-settings-service.services.${this.baseDomain}`;
|
|
188
188
|
case "development":
|
|
189
|
-
|
|
189
|
+
case "local":
|
|
190
|
+
return `https://staging-user-settings-service.services.${this.baseDomain}`;
|
|
190
191
|
default:
|
|
191
192
|
throw new Error(`Unknown environment: ${this.environment}`);
|
|
192
193
|
}
|
|
193
194
|
}
|
|
195
|
+
};
|
|
196
|
+
var user_settings_base_default = UserSettingsBase;
|
|
197
|
+
|
|
198
|
+
// src/services/user_settings_clientsettings.ts
|
|
199
|
+
var UserSettingsClientSettings = class extends user_settings_base_default {
|
|
194
200
|
async getSettings({
|
|
195
201
|
isbn,
|
|
196
202
|
timeout = 5e3
|
|
197
203
|
}) {
|
|
198
204
|
const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
|
|
199
205
|
const headers = new Headers();
|
|
200
|
-
|
|
206
|
+
try {
|
|
207
|
+
return await this.getAsync({ url, headers, timeout });
|
|
208
|
+
} catch (Error2) {
|
|
209
|
+
if (Error2 instanceof HTTPError && Error2.response.status === 404) {
|
|
210
|
+
return {};
|
|
211
|
+
} else {
|
|
212
|
+
throw HTTPError;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
201
215
|
}
|
|
202
216
|
async setSettings({
|
|
203
217
|
isbn,
|
|
@@ -209,6 +223,148 @@ var UserSettings = class extends base_service_default {
|
|
|
209
223
|
headers.set("Content-Type", "application/json");
|
|
210
224
|
return await this.putAsync({ url, headers, body: JSON.stringify(settings), timeout });
|
|
211
225
|
}
|
|
226
|
+
async deleteSettings({
|
|
227
|
+
isbn,
|
|
228
|
+
timeout = 5e3
|
|
229
|
+
}) {
|
|
230
|
+
const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
|
|
231
|
+
const headers = new Headers();
|
|
232
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
// src/services/user_settings_bookmarks.ts
|
|
238
|
+
var UserSettingsBookmarks = class extends user_settings_base_default {
|
|
239
|
+
async setBookmark({
|
|
240
|
+
isbn,
|
|
241
|
+
bookmark,
|
|
242
|
+
externalUserId,
|
|
243
|
+
timeout = 5e3
|
|
244
|
+
}) {
|
|
245
|
+
const url = `${this.getUrlPrefix()}/bookmark/isbn/${isbn}`;
|
|
246
|
+
const headers = new Headers();
|
|
247
|
+
if (externalUserId) {
|
|
248
|
+
headers.set("external-user-id", externalUserId);
|
|
249
|
+
}
|
|
250
|
+
headers.set("Content-Type", "application/json");
|
|
251
|
+
return await this.putAsync({ url, headers, body: JSON.stringify(bookmark), timeout });
|
|
252
|
+
}
|
|
253
|
+
async deleteBookmark({
|
|
254
|
+
isbn,
|
|
255
|
+
pageId,
|
|
256
|
+
contentId,
|
|
257
|
+
timeout = 5e3
|
|
258
|
+
}) {
|
|
259
|
+
const url = `${this.getUrlPrefix()}/bookmark/isbn/${isbn}/page/${pageId}/content/${contentId}`;
|
|
260
|
+
const headers = new Headers();
|
|
261
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
async getBookmark({
|
|
265
|
+
isbn,
|
|
266
|
+
pageId,
|
|
267
|
+
timeout = 5e3
|
|
268
|
+
}) {
|
|
269
|
+
if (!isbn && pageId) {
|
|
270
|
+
throw new Error("The isbn parameter is required if pageId is provided.");
|
|
271
|
+
}
|
|
272
|
+
let url = `${this.getUrlPrefix()}/bookmark/`;
|
|
273
|
+
if (isbn) {
|
|
274
|
+
url += `isbn/${isbn}`;
|
|
275
|
+
}
|
|
276
|
+
if (pageId) {
|
|
277
|
+
url += `/page/${pageId}`;
|
|
278
|
+
}
|
|
279
|
+
const headers = new Headers();
|
|
280
|
+
return await this.getAsync({ url, headers, timeout });
|
|
281
|
+
}
|
|
282
|
+
// Favourites are bookmarks that are ISBN specific, with a pageId of 0.
|
|
283
|
+
async getFavourite({
|
|
284
|
+
timeout = 5e3
|
|
285
|
+
}) {
|
|
286
|
+
let url = `${this.getUrlPrefix()}/bookmark/favourite`;
|
|
287
|
+
const headers = new Headers();
|
|
288
|
+
return await this.getAsync({ url, headers, timeout });
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
// src/services/user_settings_continue.ts
|
|
293
|
+
var UserSettingsContinue = class extends user_settings_base_default {
|
|
294
|
+
async setContinue({
|
|
295
|
+
isbn,
|
|
296
|
+
pageId,
|
|
297
|
+
externalUserId,
|
|
298
|
+
timeout = 5e3
|
|
299
|
+
}) {
|
|
300
|
+
const continueBody = {
|
|
301
|
+
pageId
|
|
302
|
+
};
|
|
303
|
+
const url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;
|
|
304
|
+
const headers = new Headers();
|
|
305
|
+
if (externalUserId) {
|
|
306
|
+
headers.set("external-user-id", externalUserId);
|
|
307
|
+
}
|
|
308
|
+
headers.set("Content-Type", "application/json");
|
|
309
|
+
return await this.putAsync({ url, headers, body: JSON.stringify(continueBody), timeout });
|
|
310
|
+
}
|
|
311
|
+
async deleteContinue({
|
|
312
|
+
isbn,
|
|
313
|
+
timeout = 5e3
|
|
314
|
+
}) {
|
|
315
|
+
const url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;
|
|
316
|
+
const headers = new Headers();
|
|
317
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
async getContinue({
|
|
321
|
+
isbn,
|
|
322
|
+
timeout = 5e3
|
|
323
|
+
}) {
|
|
324
|
+
let url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;
|
|
325
|
+
const headers = new Headers();
|
|
326
|
+
try {
|
|
327
|
+
return await this.getAsync({ url, headers, timeout });
|
|
328
|
+
} catch (Error2) {
|
|
329
|
+
if (Error2 instanceof HTTPError && Error2.response.status === 404) {
|
|
330
|
+
return {};
|
|
331
|
+
} else {
|
|
332
|
+
throw HTTPError;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
// src/services/user_settings_mru.ts
|
|
339
|
+
var UserSettingsMRU = class extends user_settings_base_default {
|
|
340
|
+
async setMRU({
|
|
341
|
+
mru,
|
|
342
|
+
externalUserId,
|
|
343
|
+
timeout = 5e3
|
|
344
|
+
}) {
|
|
345
|
+
const url = `${this.getUrlPrefix()}/mru`;
|
|
346
|
+
const headers = new Headers();
|
|
347
|
+
if (externalUserId) {
|
|
348
|
+
headers.set("external-user-id", externalUserId);
|
|
349
|
+
}
|
|
350
|
+
headers.set("Content-Type", "application/json");
|
|
351
|
+
return await this.postAsync({ url, headers, body: JSON.stringify(mru), timeout });
|
|
352
|
+
}
|
|
353
|
+
async clearMRU({
|
|
354
|
+
timeout = 5e3
|
|
355
|
+
}) {
|
|
356
|
+
const url = `${this.getUrlPrefix()}/mru`;
|
|
357
|
+
const headers = new Headers();
|
|
358
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
async getMRU({
|
|
362
|
+
timeout = 5e3
|
|
363
|
+
}) {
|
|
364
|
+
let url = `${this.getUrlPrefix()}/mru`;
|
|
365
|
+
const headers = new Headers();
|
|
366
|
+
return await this.getAsync({ url, headers, timeout });
|
|
367
|
+
}
|
|
212
368
|
};
|
|
213
369
|
|
|
214
370
|
// src/services/highlevel/tagging/user_folders.ts
|
|
@@ -564,6 +720,9 @@ var UserFolders = class extends tagging_service_default {
|
|
|
564
720
|
export {
|
|
565
721
|
TaggingService,
|
|
566
722
|
UserFolders,
|
|
567
|
-
|
|
723
|
+
UserSettingsBookmarks,
|
|
724
|
+
UserSettingsClientSettings,
|
|
725
|
+
UserSettingsContinue,
|
|
726
|
+
UserSettingsMRU
|
|
568
727
|
};
|
|
569
728
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/user_settings.ts","../src/services/highlevel/tagging/user_folders.ts"],"sourcesContent":["class HTTPError extends Error {\n public response: Response;\n \n constructor(message: string, response: Response) {\n super();\n this.message = message;\n this.response = response;\n }\n}\n\nexport class BaseService {\n public bearerToken: string | undefined;\n public apiKey: string | undefined;\n public serviceUrl: string | undefined;\n public environment: string;\n public myAccountId: string;\n public baseDomain: string;\n\n constructor({\n bearerToken = undefined,\n apiKey = undefined,\n serviceUrl = undefined,\n environment = 'production',\n myAccountId = 'SYSTIMEMYACCOUNT',\n baseDomain = 'systime.dk',\n } : {\n bearerToken?: string,\n apiKey?: string,\n serviceUrl?: string,\n environment: string,\n myAccountId: string,\n baseDomain?: string\n }) {\n this.bearerToken = bearerToken;\n this.apiKey = apiKey;\n this.serviceUrl = serviceUrl;\n this.environment = environment;\n this.myAccountId = myAccountId;\n this.baseDomain = baseDomain;\n }\n\n protected discoverUrlPrefix(): string {\n throw new Error('Method not implemented.');\n }\n\n public getUrlPrefix(): string {\n // If the URL has been explicitly set, return it.\n if (this.serviceUrl) {\n return this.serviceUrl;\n }\n return this.discoverUrlPrefix()\n }\n\n public async addAuthHeaders(requestHeaders: Headers): Promise<Headers> {\n if (this.bearerToken) {\n requestHeaders.set('Authorization', `Bearer ${this.bearerToken}`);\n } else if (this.apiKey) {\n requestHeaders.set('x-api-key', this.apiKey);\n }\n return requestHeaders;\n }\n\n async getAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'GET';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async putAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'PUT';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async postAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'POST';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async deleteAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'DELETE';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n headers = await this.addAuthHeaders(headers);\n const response = await fetch(url, {\n\t method: method,\n body: body,\n headers: headers,\n signal: AbortSignal.timeout(timeout)\n });\n\n if (!response.ok) {\n\t\tthrow new HTTPError(`Got ${response.status} while calling ${response.url}`, response);\n }\n return response;\n }\n}\nexport default BaseService;\n","import BaseService from './base_service.js';\n\nexport interface Tag {\n identity: string;\n resource_type: string;\n resource_name: string;\n tag_name: string;\n tag_value: string;\n}\n\nexport interface TagOutput extends Tag {\n created_at: number;\n}\n\nexport class TaggingService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'local':\n return 'http://localhost:4000';\n case 'production':\n return `https://tagging.services.${this.baseDomain}`;\n case 'development':\n return `https://staging-tagging.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async getTagsByResource(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n tag_name?: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<TagOutput[]> {\n const url = `${this.getUrlPrefix()}/tags/by_resource/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as TagOutput[];\n }\n\n async getTagsByName(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n tag_name: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<TagOutput[]> {\n const url = `${this.getUrlPrefix()}/tags/by_tag_name/${identity}/${tag_name}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as TagOutput[];\n }\n\n async createTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<TagOutput> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.postAsync({url, headers, body: JSON.stringify(tag), timeout}) as TagOutput;\n }\n\n async updateTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<TagOutput> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.putAsync({url, headers, body: JSON.stringify(tag), timeout}) as TagOutput;\n }\n\n async deleteTag(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n resource_type?: string,\n resource_name?: string,\n tag_name?: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/tags/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n await this.deleteAsync({url, headers, timeout});\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport class UserSettings extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'local':\n return 'http://localhost:4000';\n case 'production':\n return `https://user-settings-service.services.${this.baseDomain}`;\n case 'development':\n return `https://${this.environment}-user-settings-service.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async getSettings(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<object> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout});\n }\n\n async setSettings(\n {\n isbn,\n settings,\n timeout = 5000\n }: \n {\n isbn: string,\n settings: object,\n timeout?: number\n }\n ): Promise<object> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(settings), timeout});\n }\n}\n\nexport default UserSettings;\n","import TaggingService from '../../tagging_service.js';\nimport {v4 as uuidv4} from 'uuid';\n\nexport interface FolderObject {\n created_at: number;\n}\n\nexport interface Folder extends FolderObject {\n name: string;\n color: string;\n uuid: string;\n parent?: string;\n}\n\nexport interface FolderContent extends FolderObject {\n type: string;\n identifier: string;\n folder_uuid: string;\n}\n\n/**\n * UserFolders is a service that allows users to create folders in their account. It's built on top of the Tagging service.\n * Folders are created with a name and an optional parent folder. If no parent folder is provided, the folder is created at the root level.\n * Folders are created with a unique UUID that can be used to reference the folder in future requests. The folder properties are stored as a base64 encoded JSON string.\n**/\nexport class UserFolders extends TaggingService {\n private readonly hasNoParent: string = '-';\n private identity?: string = undefined;\n\n async getIdentity() : Promise<string> {\n if (this.identity) {\n return this.identity;\n }\n\n if (this.bearerToken) {\n const tokenParts = this.bearerToken.split('.');\n const payload = Buffer.from(tokenParts[1], 'base64').toString();\n const payloadObject = JSON.parse(payload);\n // The identity is the keyword user, the user's authns and the ekeysuserid (user) concatenated with an underscore\n // This value is enforced by the Tagging service and this is the only identity\n // that the Service will accept when invoked with a user specific bearer token.\n return `user_${payloadObject.authns}_${payloadObject.user}`;\n }\n\n throw new Error('The UserFolders service must be invoked with a valid bearer token');\n }\n\n /**\n * Create a folder.\n * @param folder_name The name of the folder.\n * @param parent_folder_uuid The UUID of the parent folder. If no parent folder is provided, the folder is created at the root level.\n * @param color The color of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder\n **/\n async createFolder(\n {\n folder_name,\n parent_folder_uuid,\n color,\n timeout = 3000\n }:\n {\n folder_name: string,\n color: string,\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const folder_payload = JSON.stringify({\"folder\": folder_name, \"color\": color});\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: uuidv4(),\n tag_name: parent_folder_uuid ?? this.hasNoParent,\n tag_value: Buffer.from(folder_payload).toString('base64'),\n },\n timeout\n }\n );\n return {name: folder_name, uuid: tag['resource_name'], parent: parent_folder_uuid, created_at: tag['created_at']} as Folder;\n }\n\n /**\n * Update a folder. Only name and color can be changed.\n *\n * @param folder_uuid The UUID of the folder.\n * @param folder_name The new name of the folder.\n * @param color The new color of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder\n **/\n async updateFolder(\n {\n folder_uuid,\n folder_name,\n color,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n folder_name?: string,\n color?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const tags = await this.getTagsByResource(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n\n if (tags.length === 0) {\n throw new Error(`Folder with UUID ${folder_uuid} not found`);\n }\n\n const tag = tags[0];\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n const new_folder_name = folder_name ?? folder_payload['folder'];\n const new_color = color ?? folder_payload['color'];\n\n const new_folder_payload = JSON.stringify({\"folder\": new_folder_name, \"color\": new_color});\n\n const updatedTag = await this.updateTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n tag_name: tag['tag_name'],\n tag_value: Buffer.from(new_folder_payload).toString('base64'),\n },\n timeout\n }\n );\n\n const parent = tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'];\n return {name: new_folder_name, uuid: folder_uuid, parent: parent, created_at: updatedTag['created_at']} as Folder;\n }\n\n /**\n * List all folders in the user's account.\n * \n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder[]\n **/\n async listAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<Folder[]> {\n const tags = await this.getTagsByResource(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n\n let folders = [];\n\n for (const tag of tags) {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n folders.push(\n {\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'],\n created_at: tag['created_at']\n } as Folder\n );\n }\n\n return folders;\n }\n\n /**\n * List the next level of folders in the user's account.\n *\n * @param parent_folder_uuid The UUID of the parent folder. If no parent folder is provided, the folder is created at the root level.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder[]\n **/\n async listNextFolderLevel(\n {\n parent_folder_uuid,\n timeout = 3000\n }:\n {\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder[]> {\n let tags;\n if (!parent_folder_uuid) {\n parent_folder_uuid = this.hasNoParent;\n }\n\n tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n tag_name: parent_folder_uuid,\n timeout\n }\n );\n\n let folders = [];\n\n for (const tag of tags) {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n folders.push(\n {\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'],\n created_at: tag['created_at']\n } as Folder\n );\n }\n\n return folders;\n }\n\n /**\n * List the content of a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n* @return (Folder | FolderContent)[]\n **/\n async getFolderContent(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<(Folder|FolderContent)[]> {\n let tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n tag_name: folder_uuid,\n timeout\n }\n );\n\n let content = [];\n\n for (const tag of tags) {\n if (tag['resource_type'] === 'myaccount_user_folder') {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n content.push({\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'],\n created_at: tag['created_at']\n } as Folder)\n } else {\n content.push(\n {\n type: tag['resource_type'],\n identifier: tag['resource_name'],\n folder_uuid: tag['tag_name'],\n created_at: tag['created_at']\n } as FolderContent\n );\n }\n }\n\n return content;\n }\n\n /**\n * Add a book to a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param isbn The ISBN of the book.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return FolderContent\n **/\n async addInternetbookToFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n return await this.addContentToFolder(\n {\n folder_uuid,\n resource_type: 'internetbook',\n resource_name: isbn,\n timeout\n },\n );\n }\n\n /**\n * Remove a book from a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param isbn The ISBN of the book.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async removeInternetbookFromFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.removeContentFromFolder(\n {\n folder_uuid,\n resource_type: 'internetbook',\n resource_name: isbn,\n timeout\n },\n );\n }\n\n /**\n * Create a new folder content element.\n *\n * @param folder_uuid The UUID of the folder.\n * @param resource_name The name of the resource.\n * @param resource_type The type of the resource.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return FolderContent\n **/\n async addContentToFolder(\n {\n folder_uuid,\n resource_type,\n resource_name,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: folder_uuid,\n tag_value: 'MYACCOUNT_USER_FOLDER'\n },\n timeout\n }\n );\n return {type: resource_type, identifier: resource_name, folder_uuid, created_at: tag['created_at']} as FolderContent;\n }\n\n /**\n * Remove a folder content element.\n *\n * @param folder_uuid The UUID of the folder.\n * @param resource_name The name of the resource.\n * @param resource_type The type of the resource.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async removeContentFromFolder(\n {\n folder_uuid,\n resource_name,\n resource_type,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: folder_uuid,\n timeout\n }\n );\n }\n\n /**\n * Delete a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async deleteFolder(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n }\n\n /**\n * Delete all folders. Note, this will not delete the content of the folders.\n *\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async deleteAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n }\n}\n\nexport default UserFolders;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/user_settings_base.ts","../src/services/user_settings_clientsettings.ts","../src/services/user_settings_bookmarks.ts","../src/services/user_settings_continue.ts","../src/services/user_settings_mru.ts","../src/services/highlevel/tagging/user_folders.ts"],"sourcesContent":["export class HTTPError extends Error {\n public response: Response;\n \n constructor(message: string, response: Response) {\n super();\n this.message = message;\n this.response = response;\n }\n}\n\nexport class BaseService {\n public bearerToken: string | undefined;\n public apiKey: string | undefined;\n public serviceUrl: string | undefined;\n public environment: string;\n public myAccountId: string;\n public baseDomain: string;\n\n constructor({\n bearerToken = undefined,\n apiKey = undefined,\n serviceUrl = undefined,\n environment = 'production',\n myAccountId = 'SYSTIMEMYACCOUNT',\n baseDomain = 'systime.dk',\n } : {\n bearerToken?: string,\n apiKey?: string,\n serviceUrl?: string,\n environment: string,\n myAccountId: string,\n baseDomain?: string\n }) {\n this.bearerToken = bearerToken;\n this.apiKey = apiKey;\n this.serviceUrl = serviceUrl;\n this.environment = environment;\n this.myAccountId = myAccountId;\n this.baseDomain = baseDomain;\n }\n\n protected discoverUrlPrefix(): string {\n throw new Error('Method not implemented.');\n }\n\n public getUrlPrefix(): string {\n // If the URL has been explicitly set, return it.\n if (this.serviceUrl) {\n return this.serviceUrl;\n }\n return this.discoverUrlPrefix()\n }\n\n public async addAuthHeaders(requestHeaders: Headers): Promise<Headers> {\n if (this.bearerToken) {\n requestHeaders.set('Authorization', `Bearer ${this.bearerToken}`);\n } else if (this.apiKey) {\n requestHeaders.set('x-api-key', this.apiKey);\n }\n return requestHeaders;\n }\n\n async getAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'GET';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async putAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'PUT';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async postAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'POST';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async deleteAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'DELETE';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n if (response.status === 204) {\n return {};\n }\n return response.json();\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n headers = await this.addAuthHeaders(headers);\n const response = await fetch(url, {\n\t method: method,\n body: body,\n headers: headers,\n signal: AbortSignal.timeout(timeout)\n });\n\n if (!response.ok) {\n\t\tthrow new HTTPError(`Got ${response.status} while calling ${response.url}`, response);\n }\n return response;\n }\n}\nexport default BaseService;\n","import BaseService from './base_service.js';\n\nexport interface Tag {\n identity: string;\n resource_type: string;\n resource_name: string;\n tag_name: string;\n tag_value: string;\n}\n\nexport interface TagOutput extends Tag {\n created_at: number;\n}\n\nexport class TaggingService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://tagging.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n return `https://staging-tagging.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async getTagsByResource(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n tag_name?: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<TagOutput[]> {\n const url = `${this.getUrlPrefix()}/tags/by_resource/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as TagOutput[];\n }\n\n async getTagsByName(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n tag_name: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<TagOutput[]> {\n const url = `${this.getUrlPrefix()}/tags/by_tag_name/${identity}/${tag_name}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as TagOutput[];\n }\n\n async createTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<TagOutput> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.postAsync({url, headers, body: JSON.stringify(tag), timeout}) as TagOutput;\n }\n\n async updateTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<TagOutput> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.putAsync({url, headers, body: JSON.stringify(tag), timeout}) as TagOutput;\n }\n\n async deleteTag(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n resource_type?: string,\n resource_name?: string,\n tag_name?: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/tags/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n await this.deleteAsync({url, headers, timeout});\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport class UserSettingsBase extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://user-settings-service.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n return `https://staging-user-settings-service.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\n\nexport default UserSettingsBase;\n","import UserSettingsBase from './user_settings_base.js';\nimport {HTTPError} from './base_service.js'\n\nexport interface ClientSettings {\n readabilities?: Readability;\n darkMode?: boolean;\n displayMode?: string;\n enableKeyboardShortcuts?: boolean;\n showBookmarks?: boolean;\n showNoteHighlights?: boolean;\n featureGalleryVersion?: number;\n readAloudStore?: ReadAloudStore;\n leftDrawerWidth?: number;\n recentSearches?: string[];\n materialListImagesView?: string;\n frontPageSections?: FrontPageSection[];\n activePublicationFilters?: ActivePublicationFilters;\n cardsView?: string;\n cardsSorting?: string;\n foldersView?: string;\n foldersSorting?: string;\n onboardingPromptTime?: string;\n}\n\nexport interface ActivePublicationFilters {\n educations?: string[];\n displaySubjects?: string[];\n categoriesNames?: string[];\n categoriesLevels?: string[];\n publishers?: string[];\n}\n\nexport interface Readability {\n letterSpacing?: number;\n lineHeight?: number;\n textSize?: number;\n fontFamily?: fontFamily;\n}\n\nexport interface fontFamily {\n name?: string;\n defaultSize?: string;\n url?: string;\n}\n\nexport interface ReadAloudStore {\n currentVoiceSelection?: currentVoiceSelection;\n currentSpeedSelection?: currentSpeedSelection;\n}\n\nexport interface currentSpeedSelection {\n speed?: number;\n text?: string;\n}\n\nexport interface currentVoiceSelection {\n voice?: number;\n gender?: number;\n language?: number;\n}\n\nexport interface FrontPageSection {\n changeable?: boolean;\n code?: string;\n enabled?: boolean;\n name?: string;\n position?: number;\n}\n\nexport class UserSettingsClientSettings extends UserSettingsBase {\n async getSettings(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<ClientSettings> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n try {\n return await this.getAsync({url, headers, timeout}) as ClientSettings;\n } catch (Error) {\n if (Error instanceof HTTPError && Error.response.status === 404) {\n return {} as ClientSettings;\n } else {\n throw HTTPError;\n }\n }\n }\n\n async setSettings(\n {\n isbn,\n settings,\n timeout = 5000\n }: \n {\n isbn: string,\n settings: ClientSettings,\n timeout?: number\n }\n ): Promise<ClientSettings> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(settings), timeout}) as ClientSettings;\n }\n\n async deleteSettings(\n {\n isbn,\n timeout = 5000\n }: \n {\n isbn: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n await this.deleteAsync({url, headers, timeout});\n return;\n }\n}\n\nexport default UserSettingsClientSettings;\n","import UserSettingsBase from './user_settings_base.js';\n\nexport interface Bookmark extends BookmarkUpdate {\n createdTimeStamp: number;\n isbn?: string;\n}\n\nexport interface BookmarkUpdate {\n pageId: number;\n contentId: number;\n}\n\nexport interface BookmarkResponse {\n bookmarks: Bookmark[];\n}\n\nexport class UserSettingsBookmarks extends UserSettingsBase {\n async setBookmark(\n {\n isbn,\n bookmark,\n externalUserId,\n timeout = 5000\n }:\n {\n isbn: string,\n bookmark: BookmarkUpdate,\n externalUserId?: string,\n timeout?: number\n }\n ): Promise<Bookmark> {\n const url = `${this.getUrlPrefix()}/bookmark/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n if (externalUserId) {\n headers.set('external-user-id', externalUserId);\n }\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(bookmark), timeout}) as Bookmark;\n }\n\n async deleteBookmark(\n {\n isbn,\n pageId,\n contentId,\n timeout = 5000\n }:\n {\n isbn: string,\n pageId: number,\n contentId: number,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/bookmark/isbn/${isbn}/page/${pageId}/content/${contentId}`;\n const headers: HeadersInit = new Headers();\n\n await this.deleteAsync({url, headers, timeout});\n return\n }\n\n async getBookmark(\n {\n isbn,\n pageId,\n timeout = 5000\n }:\n {\n isbn?: string,\n pageId?: number,\n timeout?: number\n }\n ): Promise<BookmarkResponse> {\n if (!isbn && pageId) {\n throw new Error('The isbn parameter is required if pageId is provided.');\n }\n\n let url = `${this.getUrlPrefix()}/bookmark/`;\n if (isbn) {\n url += `isbn/${isbn}`;\n }\n\n if (pageId) {\n url += `/page/${pageId}`;\n }\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout}) as BookmarkResponse;\n }\n\n // Favourites are bookmarks that are ISBN specific, with a pageId of 0.\n async getFavourite(\n {\n timeout = 5000\n }:\n {\n timeout?: number\n }\n ): Promise<BookmarkResponse> {\n let url = `${this.getUrlPrefix()}/bookmark/favourite`;\n\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout}) as BookmarkResponse;\n }\n\n}\n\nexport default UserSettingsBookmarks;\n","import UserSettingsBase from './user_settings_base.js';\nimport {HTTPError} from './base_service.js'\n\nexport interface Continue extends ContinueUpdate {\n createdTimeStamp?: number;\n}\n\nexport interface ContinueUpdate {\n pageId: number;\n}\n\nexport class UserSettingsContinue extends UserSettingsBase {\n async setContinue(\n {\n isbn,\n pageId,\n externalUserId,\n timeout = 5000\n }:\n {\n isbn: string,\n pageId: number,\n externalUserId?: string,\n timeout?: number\n }\n ): Promise<Continue> {\n\n const continueBody: ContinueUpdate = {\n pageId\n };\n const url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n if (externalUserId) {\n headers.set('external-user-id', externalUserId);\n }\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(continueBody), timeout}) as Continue;\n }\n\n async deleteContinue(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n await this.deleteAsync({url, headers, timeout});\n return\n }\n\n async getContinue(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<Continue> {\n let url = `${this.getUrlPrefix()}/continue/isbn/${isbn}`;\n\n const headers: HeadersInit = new Headers();\n\n try {\n return await this.getAsync({url, headers, timeout}) as Continue;\n } catch (Error) {\n if (Error instanceof HTTPError && Error.response.status === 404) {\n return {} as Continue;\n } else {\n throw HTTPError;\n }\n }\n }\n\n}\n\nexport default UserSettingsContinue;\n","import UserSettingsBase from './user_settings_base.js';\n\nexport interface MRU {\n isbn: string;\n link: string;\n title: string;\n}\n\nexport class UserSettingsMRU extends UserSettingsBase {\n async setMRU(\n {\n mru,\n externalUserId,\n timeout = 5000\n }:\n {\n mru: MRU,\n externalUserId?: string,\n timeout?: number\n }\n ): Promise<MRU[]> {\n\n const url = `${this.getUrlPrefix()}/mru`;\n const headers: HeadersInit = new Headers();\n\n if (externalUserId) {\n headers.set('external-user-id', externalUserId);\n }\n\n headers.set('Content-Type', 'application/json');\n return await this.postAsync({url, headers, body: JSON.stringify(mru), timeout}) as MRU[];\n }\n\n async clearMRU(\n {\n timeout = 5000\n }:\n {\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/mru`;\n const headers: HeadersInit = new Headers();\n\n await this.deleteAsync({url, headers, timeout});\n return\n }\n\n async getMRU(\n {\n timeout = 5000\n }:\n {\n timeout?: number\n }\n ): Promise<MRU[]> {\n let url = `${this.getUrlPrefix()}/mru`;\n\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout}) as MRU[];\n }\n\n}\n\nexport default UserSettingsMRU;\n","import TaggingService from '../../tagging_service.js';\nimport {v4 as uuidv4} from 'uuid';\n\nexport interface FolderObject {\n created_at: number;\n}\n\nexport interface Folder extends FolderObject {\n name: string;\n color: string;\n uuid: string;\n parent?: string;\n}\n\nexport interface FolderContent extends FolderObject {\n type: string;\n identifier: string;\n folder_uuid: string;\n}\n\n/**\n * UserFolders is a service that allows users to create folders in their account. It's built on top of the Tagging service.\n * Folders are created with a name and an optional parent folder. If no parent folder is provided, the folder is created at the root level.\n * Folders are created with a unique UUID that can be used to reference the folder in future requests. The folder properties are stored as a base64 encoded JSON string.\n**/\nexport class UserFolders extends TaggingService {\n private readonly hasNoParent: string = '-';\n private identity?: string = undefined;\n\n async getIdentity() : Promise<string> {\n if (this.identity) {\n return this.identity;\n }\n\n if (this.bearerToken) {\n const tokenParts = this.bearerToken.split('.');\n const payload = Buffer.from(tokenParts[1], 'base64').toString();\n const payloadObject = JSON.parse(payload);\n // The identity is the keyword user, the user's authns and the ekeysuserid (user) concatenated with an underscore\n // This value is enforced by the Tagging service and this is the only identity\n // that the Service will accept when invoked with a user specific bearer token.\n return `user_${payloadObject.authns}_${payloadObject.user}`;\n }\n\n throw new Error('The UserFolders service must be invoked with a valid bearer token');\n }\n\n /**\n * Create a folder.\n * @param folder_name The name of the folder.\n * @param parent_folder_uuid The UUID of the parent folder. If no parent folder is provided, the folder is created at the root level.\n * @param color The color of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder\n **/\n async createFolder(\n {\n folder_name,\n parent_folder_uuid,\n color,\n timeout = 3000\n }:\n {\n folder_name: string,\n color: string,\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const folder_payload = JSON.stringify({\"folder\": folder_name, \"color\": color});\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: uuidv4(),\n tag_name: parent_folder_uuid ?? this.hasNoParent,\n tag_value: Buffer.from(folder_payload).toString('base64'),\n },\n timeout\n }\n );\n return {name: folder_name, uuid: tag['resource_name'], parent: parent_folder_uuid, created_at: tag['created_at']} as Folder;\n }\n\n /**\n * Update a folder. Only name and color can be changed.\n *\n * @param folder_uuid The UUID of the folder.\n * @param folder_name The new name of the folder.\n * @param color The new color of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder\n **/\n async updateFolder(\n {\n folder_uuid,\n folder_name,\n color,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n folder_name?: string,\n color?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const tags = await this.getTagsByResource(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n\n if (tags.length === 0) {\n throw new Error(`Folder with UUID ${folder_uuid} not found`);\n }\n\n const tag = tags[0];\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n const new_folder_name = folder_name ?? folder_payload['folder'];\n const new_color = color ?? folder_payload['color'];\n\n const new_folder_payload = JSON.stringify({\"folder\": new_folder_name, \"color\": new_color});\n\n const updatedTag = await this.updateTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n tag_name: tag['tag_name'],\n tag_value: Buffer.from(new_folder_payload).toString('base64'),\n },\n timeout\n }\n );\n\n const parent = tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'];\n return {name: new_folder_name, uuid: folder_uuid, parent: parent, created_at: updatedTag['created_at']} as Folder;\n }\n\n /**\n * List all folders in the user's account.\n * \n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder[]\n **/\n async listAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<Folder[]> {\n const tags = await this.getTagsByResource(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n\n let folders = [];\n\n for (const tag of tags) {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n folders.push(\n {\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'],\n created_at: tag['created_at']\n } as Folder\n );\n }\n\n return folders;\n }\n\n /**\n * List the next level of folders in the user's account.\n *\n * @param parent_folder_uuid The UUID of the parent folder. If no parent folder is provided, the folder is created at the root level.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return Folder[]\n **/\n async listNextFolderLevel(\n {\n parent_folder_uuid,\n timeout = 3000\n }:\n {\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder[]> {\n let tags;\n if (!parent_folder_uuid) {\n parent_folder_uuid = this.hasNoParent;\n }\n\n tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n tag_name: parent_folder_uuid,\n timeout\n }\n );\n\n let folders = [];\n\n for (const tag of tags) {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n folders.push(\n {\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'] === this.hasNoParent ? undefined : tag['tag_name'],\n created_at: tag['created_at']\n } as Folder\n );\n }\n\n return folders;\n }\n\n /**\n * List the content of a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n* @return (Folder | FolderContent)[]\n **/\n async getFolderContent(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<(Folder|FolderContent)[]> {\n let tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n tag_name: folder_uuid,\n timeout\n }\n );\n\n let content = [];\n\n for (const tag of tags) {\n if (tag['resource_type'] === 'myaccount_user_folder') {\n const folder_payload = JSON.parse(Buffer.from(tag['tag_value'], 'base64').toString());\n content.push({\n name: folder_payload['folder'],\n color: folder_payload['color'],\n uuid: tag['resource_name'],\n parent: tag['tag_name'],\n created_at: tag['created_at']\n } as Folder)\n } else {\n content.push(\n {\n type: tag['resource_type'],\n identifier: tag['resource_name'],\n folder_uuid: tag['tag_name'],\n created_at: tag['created_at']\n } as FolderContent\n );\n }\n }\n\n return content;\n }\n\n /**\n * Add a book to a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param isbn The ISBN of the book.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return FolderContent\n **/\n async addInternetbookToFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n return await this.addContentToFolder(\n {\n folder_uuid,\n resource_type: 'internetbook',\n resource_name: isbn,\n timeout\n },\n );\n }\n\n /**\n * Remove a book from a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param isbn The ISBN of the book.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async removeInternetbookFromFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.removeContentFromFolder(\n {\n folder_uuid,\n resource_type: 'internetbook',\n resource_name: isbn,\n timeout\n },\n );\n }\n\n /**\n * Create a new folder content element.\n *\n * @param folder_uuid The UUID of the folder.\n * @param resource_name The name of the resource.\n * @param resource_type The type of the resource.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return FolderContent\n **/\n async addContentToFolder(\n {\n folder_uuid,\n resource_type,\n resource_name,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: folder_uuid,\n tag_value: 'MYACCOUNT_USER_FOLDER'\n },\n timeout\n }\n );\n return {type: resource_type, identifier: resource_name, folder_uuid, created_at: tag['created_at']} as FolderContent;\n }\n\n /**\n * Remove a folder content element.\n *\n * @param folder_uuid The UUID of the folder.\n * @param resource_name The name of the resource.\n * @param resource_type The type of the resource.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async removeContentFromFolder(\n {\n folder_uuid,\n resource_name,\n resource_type,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: folder_uuid,\n timeout\n }\n );\n }\n\n /**\n * Delete a folder.\n *\n * @param folder_uuid The UUID of the folder.\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async deleteFolder(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n }\n\n /**\n * Delete all folders. Note, this will not delete the content of the folders.\n *\n * @param timeout The timeout for the request in milliseconds.\n *\n * @return void\n **/\n async deleteAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n }\n}\n\nexport default UserFolders;\n"],"mappings":"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","names":["Error","Error"]}
|
package/package.json
CHANGED