@gyldendalas/gyldendal-divine-api 0.1.7 → 0.1.8

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
@@ -419,7 +419,7 @@ var UserSettingsClientSettings = class extends user_settings_base_default {
419
419
  return response.json();
420
420
  } catch (Error2) {
421
421
  if (Error2 instanceof HTTPError && Error2.response.status === 404) {
422
- return {};
422
+ return { settings: {} };
423
423
  } else {
424
424
  throw HTTPError;
425
425
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/polly_service.ts","../src/services/cookie_consent_log.ts","../src/services/highlight_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/pdf_generator.ts","../src/services/highlevel/tagging/user_folders.ts","../src/services/ai_bot_service.ts","../src/services/writing_task_service.ts","../src/services/solr_proxy_service.ts"],"sourcesContent":["// Fully implemented services\nexport * from 'services/tagging_service.js';\nexport * from 'services/polly_service.js';\nexport * from 'services/cookie_consent_log.js';\nexport * from 'services/highlight_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/pdf_generator.js';\nexport * from 'services/highlevel/tagging/user_folders.js';\nexport * from 'services/ai_bot_service.js';\n\n// Discovery only services\nexport * from 'services/writing_task_service.js'\nexport * from 'services/solr_proxy_service.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.toLowerCase();\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 addAuthHeaders = true,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'GET';\n return await this.callAsync({ url, body: null, method, headers, addAuthHeaders, timeout });\n }\n\n async putAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'PUT';\n return await this.callAsync({ url, body, method, headers, addAuthHeaders, timeout });\n }\n\n async postAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'POST';\n return await this.callAsync({ url, body, method, headers, addAuthHeaders, timeout });\n }\n\n async deleteAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'DELETE';\n return await this.callAsync({ url, body: null, method, headers, addAuthHeaders, timeout });\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout,\n addAuthHeaders\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number,\n addAuthHeaders?: boolean,\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n if (addAuthHeaders) {\n headers = await this.addAuthHeaders(headers);\n }\n\n const response = await fetch(url, {\n 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 case 'testing':\n return `https://staging-tagging.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/tagging`;\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.getAsync({url, headers, timeout});\n return await response.json();\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 const response = await this.postAsync({url, headers, body: JSON.stringify(tag), timeout});\n return await response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(tag), timeout});\n return await response.json();\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 const response = await this.deleteAsync({url, headers, timeout});\n await response.json();\n return\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport enum SSMLSpeechSpeeds {\n X_SLOW = 1,\n SLOW = 2,\n MEDIUM = 3,\n FAST = 4,\n X_FAST = 5,\n}\n\nexport type SpeechmarkEvent = {\n time: number;\n type?: string;\n value: string;\n start?: number;\n end?: number;\n}\n\nexport interface SynthesisResponse {\n mp3url: string;\n s3: string[];\n SpeechMarks?: SpeechmarkEvent[];\n}\n\nexport interface SynthesisRequest {\n text: string;\n includeSpeechMarks?: boolean;\n voice: number;\n speed?: SSMLSpeechSpeeds;\n}\n\nexport class PollyService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://appear-polly.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-appear-polly.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/polly`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async synthesize(\n {\n body,\n timeout = 3000\n }:\n {\n body: SynthesisRequest,\n timeout?: number\n }\n ): Promise<SynthesisResponse> {\n const url = `${this.getUrlPrefix()}/synthesizeSpeech`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n}\n\nexport default PollyService;\n","import BaseService from './base_service.js';\n\nexport interface CookieConsentRequest {\n consentState: CookieConsentState;\n consentUrl: string;\n timeStamp: number;\n uuid: string;\n}\n\nexport interface CookieConsentState {\n func: number;\n stat: number;\n uuid: string;\n version: number;\n}\n\nexport interface CookieConsentResponse {\n response: string\n}\n\nexport class CookieConsentLog extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://cookieconsentlog.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-cookieconsentlog.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/cookieconsentlog`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async logCookieConsent(\n {\n body,\n timeout = 3000\n }:\n {\n body: CookieConsentRequest,\n timeout?: number\n }\n ): Promise<string> {\n const url = `${this.getUrlPrefix()}/log`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), addAuthHeaders: false, timeout});\n return response.text();\n }\n\n}\n\nexport default CookieConsentLog;\n","import BaseService from './base_service.js';\n\nexport enum HighlightResultType {\n 'highlight' = 'highlight',\n 'note' = 'note',\n}\n\nexport interface HighlightRanges {\n start: number|null;\n end: number|null;\n startOffset: number;\n endOffset: number;\n}\n\nexport interface Highlight extends HighlightUpdate {\n id: string;\n recreationdata?: IRecreationData;\n ranges?: HighlightRanges[];\n lang?: string;\n markedupText?: string;\n createdtstamp?: number;\n}\n\nexport interface HighlightRequest {\n breadCrumb: string;\n pageTitle: string;\n externalUserId?: string;\n highlight: Highlight;\n}\n\nexport interface HighlightSearchRequest {\n searchQuery: string;\n resultType?: HighlightResultType;\n isbn?: string;\n maxResults?: number;\n vectorMinConfidence?: number;\n vectorHighConfidence?: number;\n fulltextMinScore?: number;\n}\n\nexport interface HiglightSearchMatch {\n rangeKey: number;\n confidence: number;\n texttype: HighlightResultType;\n isbn: string;\n pid: number;\n returnedItem: number;\n}\n\nexport interface HighlightSearchResponse {\n Items: HighlightResponse[];\n Matches: HiglightSearchMatch[];\n}\n\nexport interface HighlightResponse extends HighlightRequest {\n debugHostname: string;\n uidIsbnPidMyAccountIdPartitionKey: string;\n timestampSortKey: number;\n timeToDie: number;\n pid: number;\n uid: string;\n myAccountid: string;\n commentText: string;\n quote: string;\n hlcolor: string;\n isbn: string;\n}\n\nexport interface HighlightUpdate {\n hlcolor: string;\n quote: string;\n text: string;\n}\n\nexport interface HighlightUpdateRequest {\n highlight: HighlightUpdate;\n}\n\nexport interface HighlightCountResponse {\n type: HighlightResultType;\n isbn: string;\n count: number;\n}\n\nexport interface HighlightDeleteResult extends HighlightUpdateResponse {\n changed: number;\n}\n\nexport interface HighlightAddResult extends HighlightUpdateResponse {\n timestampSortKey: number;\n}\n\nexport interface HighlightUpdateResponse {\n status: string;\n}\n\ninterface IBKNGData {\n prev20TextContent?: string | null;\n next20TextContent?: string;\n cid?: number;\n isPageNote?: boolean;\n domPath?: string;\n newElementPath?: string;\n elementPath?: string;\n prevNextTextContent?: {\n before: string | null;\n after: string;\n srcText: string | null;\n };\n}\n\nexport interface ICtype {\n SiblingsCount: string; // e.g. '15'\n classes: string; // e.g. 'csc-default csc-textpic'\n}\n\nexport interface ICtypeDict {\n [cid: string]: ICtype;\n}\n\nexport interface ITextStartEndObject {\n startSelectedText: string | undefined | null; // start of selection, text value\n endSelectedText: string | undefined; // end of selection, text value '150.000';\n}\n\nexport interface IRecreationData {\n startCID: number; // id of section start, e.g. 'c319'\n numberOfSiblingsOnStartNode?: number | undefined; // sibling count adjacent to the start node, e.g. '5'\n numberofPrevSiblingsOnCIDStartNode?: number | undefined; // e.g. '1';\n startCtypes?: ICtypeDict | null | undefined; // this was never used....\n\n endCID: number;\n numberOfSiblingsOnEndNode?: number | undefined;\n numberofPrevSiblingsOnCIDEndNode?: number | undefined;\n endCTypes?: ICtypeDict | null | undefined; // this was never used ....\n\n startSelectionInnerText?: string | null | undefined; // inner html (text) of the start node that was selected\n endSelectionInnerText?: string | null | undefined; // inner html (text) of the end node that was selected\n\n mathObject?: string | null | undefined; // e.g. '0'. who knows?\n\n selectedTextStartAndEndObject?: ITextStartEndObject | undefined; // not really used in the old client\n\n totalSiblingsToCIDs?: number | undefined; // e.g. '15'\n\n ibkngData?: IBKNGData | null | undefined;\n\n specialSelectedText?: string | undefined;\n source?: any | null | undefined;\n}\n\nexport class HighlightService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://highlights.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-highlights.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/highlight`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async search(\n {\n search,\n timeout = 3000\n }:\n {\n search: HighlightSearchRequest,\n timeout?: number\n }\n ): Promise<HighlightSearchResponse> {\n const url = `${this.getUrlPrefix()}/v2/search`;\n\n const headers: HeadersInit = new Headers();\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(search), timeout});\n return response.json();\n }\n\n async deleteHighlightOrNote(\n {\n isbn,\n pid,\n key,\n timeout = 3000\n }:\n {\n isbn: string,\n pid: number,\n key: number,\n timeout?: number\n }\n ): Promise<HighlightDeleteResult> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}/key/${key}`;\n\n const headers: HeadersInit = new Headers();\n headers.append('Content-Type', \"application/json\");\n const response = await this.deleteAsync({url, headers, timeout});\n return response.json();\n }\n\n async getHighlightOrNote(\n {\n isbn,\n pid,\n timeout = 3000\n }:\n {\n isbn: string,\n pid?: number,\n timeout?: number\n }\n ): Promise<HighlightResponse[]> {\n let url = `${this.getUrlPrefix()}/v2/isbn/${isbn}`;\n if (pid) {\n url += `/pid/${pid}`;\n }\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n\n async getHighlightOrNoteCounts(\n {\n noteType,\n timeout = 3000\n }:\n {\n noteType?: HighlightResultType,\n timeout?: number\n }\n ): Promise<HighlightCountResponse[]> {\n let url = `${this.getUrlPrefix()}/v2/count`;\n if (noteType) {\n url += `/${noteType}`;\n }\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n\n async updateHighlightOrNote(\n {\n payload,\n isbn,\n pid,\n key,\n timeout = 5000\n }:\n {\n payload: HighlightUpdateRequest,\n isbn: string,\n pid: number,\n key: number,\n timeout?: number\n }\n ): Promise<HighlightUpdateResponse> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}/key/${key}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.putAsync({url, headers, body: JSON.stringify(payload), timeout});\n return response.json();\n }\n\n async addHighlightOrNote(\n {\n payload,\n isbn,\n pid,\n timeout = 5000\n }:\n {\n payload: HighlightRequest,\n isbn: string,\n pid: number,\n timeout?: number\n }\n ): Promise<HighlightAddResult> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.postAsync({url, headers, body: JSON.stringify(payload), timeout});\n return response.json();\n }\n}\n\nexport default HighlightService;\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 case 'testing':\n return `https://staging-user-settings-service.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/usersettingsservice`;\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(settings), timeout});\n return response.json();\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 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 const response = await this.putAsync({url, headers, body: JSON.stringify(bookmark), timeout});\n return response.json();\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<Bookmark[]> {\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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<Bookmark[]> {\n let url = `${this.getUrlPrefix()}/bookmark/favourite`;\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(continueBody), timeout});\n return response.json();\n\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.postAsync({url, headers, body: JSON.stringify(mru), timeout});\n return response.json();\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n}\n\nexport default UserSettingsMRU;\n","import BaseService from './base_service.js';\n\nexport interface noteHighlight {\n color: string;\n comment: string;\n selectedText: string;\n}\n\nexport interface notes {\n created: string;\n highlight: noteHighlight;\n link: string;\n pid: string;\n title: string;\n}\n\nexport interface notesLabels {\n amountOfNotesProse: string;\n documentTitle: string;\n markedText: string;\n noContentLabel: string;\n noSelectedTextLabel: string;\n notesExportedAt: string;\n yourNote: string;\n}\n\nexport interface notesData {\n labels: notesLabels\n notes: notes[]\n}\n\nexport interface notesRequest {\n exportedDate: string;\n notesData: notesData;\n userId: string;\n userName: string;\n}\n\nexport interface response {\n status: string;\n url: string;\n}\n\nexport interface writingTaskRequest {\n pdftitle: string;\n userId: string;\n userName: string;\n}\n\nexport interface writingTaskData {\n createdData: string;\n exportedDateTimeString: string;\n header: string;\n headerStripped: string;\n host: string;\n isbn: string;\n publisher: string;\n siteTitle: string;\n userIdentity: string;\n writingTaskItems: writingTaskItem[];\n}\n\nexport interface writingTaskItem {\n answer: string;\n crdate: number;\n cruser_id: number;\n deleted: number;\n files: string[]|null;\n hidden: number;\n imageorient: number;\n parentid: number;\n parenttable: string;\n parsedAnswer: string;\n parsedQuestion: string;\n pid: number;\n question: string;\n sorting: number;\n title: string;\n tstamp: number;\n uid: number;\n userAnswered: boolean;\n}\n\nexport interface siteMapLabels {\n pbook: string;\n toc: string;\n}\n\nexport interface siteMapPageTreeItem {\n chapterInfo?: siteMapPageTreeItem;\n characters: number;\n iPages: number;\n images: number;\n interactiveElements: number;\n lang: number;\n math: number;\n ogStandardPage: number;\n originalMaterial: number;\n quizzes: number;\n soundFiles: number;\n standardPage: number;\n sys_language_uid: number;\n uid: number;\n videos: number;\n words: number;\n}\n\nexport interface siteMapPage {\n children: siteMapPage[];\n accessGranted: boolean;\n author: null|string;\n description: null|string;\n doktype: number;\n editor: null|string;\n fe_group: string;\n keywords: null|string;\n link: string;\n nav_hide: number;\n nav_title: string;\n pid: number;\n title: string;\n uid: number;\n}\n\nexport type siteMapPageTreeData = Record<string, siteMapPageTreeItem>;\n\nexport interface siteMapContent {\n labels: siteMapLabels,\n pageTreeData: siteMapPageTreeData,\n pages: siteMapPage[]\n}\n\nexport interface siteMapRequest {\n baseUrl: string;\n content: siteMapContent,\n exportedDate: string;\n isbn: string;\n siteTitle: string;\n userId: string;\n userName: string;\n}\n\nexport class PdfGeneratorService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://pdfgenerator.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-pdfgenerator.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/pdfgenerator`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async pdfFromSiteMap(\n {\n body,\n timeout = 3000\n }:\n {\n body: siteMapRequest,\n timeout?: number\n }\n ): Promise<response> {\n const url = `${this.getUrlPrefix()}/sitemap`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async pdfFromWritingTask(\n {\n body,\n timeout = 3000\n }:\n {\n body: writingTaskRequest,\n timeout?: number\n }\n ): Promise<response> {\n const url = `${this.getUrlPrefix()}/writingTask`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async pdfFromNotes(\n {\n body,\n timeout = 3000\n }:\n {\n body: notesRequest,\n timeout?: number\n }\n ): Promise<response> {\n const url = `${this.getUrlPrefix()}/notes`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n}\nexport default PdfGeneratorService;\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","import BaseService from './base_service.js';\n\nexport type AIChatRole = \"user\" | \"assistant\" | \"system\";\n\ntype GenericContext = Record<string, unknown>;\n\nexport interface AIChatMessage<\n ContextType extends GenericContext = GenericContext,\n> {\n role: AIChatRole;\n content: string;\n context?: ContextType;\n}\n\nexport interface AIChatMessageDelta<\n ContextType extends GenericContext = GenericContext,\n> {\n role?: AIChatRole;\n content?: string;\n context?: ContextType;\n}\n\nexport interface AIChatCompletion<\n ContextType extends GenericContext = GenericContext,\n> {\n message: AIChatMessage;\n sessionState?: unknown;\n context?: ContextType;\n}\n\nexport interface AIChatCompletionDelta<\n ContextType extends GenericContext = GenericContext,\n> {\n delta: AIChatMessageDelta;\n sessionState?: unknown;\n context?: ContextType;\n}\n\nexport interface AIChatCompletionOptions<\n ContextType extends GenericContext = GenericContext,\n> {\n context?: ContextType;\n sessionState?: unknown;\n}\n\nexport type AIChatCompletionRequest = {\n messages: AIChatMessage[];\n} & AIChatCompletionOptions;\n\n\nexport class AIBotService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://ai-bot-service.eu-west-1.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://ai-bot-service-staging.eu-west-1.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/aibotservice`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async constructChatUrl (\n {\n interactivityId,\n isbn,\n stream\n }:\n {\n interactivityId?: string,\n isbn?: string,\n stream: boolean\n }\n ): Promise<string> {\n if (interactivityId && isbn) \n {\n throw new Error(\"interactivityId and isbn are mutually exclusive\");\n }\n\n if (!interactivityId && !isbn) \n {\n throw new Error(\"Either interactivityId or isbn must be provided\");\n }\n\n let url = '';\n if (interactivityId) \n {\n url = `${this.getUrlPrefix()}/${interactivityId}/chat`;\n }\n\n if (isbn) \n {\n url = `${this.getUrlPrefix()}/interactivity_from_isbn/${isbn}`;\n }\n\n if (stream) {\n url += '/stream';\n }\n\n return url;\n }\n\n async chat(\n {\n interactivityId,\n isbn,\n body,\n timeout = 10000\n }:\n {\n interactivityId?: string,\n isbn?: string,\n body: AIChatCompletionRequest,\n timeout?: number\n }\n ): Promise<AIChatCompletion> {\n const url = await this.constructChatUrl({interactivityId, isbn, stream: false});\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async streamingChat(\n {\n interactivityId,\n isbn,\n body,\n timeout = 10000\n }:\n {\n interactivityId?: string,\n isbn?: string,\n body: AIChatCompletionRequest,\n timeout?: number\n }\n ): Promise<ReadableStream<Uint8Array<ArrayBufferLike>>> {\n const url = await this.constructChatUrl({interactivityId, isbn, stream: true});\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n const responseBody = response.body;\n if (!responseBody)\n {\n throw new Error(\"Response body is null\");\n }\n return responseBody;\n }\n}\n\nexport default AIBotService;\n","import BaseService from './base_service.js';\n\nexport class WritingTaskService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://writingtask.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-writingtask.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/writingtask`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\nexport default WritingTaskService;\n","import BaseService from './base_service.js';\n\nexport class SolrProxyService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://solr-proxy.eu-west-1.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://solr-proxy-staging.eu-west-1.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/solrproxy`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\n\nexport default SolrProxyService;\n"],"mappings":"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","names":["SSMLSpeechSpeeds","HighlightResultType","Error","Error","uuidv4"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/polly_service.ts","../src/services/cookie_consent_log.ts","../src/services/highlight_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/pdf_generator.ts","../src/services/highlevel/tagging/user_folders.ts","../src/services/ai_bot_service.ts","../src/services/writing_task_service.ts","../src/services/solr_proxy_service.ts"],"sourcesContent":["// Fully implemented services\nexport * from 'services/tagging_service.js';\nexport * from 'services/polly_service.js';\nexport * from 'services/cookie_consent_log.js';\nexport * from 'services/highlight_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/pdf_generator.js';\nexport * from 'services/highlevel/tagging/user_folders.js';\nexport * from 'services/ai_bot_service.js';\n\n// Discovery only services\nexport * from 'services/writing_task_service.js'\nexport * from 'services/solr_proxy_service.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.toLowerCase();\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 addAuthHeaders = true,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'GET';\n return await this.callAsync({ url, body: null, method, headers, addAuthHeaders, timeout });\n }\n\n async putAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'PUT';\n return await this.callAsync({ url, body, method, headers, addAuthHeaders, timeout });\n }\n\n async postAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'POST';\n return await this.callAsync({ url, body, method, headers, addAuthHeaders, timeout });\n }\n\n async deleteAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'DELETE';\n return await this.callAsync({ url, body: null, method, headers, addAuthHeaders, timeout });\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout,\n addAuthHeaders\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number,\n addAuthHeaders?: boolean,\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n if (addAuthHeaders) {\n headers = await this.addAuthHeaders(headers);\n }\n\n const response = await fetch(url, {\n 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 case 'testing':\n return `https://staging-tagging.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/tagging`;\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.getAsync({url, headers, timeout});\n return await response.json();\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 const response = await this.postAsync({url, headers, body: JSON.stringify(tag), timeout});\n return await response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(tag), timeout});\n return await response.json();\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 const response = await this.deleteAsync({url, headers, timeout});\n await response.json();\n return\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport enum SSMLSpeechSpeeds {\n X_SLOW = 1,\n SLOW = 2,\n MEDIUM = 3,\n FAST = 4,\n X_FAST = 5,\n}\n\nexport type SpeechmarkEvent = {\n time: number;\n type?: string;\n value: string;\n start?: number;\n end?: number;\n}\n\nexport interface SynthesisResponse {\n mp3url: string;\n s3: string[];\n SpeechMarks?: SpeechmarkEvent[];\n}\n\nexport interface SynthesisRequest {\n text: string;\n includeSpeechMarks?: boolean;\n voice: number;\n speed?: SSMLSpeechSpeeds;\n}\n\nexport class PollyService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://appear-polly.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-appear-polly.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/polly`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async synthesize(\n {\n body,\n timeout = 3000\n }:\n {\n body: SynthesisRequest,\n timeout?: number\n }\n ): Promise<SynthesisResponse> {\n const url = `${this.getUrlPrefix()}/synthesizeSpeech`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n}\n\nexport default PollyService;\n","import BaseService from './base_service.js';\n\nexport interface CookieConsentRequest {\n consentState: CookieConsentState;\n consentUrl: string;\n timeStamp: number;\n uuid: string;\n}\n\nexport interface CookieConsentState {\n func: number;\n stat: number;\n uuid: string;\n version: number;\n}\n\nexport interface CookieConsentResponse {\n response: string\n}\n\nexport class CookieConsentLog extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://cookieconsentlog.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-cookieconsentlog.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/cookieconsentlog`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async logCookieConsent(\n {\n body,\n timeout = 3000\n }:\n {\n body: CookieConsentRequest,\n timeout?: number\n }\n ): Promise<string> {\n const url = `${this.getUrlPrefix()}/log`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), addAuthHeaders: false, timeout});\n return response.text();\n }\n\n}\n\nexport default CookieConsentLog;\n","import BaseService from './base_service.js';\n\nexport enum HighlightResultType {\n 'highlight' = 'highlight',\n 'note' = 'note',\n}\n\nexport interface HighlightRanges {\n start: number|null;\n end: number|null;\n startOffset: number;\n endOffset: number;\n}\n\nexport interface Highlight extends HighlightUpdate {\n id: string;\n recreationdata?: IRecreationData;\n ranges?: HighlightRanges[];\n lang?: string;\n markedupText?: string;\n createdtstamp?: number;\n}\n\nexport interface HighlightRequest {\n breadCrumb: string;\n pageTitle: string;\n externalUserId?: string;\n highlight: Highlight;\n}\n\nexport interface HighlightSearchRequest {\n searchQuery: string;\n resultType?: HighlightResultType;\n isbn?: string;\n maxResults?: number;\n vectorMinConfidence?: number;\n vectorHighConfidence?: number;\n fulltextMinScore?: number;\n}\n\nexport interface HiglightSearchMatch {\n rangeKey: number;\n confidence: number;\n texttype: HighlightResultType;\n isbn: string;\n pid: number;\n returnedItem: number;\n}\n\nexport interface HighlightSearchResponse {\n Items: HighlightResponse[];\n Matches: HiglightSearchMatch[];\n}\n\nexport interface HighlightResponse extends HighlightRequest {\n debugHostname: string;\n uidIsbnPidMyAccountIdPartitionKey: string;\n timestampSortKey: number;\n timeToDie: number;\n pid: number;\n uid: string;\n myAccountid: string;\n commentText: string;\n quote: string;\n hlcolor: string;\n isbn: string;\n}\n\nexport interface HighlightUpdate {\n hlcolor: string;\n quote: string;\n text: string;\n}\n\nexport interface HighlightUpdateRequest {\n highlight: HighlightUpdate;\n}\n\nexport interface HighlightCountResponse {\n type: HighlightResultType;\n isbn: string;\n count: number;\n}\n\nexport interface HighlightDeleteResult extends HighlightUpdateResponse {\n changed: number;\n}\n\nexport interface HighlightAddResult extends HighlightUpdateResponse {\n timestampSortKey: number;\n}\n\nexport interface HighlightUpdateResponse {\n status: string;\n}\n\ninterface IBKNGData {\n prev20TextContent?: string | null;\n next20TextContent?: string;\n cid?: number;\n isPageNote?: boolean;\n domPath?: string;\n newElementPath?: string;\n elementPath?: string;\n prevNextTextContent?: {\n before: string | null;\n after: string;\n srcText: string | null;\n };\n}\n\nexport interface ICtype {\n SiblingsCount: string; // e.g. '15'\n classes: string; // e.g. 'csc-default csc-textpic'\n}\n\nexport interface ICtypeDict {\n [cid: string]: ICtype;\n}\n\nexport interface ITextStartEndObject {\n startSelectedText: string | undefined | null; // start of selection, text value\n endSelectedText: string | undefined; // end of selection, text value '150.000';\n}\n\nexport interface IRecreationData {\n startCID: number; // id of section start, e.g. 'c319'\n numberOfSiblingsOnStartNode?: number | undefined; // sibling count adjacent to the start node, e.g. '5'\n numberofPrevSiblingsOnCIDStartNode?: number | undefined; // e.g. '1';\n startCtypes?: ICtypeDict | null | undefined; // this was never used....\n\n endCID: number;\n numberOfSiblingsOnEndNode?: number | undefined;\n numberofPrevSiblingsOnCIDEndNode?: number | undefined;\n endCTypes?: ICtypeDict | null | undefined; // this was never used ....\n\n startSelectionInnerText?: string | null | undefined; // inner html (text) of the start node that was selected\n endSelectionInnerText?: string | null | undefined; // inner html (text) of the end node that was selected\n\n mathObject?: string | null | undefined; // e.g. '0'. who knows?\n\n selectedTextStartAndEndObject?: ITextStartEndObject | undefined; // not really used in the old client\n\n totalSiblingsToCIDs?: number | undefined; // e.g. '15'\n\n ibkngData?: IBKNGData | null | undefined;\n\n specialSelectedText?: string | undefined;\n source?: any | null | undefined;\n}\n\nexport class HighlightService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://highlights.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-highlights.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/highlight`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async search(\n {\n search,\n timeout = 3000\n }:\n {\n search: HighlightSearchRequest,\n timeout?: number\n }\n ): Promise<HighlightSearchResponse> {\n const url = `${this.getUrlPrefix()}/v2/search`;\n\n const headers: HeadersInit = new Headers();\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(search), timeout});\n return response.json();\n }\n\n async deleteHighlightOrNote(\n {\n isbn,\n pid,\n key,\n timeout = 3000\n }:\n {\n isbn: string,\n pid: number,\n key: number,\n timeout?: number\n }\n ): Promise<HighlightDeleteResult> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}/key/${key}`;\n\n const headers: HeadersInit = new Headers();\n headers.append('Content-Type', \"application/json\");\n const response = await this.deleteAsync({url, headers, timeout});\n return response.json();\n }\n\n async getHighlightOrNote(\n {\n isbn,\n pid,\n timeout = 3000\n }:\n {\n isbn: string,\n pid?: number,\n timeout?: number\n }\n ): Promise<HighlightResponse[]> {\n let url = `${this.getUrlPrefix()}/v2/isbn/${isbn}`;\n if (pid) {\n url += `/pid/${pid}`;\n }\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n\n async getHighlightOrNoteCounts(\n {\n noteType,\n timeout = 3000\n }:\n {\n noteType?: HighlightResultType,\n timeout?: number\n }\n ): Promise<HighlightCountResponse[]> {\n let url = `${this.getUrlPrefix()}/v2/count`;\n if (noteType) {\n url += `/${noteType}`;\n }\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n\n async updateHighlightOrNote(\n {\n payload,\n isbn,\n pid,\n key,\n timeout = 5000\n }:\n {\n payload: HighlightUpdateRequest,\n isbn: string,\n pid: number,\n key: number,\n timeout?: number\n }\n ): Promise<HighlightUpdateResponse> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}/key/${key}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.putAsync({url, headers, body: JSON.stringify(payload), timeout});\n return response.json();\n }\n\n async addHighlightOrNote(\n {\n payload,\n isbn,\n pid,\n timeout = 5000\n }:\n {\n payload: HighlightRequest,\n isbn: string,\n pid: number,\n timeout?: number\n }\n ): Promise<HighlightAddResult> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.postAsync({url, headers, body: JSON.stringify(payload), timeout});\n return response.json();\n }\n}\n\nexport default HighlightService;\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 case 'testing':\n return `https://staging-user-settings-service.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/usersettingsservice`;\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 ClientSettingsResponse {\n settings: ClientSettings;\n}\nexport interface ClientSettings {\n readabilities?: Readability;\n darkMode?: boolean;\n displayMode?: DisplayModeOption;\n enableKeyboardShortcuts?: boolean;\n showBookmarks?: boolean;\n showNoteHighlights?: boolean;\n featureGalleryVersion?: number;\n readAloudStore?: ReadAloudStore;\n leftDrawerWidth?: number;\n recentSearches?: string[];\n materialListImagesView?: LayoutView;\n frontPageSections?: FrontPageSection[];\n activePublicationFilters?: ActivePublicationFilters;\n cardsView?: LayoutView;\n cardsSorting?: SortOptions;\n foldersView?: LayoutView;\n foldersSorting?: SortOptions;\n onboardingPromptTime?: string;\n}\n\nexport type DisplayModeOption = 'light' | 'dark' | 'system';\n\nexport type LayoutView = 'list' | 'grid';\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 type SortOptions = 'recent' | 'alphabetical';\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<ClientSettingsResponse> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n try {\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n } catch (Error) {\n if (Error instanceof HTTPError && Error.response.status === 404) {\n return {settings: {}} as ClientSettingsResponse;\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<ClientSettingsResponse> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.putAsync({url, headers, body: JSON.stringify(settings), timeout});\n return response.json();\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 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 const response = await this.putAsync({url, headers, body: JSON.stringify(bookmark), timeout});\n return response.json();\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<Bookmark[]> {\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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<Bookmark[]> {\n let url = `${this.getUrlPrefix()}/bookmark/favourite`;\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(continueBody), timeout});\n return response.json();\n\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.postAsync({url, headers, body: JSON.stringify(mru), timeout});\n return response.json();\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n}\n\nexport default UserSettingsMRU;\n","import BaseService from './base_service.js';\n\nexport interface NoteHighlight {\n color: string;\n comment: string;\n selectedText: string;\n}\n\nexport interface Notes {\n created: string;\n highlight: NoteHighlight;\n link: string;\n pid: string;\n title: string;\n id: string;\n}\n\nexport interface NotesLabels {\n amountOfNotesProse: string;\n documentTitle: string;\n markedText: string;\n noContentLabel: string;\n noSelectedTextLabel: string;\n notesExportedAt: string;\n yourNote: string;\n}\n\nexport interface NotesData {\n labels: NotesLabels\n notes: Notes[]\n}\n\nexport interface NotesRequest {\n exportedDate: string;\n notesData: NotesData;\n userId: string;\n userName: string;\n}\n\nexport interface Response {\n status: string;\n url: string;\n}\n\nexport interface WritingTaskRequest {\n pdftitle: string;\n userId: string;\n userName: string;\n}\n\nexport interface WritingTaskData {\n createdData: string;\n exportedDateTimeString: string;\n header: string;\n headerStripped: string;\n host: string;\n isbn: string;\n publisher: string;\n siteTitle: string;\n userIdentity: string;\n writingTaskItems: WritingTaskItem[];\n}\n\nexport interface WritingTaskItem {\n answer: string;\n crdate: number;\n cruser_id: number;\n deleted: number;\n files: string[]|null;\n hidden: number;\n imageorient: number;\n parentid: number;\n parenttable: string;\n parsedAnswer: string;\n parsedQuestion: string;\n pid: number;\n question: string;\n sorting: number;\n title: string;\n tstamp: number;\n uid: number;\n userAnswered: boolean;\n}\n\nexport interface SiteMapLabels {\n pbook: string;\n toc: string;\n}\n\nexport interface SiteMapPageTreeItem {\n chapterInfo?: SiteMapPageTreeItem;\n characters: number;\n iPages: number;\n images: number;\n interactiveElements: number;\n lang: number;\n math: number;\n ogStandardPage: number;\n originalMaterial: number;\n quizzes: number;\n soundFiles: number;\n standardPage: number;\n sys_language_uid: number;\n uid: number;\n videos: number;\n words: number;\n}\n\nexport interface SiteMapPage {\n children: SiteMapPage[];\n accessGranted: boolean;\n author: null|string;\n description: null|string;\n doktype: number;\n editor: null|string;\n fe_group: string;\n keywords: null|string;\n link: string;\n nav_hide: number;\n nav_title: string;\n pid: number;\n title: string;\n uid: number;\n}\n\nexport type SiteMapPageTreeData = Record<string, SiteMapPageTreeItem>;\n\nexport interface SiteMapContent {\n labels: SiteMapLabels,\n pageTreeData: SiteMapPageTreeData,\n pages: SiteMapPage[]\n}\n\nexport interface SiteMapRequest {\n baseUrl: string;\n content: SiteMapContent,\n exportedDate: string;\n isbn: string;\n siteTitle: string;\n userId: string;\n userName: string;\n}\n\nexport class PdfGeneratorService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://pdfgenerator.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-pdfgenerator.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/pdfgenerator`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async pdfFromSiteMap(\n {\n body,\n timeout = 3000\n }:\n {\n body: SiteMapRequest,\n timeout?: number\n }\n ): Promise<Response> {\n const url = `${this.getUrlPrefix()}/sitemap`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async pdfFromWritingTask(\n {\n body,\n timeout = 3000\n }:\n {\n body: WritingTaskRequest,\n timeout?: number\n }\n ): Promise<Response> {\n const url = `${this.getUrlPrefix()}/writingTask`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async pdfFromNotes(\n {\n body,\n timeout = 3000\n }:\n {\n body: NotesRequest,\n timeout?: number\n }\n ): Promise<Response> {\n const url = `${this.getUrlPrefix()}/notes`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n}\nexport default PdfGeneratorService;","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","import BaseService from './base_service.js';\n\nexport type AIChatRole = \"user\" | \"assistant\" | \"system\";\n\ntype GenericContext = Record<string, unknown>;\n\nexport interface AIChatMessage<\n ContextType extends GenericContext = GenericContext,\n> {\n role: AIChatRole;\n content: string;\n context?: ContextType;\n}\n\nexport interface AIChatMessageDelta<\n ContextType extends GenericContext = GenericContext,\n> {\n role?: AIChatRole;\n content?: string;\n context?: ContextType;\n}\n\nexport interface AIChatCompletion<\n ContextType extends GenericContext = GenericContext,\n> {\n message: AIChatMessage;\n sessionState?: unknown;\n context?: ContextType;\n}\n\nexport interface AIChatCompletionDelta<\n ContextType extends GenericContext = GenericContext,\n> {\n delta: AIChatMessageDelta;\n sessionState?: unknown;\n context?: ContextType;\n}\n\nexport interface AIChatCompletionOptions<\n ContextType extends GenericContext = GenericContext,\n> {\n context?: ContextType;\n sessionState?: unknown;\n}\n\nexport type AIChatCompletionRequest = {\n messages: AIChatMessage[];\n} & AIChatCompletionOptions;\n\n\nexport class AIBotService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://ai-bot-service.eu-west-1.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://ai-bot-service-staging.eu-west-1.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/aibotservice`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async constructChatUrl (\n {\n interactivityId,\n isbn,\n stream\n }:\n {\n interactivityId?: string,\n isbn?: string,\n stream: boolean\n }\n ): Promise<string> {\n if (interactivityId && isbn) \n {\n throw new Error(\"interactivityId and isbn are mutually exclusive\");\n }\n\n if (!interactivityId && !isbn) \n {\n throw new Error(\"Either interactivityId or isbn must be provided\");\n }\n\n let url = '';\n if (interactivityId) \n {\n url = `${this.getUrlPrefix()}/${interactivityId}/chat`;\n }\n\n if (isbn) \n {\n url = `${this.getUrlPrefix()}/interactivity_from_isbn/${isbn}`;\n }\n\n if (stream) {\n url += '/stream';\n }\n\n return url;\n }\n\n async chat(\n {\n interactivityId,\n isbn,\n body,\n timeout = 10000\n }:\n {\n interactivityId?: string,\n isbn?: string,\n body: AIChatCompletionRequest,\n timeout?: number\n }\n ): Promise<AIChatCompletion> {\n const url = await this.constructChatUrl({interactivityId, isbn, stream: false});\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async streamingChat(\n {\n interactivityId,\n isbn,\n body,\n timeout = 10000\n }:\n {\n interactivityId?: string,\n isbn?: string,\n body: AIChatCompletionRequest,\n timeout?: number\n }\n ): Promise<ReadableStream<Uint8Array<ArrayBufferLike>>> {\n const url = await this.constructChatUrl({interactivityId, isbn, stream: true});\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n const responseBody = response.body;\n if (!responseBody)\n {\n throw new Error(\"Response body is null\");\n }\n return responseBody;\n }\n}\n\nexport default AIBotService;\n","import BaseService from './base_service.js';\n\nexport class WritingTaskService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://writingtask.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-writingtask.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/writingtask`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\nexport default WritingTaskService;\n","import BaseService from './base_service.js';\n\nexport class SolrProxyService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://solr-proxy.eu-west-1.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://solr-proxy-staging.eu-west-1.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/solrproxy`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\n\nexport default SolrProxyService;\n"],"mappings":"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","names":["SSMLSpeechSpeeds","HighlightResultType","Error","Error","uuidv4"]}
package/dist/index.d.cts CHANGED
@@ -314,10 +314,13 @@ declare class UserSettingsBase extends BaseService {
314
314
  discoverUrlPrefix(): string;
315
315
  }
316
316
 
317
+ interface ClientSettingsResponse {
318
+ settings: ClientSettings;
319
+ }
317
320
  interface ClientSettings {
318
321
  readabilities?: Readability;
319
322
  darkMode?: boolean;
320
- displayMode?: string;
323
+ displayMode?: DisplayModeOption;
321
324
  enableKeyboardShortcuts?: boolean;
322
325
  showBookmarks?: boolean;
323
326
  showNoteHighlights?: boolean;
@@ -325,15 +328,17 @@ interface ClientSettings {
325
328
  readAloudStore?: ReadAloudStore;
326
329
  leftDrawerWidth?: number;
327
330
  recentSearches?: string[];
328
- materialListImagesView?: string;
331
+ materialListImagesView?: LayoutView;
329
332
  frontPageSections?: FrontPageSection[];
330
333
  activePublicationFilters?: ActivePublicationFilters;
331
- cardsView?: string;
332
- cardsSorting?: string;
333
- foldersView?: string;
334
- foldersSorting?: string;
334
+ cardsView?: LayoutView;
335
+ cardsSorting?: SortOptions;
336
+ foldersView?: LayoutView;
337
+ foldersSorting?: SortOptions;
335
338
  onboardingPromptTime?: string;
336
339
  }
340
+ type DisplayModeOption = 'light' | 'dark' | 'system';
341
+ type LayoutView = 'list' | 'grid';
337
342
  interface ActivePublicationFilters {
338
343
  educations?: string[];
339
344
  displaySubjects?: string[];
@@ -345,22 +350,22 @@ interface Readability {
345
350
  letterSpacing?: number;
346
351
  lineHeight?: number;
347
352
  textSize?: number;
348
- fontFamily?: fontFamily;
353
+ fontFamily?: FontFamily;
349
354
  }
350
- interface fontFamily {
355
+ interface FontFamily {
351
356
  name?: string;
352
357
  defaultSize?: string;
353
358
  url?: string;
354
359
  }
355
360
  interface ReadAloudStore {
356
- currentVoiceSelection?: currentVoiceSelection;
357
- currentSpeedSelection?: currentSpeedSelection;
361
+ currentVoiceSelection?: CurrentVoiceSelection;
362
+ currentSpeedSelection?: CurrentSpeedSelection;
358
363
  }
359
- interface currentSpeedSelection {
364
+ interface CurrentSpeedSelection {
360
365
  speed?: number;
361
366
  text?: string;
362
367
  }
363
- interface currentVoiceSelection {
368
+ interface CurrentVoiceSelection {
364
369
  voice?: number;
365
370
  gender?: number;
366
371
  language?: number;
@@ -372,16 +377,17 @@ interface FrontPageSection {
372
377
  name?: string;
373
378
  position?: number;
374
379
  }
380
+ type SortOptions = 'recent' | 'alphabetical';
375
381
  declare class UserSettingsClientSettings extends UserSettingsBase {
376
382
  getSettings({ isbn, timeout }: {
377
383
  isbn: string;
378
384
  timeout?: number;
379
- }): Promise<ClientSettings>;
385
+ }): Promise<ClientSettingsResponse>;
380
386
  setSettings({ isbn, settings, timeout }: {
381
387
  isbn: string;
382
388
  settings: ClientSettings;
383
389
  timeout?: number;
384
- }): Promise<ClientSettings>;
390
+ }): Promise<ClientSettingsResponse>;
385
391
  deleteSettings({ isbn, timeout }: {
386
392
  isbn: string;
387
393
  timeout?: number;
@@ -461,19 +467,20 @@ declare class UserSettingsMRU extends UserSettingsBase {
461
467
  }): Promise<MRU[]>;
462
468
  }
463
469
 
464
- interface noteHighlight {
470
+ interface NoteHighlight {
465
471
  color: string;
466
472
  comment: string;
467
473
  selectedText: string;
468
474
  }
469
- interface notes {
475
+ interface Notes {
470
476
  created: string;
471
- highlight: noteHighlight;
477
+ highlight: NoteHighlight;
472
478
  link: string;
473
479
  pid: string;
474
480
  title: string;
481
+ id: string;
475
482
  }
476
- interface notesLabels {
483
+ interface NotesLabels {
477
484
  amountOfNotesProse: string;
478
485
  documentTitle: string;
479
486
  markedText: string;
@@ -482,26 +489,26 @@ interface notesLabels {
482
489
  notesExportedAt: string;
483
490
  yourNote: string;
484
491
  }
485
- interface notesData {
486
- labels: notesLabels;
487
- notes: notes[];
492
+ interface NotesData {
493
+ labels: NotesLabels;
494
+ notes: Notes[];
488
495
  }
489
- interface notesRequest {
496
+ interface NotesRequest {
490
497
  exportedDate: string;
491
- notesData: notesData;
498
+ notesData: NotesData;
492
499
  userId: string;
493
500
  userName: string;
494
501
  }
495
- interface response {
502
+ interface Response$1 {
496
503
  status: string;
497
504
  url: string;
498
505
  }
499
- interface writingTaskRequest {
506
+ interface WritingTaskRequest {
500
507
  pdftitle: string;
501
508
  userId: string;
502
509
  userName: string;
503
510
  }
504
- interface writingTaskData {
511
+ interface WritingTaskData {
505
512
  createdData: string;
506
513
  exportedDateTimeString: string;
507
514
  header: string;
@@ -511,9 +518,9 @@ interface writingTaskData {
511
518
  publisher: string;
512
519
  siteTitle: string;
513
520
  userIdentity: string;
514
- writingTaskItems: writingTaskItem[];
521
+ writingTaskItems: WritingTaskItem[];
515
522
  }
516
- interface writingTaskItem {
523
+ interface WritingTaskItem {
517
524
  answer: string;
518
525
  crdate: number;
519
526
  cruser_id: number;
@@ -533,12 +540,12 @@ interface writingTaskItem {
533
540
  uid: number;
534
541
  userAnswered: boolean;
535
542
  }
536
- interface siteMapLabels {
543
+ interface SiteMapLabels {
537
544
  pbook: string;
538
545
  toc: string;
539
546
  }
540
- interface siteMapPageTreeItem {
541
- chapterInfo?: siteMapPageTreeItem;
547
+ interface SiteMapPageTreeItem {
548
+ chapterInfo?: SiteMapPageTreeItem;
542
549
  characters: number;
543
550
  iPages: number;
544
551
  images: number;
@@ -555,8 +562,8 @@ interface siteMapPageTreeItem {
555
562
  videos: number;
556
563
  words: number;
557
564
  }
558
- interface siteMapPage {
559
- children: siteMapPage[];
565
+ interface SiteMapPage {
566
+ children: SiteMapPage[];
560
567
  accessGranted: boolean;
561
568
  author: null | string;
562
569
  description: null | string;
@@ -571,15 +578,15 @@ interface siteMapPage {
571
578
  title: string;
572
579
  uid: number;
573
580
  }
574
- type siteMapPageTreeData = Record<string, siteMapPageTreeItem>;
575
- interface siteMapContent {
576
- labels: siteMapLabels;
577
- pageTreeData: siteMapPageTreeData;
578
- pages: siteMapPage[];
581
+ type SiteMapPageTreeData = Record<string, SiteMapPageTreeItem>;
582
+ interface SiteMapContent {
583
+ labels: SiteMapLabels;
584
+ pageTreeData: SiteMapPageTreeData;
585
+ pages: SiteMapPage[];
579
586
  }
580
- interface siteMapRequest {
587
+ interface SiteMapRequest {
581
588
  baseUrl: string;
582
- content: siteMapContent;
589
+ content: SiteMapContent;
583
590
  exportedDate: string;
584
591
  isbn: string;
585
592
  siteTitle: string;
@@ -589,17 +596,17 @@ interface siteMapRequest {
589
596
  declare class PdfGeneratorService extends BaseService {
590
597
  discoverUrlPrefix(): string;
591
598
  pdfFromSiteMap({ body, timeout }: {
592
- body: siteMapRequest;
599
+ body: SiteMapRequest;
593
600
  timeout?: number;
594
- }): Promise<response>;
601
+ }): Promise<Response$1>;
595
602
  pdfFromWritingTask({ body, timeout }: {
596
- body: writingTaskRequest;
603
+ body: WritingTaskRequest;
597
604
  timeout?: number;
598
- }): Promise<response>;
605
+ }): Promise<Response$1>;
599
606
  pdfFromNotes({ body, timeout }: {
600
- body: notesRequest;
607
+ body: NotesRequest;
601
608
  timeout?: number;
602
- }): Promise<response>;
609
+ }): Promise<Response$1>;
603
610
  }
604
611
 
605
612
  interface FolderObject {
@@ -832,4 +839,4 @@ declare class SolrProxyService extends BaseService {
832
839
  discoverUrlPrefix(): string;
833
840
  }
834
841
 
835
- export { AIBotService, type AIChatCompletion, type AIChatCompletionDelta, type AIChatCompletionOptions, type AIChatCompletionRequest, type AIChatMessage, type AIChatMessageDelta, type AIChatRole, type ActivePublicationFilters, type Bookmark, type BookmarkUpdate, type ClientSettings, type Continue, type ContinueUpdate, CookieConsentLog, type CookieConsentRequest, type CookieConsentResponse, type CookieConsentState, type Folder, type FolderContent, type FolderObject, type FrontPageSection, type Highlight, type HighlightAddResult, type HighlightCountResponse, type HighlightDeleteResult, type HighlightRanges, type HighlightRequest, type HighlightResponse, HighlightResultType, type HighlightSearchRequest, type HighlightSearchResponse, HighlightService, type HighlightUpdate, type HighlightUpdateRequest, type HighlightUpdateResponse, type HiglightSearchMatch, type ICtype, type ICtypeDict, type IRecreationData, type ITextStartEndObject, type MRU, PdfGeneratorService, PollyService, type ReadAloudStore, type Readability, SSMLSpeechSpeeds, SolrProxyService, type SpeechmarkEvent, type SynthesisRequest, type SynthesisResponse, type Tag, type TagOutput, TaggingService, UserFolders, UserSettingsBookmarks, UserSettingsClientSettings, UserSettingsContinue, UserSettingsMRU, WritingTaskService, type currentSpeedSelection, type currentVoiceSelection, type fontFamily, type noteHighlight, type notes, type notesData, type notesLabels, type notesRequest, type response, type siteMapContent, type siteMapLabels, type siteMapPage, type siteMapPageTreeData, type siteMapPageTreeItem, type siteMapRequest, type writingTaskData, type writingTaskItem, type writingTaskRequest };
842
+ export { AIBotService, type AIChatCompletion, type AIChatCompletionDelta, type AIChatCompletionOptions, type AIChatCompletionRequest, type AIChatMessage, type AIChatMessageDelta, type AIChatRole, type ActivePublicationFilters, type Bookmark, type BookmarkUpdate, type ClientSettings, type ClientSettingsResponse, type Continue, type ContinueUpdate, CookieConsentLog, type CookieConsentRequest, type CookieConsentResponse, type CookieConsentState, type CurrentSpeedSelection, type CurrentVoiceSelection, type DisplayModeOption, type Folder, type FolderContent, type FolderObject, type FontFamily, type FrontPageSection, type Highlight, type HighlightAddResult, type HighlightCountResponse, type HighlightDeleteResult, type HighlightRanges, type HighlightRequest, type HighlightResponse, HighlightResultType, type HighlightSearchRequest, type HighlightSearchResponse, HighlightService, type HighlightUpdate, type HighlightUpdateRequest, type HighlightUpdateResponse, type HiglightSearchMatch, type ICtype, type ICtypeDict, type IRecreationData, type ITextStartEndObject, type LayoutView, type MRU, type NoteHighlight, type Notes, type NotesData, type NotesLabels, type NotesRequest, PdfGeneratorService, PollyService, type ReadAloudStore, type Readability, type Response$1 as Response, SSMLSpeechSpeeds, type SiteMapContent, type SiteMapLabels, type SiteMapPage, type SiteMapPageTreeData, type SiteMapPageTreeItem, type SiteMapRequest, SolrProxyService, type SortOptions, type SpeechmarkEvent, type SynthesisRequest, type SynthesisResponse, type Tag, type TagOutput, TaggingService, UserFolders, UserSettingsBookmarks, UserSettingsClientSettings, UserSettingsContinue, UserSettingsMRU, type WritingTaskData, type WritingTaskItem, type WritingTaskRequest, WritingTaskService };
package/dist/index.d.ts CHANGED
@@ -314,10 +314,13 @@ declare class UserSettingsBase extends BaseService {
314
314
  discoverUrlPrefix(): string;
315
315
  }
316
316
 
317
+ interface ClientSettingsResponse {
318
+ settings: ClientSettings;
319
+ }
317
320
  interface ClientSettings {
318
321
  readabilities?: Readability;
319
322
  darkMode?: boolean;
320
- displayMode?: string;
323
+ displayMode?: DisplayModeOption;
321
324
  enableKeyboardShortcuts?: boolean;
322
325
  showBookmarks?: boolean;
323
326
  showNoteHighlights?: boolean;
@@ -325,15 +328,17 @@ interface ClientSettings {
325
328
  readAloudStore?: ReadAloudStore;
326
329
  leftDrawerWidth?: number;
327
330
  recentSearches?: string[];
328
- materialListImagesView?: string;
331
+ materialListImagesView?: LayoutView;
329
332
  frontPageSections?: FrontPageSection[];
330
333
  activePublicationFilters?: ActivePublicationFilters;
331
- cardsView?: string;
332
- cardsSorting?: string;
333
- foldersView?: string;
334
- foldersSorting?: string;
334
+ cardsView?: LayoutView;
335
+ cardsSorting?: SortOptions;
336
+ foldersView?: LayoutView;
337
+ foldersSorting?: SortOptions;
335
338
  onboardingPromptTime?: string;
336
339
  }
340
+ type DisplayModeOption = 'light' | 'dark' | 'system';
341
+ type LayoutView = 'list' | 'grid';
337
342
  interface ActivePublicationFilters {
338
343
  educations?: string[];
339
344
  displaySubjects?: string[];
@@ -345,22 +350,22 @@ interface Readability {
345
350
  letterSpacing?: number;
346
351
  lineHeight?: number;
347
352
  textSize?: number;
348
- fontFamily?: fontFamily;
353
+ fontFamily?: FontFamily;
349
354
  }
350
- interface fontFamily {
355
+ interface FontFamily {
351
356
  name?: string;
352
357
  defaultSize?: string;
353
358
  url?: string;
354
359
  }
355
360
  interface ReadAloudStore {
356
- currentVoiceSelection?: currentVoiceSelection;
357
- currentSpeedSelection?: currentSpeedSelection;
361
+ currentVoiceSelection?: CurrentVoiceSelection;
362
+ currentSpeedSelection?: CurrentSpeedSelection;
358
363
  }
359
- interface currentSpeedSelection {
364
+ interface CurrentSpeedSelection {
360
365
  speed?: number;
361
366
  text?: string;
362
367
  }
363
- interface currentVoiceSelection {
368
+ interface CurrentVoiceSelection {
364
369
  voice?: number;
365
370
  gender?: number;
366
371
  language?: number;
@@ -372,16 +377,17 @@ interface FrontPageSection {
372
377
  name?: string;
373
378
  position?: number;
374
379
  }
380
+ type SortOptions = 'recent' | 'alphabetical';
375
381
  declare class UserSettingsClientSettings extends UserSettingsBase {
376
382
  getSettings({ isbn, timeout }: {
377
383
  isbn: string;
378
384
  timeout?: number;
379
- }): Promise<ClientSettings>;
385
+ }): Promise<ClientSettingsResponse>;
380
386
  setSettings({ isbn, settings, timeout }: {
381
387
  isbn: string;
382
388
  settings: ClientSettings;
383
389
  timeout?: number;
384
- }): Promise<ClientSettings>;
390
+ }): Promise<ClientSettingsResponse>;
385
391
  deleteSettings({ isbn, timeout }: {
386
392
  isbn: string;
387
393
  timeout?: number;
@@ -461,19 +467,20 @@ declare class UserSettingsMRU extends UserSettingsBase {
461
467
  }): Promise<MRU[]>;
462
468
  }
463
469
 
464
- interface noteHighlight {
470
+ interface NoteHighlight {
465
471
  color: string;
466
472
  comment: string;
467
473
  selectedText: string;
468
474
  }
469
- interface notes {
475
+ interface Notes {
470
476
  created: string;
471
- highlight: noteHighlight;
477
+ highlight: NoteHighlight;
472
478
  link: string;
473
479
  pid: string;
474
480
  title: string;
481
+ id: string;
475
482
  }
476
- interface notesLabels {
483
+ interface NotesLabels {
477
484
  amountOfNotesProse: string;
478
485
  documentTitle: string;
479
486
  markedText: string;
@@ -482,26 +489,26 @@ interface notesLabels {
482
489
  notesExportedAt: string;
483
490
  yourNote: string;
484
491
  }
485
- interface notesData {
486
- labels: notesLabels;
487
- notes: notes[];
492
+ interface NotesData {
493
+ labels: NotesLabels;
494
+ notes: Notes[];
488
495
  }
489
- interface notesRequest {
496
+ interface NotesRequest {
490
497
  exportedDate: string;
491
- notesData: notesData;
498
+ notesData: NotesData;
492
499
  userId: string;
493
500
  userName: string;
494
501
  }
495
- interface response {
502
+ interface Response$1 {
496
503
  status: string;
497
504
  url: string;
498
505
  }
499
- interface writingTaskRequest {
506
+ interface WritingTaskRequest {
500
507
  pdftitle: string;
501
508
  userId: string;
502
509
  userName: string;
503
510
  }
504
- interface writingTaskData {
511
+ interface WritingTaskData {
505
512
  createdData: string;
506
513
  exportedDateTimeString: string;
507
514
  header: string;
@@ -511,9 +518,9 @@ interface writingTaskData {
511
518
  publisher: string;
512
519
  siteTitle: string;
513
520
  userIdentity: string;
514
- writingTaskItems: writingTaskItem[];
521
+ writingTaskItems: WritingTaskItem[];
515
522
  }
516
- interface writingTaskItem {
523
+ interface WritingTaskItem {
517
524
  answer: string;
518
525
  crdate: number;
519
526
  cruser_id: number;
@@ -533,12 +540,12 @@ interface writingTaskItem {
533
540
  uid: number;
534
541
  userAnswered: boolean;
535
542
  }
536
- interface siteMapLabels {
543
+ interface SiteMapLabels {
537
544
  pbook: string;
538
545
  toc: string;
539
546
  }
540
- interface siteMapPageTreeItem {
541
- chapterInfo?: siteMapPageTreeItem;
547
+ interface SiteMapPageTreeItem {
548
+ chapterInfo?: SiteMapPageTreeItem;
542
549
  characters: number;
543
550
  iPages: number;
544
551
  images: number;
@@ -555,8 +562,8 @@ interface siteMapPageTreeItem {
555
562
  videos: number;
556
563
  words: number;
557
564
  }
558
- interface siteMapPage {
559
- children: siteMapPage[];
565
+ interface SiteMapPage {
566
+ children: SiteMapPage[];
560
567
  accessGranted: boolean;
561
568
  author: null | string;
562
569
  description: null | string;
@@ -571,15 +578,15 @@ interface siteMapPage {
571
578
  title: string;
572
579
  uid: number;
573
580
  }
574
- type siteMapPageTreeData = Record<string, siteMapPageTreeItem>;
575
- interface siteMapContent {
576
- labels: siteMapLabels;
577
- pageTreeData: siteMapPageTreeData;
578
- pages: siteMapPage[];
581
+ type SiteMapPageTreeData = Record<string, SiteMapPageTreeItem>;
582
+ interface SiteMapContent {
583
+ labels: SiteMapLabels;
584
+ pageTreeData: SiteMapPageTreeData;
585
+ pages: SiteMapPage[];
579
586
  }
580
- interface siteMapRequest {
587
+ interface SiteMapRequest {
581
588
  baseUrl: string;
582
- content: siteMapContent;
589
+ content: SiteMapContent;
583
590
  exportedDate: string;
584
591
  isbn: string;
585
592
  siteTitle: string;
@@ -589,17 +596,17 @@ interface siteMapRequest {
589
596
  declare class PdfGeneratorService extends BaseService {
590
597
  discoverUrlPrefix(): string;
591
598
  pdfFromSiteMap({ body, timeout }: {
592
- body: siteMapRequest;
599
+ body: SiteMapRequest;
593
600
  timeout?: number;
594
- }): Promise<response>;
601
+ }): Promise<Response$1>;
595
602
  pdfFromWritingTask({ body, timeout }: {
596
- body: writingTaskRequest;
603
+ body: WritingTaskRequest;
597
604
  timeout?: number;
598
- }): Promise<response>;
605
+ }): Promise<Response$1>;
599
606
  pdfFromNotes({ body, timeout }: {
600
- body: notesRequest;
607
+ body: NotesRequest;
601
608
  timeout?: number;
602
- }): Promise<response>;
609
+ }): Promise<Response$1>;
603
610
  }
604
611
 
605
612
  interface FolderObject {
@@ -832,4 +839,4 @@ declare class SolrProxyService extends BaseService {
832
839
  discoverUrlPrefix(): string;
833
840
  }
834
841
 
835
- export { AIBotService, type AIChatCompletion, type AIChatCompletionDelta, type AIChatCompletionOptions, type AIChatCompletionRequest, type AIChatMessage, type AIChatMessageDelta, type AIChatRole, type ActivePublicationFilters, type Bookmark, type BookmarkUpdate, type ClientSettings, type Continue, type ContinueUpdate, CookieConsentLog, type CookieConsentRequest, type CookieConsentResponse, type CookieConsentState, type Folder, type FolderContent, type FolderObject, type FrontPageSection, type Highlight, type HighlightAddResult, type HighlightCountResponse, type HighlightDeleteResult, type HighlightRanges, type HighlightRequest, type HighlightResponse, HighlightResultType, type HighlightSearchRequest, type HighlightSearchResponse, HighlightService, type HighlightUpdate, type HighlightUpdateRequest, type HighlightUpdateResponse, type HiglightSearchMatch, type ICtype, type ICtypeDict, type IRecreationData, type ITextStartEndObject, type MRU, PdfGeneratorService, PollyService, type ReadAloudStore, type Readability, SSMLSpeechSpeeds, SolrProxyService, type SpeechmarkEvent, type SynthesisRequest, type SynthesisResponse, type Tag, type TagOutput, TaggingService, UserFolders, UserSettingsBookmarks, UserSettingsClientSettings, UserSettingsContinue, UserSettingsMRU, WritingTaskService, type currentSpeedSelection, type currentVoiceSelection, type fontFamily, type noteHighlight, type notes, type notesData, type notesLabels, type notesRequest, type response, type siteMapContent, type siteMapLabels, type siteMapPage, type siteMapPageTreeData, type siteMapPageTreeItem, type siteMapRequest, type writingTaskData, type writingTaskItem, type writingTaskRequest };
842
+ export { AIBotService, type AIChatCompletion, type AIChatCompletionDelta, type AIChatCompletionOptions, type AIChatCompletionRequest, type AIChatMessage, type AIChatMessageDelta, type AIChatRole, type ActivePublicationFilters, type Bookmark, type BookmarkUpdate, type ClientSettings, type ClientSettingsResponse, type Continue, type ContinueUpdate, CookieConsentLog, type CookieConsentRequest, type CookieConsentResponse, type CookieConsentState, type CurrentSpeedSelection, type CurrentVoiceSelection, type DisplayModeOption, type Folder, type FolderContent, type FolderObject, type FontFamily, type FrontPageSection, type Highlight, type HighlightAddResult, type HighlightCountResponse, type HighlightDeleteResult, type HighlightRanges, type HighlightRequest, type HighlightResponse, HighlightResultType, type HighlightSearchRequest, type HighlightSearchResponse, HighlightService, type HighlightUpdate, type HighlightUpdateRequest, type HighlightUpdateResponse, type HiglightSearchMatch, type ICtype, type ICtypeDict, type IRecreationData, type ITextStartEndObject, type LayoutView, type MRU, type NoteHighlight, type Notes, type NotesData, type NotesLabels, type NotesRequest, PdfGeneratorService, PollyService, type ReadAloudStore, type Readability, type Response$1 as Response, SSMLSpeechSpeeds, type SiteMapContent, type SiteMapLabels, type SiteMapPage, type SiteMapPageTreeData, type SiteMapPageTreeItem, type SiteMapRequest, SolrProxyService, type SortOptions, type SpeechmarkEvent, type SynthesisRequest, type SynthesisResponse, type Tag, type TagOutput, TaggingService, UserFolders, UserSettingsBookmarks, UserSettingsClientSettings, UserSettingsContinue, UserSettingsMRU, type WritingTaskData, type WritingTaskItem, type WritingTaskRequest, WritingTaskService };
package/dist/index.js CHANGED
@@ -379,7 +379,7 @@ var UserSettingsClientSettings = class extends user_settings_base_default {
379
379
  return response.json();
380
380
  } catch (Error2) {
381
381
  if (Error2 instanceof HTTPError && Error2.response.status === 404) {
382
- return {};
382
+ return { settings: {} };
383
383
  } else {
384
384
  throw HTTPError;
385
385
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/polly_service.ts","../src/services/cookie_consent_log.ts","../src/services/highlight_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/pdf_generator.ts","../src/services/highlevel/tagging/user_folders.ts","../src/services/ai_bot_service.ts","../src/services/writing_task_service.ts","../src/services/solr_proxy_service.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.toLowerCase();\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 addAuthHeaders = true,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'GET';\n return await this.callAsync({ url, body: null, method, headers, addAuthHeaders, timeout });\n }\n\n async putAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'PUT';\n return await this.callAsync({ url, body, method, headers, addAuthHeaders, timeout });\n }\n\n async postAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'POST';\n return await this.callAsync({ url, body, method, headers, addAuthHeaders, timeout });\n }\n\n async deleteAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'DELETE';\n return await this.callAsync({ url, body: null, method, headers, addAuthHeaders, timeout });\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout,\n addAuthHeaders\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number,\n addAuthHeaders?: boolean,\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n if (addAuthHeaders) {\n headers = await this.addAuthHeaders(headers);\n }\n\n const response = await fetch(url, {\n 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 case 'testing':\n return `https://staging-tagging.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/tagging`;\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.getAsync({url, headers, timeout});\n return await response.json();\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 const response = await this.postAsync({url, headers, body: JSON.stringify(tag), timeout});\n return await response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(tag), timeout});\n return await response.json();\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 const response = await this.deleteAsync({url, headers, timeout});\n await response.json();\n return\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport enum SSMLSpeechSpeeds {\n X_SLOW = 1,\n SLOW = 2,\n MEDIUM = 3,\n FAST = 4,\n X_FAST = 5,\n}\n\nexport type SpeechmarkEvent = {\n time: number;\n type?: string;\n value: string;\n start?: number;\n end?: number;\n}\n\nexport interface SynthesisResponse {\n mp3url: string;\n s3: string[];\n SpeechMarks?: SpeechmarkEvent[];\n}\n\nexport interface SynthesisRequest {\n text: string;\n includeSpeechMarks?: boolean;\n voice: number;\n speed?: SSMLSpeechSpeeds;\n}\n\nexport class PollyService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://appear-polly.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-appear-polly.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/polly`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async synthesize(\n {\n body,\n timeout = 3000\n }:\n {\n body: SynthesisRequest,\n timeout?: number\n }\n ): Promise<SynthesisResponse> {\n const url = `${this.getUrlPrefix()}/synthesizeSpeech`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n}\n\nexport default PollyService;\n","import BaseService from './base_service.js';\n\nexport interface CookieConsentRequest {\n consentState: CookieConsentState;\n consentUrl: string;\n timeStamp: number;\n uuid: string;\n}\n\nexport interface CookieConsentState {\n func: number;\n stat: number;\n uuid: string;\n version: number;\n}\n\nexport interface CookieConsentResponse {\n response: string\n}\n\nexport class CookieConsentLog extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://cookieconsentlog.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-cookieconsentlog.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/cookieconsentlog`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async logCookieConsent(\n {\n body,\n timeout = 3000\n }:\n {\n body: CookieConsentRequest,\n timeout?: number\n }\n ): Promise<string> {\n const url = `${this.getUrlPrefix()}/log`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), addAuthHeaders: false, timeout});\n return response.text();\n }\n\n}\n\nexport default CookieConsentLog;\n","import BaseService from './base_service.js';\n\nexport enum HighlightResultType {\n 'highlight' = 'highlight',\n 'note' = 'note',\n}\n\nexport interface HighlightRanges {\n start: number|null;\n end: number|null;\n startOffset: number;\n endOffset: number;\n}\n\nexport interface Highlight extends HighlightUpdate {\n id: string;\n recreationdata?: IRecreationData;\n ranges?: HighlightRanges[];\n lang?: string;\n markedupText?: string;\n createdtstamp?: number;\n}\n\nexport interface HighlightRequest {\n breadCrumb: string;\n pageTitle: string;\n externalUserId?: string;\n highlight: Highlight;\n}\n\nexport interface HighlightSearchRequest {\n searchQuery: string;\n resultType?: HighlightResultType;\n isbn?: string;\n maxResults?: number;\n vectorMinConfidence?: number;\n vectorHighConfidence?: number;\n fulltextMinScore?: number;\n}\n\nexport interface HiglightSearchMatch {\n rangeKey: number;\n confidence: number;\n texttype: HighlightResultType;\n isbn: string;\n pid: number;\n returnedItem: number;\n}\n\nexport interface HighlightSearchResponse {\n Items: HighlightResponse[];\n Matches: HiglightSearchMatch[];\n}\n\nexport interface HighlightResponse extends HighlightRequest {\n debugHostname: string;\n uidIsbnPidMyAccountIdPartitionKey: string;\n timestampSortKey: number;\n timeToDie: number;\n pid: number;\n uid: string;\n myAccountid: string;\n commentText: string;\n quote: string;\n hlcolor: string;\n isbn: string;\n}\n\nexport interface HighlightUpdate {\n hlcolor: string;\n quote: string;\n text: string;\n}\n\nexport interface HighlightUpdateRequest {\n highlight: HighlightUpdate;\n}\n\nexport interface HighlightCountResponse {\n type: HighlightResultType;\n isbn: string;\n count: number;\n}\n\nexport interface HighlightDeleteResult extends HighlightUpdateResponse {\n changed: number;\n}\n\nexport interface HighlightAddResult extends HighlightUpdateResponse {\n timestampSortKey: number;\n}\n\nexport interface HighlightUpdateResponse {\n status: string;\n}\n\ninterface IBKNGData {\n prev20TextContent?: string | null;\n next20TextContent?: string;\n cid?: number;\n isPageNote?: boolean;\n domPath?: string;\n newElementPath?: string;\n elementPath?: string;\n prevNextTextContent?: {\n before: string | null;\n after: string;\n srcText: string | null;\n };\n}\n\nexport interface ICtype {\n SiblingsCount: string; // e.g. '15'\n classes: string; // e.g. 'csc-default csc-textpic'\n}\n\nexport interface ICtypeDict {\n [cid: string]: ICtype;\n}\n\nexport interface ITextStartEndObject {\n startSelectedText: string | undefined | null; // start of selection, text value\n endSelectedText: string | undefined; // end of selection, text value '150.000';\n}\n\nexport interface IRecreationData {\n startCID: number; // id of section start, e.g. 'c319'\n numberOfSiblingsOnStartNode?: number | undefined; // sibling count adjacent to the start node, e.g. '5'\n numberofPrevSiblingsOnCIDStartNode?: number | undefined; // e.g. '1';\n startCtypes?: ICtypeDict | null | undefined; // this was never used....\n\n endCID: number;\n numberOfSiblingsOnEndNode?: number | undefined;\n numberofPrevSiblingsOnCIDEndNode?: number | undefined;\n endCTypes?: ICtypeDict | null | undefined; // this was never used ....\n\n startSelectionInnerText?: string | null | undefined; // inner html (text) of the start node that was selected\n endSelectionInnerText?: string | null | undefined; // inner html (text) of the end node that was selected\n\n mathObject?: string | null | undefined; // e.g. '0'. who knows?\n\n selectedTextStartAndEndObject?: ITextStartEndObject | undefined; // not really used in the old client\n\n totalSiblingsToCIDs?: number | undefined; // e.g. '15'\n\n ibkngData?: IBKNGData | null | undefined;\n\n specialSelectedText?: string | undefined;\n source?: any | null | undefined;\n}\n\nexport class HighlightService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://highlights.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-highlights.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/highlight`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async search(\n {\n search,\n timeout = 3000\n }:\n {\n search: HighlightSearchRequest,\n timeout?: number\n }\n ): Promise<HighlightSearchResponse> {\n const url = `${this.getUrlPrefix()}/v2/search`;\n\n const headers: HeadersInit = new Headers();\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(search), timeout});\n return response.json();\n }\n\n async deleteHighlightOrNote(\n {\n isbn,\n pid,\n key,\n timeout = 3000\n }:\n {\n isbn: string,\n pid: number,\n key: number,\n timeout?: number\n }\n ): Promise<HighlightDeleteResult> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}/key/${key}`;\n\n const headers: HeadersInit = new Headers();\n headers.append('Content-Type', \"application/json\");\n const response = await this.deleteAsync({url, headers, timeout});\n return response.json();\n }\n\n async getHighlightOrNote(\n {\n isbn,\n pid,\n timeout = 3000\n }:\n {\n isbn: string,\n pid?: number,\n timeout?: number\n }\n ): Promise<HighlightResponse[]> {\n let url = `${this.getUrlPrefix()}/v2/isbn/${isbn}`;\n if (pid) {\n url += `/pid/${pid}`;\n }\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n\n async getHighlightOrNoteCounts(\n {\n noteType,\n timeout = 3000\n }:\n {\n noteType?: HighlightResultType,\n timeout?: number\n }\n ): Promise<HighlightCountResponse[]> {\n let url = `${this.getUrlPrefix()}/v2/count`;\n if (noteType) {\n url += `/${noteType}`;\n }\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n\n async updateHighlightOrNote(\n {\n payload,\n isbn,\n pid,\n key,\n timeout = 5000\n }:\n {\n payload: HighlightUpdateRequest,\n isbn: string,\n pid: number,\n key: number,\n timeout?: number\n }\n ): Promise<HighlightUpdateResponse> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}/key/${key}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.putAsync({url, headers, body: JSON.stringify(payload), timeout});\n return response.json();\n }\n\n async addHighlightOrNote(\n {\n payload,\n isbn,\n pid,\n timeout = 5000\n }:\n {\n payload: HighlightRequest,\n isbn: string,\n pid: number,\n timeout?: number\n }\n ): Promise<HighlightAddResult> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.postAsync({url, headers, body: JSON.stringify(payload), timeout});\n return response.json();\n }\n}\n\nexport default HighlightService;\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 case 'testing':\n return `https://staging-user-settings-service.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/usersettingsservice`;\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(settings), timeout});\n return response.json();\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 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 const response = await this.putAsync({url, headers, body: JSON.stringify(bookmark), timeout});\n return response.json();\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<Bookmark[]> {\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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<Bookmark[]> {\n let url = `${this.getUrlPrefix()}/bookmark/favourite`;\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(continueBody), timeout});\n return response.json();\n\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.postAsync({url, headers, body: JSON.stringify(mru), timeout});\n return response.json();\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n}\n\nexport default UserSettingsMRU;\n","import BaseService from './base_service.js';\n\nexport interface noteHighlight {\n color: string;\n comment: string;\n selectedText: string;\n}\n\nexport interface notes {\n created: string;\n highlight: noteHighlight;\n link: string;\n pid: string;\n title: string;\n}\n\nexport interface notesLabels {\n amountOfNotesProse: string;\n documentTitle: string;\n markedText: string;\n noContentLabel: string;\n noSelectedTextLabel: string;\n notesExportedAt: string;\n yourNote: string;\n}\n\nexport interface notesData {\n labels: notesLabels\n notes: notes[]\n}\n\nexport interface notesRequest {\n exportedDate: string;\n notesData: notesData;\n userId: string;\n userName: string;\n}\n\nexport interface response {\n status: string;\n url: string;\n}\n\nexport interface writingTaskRequest {\n pdftitle: string;\n userId: string;\n userName: string;\n}\n\nexport interface writingTaskData {\n createdData: string;\n exportedDateTimeString: string;\n header: string;\n headerStripped: string;\n host: string;\n isbn: string;\n publisher: string;\n siteTitle: string;\n userIdentity: string;\n writingTaskItems: writingTaskItem[];\n}\n\nexport interface writingTaskItem {\n answer: string;\n crdate: number;\n cruser_id: number;\n deleted: number;\n files: string[]|null;\n hidden: number;\n imageorient: number;\n parentid: number;\n parenttable: string;\n parsedAnswer: string;\n parsedQuestion: string;\n pid: number;\n question: string;\n sorting: number;\n title: string;\n tstamp: number;\n uid: number;\n userAnswered: boolean;\n}\n\nexport interface siteMapLabels {\n pbook: string;\n toc: string;\n}\n\nexport interface siteMapPageTreeItem {\n chapterInfo?: siteMapPageTreeItem;\n characters: number;\n iPages: number;\n images: number;\n interactiveElements: number;\n lang: number;\n math: number;\n ogStandardPage: number;\n originalMaterial: number;\n quizzes: number;\n soundFiles: number;\n standardPage: number;\n sys_language_uid: number;\n uid: number;\n videos: number;\n words: number;\n}\n\nexport interface siteMapPage {\n children: siteMapPage[];\n accessGranted: boolean;\n author: null|string;\n description: null|string;\n doktype: number;\n editor: null|string;\n fe_group: string;\n keywords: null|string;\n link: string;\n nav_hide: number;\n nav_title: string;\n pid: number;\n title: string;\n uid: number;\n}\n\nexport type siteMapPageTreeData = Record<string, siteMapPageTreeItem>;\n\nexport interface siteMapContent {\n labels: siteMapLabels,\n pageTreeData: siteMapPageTreeData,\n pages: siteMapPage[]\n}\n\nexport interface siteMapRequest {\n baseUrl: string;\n content: siteMapContent,\n exportedDate: string;\n isbn: string;\n siteTitle: string;\n userId: string;\n userName: string;\n}\n\nexport class PdfGeneratorService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://pdfgenerator.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-pdfgenerator.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/pdfgenerator`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async pdfFromSiteMap(\n {\n body,\n timeout = 3000\n }:\n {\n body: siteMapRequest,\n timeout?: number\n }\n ): Promise<response> {\n const url = `${this.getUrlPrefix()}/sitemap`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async pdfFromWritingTask(\n {\n body,\n timeout = 3000\n }:\n {\n body: writingTaskRequest,\n timeout?: number\n }\n ): Promise<response> {\n const url = `${this.getUrlPrefix()}/writingTask`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async pdfFromNotes(\n {\n body,\n timeout = 3000\n }:\n {\n body: notesRequest,\n timeout?: number\n }\n ): Promise<response> {\n const url = `${this.getUrlPrefix()}/notes`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n}\nexport default PdfGeneratorService;\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","import BaseService from './base_service.js';\n\nexport type AIChatRole = \"user\" | \"assistant\" | \"system\";\n\ntype GenericContext = Record<string, unknown>;\n\nexport interface AIChatMessage<\n ContextType extends GenericContext = GenericContext,\n> {\n role: AIChatRole;\n content: string;\n context?: ContextType;\n}\n\nexport interface AIChatMessageDelta<\n ContextType extends GenericContext = GenericContext,\n> {\n role?: AIChatRole;\n content?: string;\n context?: ContextType;\n}\n\nexport interface AIChatCompletion<\n ContextType extends GenericContext = GenericContext,\n> {\n message: AIChatMessage;\n sessionState?: unknown;\n context?: ContextType;\n}\n\nexport interface AIChatCompletionDelta<\n ContextType extends GenericContext = GenericContext,\n> {\n delta: AIChatMessageDelta;\n sessionState?: unknown;\n context?: ContextType;\n}\n\nexport interface AIChatCompletionOptions<\n ContextType extends GenericContext = GenericContext,\n> {\n context?: ContextType;\n sessionState?: unknown;\n}\n\nexport type AIChatCompletionRequest = {\n messages: AIChatMessage[];\n} & AIChatCompletionOptions;\n\n\nexport class AIBotService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://ai-bot-service.eu-west-1.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://ai-bot-service-staging.eu-west-1.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/aibotservice`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async constructChatUrl (\n {\n interactivityId,\n isbn,\n stream\n }:\n {\n interactivityId?: string,\n isbn?: string,\n stream: boolean\n }\n ): Promise<string> {\n if (interactivityId && isbn) \n {\n throw new Error(\"interactivityId and isbn are mutually exclusive\");\n }\n\n if (!interactivityId && !isbn) \n {\n throw new Error(\"Either interactivityId or isbn must be provided\");\n }\n\n let url = '';\n if (interactivityId) \n {\n url = `${this.getUrlPrefix()}/${interactivityId}/chat`;\n }\n\n if (isbn) \n {\n url = `${this.getUrlPrefix()}/interactivity_from_isbn/${isbn}`;\n }\n\n if (stream) {\n url += '/stream';\n }\n\n return url;\n }\n\n async chat(\n {\n interactivityId,\n isbn,\n body,\n timeout = 10000\n }:\n {\n interactivityId?: string,\n isbn?: string,\n body: AIChatCompletionRequest,\n timeout?: number\n }\n ): Promise<AIChatCompletion> {\n const url = await this.constructChatUrl({interactivityId, isbn, stream: false});\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async streamingChat(\n {\n interactivityId,\n isbn,\n body,\n timeout = 10000\n }:\n {\n interactivityId?: string,\n isbn?: string,\n body: AIChatCompletionRequest,\n timeout?: number\n }\n ): Promise<ReadableStream<Uint8Array<ArrayBufferLike>>> {\n const url = await this.constructChatUrl({interactivityId, isbn, stream: true});\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n const responseBody = response.body;\n if (!responseBody)\n {\n throw new Error(\"Response body is null\");\n }\n return responseBody;\n }\n}\n\nexport default AIBotService;\n","import BaseService from './base_service.js';\n\nexport class WritingTaskService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://writingtask.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-writingtask.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/writingtask`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\nexport default WritingTaskService;\n","import BaseService from './base_service.js';\n\nexport class SolrProxyService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://solr-proxy.eu-west-1.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://solr-proxy-staging.eu-west-1.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/solrproxy`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\n\nexport default SolrProxyService;\n"],"mappings":"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","names":["SSMLSpeechSpeeds","HighlightResultType","Error","Error"]}
1
+ {"version":3,"sources":["../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/polly_service.ts","../src/services/cookie_consent_log.ts","../src/services/highlight_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/pdf_generator.ts","../src/services/highlevel/tagging/user_folders.ts","../src/services/ai_bot_service.ts","../src/services/writing_task_service.ts","../src/services/solr_proxy_service.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.toLowerCase();\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 addAuthHeaders = true,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'GET';\n return await this.callAsync({ url, body: null, method, headers, addAuthHeaders, timeout });\n }\n\n async putAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'PUT';\n return await this.callAsync({ url, body, method, headers, addAuthHeaders, timeout });\n }\n\n async postAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'POST';\n return await this.callAsync({ url, body, method, headers, addAuthHeaders, timeout });\n }\n\n async deleteAsync(\n {\n url,\n headers,\n addAuthHeaders = true,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n addAuthHeaders?: boolean,\n timeout: number\n }\n ): Promise<Response> {\n const method = 'DELETE';\n return await this.callAsync({ url, body: null, method, headers, addAuthHeaders, timeout });\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout,\n addAuthHeaders\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number,\n addAuthHeaders?: boolean,\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n if (addAuthHeaders) {\n headers = await this.addAuthHeaders(headers);\n }\n\n const response = await fetch(url, {\n 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 case 'testing':\n return `https://staging-tagging.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/tagging`;\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.getAsync({url, headers, timeout});\n return await response.json();\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 const response = await this.postAsync({url, headers, body: JSON.stringify(tag), timeout});\n return await response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(tag), timeout});\n return await response.json();\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 const response = await this.deleteAsync({url, headers, timeout});\n await response.json();\n return\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport enum SSMLSpeechSpeeds {\n X_SLOW = 1,\n SLOW = 2,\n MEDIUM = 3,\n FAST = 4,\n X_FAST = 5,\n}\n\nexport type SpeechmarkEvent = {\n time: number;\n type?: string;\n value: string;\n start?: number;\n end?: number;\n}\n\nexport interface SynthesisResponse {\n mp3url: string;\n s3: string[];\n SpeechMarks?: SpeechmarkEvent[];\n}\n\nexport interface SynthesisRequest {\n text: string;\n includeSpeechMarks?: boolean;\n voice: number;\n speed?: SSMLSpeechSpeeds;\n}\n\nexport class PollyService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://appear-polly.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-appear-polly.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/polly`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async synthesize(\n {\n body,\n timeout = 3000\n }:\n {\n body: SynthesisRequest,\n timeout?: number\n }\n ): Promise<SynthesisResponse> {\n const url = `${this.getUrlPrefix()}/synthesizeSpeech`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n}\n\nexport default PollyService;\n","import BaseService from './base_service.js';\n\nexport interface CookieConsentRequest {\n consentState: CookieConsentState;\n consentUrl: string;\n timeStamp: number;\n uuid: string;\n}\n\nexport interface CookieConsentState {\n func: number;\n stat: number;\n uuid: string;\n version: number;\n}\n\nexport interface CookieConsentResponse {\n response: string\n}\n\nexport class CookieConsentLog extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://cookieconsentlog.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-cookieconsentlog.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/cookieconsentlog`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async logCookieConsent(\n {\n body,\n timeout = 3000\n }:\n {\n body: CookieConsentRequest,\n timeout?: number\n }\n ): Promise<string> {\n const url = `${this.getUrlPrefix()}/log`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), addAuthHeaders: false, timeout});\n return response.text();\n }\n\n}\n\nexport default CookieConsentLog;\n","import BaseService from './base_service.js';\n\nexport enum HighlightResultType {\n 'highlight' = 'highlight',\n 'note' = 'note',\n}\n\nexport interface HighlightRanges {\n start: number|null;\n end: number|null;\n startOffset: number;\n endOffset: number;\n}\n\nexport interface Highlight extends HighlightUpdate {\n id: string;\n recreationdata?: IRecreationData;\n ranges?: HighlightRanges[];\n lang?: string;\n markedupText?: string;\n createdtstamp?: number;\n}\n\nexport interface HighlightRequest {\n breadCrumb: string;\n pageTitle: string;\n externalUserId?: string;\n highlight: Highlight;\n}\n\nexport interface HighlightSearchRequest {\n searchQuery: string;\n resultType?: HighlightResultType;\n isbn?: string;\n maxResults?: number;\n vectorMinConfidence?: number;\n vectorHighConfidence?: number;\n fulltextMinScore?: number;\n}\n\nexport interface HiglightSearchMatch {\n rangeKey: number;\n confidence: number;\n texttype: HighlightResultType;\n isbn: string;\n pid: number;\n returnedItem: number;\n}\n\nexport interface HighlightSearchResponse {\n Items: HighlightResponse[];\n Matches: HiglightSearchMatch[];\n}\n\nexport interface HighlightResponse extends HighlightRequest {\n debugHostname: string;\n uidIsbnPidMyAccountIdPartitionKey: string;\n timestampSortKey: number;\n timeToDie: number;\n pid: number;\n uid: string;\n myAccountid: string;\n commentText: string;\n quote: string;\n hlcolor: string;\n isbn: string;\n}\n\nexport interface HighlightUpdate {\n hlcolor: string;\n quote: string;\n text: string;\n}\n\nexport interface HighlightUpdateRequest {\n highlight: HighlightUpdate;\n}\n\nexport interface HighlightCountResponse {\n type: HighlightResultType;\n isbn: string;\n count: number;\n}\n\nexport interface HighlightDeleteResult extends HighlightUpdateResponse {\n changed: number;\n}\n\nexport interface HighlightAddResult extends HighlightUpdateResponse {\n timestampSortKey: number;\n}\n\nexport interface HighlightUpdateResponse {\n status: string;\n}\n\ninterface IBKNGData {\n prev20TextContent?: string | null;\n next20TextContent?: string;\n cid?: number;\n isPageNote?: boolean;\n domPath?: string;\n newElementPath?: string;\n elementPath?: string;\n prevNextTextContent?: {\n before: string | null;\n after: string;\n srcText: string | null;\n };\n}\n\nexport interface ICtype {\n SiblingsCount: string; // e.g. '15'\n classes: string; // e.g. 'csc-default csc-textpic'\n}\n\nexport interface ICtypeDict {\n [cid: string]: ICtype;\n}\n\nexport interface ITextStartEndObject {\n startSelectedText: string | undefined | null; // start of selection, text value\n endSelectedText: string | undefined; // end of selection, text value '150.000';\n}\n\nexport interface IRecreationData {\n startCID: number; // id of section start, e.g. 'c319'\n numberOfSiblingsOnStartNode?: number | undefined; // sibling count adjacent to the start node, e.g. '5'\n numberofPrevSiblingsOnCIDStartNode?: number | undefined; // e.g. '1';\n startCtypes?: ICtypeDict | null | undefined; // this was never used....\n\n endCID: number;\n numberOfSiblingsOnEndNode?: number | undefined;\n numberofPrevSiblingsOnCIDEndNode?: number | undefined;\n endCTypes?: ICtypeDict | null | undefined; // this was never used ....\n\n startSelectionInnerText?: string | null | undefined; // inner html (text) of the start node that was selected\n endSelectionInnerText?: string | null | undefined; // inner html (text) of the end node that was selected\n\n mathObject?: string | null | undefined; // e.g. '0'. who knows?\n\n selectedTextStartAndEndObject?: ITextStartEndObject | undefined; // not really used in the old client\n\n totalSiblingsToCIDs?: number | undefined; // e.g. '15'\n\n ibkngData?: IBKNGData | null | undefined;\n\n specialSelectedText?: string | undefined;\n source?: any | null | undefined;\n}\n\nexport class HighlightService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://highlights.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-highlights.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/highlight`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async search(\n {\n search,\n timeout = 3000\n }:\n {\n search: HighlightSearchRequest,\n timeout?: number\n }\n ): Promise<HighlightSearchResponse> {\n const url = `${this.getUrlPrefix()}/v2/search`;\n\n const headers: HeadersInit = new Headers();\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(search), timeout});\n return response.json();\n }\n\n async deleteHighlightOrNote(\n {\n isbn,\n pid,\n key,\n timeout = 3000\n }:\n {\n isbn: string,\n pid: number,\n key: number,\n timeout?: number\n }\n ): Promise<HighlightDeleteResult> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}/key/${key}`;\n\n const headers: HeadersInit = new Headers();\n headers.append('Content-Type', \"application/json\");\n const response = await this.deleteAsync({url, headers, timeout});\n return response.json();\n }\n\n async getHighlightOrNote(\n {\n isbn,\n pid,\n timeout = 3000\n }:\n {\n isbn: string,\n pid?: number,\n timeout?: number\n }\n ): Promise<HighlightResponse[]> {\n let url = `${this.getUrlPrefix()}/v2/isbn/${isbn}`;\n if (pid) {\n url += `/pid/${pid}`;\n }\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n\n async getHighlightOrNoteCounts(\n {\n noteType,\n timeout = 3000\n }:\n {\n noteType?: HighlightResultType,\n timeout?: number\n }\n ): Promise<HighlightCountResponse[]> {\n let url = `${this.getUrlPrefix()}/v2/count`;\n if (noteType) {\n url += `/${noteType}`;\n }\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n\n async updateHighlightOrNote(\n {\n payload,\n isbn,\n pid,\n key,\n timeout = 5000\n }:\n {\n payload: HighlightUpdateRequest,\n isbn: string,\n pid: number,\n key: number,\n timeout?: number\n }\n ): Promise<HighlightUpdateResponse> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}/key/${key}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.putAsync({url, headers, body: JSON.stringify(payload), timeout});\n return response.json();\n }\n\n async addHighlightOrNote(\n {\n payload,\n isbn,\n pid,\n timeout = 5000\n }:\n {\n payload: HighlightRequest,\n isbn: string,\n pid: number,\n timeout?: number\n }\n ): Promise<HighlightAddResult> {\n const url = `${this.getUrlPrefix()}/v2/isbn/${isbn}/pid/${pid}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.postAsync({url, headers, body: JSON.stringify(payload), timeout});\n return response.json();\n }\n}\n\nexport default HighlightService;\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 case 'testing':\n return `https://staging-user-settings-service.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/usersettingsservice`;\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 ClientSettingsResponse {\n settings: ClientSettings;\n}\nexport interface ClientSettings {\n readabilities?: Readability;\n darkMode?: boolean;\n displayMode?: DisplayModeOption;\n enableKeyboardShortcuts?: boolean;\n showBookmarks?: boolean;\n showNoteHighlights?: boolean;\n featureGalleryVersion?: number;\n readAloudStore?: ReadAloudStore;\n leftDrawerWidth?: number;\n recentSearches?: string[];\n materialListImagesView?: LayoutView;\n frontPageSections?: FrontPageSection[];\n activePublicationFilters?: ActivePublicationFilters;\n cardsView?: LayoutView;\n cardsSorting?: SortOptions;\n foldersView?: LayoutView;\n foldersSorting?: SortOptions;\n onboardingPromptTime?: string;\n}\n\nexport type DisplayModeOption = 'light' | 'dark' | 'system';\n\nexport type LayoutView = 'list' | 'grid';\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 type SortOptions = 'recent' | 'alphabetical';\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<ClientSettingsResponse> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n try {\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\n } catch (Error) {\n if (Error instanceof HTTPError && Error.response.status === 404) {\n return {settings: {}} as ClientSettingsResponse;\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<ClientSettingsResponse> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n const response = await this.putAsync({url, headers, body: JSON.stringify(settings), timeout});\n return response.json();\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 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 const response = await this.putAsync({url, headers, body: JSON.stringify(bookmark), timeout});\n return response.json();\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<Bookmark[]> {\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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<Bookmark[]> {\n let url = `${this.getUrlPrefix()}/bookmark/favourite`;\n\n const headers: HeadersInit = new Headers();\n\n const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.putAsync({url, headers, body: JSON.stringify(continueBody), timeout});\n return response.json();\n\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\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 const response = await this.postAsync({url, headers, body: JSON.stringify(mru), timeout});\n return response.json();\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 const response = await this.getAsync({url, headers, timeout});\n return response.json();\n }\n}\n\nexport default UserSettingsMRU;\n","import BaseService from './base_service.js';\n\nexport interface NoteHighlight {\n color: string;\n comment: string;\n selectedText: string;\n}\n\nexport interface Notes {\n created: string;\n highlight: NoteHighlight;\n link: string;\n pid: string;\n title: string;\n id: string;\n}\n\nexport interface NotesLabels {\n amountOfNotesProse: string;\n documentTitle: string;\n markedText: string;\n noContentLabel: string;\n noSelectedTextLabel: string;\n notesExportedAt: string;\n yourNote: string;\n}\n\nexport interface NotesData {\n labels: NotesLabels\n notes: Notes[]\n}\n\nexport interface NotesRequest {\n exportedDate: string;\n notesData: NotesData;\n userId: string;\n userName: string;\n}\n\nexport interface Response {\n status: string;\n url: string;\n}\n\nexport interface WritingTaskRequest {\n pdftitle: string;\n userId: string;\n userName: string;\n}\n\nexport interface WritingTaskData {\n createdData: string;\n exportedDateTimeString: string;\n header: string;\n headerStripped: string;\n host: string;\n isbn: string;\n publisher: string;\n siteTitle: string;\n userIdentity: string;\n writingTaskItems: WritingTaskItem[];\n}\n\nexport interface WritingTaskItem {\n answer: string;\n crdate: number;\n cruser_id: number;\n deleted: number;\n files: string[]|null;\n hidden: number;\n imageorient: number;\n parentid: number;\n parenttable: string;\n parsedAnswer: string;\n parsedQuestion: string;\n pid: number;\n question: string;\n sorting: number;\n title: string;\n tstamp: number;\n uid: number;\n userAnswered: boolean;\n}\n\nexport interface SiteMapLabels {\n pbook: string;\n toc: string;\n}\n\nexport interface SiteMapPageTreeItem {\n chapterInfo?: SiteMapPageTreeItem;\n characters: number;\n iPages: number;\n images: number;\n interactiveElements: number;\n lang: number;\n math: number;\n ogStandardPage: number;\n originalMaterial: number;\n quizzes: number;\n soundFiles: number;\n standardPage: number;\n sys_language_uid: number;\n uid: number;\n videos: number;\n words: number;\n}\n\nexport interface SiteMapPage {\n children: SiteMapPage[];\n accessGranted: boolean;\n author: null|string;\n description: null|string;\n doktype: number;\n editor: null|string;\n fe_group: string;\n keywords: null|string;\n link: string;\n nav_hide: number;\n nav_title: string;\n pid: number;\n title: string;\n uid: number;\n}\n\nexport type SiteMapPageTreeData = Record<string, SiteMapPageTreeItem>;\n\nexport interface SiteMapContent {\n labels: SiteMapLabels,\n pageTreeData: SiteMapPageTreeData,\n pages: SiteMapPage[]\n}\n\nexport interface SiteMapRequest {\n baseUrl: string;\n content: SiteMapContent,\n exportedDate: string;\n isbn: string;\n siteTitle: string;\n userId: string;\n userName: string;\n}\n\nexport class PdfGeneratorService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://pdfgenerator.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-pdfgenerator.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/pdfgenerator`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async pdfFromSiteMap(\n {\n body,\n timeout = 3000\n }:\n {\n body: SiteMapRequest,\n timeout?: number\n }\n ): Promise<Response> {\n const url = `${this.getUrlPrefix()}/sitemap`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async pdfFromWritingTask(\n {\n body,\n timeout = 3000\n }:\n {\n body: WritingTaskRequest,\n timeout?: number\n }\n ): Promise<Response> {\n const url = `${this.getUrlPrefix()}/writingTask`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async pdfFromNotes(\n {\n body,\n timeout = 3000\n }:\n {\n body: NotesRequest,\n timeout?: number\n }\n ): Promise<Response> {\n const url = `${this.getUrlPrefix()}/notes`;\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n}\nexport default PdfGeneratorService;","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","import BaseService from './base_service.js';\n\nexport type AIChatRole = \"user\" | \"assistant\" | \"system\";\n\ntype GenericContext = Record<string, unknown>;\n\nexport interface AIChatMessage<\n ContextType extends GenericContext = GenericContext,\n> {\n role: AIChatRole;\n content: string;\n context?: ContextType;\n}\n\nexport interface AIChatMessageDelta<\n ContextType extends GenericContext = GenericContext,\n> {\n role?: AIChatRole;\n content?: string;\n context?: ContextType;\n}\n\nexport interface AIChatCompletion<\n ContextType extends GenericContext = GenericContext,\n> {\n message: AIChatMessage;\n sessionState?: unknown;\n context?: ContextType;\n}\n\nexport interface AIChatCompletionDelta<\n ContextType extends GenericContext = GenericContext,\n> {\n delta: AIChatMessageDelta;\n sessionState?: unknown;\n context?: ContextType;\n}\n\nexport interface AIChatCompletionOptions<\n ContextType extends GenericContext = GenericContext,\n> {\n context?: ContextType;\n sessionState?: unknown;\n}\n\nexport type AIChatCompletionRequest = {\n messages: AIChatMessage[];\n} & AIChatCompletionOptions;\n\n\nexport class AIBotService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://ai-bot-service.eu-west-1.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://ai-bot-service-staging.eu-west-1.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/aibotservice`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async constructChatUrl (\n {\n interactivityId,\n isbn,\n stream\n }:\n {\n interactivityId?: string,\n isbn?: string,\n stream: boolean\n }\n ): Promise<string> {\n if (interactivityId && isbn) \n {\n throw new Error(\"interactivityId and isbn are mutually exclusive\");\n }\n\n if (!interactivityId && !isbn) \n {\n throw new Error(\"Either interactivityId or isbn must be provided\");\n }\n\n let url = '';\n if (interactivityId) \n {\n url = `${this.getUrlPrefix()}/${interactivityId}/chat`;\n }\n\n if (isbn) \n {\n url = `${this.getUrlPrefix()}/interactivity_from_isbn/${isbn}`;\n }\n\n if (stream) {\n url += '/stream';\n }\n\n return url;\n }\n\n async chat(\n {\n interactivityId,\n isbn,\n body,\n timeout = 10000\n }:\n {\n interactivityId?: string,\n isbn?: string,\n body: AIChatCompletionRequest,\n timeout?: number\n }\n ): Promise<AIChatCompletion> {\n const url = await this.constructChatUrl({interactivityId, isbn, stream: false});\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n return response.json();\n }\n\n async streamingChat(\n {\n interactivityId,\n isbn,\n body,\n timeout = 10000\n }:\n {\n interactivityId?: string,\n isbn?: string,\n body: AIChatCompletionRequest,\n timeout?: number\n }\n ): Promise<ReadableStream<Uint8Array<ArrayBufferLike>>> {\n const url = await this.constructChatUrl({interactivityId, isbn, stream: true});\n\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n const response = await this.postAsync({url, headers, body: JSON.stringify(body), timeout});\n const responseBody = response.body;\n if (!responseBody)\n {\n throw new Error(\"Response body is null\");\n }\n return responseBody;\n }\n}\n\nexport default AIBotService;\n","import BaseService from './base_service.js';\n\nexport class WritingTaskService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://writingtask.services.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://staging-writingtask.services.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/writingtask`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\nexport default WritingTaskService;\n","import BaseService from './base_service.js';\n\nexport class SolrProxyService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'production':\n return `https://solr-proxy.eu-west-1.${this.baseDomain}`;\n case 'development':\n case 'local':\n case 'testing':\n return `https://solr-proxy-staging.eu-west-1.${this.baseDomain}`;\n case 'test':\n return `https://localhost:3010/services/solrproxy`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n}\n\nexport default SolrProxyService;\n"],"mappings":"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","names":["SSMLSpeechSpeeds","HighlightResultType","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.7"
23
+ "version": "0.1.8"
24
24
  }