@gyldendalas/gyldendal-divine-api 0.1.2 → 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 CHANGED
@@ -22,7 +22,10 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  TaggingService: () => TaggingService,
24
24
  UserFolders: () => UserFolders,
25
- UserSettings: () => UserSettings
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({
@@ -204,26 +210,39 @@ var TaggingService = class extends base_service_default {
204
210
  };
205
211
  var tagging_service_default = TaggingService;
206
212
 
207
- // src/services/user_settings.ts
208
- var UserSettings = class extends base_service_default {
213
+ // src/services/user_settings_base.ts
214
+ var UserSettingsBase = class extends base_service_default {
209
215
  discoverUrlPrefix() {
210
216
  switch (this.environment) {
211
217
  case "production":
212
218
  return `https://user-settings-service.services.${this.baseDomain}`;
213
219
  case "development":
214
220
  case "local":
215
- return `https://${this.environment}-user-settings-service.services.${this.baseDomain}`;
221
+ return `https://staging-user-settings-service.services.${this.baseDomain}`;
216
222
  default:
217
223
  throw new Error(`Unknown environment: ${this.environment}`);
218
224
  }
219
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 {
220
231
  async getSettings({
221
232
  isbn,
222
233
  timeout = 5e3
223
234
  }) {
224
235
  const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
225
236
  const headers = new Headers();
226
- return await this.getAsync({ url, headers, timeout });
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
+ }
227
246
  }
228
247
  async setSettings({
229
248
  isbn,
@@ -235,6 +254,148 @@ var UserSettings = class extends base_service_default {
235
254
  headers.set("Content-Type", "application/json");
236
255
  return await this.putAsync({ url, headers, body: JSON.stringify(settings), timeout });
237
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
+ }
238
399
  };
239
400
 
240
401
  // src/services/highlevel/tagging/user_folders.ts
@@ -591,6 +752,9 @@ var UserFolders = class extends tagging_service_default {
591
752
  0 && (module.exports = {
592
753
  TaggingService,
593
754
  UserFolders,
594
- UserSettings
755
+ UserSettingsBookmarks,
756
+ UserSettingsClientSettings,
757
+ UserSettingsContinue,
758
+ UserSettingsMRU
595
759
  });
596
760
  //# sourceMappingURL=index.cjs.map
@@ -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 '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 UserSettings 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://${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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAM,YAAN,cAAwB,MAAM;AAAA,EACrB;AAAA,EAEP,YAAY,SAAiB,UAAoB;AAC/C,UAAM;AACN,SAAK,UAAU;AACf,SAAK,WAAW;AAAA,EAClB;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEP,YAAY;AAAA,IACV,cAAc;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AAAA,EACf,GAOK;AACH,SAAK,cAAc;AACnB,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEU,oBAA4B;AACpC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,eAAuB;AAE5B,QAAI,KAAK,YAAY;AACnB,aAAO,KAAK;AAAA,IACd;AACA,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA,EAEA,MAAa,eAAe,gBAA2C;AACrE,QAAI,KAAK,aAAa;AACpB,qBAAe,IAAI,iBAAiB,UAAU,KAAK,WAAW,EAAE;AAAA,IAClE,WAAW,KAAK,QAAQ;AACtB,qBAAe,IAAI,aAAa,KAAK,MAAM;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,MAAM,QAAQ,SAAS,QAAQ,CAAC;AACnF,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,SACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,QAAQ,SAAS,QAAQ,CAAC;AAC7E,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,QAAQ,SAAS,QAAQ,CAAC;AAC7E,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,MAAM,QAAQ,SAAS,QAAQ,CAAC;AACnF,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQmB;AACnB,QAAI,CAAC,SAAS;AACZ,gBAAU,IAAI,QAAQ;AAAA,IACxB;AAEA,cAAU,MAAM,KAAK,eAAe,OAAO;AAC3C,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MACjC;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,YAAY,QAAQ,OAAO;AAAA,IACrC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AACpB,YAAM,IAAI,UAAU,OAAO,SAAS,MAAM,kBAAkB,SAAS,GAAG,IAAI,QAAQ;AAAA,IAClF;AACA,WAAO;AAAA,EACT;AACF;AACA,IAAO,uBAAQ;;;AC1JR,IAAM,iBAAN,cAA6B,qBAAY;AAAA,EAC9C,oBAA4B;AAC1B,YAAQ,KAAK,aAAa;AAAA,MACxB,KAAK;AACH,eAAO,4BAA4B,KAAK,UAAU;AAAA,MACpD,KAAK;AAAA,MACL,KAAK;AACH,eAAO,oCAAoC,KAAK,UAAU;AAAA,MAC5D;AACE,cAAM,IAAI,MAAM,wBAAwB,KAAK,WAAW,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQsB;AACtB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,qBAAqB,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE;AAEtL,UAAM,UAAuB,IAAI,QAAQ;AACzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,cACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQsB;AACtB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,qBAAqB,QAAQ,IAAI,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE;AAEjK,UAAM,UAAuB,IAAI,QAAQ;AACzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKoB;AACpB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC;AAClC,UAAM,UAAuB,IAAI,QAAQ;AAEzC,YAAQ,OAAO,gBAAgB,kBAAkB;AACjD,WAAO,MAAM,KAAK,UAAU,EAAC,KAAK,SAAS,MAAM,KAAK,UAAU,GAAG,GAAG,QAAO,CAAC;AAAA,EAChF;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKoB;AACpB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC;AAClC,UAAM,UAAuB,IAAI,QAAQ;AAEzC,YAAQ,OAAO,gBAAgB,kBAAkB;AACjD,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,MAAM,KAAK,UAAU,GAAG,GAAG,QAAO,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQe;AACf,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,SAAS,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE;AAE1K,UAAM,UAAuB,IAAI,QAAQ;AACzC,UAAM,KAAK,YAAY,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EAChD;AACF;AAEA,IAAO,0BAAQ;;;AC9HR,IAAM,eAAN,cAA2B,qBAAY;AAAA,EAC5C,oBAA4B;AAC1B,YAAQ,KAAK,aAAa;AAAA,MACxB,KAAK;AACH,eAAO,0CAA0C,KAAK,UAAU;AAAA,MAClE,KAAK;AAAA,MACL,KAAK;AACH,eAAO,WAAW,KAAK,WAAW,mCAAmC,KAAK,UAAU;AAAA,MACtF;AACE,cAAM,IAAI,MAAM,wBAAwB,KAAK,WAAW,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKiB;AACjB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,wBAAwB,IAAI;AAC9D,UAAM,UAAuB,IAAI,QAAQ;AAEzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMiB;AACjB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,wBAAwB,IAAI;AAC9D,UAAM,UAAuB,IAAI,QAAQ;AAEzC,YAAQ,IAAI,gBAAgB,kBAAkB;AAC9C,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG,QAAO,CAAC;AAAA,EACpF;AACF;;;AChDA,kBAA2B;AAwBpB,IAAM,cAAN,cAA0B,wBAAe;AAAA,EAC7B,cAAsB;AAAA,EAC/B,WAAoB;AAAA,EAE5B,MAAM,cAAgC;AACpC,QAAI,KAAK,UAAU;AACjB,aAAO,KAAK;AAAA,IACd;AAEA,QAAI,KAAK,aAAa;AACpB,YAAM,aAAa,KAAK,YAAY,MAAM,GAAG;AAC7C,YAAM,UAAU,OAAO,KAAK,WAAW,CAAC,GAAG,QAAQ,EAAE,SAAS;AAC9D,YAAM,gBAAgB,KAAK,MAAM,OAAO;AAIxC,aAAO,QAAQ,cAAc,MAAM,IAAI,cAAc,IAAI;AAAA,IAC3D;AAEA,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,aACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAOiB;AACjB,UAAM,iBAAiB,KAAK,UAAU,EAAC,UAAU,aAAa,SAAS,MAAK,CAAC;AAC7E,UAAM,MAAM,MAAM,KAAK;AAAA,MACrB;AAAA,QACE,KAAK;AAAA,UACH,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,eAAe;AAAA,UACf,mBAAe,YAAAA,IAAO;AAAA,UACtB,UAAU,sBAAsB,KAAK;AAAA,UACrC,WAAW,OAAO,KAAK,cAAc,EAAE,SAAS,QAAQ;AAAA,QAC1D;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAC,MAAM,aAAa,MAAM,IAAI,eAAe,GAAG,QAAQ,oBAAoB,YAAY,IAAI,YAAY,EAAC;AAAA,EAClH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,aACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAOiB;AACjB,UAAM,OAAO,MAAM,KAAK;AAAA,MACtB;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,MAAM,oBAAoB,WAAW,YAAY;AAAA,IAC7D;AAEA,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,iBAAiB,KAAK,MAAM,OAAO,KAAK,IAAI,WAAW,GAAG,QAAQ,EAAE,SAAS,CAAC;AACpF,UAAM,kBAAkB,eAAe,eAAe,QAAQ;AAC9D,UAAM,YAAY,SAAS,eAAe,OAAO;AAEjD,UAAM,qBAAqB,KAAK,UAAU,EAAC,UAAU,iBAAiB,SAAS,UAAS,CAAC;AAEzF,UAAM,aAAa,MAAM,KAAK;AAAA,MAC5B;AAAA,QACE,KAAK;AAAA,UACH,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,eAAe;AAAA,UACf,eAAe;AAAA,UACf,UAAU,IAAI,UAAU;AAAA,UACxB,WAAW,OAAO,KAAK,kBAAkB,EAAE,SAAS,QAAQ;AAAA,QAC9D;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,IAAI,UAAU,MAAM,KAAK,cAAc,SAAY,IAAI,UAAU;AAChF,WAAO,EAAC,MAAM,iBAAiB,MAAM,aAAa,QAAgB,YAAY,WAAW,YAAY,EAAC;AAAA,EACxG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,eACJ;AAAA,IACE,UAAU;AAAA,EACZ,GAImB;AACnB,UAAM,OAAO,MAAM,KAAK;AAAA,MACpB;AAAA,QACA,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf;AAAA,MACA;AAAA,IACJ;AAEA,QAAI,UAAU,CAAC;AAEf,eAAW,OAAO,MAAM;AACtB,YAAM,iBAAiB,KAAK,MAAM,OAAO,KAAK,IAAI,WAAW,GAAG,QAAQ,EAAE,SAAS,CAAC;AACpF,cAAQ;AAAA,QACN;AAAA,UACE,MAAM,eAAe,QAAQ;AAAA,UAC7B,OAAO,eAAe,OAAO;AAAA,UAC7B,MAAM,IAAI,eAAe;AAAA,UACzB,QAAQ,IAAI,UAAU,MAAM,KAAK,cAAc,SAAY,IAAI,UAAU;AAAA,UACzE,YAAY,IAAI,YAAY;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKmB;AACnB,QAAI;AACJ,QAAI,CAAC,oBAAoB;AACvB,2BAAqB,KAAK;AAAA,IAC5B;AAEA,WAAO,MAAM,KAAK;AAAA,MACd;AAAA,QACA,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf,UAAU;AAAA,QACV;AAAA,MACA;AAAA,IACJ;AAEA,QAAI,UAAU,CAAC;AAEf,eAAW,OAAO,MAAM;AACtB,YAAM,iBAAiB,KAAK,MAAM,OAAO,KAAK,IAAI,WAAW,GAAG,QAAQ,EAAE,SAAS,CAAC;AACpF,cAAQ;AAAA,QACN;AAAA,UACE,MAAM,eAAe,QAAQ;AAAA,UAC7B,OAAO,eAAe,OAAO;AAAA,UAC7B,MAAM,IAAI,eAAe;AAAA,UACzB,QAAQ,IAAI,UAAU,MAAM,KAAK,cAAc,SAAY,IAAI,UAAU;AAAA,UACzE,YAAY,IAAI,YAAY;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,iBACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKmC;AACnC,QAAI,OAAO,MAAM,KAAK;AAAA,MACpB;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,UAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,CAAC;AAEf,eAAW,OAAO,MAAM;AACtB,UAAI,IAAI,eAAe,MAAM,yBAAyB;AACpD,cAAM,iBAAiB,KAAK,MAAM,OAAO,KAAK,IAAI,WAAW,GAAG,QAAQ,EAAE,SAAS,CAAC;AACpF,gBAAQ,KAAK;AAAA,UACT,MAAM,eAAe,QAAQ;AAAA,UAC7B,OAAO,eAAe,OAAO;AAAA,UAC7B,MAAM,IAAI,eAAe;AAAA,UACzB,QAAQ,IAAI,UAAU;AAAA,UACtB,YAAY,IAAI,YAAY;AAAA,QAC9B,CAAW;AAAA,MACf,OAAO;AACL,gBAAQ;AAAA,UACN;AAAA,YACE,MAAM,IAAI,eAAe;AAAA,YACzB,YAAY,IAAI,eAAe;AAAA,YAC/B,aAAa,IAAI,UAAU;AAAA,YAC3B,YAAY,IAAI,YAAY;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,wBACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMwB;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,QACE;AAAA,QACA,eAAe;AAAA,QACf,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,6BACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMe;AACd,UAAM,KAAK;AAAA,MACV;AAAA,QACE;AAAA,QACA,eAAe;AAAA,QACf,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,mBACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAOwB;AACxB,UAAM,MAAM,MAAM,KAAK;AAAA,MACrB;AAAA,QACE,KAAK;AAAA,UACH,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAC,MAAM,eAAe,YAAY,eAAe,aAAa,YAAY,IAAI,YAAY,EAAC;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,wBACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAOe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,iBACJ;AAAA,IACE,UAAU;AAAA,EACZ,GAIe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","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 UserSettings extends BaseService {
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<object>;
159
+ }): Promise<ClientSettings>;
99
160
  setSettings({ isbn, settings, timeout }: {
100
161
  isbn: string;
101
- settings: object;
162
+ settings: ClientSettings;
102
163
  timeout?: number;
103
- }): Promise<object>;
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, UserSettings };
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 UserSettings extends BaseService {
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<object>;
159
+ }): Promise<ClientSettings>;
99
160
  setSettings({ isbn, settings, timeout }: {
100
161
  isbn: string;
101
- settings: object;
162
+ settings: ClientSettings;
102
163
  timeout?: number;
103
- }): Promise<object>;
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, UserSettings };
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({
@@ -176,26 +179,39 @@ var TaggingService = class extends base_service_default {
176
179
  };
177
180
  var tagging_service_default = TaggingService;
178
181
 
179
- // src/services/user_settings.ts
180
- var UserSettings = class extends base_service_default {
182
+ // src/services/user_settings_base.ts
183
+ var UserSettingsBase = class extends base_service_default {
181
184
  discoverUrlPrefix() {
182
185
  switch (this.environment) {
183
186
  case "production":
184
187
  return `https://user-settings-service.services.${this.baseDomain}`;
185
188
  case "development":
186
189
  case "local":
187
- return `https://${this.environment}-user-settings-service.services.${this.baseDomain}`;
190
+ return `https://staging-user-settings-service.services.${this.baseDomain}`;
188
191
  default:
189
192
  throw new Error(`Unknown environment: ${this.environment}`);
190
193
  }
191
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 {
192
200
  async getSettings({
193
201
  isbn,
194
202
  timeout = 5e3
195
203
  }) {
196
204
  const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
197
205
  const headers = new Headers();
198
- return await this.getAsync({ url, headers, timeout });
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
+ }
199
215
  }
200
216
  async setSettings({
201
217
  isbn,
@@ -207,6 +223,148 @@ var UserSettings = class extends base_service_default {
207
223
  headers.set("Content-Type", "application/json");
208
224
  return await this.putAsync({ url, headers, body: JSON.stringify(settings), timeout });
209
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
+ }
210
368
  };
211
369
 
212
370
  // src/services/highlevel/tagging/user_folders.ts
@@ -562,6 +720,9 @@ var UserFolders = class extends tagging_service_default {
562
720
  export {
563
721
  TaggingService,
564
722
  UserFolders,
565
- UserSettings
723
+ UserSettingsBookmarks,
724
+ UserSettingsClientSettings,
725
+ UserSettingsContinue,
726
+ UserSettingsMRU
566
727
  };
567
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 '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 UserSettings 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://${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
@@ -20,5 +20,5 @@
20
20
  "types": "./dist/index.d.ts",
21
21
  "main": "./dist/index.js",
22
22
  "module": "./dist/index.js",
23
- "version": "0.1.2"
23
+ "version": "0.1.3"
24
24
  }