@esolve/ng-esolve-connect 0.129.0 → 0.131.0

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.
@@ -63,6 +63,9 @@ class EsolveMediaArticle {
63
63
  this.identifier = record.identifier;
64
64
  this.title = record.title;
65
65
  this.sub_title = record.sub_title;
66
+ if (record.txdate) {
67
+ this.published_date = new Date(+record.txdate * 1000);
68
+ }
66
69
  this.article = record.article;
67
70
  let seo_title = record.seo_page_title ?? '';
68
71
  const seo_keywords = record.seo_keywords ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"esolve-ng-esolve-connect-media.mjs","sources":["../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-heading.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-media-group.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-media-layout-section.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-media-link.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-media-article.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/services/esolve-media.service.ts","../../../../libs/ng-esolve-connect/media/src/lib/esolve-connect-media-config.token.ts","../../../../libs/ng-esolve-connect/media/src/lib/services/esolve-media-layout.service.ts","../../../../libs/ng-esolve-connect/media/src/lib/components/media-layout/esolve-media-layout.component.ts","../../../../libs/ng-esolve-connect/media/src/lib/components/media-layout/esolve-media-layout.component.html","../../../../libs/ng-esolve-connect/media/src/lib/components/media-section/esolve-media-section.component.ts","../../../../libs/ng-esolve-connect/media/src/lib/components/media-section/esolve-media-section.component.html","../../../../libs/ng-esolve-connect/media/src/lib/functions/provide-ng-esolve-connect-media.function.ts","../../../../libs/ng-esolve-connect/media/src/lib/ng-esolve-connect-media.module.ts","../../../../libs/ng-esolve-connect/media/src/esolve-ng-esolve-connect-media.ts"],"sourcesContent":["export class EsolveHeading {\n constructor(\n public identifier: string,\n public value: string,\n ) {}\n}\n","import { EsolveMediaGroupRecord } from '../interfaces';\n\nexport class EsolveMediaGroup {\n public id = 0;\n public name = '';\n public sef_name = '';\n public description = '';\n\n constructor(record?: EsolveMediaGroupRecord) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.description = record.description ?? '';\n }\n }\n}\n","import {\n EsolveMediaLayoutSectionRecord,\n EsolveMediaSectionDataGeneric,\n} from '../interfaces';\nimport { EsolveMediaLayoutSectionType } from '../types';\n\nexport class EsolveMediaLayoutSection {\n public type: EsolveMediaLayoutSectionType;\n public sub_type = '';\n public identifier: string;\n\n private data?: EsolveMediaSectionDataGeneric;\n\n constructor(record: EsolveMediaLayoutSectionRecord) {\n this.type = record.type;\n this.identifier = record.identifier;\n this.sub_type = record.sub_type ?? '';\n\n if (record.data) {\n this.data = record.data;\n }\n }\n\n public getData<T = EsolveMediaSectionDataGeneric>(): T | null {\n if (typeof this.data === 'undefined') {\n return null;\n }\n\n return this.data as T;\n }\n}\n","import { EsolveUrlTarget } from '@esolve/ng-esolve-connect';\n\nimport { EsolveMediaLinkRecord } from '../interfaces';\n\nexport class EsolveMediaLink {\n public caption: string;\n public url: string;\n public target: EsolveUrlTarget;\n\n constructor(record: EsolveMediaLinkRecord) {\n this.url = record.url;\n this.caption = record.caption ?? 'Read more...';\n this.target = record.target ?? '_self';\n }\n}\n","import {\n EsolveSeoDetails,\n EsolveTag,\n EsolveTopic,\n EsolveSeoInfo,\n EsolveManufacturer,\n EsolveRange,\n EsolveCustomFields,\n} from '@esolve/ng-esolve-connect';\n\nimport { EsolveMediaRecord } from '../interfaces';\n\nimport { EsolveMediaGroup } from './esolve-media-group.model';\nimport { EsolveMediaLayoutSection } from './esolve-media-layout-section.model';\nimport { EsolveMediaLink } from './esolve-media-link.model';\n\nexport class EsolveMediaArticle implements EsolveSeoDetails {\n public identifier: string;\n public title: string;\n public sub_title: string;\n public article: string;\n public layout = '';\n public image_url = '';\n public tags: EsolveTag[] = [];\n public topics: EsolveTopic[] = [];\n public seo_details: EsolveSeoInfo;\n public group?: EsolveMediaGroup;\n public manufacturer?: EsolveManufacturer;\n public range?: EsolveRange;\n public sections?: Map<string, EsolveMediaLayoutSection[]>;\n public link?: EsolveMediaLink;\n public custom_fields?: EsolveCustomFields;\n\n constructor(record: EsolveMediaRecord) {\n this.identifier = record.identifier;\n this.title = record.title;\n this.sub_title = record.sub_title;\n this.article = record.article;\n\n let seo_title = record.seo_page_title ?? '';\n const seo_keywords = record.seo_keywords ?? '';\n const seo_description = record.seo_description ?? '';\n\n if (seo_title.trim() === '') {\n seo_title = this.title;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n\n this.image_url = record.image_url ?? '';\n if (this.image_url !== '') {\n this.image_url = this.image_url + '?cs=' + record.image_checksum;\n }\n\n if (record.tags && record.tags.length > 0) {\n for (const tag of record.tags) {\n this.tags.push(new EsolveTag(tag));\n }\n }\n\n if (record.topics && record.topics.length > 0) {\n for (const topic of record.topics) {\n this.topics.push(new EsolveTopic(topic));\n }\n }\n\n if (record.media_group) {\n this.group = new EsolveMediaGroup(record.media_group);\n }\n\n if (record.manufacturer) {\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\n }\n\n if (record.range) {\n this.range = new EsolveRange(record.range);\n }\n\n if (\n record.is_both_master_and_minor_article ||\n !record.is_minor_article\n ) {\n this.layout = record.layout ?? '';\n\n if (record.sections) {\n this.sections = new Map<string, EsolveMediaLayoutSection[]>();\n\n for (const key in record.sections) {\n const section_list: EsolveMediaLayoutSection[] = [];\n const section_records = record.sections[key];\n\n for (const section_record of section_records) {\n section_list.push(\n new EsolveMediaLayoutSection(section_record),\n );\n }\n\n this.sections.set(key, section_list);\n }\n }\n }\n\n if (\n record.is_both_master_and_minor_article ||\n record.is_minor_article\n ) {\n if (record.sef_url) {\n this.link = new EsolveMediaLink({\n url: record.sef_url,\n caption: record.link_caption,\n target: record.target,\n });\n }\n }\n\n if (record.custom_fields) {\n this.custom_fields = record.custom_fields;\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n EsolveGetResponse,\n EsolveConfigService,\n EsolveSort,\n} from '@esolve/ng-esolve-connect';\n\nimport { EsolveMediaArticle, EsolveHeading } from '../classes';\nimport { EsolveMediaRecord, EsolveHeadingRecord } from '../interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveMediaService {\n private config = inject(EsolveConfigService);\n private http = inject(HttpClient);\n\n /**\n * Retrieves the media record from the eSolve instance using the identifier\n *\n * @param identifier String representing the eSolve media identifier\n */\n public getMediaArticle(identifier: string): Observable<EsolveMediaArticle> {\n const params = new HttpParams({ fromObject: { identifier } });\n\n // TODO: Error Handling\n return this.getMediaRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const mediaRecord = response.records[0];\n\n if (!mediaRecord.active) {\n throw response;\n }\n\n return this.processMediaRecord(mediaRecord);\n }),\n );\n }\n\n /**\n * Retrieves a group of media records from the eSolve instance linked to a group\n *\n * @param media_group String representing the eSolve media group\n */\n public getGroupedMediaArticles(\n media_group: string,\n sort?: EsolveSort\n ): Observable<EsolveMediaArticle[]> {\n\n let params = new HttpParams();\n\n params = params.set('media_group_sef', media_group);\n\n if (sort) {\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n return this.getMediaRecords(params).pipe(\n map((response) => {\n const mediaArticles: EsolveMediaArticle[] = [];\n\n if (\n response.records !== undefined &&\n response.records.length > 0\n ) {\n for (const mediaRecord of response.records) {\n if (mediaRecord.active) {\n mediaArticles.push(\n this.processMediaRecord(mediaRecord),\n );\n }\n }\n }\n\n return mediaArticles;\n }),\n );\n }\n\n /**\n * Retrieves the media heading records from the eSolve instance using the identifiers\n *\n * @param identifiers Array of strings representing the eSolve heading identifiers\n */\n public getHeadings(identifiers: string[]): Observable<EsolveHeading[]> {\n return this.http\n .get<EsolveGetResponse<EsolveHeadingRecord[]>>(\n `${this.config.api_url}/get-headings.php`,\n {\n params: {\n identifier: identifiers.join(','),\n },\n },\n )\n .pipe(\n map((response) => {\n const headings: EsolveHeading[] = [];\n\n if (\n response.records !== undefined &&\n response.records.length > 0\n ) {\n for (const heading_record of response.records) {\n headings.push(\n this.processHeadingRecord(heading_record),\n );\n }\n }\n\n return headings;\n }),\n );\n }\n\n /**\n * Processes media article record\n *\n * @param record Record from eSolve instance\n */\n private processMediaRecord(record: EsolveMediaRecord): EsolveMediaArticle {\n return new EsolveMediaArticle(record);\n }\n\n /**\n * Processes media heading record\n *\n * @param record Record from eSolve instance\n */\n private processHeadingRecord(record: EsolveHeadingRecord): EsolveHeading {\n return new EsolveHeading(record.identifier, record.value);\n }\n\n /**\n * Retrieves media records from eSolve instance.\n *\n * @param params HTTP params\n */\n private getMediaRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveMediaRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveMediaRecord[]>>(\n `${this.config.api_url}/get-media.php`,\n { params },\n );\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { EsolveConnectMediaConfig } from './interfaces';\n\nexport const ESOLVE_CONNECT_MEDIA_CONFIG =\n new InjectionToken<EsolveConnectMediaConfig>('esolve.connect.media.config');\n","import { ComponentType } from '@angular/cdk/portal';\nimport { inject, Injectable } from '@angular/core';\n\nimport { EsolveMediaArticle, EsolveMediaLayoutSection } from '../classes';\nimport { EsolveSectionKeyOptions } from '../interfaces';\n\nimport { ESOLVE_CONNECT_MEDIA_CONFIG } from '../esolve-connect-media-config.token';\n\n@Injectable()\nexport class EsolveMediaLayoutService {\n private readonly section_key_delimiter = '>>>';\n private readonly default_section_group_key = '__default';\n private readonly default_layout_key = '__default__';\n\n private media?: EsolveMediaArticle;\n private layout_map = new Map<string, ComponentType<any>>();\n private section_map = new Map<string, ComponentType<any>>();\n private default_layout: string;\n\n constructor() {\n const config = inject(ESOLVE_CONNECT_MEDIA_CONFIG);\n\n if (config.layouts.length === 0) {\n throw new Error('No layouts have been defined');\n }\n\n for (const layout of config.layouts) {\n this.setLayout(layout.key, layout.component);\n\n if (layout.sections) {\n for (const section_group_key in layout.sections) {\n const sections = layout.sections[section_group_key];\n\n if (!sections || sections.length === 0) {\n continue;\n }\n\n for (const section of sections) {\n const key_options: EsolveSectionKeyOptions = {\n type: section.key,\n sub_type: section.sub_key,\n layout: layout.key,\n };\n\n if (\n section_group_key !== this.default_section_group_key\n ) {\n key_options.group = section_group_key;\n }\n\n this.setSection(section.component, key_options);\n }\n }\n }\n }\n\n const default_layout = config.default_layout;\n\n if (default_layout) {\n this.default_layout = default_layout;\n } else {\n this.default_layout = config.layouts[0].key;\n }\n\n if (config.sections.length > 0) {\n for (const section of config.sections) {\n const key_options: EsolveSectionKeyOptions = {\n type: section.key,\n sub_type: section.sub_key,\n };\n\n this.setSection(section.component, key_options);\n }\n }\n }\n\n public getMedia() {\n if (!this.media) {\n throw new Error('Media not declared');\n }\n\n return this.media;\n }\n\n public setMedia(media: EsolveMediaArticle) {\n this.media = media;\n }\n\n public getLayout() {\n const media = this.getMedia();\n\n let layout_key = media.layout;\n\n if (layout_key === '') {\n layout_key = this.default_layout;\n }\n\n return this.searchLayout(layout_key);\n }\n\n public getSectionContent(key: string) {\n const media = this.getMedia();\n\n if (media.sections) {\n const section = media.sections.get(key);\n\n if (section) {\n return section;\n }\n }\n\n return [];\n }\n\n public getSectionComponent(key: string, section: EsolveMediaLayoutSection) {\n const type = section.type;\n const sub_type = section.sub_type;\n const { layout } = this.getMedia();\n\n const section_key = this.createSectionMapKey({\n type,\n sub_type,\n layout,\n group: key,\n });\n\n let component = this.section_map.get(section_key);\n\n if (component) {\n return component;\n }\n\n const layout_key = this.createSectionMapKey({\n type,\n sub_type,\n layout,\n });\n\n component = this.section_map.get(layout_key);\n\n if (component) {\n return component;\n }\n\n const base_key = this.createSectionMapKey({\n type,\n sub_type,\n });\n\n component = this.section_map.get(base_key);\n\n if (component) {\n return component;\n }\n\n throw new Error(`Section component not defined for ${section_key}`);\n }\n\n private searchLayout(layout_key: string) {\n if (layout_key === this.default_layout_key) {\n layout_key = this.default_layout;\n }\n\n const component = this.layout_map.get(layout_key);\n\n if (!component) {\n throw new Error(`Layout component not defined for ${layout_key}`);\n }\n\n return component;\n }\n\n private setLayout(key: string, component: ComponentType<any>) {\n this.layout_map.set(key, component);\n }\n\n private setSection(\n component: ComponentType<any>,\n key_options: EsolveSectionKeyOptions,\n ) {\n const key = this.createSectionMapKey(key_options);\n\n this.section_map.set(key, component);\n }\n\n private createSectionMapKey(key_options: EsolveSectionKeyOptions) {\n const { type, sub_type, layout, group } = key_options;\n\n const key_array: string[] = [type];\n\n if (sub_type) {\n key_array.push(sub_type);\n }\n\n if (layout) {\n key_array.push(layout);\n\n if (group) {\n key_array.push(group);\n }\n }\n\n return key_array.join(this.section_key_delimiter);\n }\n}\n","import { Component, OnChanges, Input, Injector, inject } from '@angular/core';\nimport { ComponentPortal, PortalModule } from '@angular/cdk/portal';\n\nimport { EsolveMediaArticle } from '../../classes';\nimport { EsolveMediaLayoutService } from '../../services';\n\n@Component({\n selector: 'eslv-media-layout',\n templateUrl: 'esolve-media-layout.component.html',\n imports: [PortalModule],\n providers: [EsolveMediaLayoutService]\n})\nexport class EsolveMediaLayoutComponent implements OnChanges {\n private readonly layoutService = inject(EsolveMediaLayoutService);\n\n @Input({ required: true }) public media!: EsolveMediaArticle;\n\n public portal?: ComponentPortal<any> | null;\n\n public ngOnChanges(): void {\n try {\n this.layoutService.setMedia(this.media);\n const component = this.layoutService.getLayout();\n const injector = Injector.create({\n providers: [\n {\n provide: EsolveMediaLayoutService,\n useValue: this.layoutService,\n },\n ],\n });\n\n this.portal = new ComponentPortal(component, null, injector);\n } catch (error) {\n this.portal = null;\n console.error(error);\n }\n }\n}\n","<ng-template [cdkPortalOutlet]=\"portal\" />\n","import { Component, Injector, Input, OnChanges, inject } from '@angular/core';\nimport { ComponentPortal, PortalModule } from '@angular/cdk/portal';\n\nimport { EsolveMediaLayoutSection } from '../../classes';\nimport { EsolveMediaLayoutService } from '../../services';\n\n@Component({\n selector: 'eslv-media-section',\n templateUrl: './esolve-media-section.component.html',\n imports: [PortalModule]\n})\nexport class EsolveMediaSectionComponent implements OnChanges {\n private readonly layoutService = inject(EsolveMediaLayoutService);\n\n @Input({ required: true }) public key!: string;\n\n public portals: ComponentPortal<any>[] = [];\n\n public ngOnChanges(): void {\n const sections = this.layoutService.getSectionContent(this.key);\n this.processPortals(sections);\n }\n\n private processPortals(sections: EsolveMediaLayoutSection[]) {\n this.portals = [];\n\n for (const section of sections) {\n const injector = Injector.create({\n providers: [\n {\n provide: EsolveMediaLayoutSection,\n useValue: section,\n },\n {\n provide: EsolveMediaLayoutService,\n useValue: this.layoutService,\n },\n ],\n });\n\n try {\n const component = this.layoutService.getSectionComponent(\n this.key,\n section,\n );\n\n const portal = new ComponentPortal(component, null, injector);\n this.portals.push(portal);\n } catch (error) {\n console.error(error);\n\n continue;\n }\n }\n }\n}\n","@if (portals.length > 0) {\n @for (portal of portals; track $index) {\n <ng-template [cdkPortalOutlet]=\"portal\" />\n }\n}\n","import { Provider } from '@angular/core';\n\nimport { EsolveConnectMediaConfig } from '../interfaces';\nimport { ESOLVE_CONNECT_MEDIA_CONFIG } from '../esolve-connect-media-config.token';\n\nexport function provideNgEsolveConnectMedia(\n config: EsolveConnectMediaConfig,\n): Provider {\n return {\n provide: ESOLVE_CONNECT_MEDIA_CONFIG,\n useValue: config,\n };\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport {\n EsolveMediaLayoutComponent,\n EsolveMediaSectionComponent,\n} from './components';\nimport { EsolveConnectMediaConfig } from './interfaces';\nimport { provideNgEsolveConnectMedia } from './functions';\n\n@NgModule({\n imports: [EsolveMediaLayoutComponent, EsolveMediaSectionComponent],\n exports: [EsolveMediaLayoutComponent, EsolveMediaSectionComponent],\n})\nexport class NgEsolveConnectMediaModule {\n public static withConfig(\n config: EsolveConnectMediaConfig,\n ): ModuleWithProviders<NgEsolveConnectMediaModule> {\n return {\n ngModule: NgEsolveConnectMediaModule,\n providers: [provideNgEsolveConnectMedia(config)],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esolve-ng-esolve-connect-media.mjs","sources":["../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-heading.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-media-group.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-media-layout-section.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-media-link.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/classes/esolve-media-article.model.ts","../../../../libs/ng-esolve-connect/media/src/lib/services/esolve-media.service.ts","../../../../libs/ng-esolve-connect/media/src/lib/esolve-connect-media-config.token.ts","../../../../libs/ng-esolve-connect/media/src/lib/services/esolve-media-layout.service.ts","../../../../libs/ng-esolve-connect/media/src/lib/components/media-layout/esolve-media-layout.component.ts","../../../../libs/ng-esolve-connect/media/src/lib/components/media-layout/esolve-media-layout.component.html","../../../../libs/ng-esolve-connect/media/src/lib/components/media-section/esolve-media-section.component.ts","../../../../libs/ng-esolve-connect/media/src/lib/components/media-section/esolve-media-section.component.html","../../../../libs/ng-esolve-connect/media/src/lib/functions/provide-ng-esolve-connect-media.function.ts","../../../../libs/ng-esolve-connect/media/src/lib/ng-esolve-connect-media.module.ts","../../../../libs/ng-esolve-connect/media/src/esolve-ng-esolve-connect-media.ts"],"sourcesContent":["export class EsolveHeading {\n constructor(\n public identifier: string,\n public value: string,\n ) {}\n}\n","import { EsolveMediaGroupRecord } from '../interfaces';\n\nexport class EsolveMediaGroup {\n public id = 0;\n public name = '';\n public sef_name = '';\n public description = '';\n\n constructor(record?: EsolveMediaGroupRecord) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.description = record.description ?? '';\n }\n }\n}\n","import {\n EsolveMediaLayoutSectionRecord,\n EsolveMediaSectionDataGeneric,\n} from '../interfaces';\nimport { EsolveMediaLayoutSectionType } from '../types';\n\nexport class EsolveMediaLayoutSection {\n public type: EsolveMediaLayoutSectionType;\n public sub_type = '';\n public identifier: string;\n\n private data?: EsolveMediaSectionDataGeneric;\n\n constructor(record: EsolveMediaLayoutSectionRecord) {\n this.type = record.type;\n this.identifier = record.identifier;\n this.sub_type = record.sub_type ?? '';\n\n if (record.data) {\n this.data = record.data;\n }\n }\n\n public getData<T = EsolveMediaSectionDataGeneric>(): T | null {\n if (typeof this.data === 'undefined') {\n return null;\n }\n\n return this.data as T;\n }\n}\n","import { EsolveUrlTarget } from '@esolve/ng-esolve-connect';\n\nimport { EsolveMediaLinkRecord } from '../interfaces';\n\nexport class EsolveMediaLink {\n public caption: string;\n public url: string;\n public target: EsolveUrlTarget;\n\n constructor(record: EsolveMediaLinkRecord) {\n this.url = record.url;\n this.caption = record.caption ?? 'Read more...';\n this.target = record.target ?? '_self';\n }\n}\n","import {\n EsolveSeoDetails,\n EsolveTag,\n EsolveTopic,\n EsolveSeoInfo,\n EsolveManufacturer,\n EsolveRange,\n EsolveCustomFields,\n} from '@esolve/ng-esolve-connect';\n\nimport { EsolveMediaRecord } from '../interfaces';\n\nimport { EsolveMediaGroup } from './esolve-media-group.model';\nimport { EsolveMediaLayoutSection } from './esolve-media-layout-section.model';\nimport { EsolveMediaLink } from './esolve-media-link.model';\n\nexport class EsolveMediaArticle implements EsolveSeoDetails {\n public identifier: string;\n public title: string;\n public sub_title: string;\n public published_date?: Date;\n public article: string;\n public layout = '';\n public image_url = '';\n public tags: EsolveTag[] = [];\n public topics: EsolveTopic[] = [];\n public seo_details: EsolveSeoInfo;\n public group?: EsolveMediaGroup;\n public manufacturer?: EsolveManufacturer;\n public range?: EsolveRange;\n public sections?: Map<string, EsolveMediaLayoutSection[]>;\n public link?: EsolveMediaLink;\n public custom_fields?: EsolveCustomFields;\n\n constructor(record: EsolveMediaRecord) {\n this.identifier = record.identifier;\n this.title = record.title;\n this.sub_title = record.sub_title;\n\n if (record.txdate) {\n this.published_date = new Date(+record.txdate * 1000);\n }\n\n this.article = record.article;\n\n let seo_title = record.seo_page_title ?? '';\n const seo_keywords = record.seo_keywords ?? '';\n const seo_description = record.seo_description ?? '';\n\n if (seo_title.trim() === '') {\n seo_title = this.title;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n\n this.image_url = record.image_url ?? '';\n if (this.image_url !== '') {\n this.image_url = this.image_url + '?cs=' + record.image_checksum;\n }\n\n if (record.tags && record.tags.length > 0) {\n for (const tag of record.tags) {\n this.tags.push(new EsolveTag(tag));\n }\n }\n\n if (record.topics && record.topics.length > 0) {\n for (const topic of record.topics) {\n this.topics.push(new EsolveTopic(topic));\n }\n }\n\n if (record.media_group) {\n this.group = new EsolveMediaGroup(record.media_group);\n }\n\n if (record.manufacturer) {\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\n }\n\n if (record.range) {\n this.range = new EsolveRange(record.range);\n }\n\n if (\n record.is_both_master_and_minor_article ||\n !record.is_minor_article\n ) {\n this.layout = record.layout ?? '';\n\n if (record.sections) {\n this.sections = new Map<string, EsolveMediaLayoutSection[]>();\n\n for (const key in record.sections) {\n const section_list: EsolveMediaLayoutSection[] = [];\n const section_records = record.sections[key];\n\n for (const section_record of section_records) {\n section_list.push(\n new EsolveMediaLayoutSection(section_record),\n );\n }\n\n this.sections.set(key, section_list);\n }\n }\n }\n\n if (\n record.is_both_master_and_minor_article ||\n record.is_minor_article\n ) {\n if (record.sef_url) {\n this.link = new EsolveMediaLink({\n url: record.sef_url,\n caption: record.link_caption,\n target: record.target,\n });\n }\n }\n\n if (record.custom_fields) {\n this.custom_fields = record.custom_fields;\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n EsolveGetResponse,\n EsolveConfigService,\n EsolveSort,\n} from '@esolve/ng-esolve-connect';\n\nimport { EsolveMediaArticle, EsolveHeading } from '../classes';\nimport { EsolveMediaRecord, EsolveHeadingRecord } from '../interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveMediaService {\n private config = inject(EsolveConfigService);\n private http = inject(HttpClient);\n\n /**\n * Retrieves the media record from the eSolve instance using the identifier\n *\n * @param identifier String representing the eSolve media identifier\n */\n public getMediaArticle(identifier: string): Observable<EsolveMediaArticle> {\n const params = new HttpParams({ fromObject: { identifier } });\n\n // TODO: Error Handling\n return this.getMediaRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const mediaRecord = response.records[0];\n\n if (!mediaRecord.active) {\n throw response;\n }\n\n return this.processMediaRecord(mediaRecord);\n }),\n );\n }\n\n /**\n * Retrieves a group of media records from the eSolve instance linked to a group\n *\n * @param media_group String representing the eSolve media group\n */\n public getGroupedMediaArticles(\n media_group: string,\n sort?: EsolveSort\n ): Observable<EsolveMediaArticle[]> {\n\n let params = new HttpParams();\n\n params = params.set('media_group_sef', media_group);\n\n if (sort) {\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n return this.getMediaRecords(params).pipe(\n map((response) => {\n const mediaArticles: EsolveMediaArticle[] = [];\n\n if (\n response.records !== undefined &&\n response.records.length > 0\n ) {\n for (const mediaRecord of response.records) {\n if (mediaRecord.active) {\n mediaArticles.push(\n this.processMediaRecord(mediaRecord),\n );\n }\n }\n }\n\n return mediaArticles;\n }),\n );\n }\n\n /**\n * Retrieves the media heading records from the eSolve instance using the identifiers\n *\n * @param identifiers Array of strings representing the eSolve heading identifiers\n */\n public getHeadings(identifiers: string[]): Observable<EsolveHeading[]> {\n return this.http\n .get<EsolveGetResponse<EsolveHeadingRecord[]>>(\n `${this.config.api_url}/get-headings.php`,\n {\n params: {\n identifier: identifiers.join(','),\n },\n },\n )\n .pipe(\n map((response) => {\n const headings: EsolveHeading[] = [];\n\n if (\n response.records !== undefined &&\n response.records.length > 0\n ) {\n for (const heading_record of response.records) {\n headings.push(\n this.processHeadingRecord(heading_record),\n );\n }\n }\n\n return headings;\n }),\n );\n }\n\n /**\n * Processes media article record\n *\n * @param record Record from eSolve instance\n */\n private processMediaRecord(record: EsolveMediaRecord): EsolveMediaArticle {\n return new EsolveMediaArticle(record);\n }\n\n /**\n * Processes media heading record\n *\n * @param record Record from eSolve instance\n */\n private processHeadingRecord(record: EsolveHeadingRecord): EsolveHeading {\n return new EsolveHeading(record.identifier, record.value);\n }\n\n /**\n * Retrieves media records from eSolve instance.\n *\n * @param params HTTP params\n */\n private getMediaRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveMediaRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveMediaRecord[]>>(\n `${this.config.api_url}/get-media.php`,\n { params },\n );\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { EsolveConnectMediaConfig } from './interfaces';\n\nexport const ESOLVE_CONNECT_MEDIA_CONFIG =\n new InjectionToken<EsolveConnectMediaConfig>('esolve.connect.media.config');\n","import { ComponentType } from '@angular/cdk/portal';\nimport { inject, Injectable } from '@angular/core';\n\nimport { EsolveMediaArticle, EsolveMediaLayoutSection } from '../classes';\nimport { EsolveSectionKeyOptions } from '../interfaces';\n\nimport { ESOLVE_CONNECT_MEDIA_CONFIG } from '../esolve-connect-media-config.token';\n\n@Injectable()\nexport class EsolveMediaLayoutService {\n private readonly section_key_delimiter = '>>>';\n private readonly default_section_group_key = '__default';\n private readonly default_layout_key = '__default__';\n\n private media?: EsolveMediaArticle;\n private layout_map = new Map<string, ComponentType<any>>();\n private section_map = new Map<string, ComponentType<any>>();\n private default_layout: string;\n\n constructor() {\n const config = inject(ESOLVE_CONNECT_MEDIA_CONFIG);\n\n if (config.layouts.length === 0) {\n throw new Error('No layouts have been defined');\n }\n\n for (const layout of config.layouts) {\n this.setLayout(layout.key, layout.component);\n\n if (layout.sections) {\n for (const section_group_key in layout.sections) {\n const sections = layout.sections[section_group_key];\n\n if (!sections || sections.length === 0) {\n continue;\n }\n\n for (const section of sections) {\n const key_options: EsolveSectionKeyOptions = {\n type: section.key,\n sub_type: section.sub_key,\n layout: layout.key,\n };\n\n if (\n section_group_key !== this.default_section_group_key\n ) {\n key_options.group = section_group_key;\n }\n\n this.setSection(section.component, key_options);\n }\n }\n }\n }\n\n const default_layout = config.default_layout;\n\n if (default_layout) {\n this.default_layout = default_layout;\n } else {\n this.default_layout = config.layouts[0].key;\n }\n\n if (config.sections.length > 0) {\n for (const section of config.sections) {\n const key_options: EsolveSectionKeyOptions = {\n type: section.key,\n sub_type: section.sub_key,\n };\n\n this.setSection(section.component, key_options);\n }\n }\n }\n\n public getMedia() {\n if (!this.media) {\n throw new Error('Media not declared');\n }\n\n return this.media;\n }\n\n public setMedia(media: EsolveMediaArticle) {\n this.media = media;\n }\n\n public getLayout() {\n const media = this.getMedia();\n\n let layout_key = media.layout;\n\n if (layout_key === '') {\n layout_key = this.default_layout;\n }\n\n return this.searchLayout(layout_key);\n }\n\n public getSectionContent(key: string) {\n const media = this.getMedia();\n\n if (media.sections) {\n const section = media.sections.get(key);\n\n if (section) {\n return section;\n }\n }\n\n return [];\n }\n\n public getSectionComponent(key: string, section: EsolveMediaLayoutSection) {\n const type = section.type;\n const sub_type = section.sub_type;\n const { layout } = this.getMedia();\n\n const section_key = this.createSectionMapKey({\n type,\n sub_type,\n layout,\n group: key,\n });\n\n let component = this.section_map.get(section_key);\n\n if (component) {\n return component;\n }\n\n const layout_key = this.createSectionMapKey({\n type,\n sub_type,\n layout,\n });\n\n component = this.section_map.get(layout_key);\n\n if (component) {\n return component;\n }\n\n const base_key = this.createSectionMapKey({\n type,\n sub_type,\n });\n\n component = this.section_map.get(base_key);\n\n if (component) {\n return component;\n }\n\n throw new Error(`Section component not defined for ${section_key}`);\n }\n\n private searchLayout(layout_key: string) {\n if (layout_key === this.default_layout_key) {\n layout_key = this.default_layout;\n }\n\n const component = this.layout_map.get(layout_key);\n\n if (!component) {\n throw new Error(`Layout component not defined for ${layout_key}`);\n }\n\n return component;\n }\n\n private setLayout(key: string, component: ComponentType<any>) {\n this.layout_map.set(key, component);\n }\n\n private setSection(\n component: ComponentType<any>,\n key_options: EsolveSectionKeyOptions,\n ) {\n const key = this.createSectionMapKey(key_options);\n\n this.section_map.set(key, component);\n }\n\n private createSectionMapKey(key_options: EsolveSectionKeyOptions) {\n const { type, sub_type, layout, group } = key_options;\n\n const key_array: string[] = [type];\n\n if (sub_type) {\n key_array.push(sub_type);\n }\n\n if (layout) {\n key_array.push(layout);\n\n if (group) {\n key_array.push(group);\n }\n }\n\n return key_array.join(this.section_key_delimiter);\n }\n}\n","import { Component, OnChanges, Input, Injector, inject } from '@angular/core';\nimport { ComponentPortal, PortalModule } from '@angular/cdk/portal';\n\nimport { EsolveMediaArticle } from '../../classes';\nimport { EsolveMediaLayoutService } from '../../services';\n\n@Component({\n selector: 'eslv-media-layout',\n templateUrl: 'esolve-media-layout.component.html',\n imports: [PortalModule],\n providers: [EsolveMediaLayoutService]\n})\nexport class EsolveMediaLayoutComponent implements OnChanges {\n private readonly layoutService = inject(EsolveMediaLayoutService);\n\n @Input({ required: true }) public media!: EsolveMediaArticle;\n\n public portal?: ComponentPortal<any> | null;\n\n public ngOnChanges(): void {\n try {\n this.layoutService.setMedia(this.media);\n const component = this.layoutService.getLayout();\n const injector = Injector.create({\n providers: [\n {\n provide: EsolveMediaLayoutService,\n useValue: this.layoutService,\n },\n ],\n });\n\n this.portal = new ComponentPortal(component, null, injector);\n } catch (error) {\n this.portal = null;\n console.error(error);\n }\n }\n}\n","<ng-template [cdkPortalOutlet]=\"portal\" />\n","import { Component, Injector, Input, OnChanges, inject } from '@angular/core';\nimport { ComponentPortal, PortalModule } from '@angular/cdk/portal';\n\nimport { EsolveMediaLayoutSection } from '../../classes';\nimport { EsolveMediaLayoutService } from '../../services';\n\n@Component({\n selector: 'eslv-media-section',\n templateUrl: './esolve-media-section.component.html',\n imports: [PortalModule]\n})\nexport class EsolveMediaSectionComponent implements OnChanges {\n private readonly layoutService = inject(EsolveMediaLayoutService);\n\n @Input({ required: true }) public key!: string;\n\n public portals: ComponentPortal<any>[] = [];\n\n public ngOnChanges(): void {\n const sections = this.layoutService.getSectionContent(this.key);\n this.processPortals(sections);\n }\n\n private processPortals(sections: EsolveMediaLayoutSection[]) {\n this.portals = [];\n\n for (const section of sections) {\n const injector = Injector.create({\n providers: [\n {\n provide: EsolveMediaLayoutSection,\n useValue: section,\n },\n {\n provide: EsolveMediaLayoutService,\n useValue: this.layoutService,\n },\n ],\n });\n\n try {\n const component = this.layoutService.getSectionComponent(\n this.key,\n section,\n );\n\n const portal = new ComponentPortal(component, null, injector);\n this.portals.push(portal);\n } catch (error) {\n console.error(error);\n\n continue;\n }\n }\n }\n}\n","@if (portals.length > 0) {\n @for (portal of portals; track $index) {\n <ng-template [cdkPortalOutlet]=\"portal\" />\n }\n}\n","import { Provider } from '@angular/core';\n\nimport { EsolveConnectMediaConfig } from '../interfaces';\nimport { ESOLVE_CONNECT_MEDIA_CONFIG } from '../esolve-connect-media-config.token';\n\nexport function provideNgEsolveConnectMedia(\n config: EsolveConnectMediaConfig,\n): Provider {\n return {\n provide: ESOLVE_CONNECT_MEDIA_CONFIG,\n useValue: config,\n };\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport {\n EsolveMediaLayoutComponent,\n EsolveMediaSectionComponent,\n} from './components';\nimport { EsolveConnectMediaConfig } from './interfaces';\nimport { provideNgEsolveConnectMedia } from './functions';\n\n@NgModule({\n imports: [EsolveMediaLayoutComponent, EsolveMediaSectionComponent],\n exports: [EsolveMediaLayoutComponent, EsolveMediaSectionComponent],\n})\nexport class NgEsolveConnectMediaModule {\n public static withConfig(\n config: EsolveConnectMediaConfig,\n ): ModuleWithProviders<NgEsolveConnectMediaModule> {\n return {\n ngModule: NgEsolveConnectMediaModule,\n providers: [provideNgEsolveConnectMedia(config)],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { isPlatformBrowser, CommonModule, IMAGE_LOADER, DOCUMENT } from '@angular/common';
2
- import { HttpErrorResponse, HttpClient, HttpParams, HttpHeaders, provideHttpClient, withInterceptors, withInterceptorsFromDi } from '@angular/common/http';
2
+ import { HttpErrorResponse, HttpClient, HttpStatusCode, HttpParams, HttpHeaders, provideHttpClient, withInterceptors, withInterceptorsFromDi } from '@angular/common/http';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, inject, Injectable, PLATFORM_ID, signal, computed, provideAppInitializer, NgModule, ElementRef, HostListener, Input, Directive } from '@angular/core';
4
+ import { InjectionToken, inject, Injectable, PLATFORM_ID, ApplicationRef, signal, computed, provideAppInitializer, NgModule, ElementRef, HostListener, Input, Directive } from '@angular/core';
5
5
  import { SsrCookieService } from 'ngx-cookie-service-ssr';
6
- import { throwError, Subject, switchMap, timer, takeUntil, filter, distinctUntilChanged, catchError as catchError$1, of, tap, firstValueFrom, map as map$1, BehaviorSubject, iif } from 'rxjs';
7
6
  import { toObservable } from '@angular/core/rxjs-interop';
8
- import { fromUnixTime, parseISO } from 'date-fns';
7
+ import { throwError, Subject, filter, take, shareReplay, switchMap, timer, takeUntil, distinctUntilChanged, firstValueFrom, from, catchError as catchError$1, of, tap, map as map$1, merge, BehaviorSubject, iif } from 'rxjs';
8
+ import { fromUnixTime, isAfter, parseISO } from 'date-fns';
9
9
  import { map, catchError, switchMap as switchMap$1 } from 'rxjs/operators';
10
10
  import { Title, Meta } from '@angular/platform-browser';
11
11
 
@@ -522,6 +522,7 @@ class EsolveSessionService {
522
522
  this.config = inject(EsolveConfigService);
523
523
  this.cookieService = inject(EsolveCookieService);
524
524
  this.storage_key = this.setStorageKey();
525
+ this.appRef = inject(ApplicationRef);
525
526
  this.token = signal('');
526
527
  this.user_id = signal(0);
527
528
  this.access_level = signal(0);
@@ -554,8 +555,11 @@ class EsolveSessionService {
554
555
  this.timer_stop = new Subject();
555
556
  this.expire = new Subject();
556
557
  this.session_end = new Subject();
558
+ this.app_stable_init$ = this.appRef.isStable.pipe(filter(Boolean), take(1), shareReplay(1));
557
559
  this.timer_start
558
- .pipe(switchMap((time) => timer(time).pipe(takeUntil(this.timer_stop))))
560
+ .pipe(switchMap((time) => {
561
+ return timer(time).pipe(takeUntil(this.timer_stop));
562
+ }))
559
563
  .subscribe(() => {
560
564
  // Stored time expired. Check if session is valid
561
565
  this.session_end.next();
@@ -652,7 +656,8 @@ class EsolveSessionService {
652
656
  stopTimer() {
653
657
  this.timer_stop.next();
654
658
  }
655
- startTimer(time) {
659
+ async startTimer(time) {
660
+ await firstValueFrom(this.app_stable_init$);
656
661
  this.timer_start.next(time);
657
662
  }
658
663
  getCachedSession() {
@@ -660,11 +665,14 @@ class EsolveSessionService {
660
665
  }
661
666
  reset() {
662
667
  this.removeCache();
663
- this.timer_stop.next();
668
+ this.stopTimer();
664
669
  }
665
670
  handleSession(session, expiry_date_unix, grace_unix) {
666
671
  const expiry_date = fromUnixTime(expiry_date_unix);
667
672
  const grace_expiry_date = fromUnixTime(expiry_date_unix + grace_unix);
673
+ if (!isAfter(grace_expiry_date, Date.now())) {
674
+ throw new Error('Invalid session expiry');
675
+ }
668
676
  this.setCache(session.token, grace_expiry_date);
669
677
  this.updateUserId(session.user_id);
670
678
  this.updateAccessLevel(session.access_level);
@@ -696,6 +704,10 @@ class EsolveSessionService {
696
704
  }
697
705
  if (typeof options.token !== 'undefined' &&
698
706
  options.token.trim() !== '') {
707
+ const expiry_date_unix = options.expiry_date_unix ?? 0;
708
+ const grace_unix = options.grace_unix ?? 0;
709
+ const grace_expiry_date = fromUnixTime(expiry_date_unix + grace_unix);
710
+ this.setCache(options.token, grace_expiry_date);
699
711
  this.updateToken(options.token);
700
712
  }
701
713
  }
@@ -813,14 +825,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
813
825
  }] });
814
826
 
815
827
  class EsolveAuthService {
828
+ #validating_session;
829
+ #validating_session_retries;
830
+ #fatal_session_error_message;
831
+ get validating_session() {
832
+ return this.#validating_session.asReadonly();
833
+ }
834
+ get fatal_validating_error_message() {
835
+ return this.#validating_session.asReadonly();
836
+ }
816
837
  constructor() {
817
838
  this.config = inject(EsolveConfigService);
818
839
  this.http = inject(HttpClient);
819
840
  this.session = inject(EsolveSessionService);
820
841
  this.errorHandler = inject(EsolveErrorHandlerService);
842
+ this.platformId = inject(PLATFORM_ID);
843
+ this.is_browser = isPlatformBrowser(this.platformId);
844
+ /**
845
+ * Maximum number of session validation and refresh retries allowed until
846
+ * the application needs to be reloaded
847
+ */
848
+ this.maximum_retries = 2;
849
+ /**
850
+ * Time to wait before attempting to refresh the token if validation fails
851
+ */
852
+ this.validation_delay = 5000;
853
+ this.#validating_session = signal(false);
854
+ this.#validating_session_retries = signal(0);
855
+ this.#fatal_session_error_message = signal('');
856
+ this.validating_session$ = toObservable(this.#validating_session);
857
+ this.fatal_session_error_message$ = toObservable(this.#fatal_session_error_message);
821
858
  this.session
822
859
  .onSessionEnd()
823
- .pipe(switchMap(() => this.checkAccessToken()), catchError$1(() => of(null)))
860
+ .pipe(switchMap(() => {
861
+ return from(this.checkAccessToken()).pipe(catchError$1((error) => {
862
+ if (error instanceof HttpErrorResponse &&
863
+ error.status === HttpStatusCode.Unauthorized) {
864
+ // Token is invalid or expired
865
+ return of(null);
866
+ }
867
+ throw error;
868
+ }));
869
+ }))
824
870
  .subscribe((result) => {
825
871
  if (result) {
826
872
  this.handleAuthentication(result);
@@ -835,6 +881,9 @@ class EsolveAuthService {
835
881
  });
836
882
  });
837
883
  }
884
+ onSessionError() {
885
+ return this.fatal_session_error_message$;
886
+ }
838
887
  getAccessToken(email, password, anonymous = false) {
839
888
  let params = new HttpParams();
840
889
  if (anonymous) {
@@ -934,7 +983,10 @@ class EsolveAuthService {
934
983
  }));
935
984
  }
936
985
  async logout() {
937
- this.session.stopTimer();
986
+ if (this.session.getToken() === '') {
987
+ this.resetLocalSession();
988
+ return false;
989
+ }
938
990
  const response = await firstValueFrom(this.http
939
991
  .post(`${this.config.api_url}/set-logout.php`, {}, {
940
992
  headers: {
@@ -997,14 +1049,64 @@ class EsolveAuthService {
997
1049
  }
998
1050
  catch (error) {
999
1051
  console.error(error);
1052
+ this.session.updateToken('');
1000
1053
  this.session.reset();
1001
1054
  }
1002
1055
  return valid;
1003
1056
  }
1057
+ async validateSessionAndRefresh() {
1058
+ if (this.#validating_session()) {
1059
+ return firstValueFrom(this.onSessionValidationEnd());
1060
+ }
1061
+ this.#validating_session_retries.update((count) => ++count);
1062
+ if (this.#validating_session_retries() > this.maximum_retries) {
1063
+ /*
1064
+ FATAL error. Can happen only if user gets a valid token but token
1065
+ validation fails on subsequent requests
1066
+ */
1067
+ this.session.updateToken('');
1068
+ this.session.reset();
1069
+ const error_message = 'Service unavailable. Please clear your cookies and refresh the page. If the problem continues, please reach out to our support team.';
1070
+ this.#fatal_session_error_message.set(error_message);
1071
+ this.#validating_session.set(false);
1072
+ throw new Error(error_message);
1073
+ }
1074
+ this.#validating_session.set(true);
1075
+ this.#fatal_session_error_message.set('');
1076
+ let token = '';
1077
+ try {
1078
+ const session = this.session.getCachedSession();
1079
+ if (!session) {
1080
+ throw new Error('Invalid session');
1081
+ }
1082
+ const result = await this.checkAccessToken(session);
1083
+ if (!result.key) {
1084
+ throw new Error('Invalid key');
1085
+ }
1086
+ this.handleAuthentication(result);
1087
+ token = result.key;
1088
+ }
1089
+ catch (error) {
1090
+ console.error(error);
1091
+ this.session.updateToken('');
1092
+ if (this.is_browser && this.#validating_session_retries() > 1) {
1093
+ // Wait before attempting to refresh if already tried and failed
1094
+ await new Promise((resolve) => setTimeout(resolve, this.validation_delay));
1095
+ }
1096
+ const response = await firstValueFrom(this.getAnonymousSession());
1097
+ const result = response.additional_data;
1098
+ token = result.key;
1099
+ }
1100
+ finally {
1101
+ this.#validating_session.set(false);
1102
+ }
1103
+ return token;
1104
+ }
1004
1105
  /**
1005
1106
  * Use when logout fails to forcibly reset the local session
1006
1107
  */
1007
1108
  async resetLocalSession() {
1109
+ this.session.updateToken('');
1008
1110
  this.session.reset();
1009
1111
  await firstValueFrom(this.getAnonymousSession());
1010
1112
  }
@@ -1053,6 +1155,7 @@ class EsolveAuthService {
1053
1155
  }
1054
1156
  catch (error) {
1055
1157
  console.error(error);
1158
+ this.session.updateToken('');
1056
1159
  this.session.reset();
1057
1160
  }
1058
1161
  return null;
@@ -1091,6 +1194,13 @@ class EsolveAuthService {
1091
1194
  }
1092
1195
  return throwError(() => error);
1093
1196
  }
1197
+ onSessionValidationEnd() {
1198
+ return this.validating_session$.pipe(filter((busy) => !busy), switchMap(() => {
1199
+ return merge(this.session.onTokenUpdate(), this.onSessionError().pipe(filter((message) => !!message), map$1((error_message) => {
1200
+ throw new Error(error_message);
1201
+ })));
1202
+ }), take(1));
1203
+ }
1094
1204
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: EsolveAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1095
1205
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: EsolveAuthService, providedIn: 'root' }); }
1096
1206
  }
@@ -1238,6 +1348,43 @@ const esolveAuthInterceptor = (req, next) => {
1238
1348
  return next(req);
1239
1349
  };
1240
1350
 
1351
+ const esolveUnauthorizedErrorInterceptor = (req, next) => {
1352
+ const config = inject(EsolveConfigService);
1353
+ const session = inject(EsolveSessionService);
1354
+ const auth = inject(EsolveAuthService);
1355
+ if (req.url.startsWith(`${config.api_url}/`)) {
1356
+ const service_identifier = req.url.replace(`${config.api_url}/`, '');
1357
+ // Skip the following services
1358
+ const excluded_services = ['get-access-token.php', 'set-logout.php'];
1359
+ if (excluded_services.includes(service_identifier)) {
1360
+ return next(req);
1361
+ }
1362
+ return next(req).pipe(catchError$1((error) => {
1363
+ if (error.status === HttpStatusCode.Unauthorized) {
1364
+ const validation_end_stream$ = from(auth.validateSessionAndRefresh());
1365
+ // Wait for valid session and retry
1366
+ return validation_end_stream$.pipe(switchMap((token) => {
1367
+ if (req.method !== 'GET') {
1368
+ throw new Error('Invalid session. Please try again');
1369
+ }
1370
+ // Retry request with new token
1371
+ let headers = req.headers;
1372
+ const state_hash = session.getStateHash();
1373
+ headers = headers.set('X-Esolve-State-Hash', state_hash);
1374
+ // Retry request with new header
1375
+ headers = headers.set('Authorization', `Bearer ${token}`);
1376
+ const retry_req = req.clone({
1377
+ headers,
1378
+ });
1379
+ return next(retry_req);
1380
+ }));
1381
+ }
1382
+ throw error;
1383
+ }));
1384
+ }
1385
+ return next(req);
1386
+ };
1387
+
1241
1388
  const ESOLVE_EURUS_AUTO_LOGIN = provideAppInitializer(() => {
1242
1389
  const initializerFn = ((auth) => async () => {
1243
1390
  await auth.autoLogin();
@@ -1253,7 +1400,10 @@ function provideNgEsolveConnect(config, auto_login = false) {
1253
1400
  provide: ESOLVE_CONNECT_CONFIG,
1254
1401
  useValue: config,
1255
1402
  },
1256
- provideHttpClient(withInterceptors([esolveAuthInterceptor])),
1403
+ provideHttpClient(withInterceptors([
1404
+ esolveAuthInterceptor,
1405
+ esolveUnauthorizedErrorInterceptor,
1406
+ ])),
1257
1407
  ];
1258
1408
  if (auto_login) {
1259
1409
  providers.push(ESOLVE_EURUS_AUTO_LOGIN);
@@ -3448,6 +3598,21 @@ class EsolveSetNotifyResult extends EsolveResponseResult {
3448
3598
  }
3449
3599
  }
3450
3600
 
3601
+ class EsolveStockBarcode {
3602
+ constructor(record) {
3603
+ this.id = 0;
3604
+ this.code = '';
3605
+ this.barcode = '';
3606
+ this.barcode_type = 'ean13';
3607
+ if (record) {
3608
+ this.id = +(record.id ?? 0);
3609
+ this.code = record.code ?? '';
3610
+ this.barcode = record.barcode_data ?? '';
3611
+ this.barcode_type = record.barcode_type ?? 'ean13';
3612
+ }
3613
+ }
3614
+ }
3615
+
3451
3616
  class EsolveStockImage {
3452
3617
  /**
3453
3618
  * Path to tiny stock image
@@ -3532,12 +3697,6 @@ class EsolveStockItemList {
3532
3697
  }
3533
3698
  }
3534
3699
 
3535
- class EsolveSuggestedStockItem extends EsolveStockItem {
3536
- constructor(record) {
3537
- super(record);
3538
- }
3539
- }
3540
-
3541
3700
  class EsolveStockItemLocationLevel {
3542
3701
  constructor(record) {
3543
3702
  this.id = 0;
@@ -3555,6 +3714,12 @@ class EsolveStockItemLocationLevel {
3555
3714
  }
3556
3715
  }
3557
3716
 
3717
+ class EsolveSuggestedStockItem extends EsolveStockItem {
3718
+ constructor(record) {
3719
+ super(record);
3720
+ }
3721
+ }
3722
+
3558
3723
  // Classes
3559
3724
 
3560
3725
  // Interfaces
@@ -3882,6 +4047,32 @@ class EsolveStockService {
3882
4047
  return filters;
3883
4048
  }));
3884
4049
  }
4050
+ /**
4051
+ * Retrieve list of stock codes associated with a given barcode
4052
+ *
4053
+ * @param options Barcode filter options
4054
+ */
4055
+ getStockBarcodes(options) {
4056
+ let params = new HttpParams({
4057
+ fromObject: {
4058
+ barcode: options.barcode,
4059
+ },
4060
+ });
4061
+ if (options.barcode_type) {
4062
+ params = params.set('barcode_type', options.barcode_type);
4063
+ }
4064
+ return this.http
4065
+ .get(`${this.config.api_url}/get-codes-for-barcode.php`, {
4066
+ params,
4067
+ })
4068
+ .pipe(map((response) => {
4069
+ if (response.records === undefined ||
4070
+ response.records.length <= 0) {
4071
+ throw response;
4072
+ }
4073
+ return this.processStockBarcodes(response.records);
4074
+ }));
4075
+ }
3885
4076
  parseBaseStockItemOptions(options) {
3886
4077
  let params = new HttpParams();
3887
4078
  if (options.page) {
@@ -4027,6 +4218,14 @@ class EsolveStockService {
4027
4218
  getTransactionSalesStockRecords(params) {
4028
4219
  return this.http.get(`${this.config.api_url}/get-items-transaction-sales.php`, { params });
4029
4220
  }
4221
+ /**
4222
+ * Processes the eSolve stock barcode record and converts it to an object.
4223
+ *
4224
+ * @param record eSolve stock barcode record
4225
+ */
4226
+ processStockBarcodes(records) {
4227
+ return records.map((record) => new EsolveStockBarcode(record));
4228
+ }
4030
4229
  setNotify(code, notification_type = 'InStock') {
4031
4230
  const body = {
4032
4231
  code,
@@ -5988,23 +6187,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
5988
6187
  }]
5989
6188
  }], ctorParameters: () => [] });
5990
6189
 
5991
- class EsolveSessionShippingUpdateResult extends EsolveResponseResult {
6190
+ class EsolveSessionClientUpdateResult extends EsolveResponseResult {
5992
6191
  constructor(response) {
5993
6192
  super(response);
5994
6193
  if (typeof response.esolve_id === 'string') {
5995
6194
  throw new Error('Invalid response id.');
5996
6195
  }
5997
- this.shipping_updated = response.esolve_id > 0;
6196
+ this.client_updated = response.esolve_id > 0;
5998
6197
  }
5999
6198
  }
6000
6199
 
6001
- class EsolveSessionClientUpdateResult extends EsolveResponseResult {
6200
+ class EsolveSessionShippingUpdateResult extends EsolveResponseResult {
6002
6201
  constructor(response) {
6003
6202
  super(response);
6004
6203
  if (typeof response.esolve_id === 'string') {
6005
6204
  throw new Error('Invalid response id.');
6006
6205
  }
6007
- this.client_updated = response.esolve_id > 0;
6206
+ this.shipping_updated = response.esolve_id > 0;
6008
6207
  }
6009
6208
  }
6010
6209
 
@@ -6163,8 +6362,13 @@ class EsolveAccountService {
6163
6362
  if (response.auto_login) {
6164
6363
  const session_data = response.session_data;
6165
6364
  let token = '';
6365
+ let expiry_date_unix = undefined;
6366
+ let grace_unix = undefined;
6166
6367
  if (!Array.isArray(additional_data)) {
6167
6368
  token = additional_data.key;
6369
+ expiry_date_unix =
6370
+ +additional_data.expiry_time;
6371
+ grace_unix = +additional_data.grace_period;
6168
6372
  }
6169
6373
  this.sessionService.handleUpdateSession({
6170
6374
  user_id: +response.esolve_id,
@@ -6173,6 +6377,8 @@ class EsolveAccountService {
6173
6377
  shipping_id: +session_data.shipping_id,
6174
6378
  clients_id: +session_data.clients_id,
6175
6379
  token,
6380
+ expiry_date_unix,
6381
+ grace_unix,
6176
6382
  });
6177
6383
  }
6178
6384
  return new EsolveRegistrationResult(response);
@@ -9740,5 +9946,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
9740
9946
  * Generated bundle index. Do not edit.
9741
9947
  */
9742
9948
 
9743
- export { ESOLVE_CONNECT_CONFIG, ESOLVE_EURUS_AUTO_LOGIN, EsolveAccountConfirmationResult, EsolveAccountPayment, EsolveAccountService, EsolveAdditionalStockImage, EsolveAddress, EsolveAddressResult, EsolveAffiliate, EsolveAffiliateCheckResult, EsolveAffiliateLinkResult, EsolveAffiliateService, EsolveAlbum, EsolveAlbumImage, EsolveAlbumImageList, EsolveAlbumList, EsolveAlbumsService, EsolveAsset, EsolveAssetsService, EsolveAuthService, EsolveBankingDetails, EsolveBanner, EsolveBannerImage, EsolveBannerImageHotspot, EsolveBannerService, EsolveCaptcha, EsolveCaptchaService, EsolveCartAlternative, EsolveCartItem, EsolveCartService, EsolveCartStockItem, EsolveCartTotals, EsolveCategoryTreeItem, EsolveCategoryTreeService, EsolveCdnSrcDirective, EsolveChangePasswordResult, EsolveCheckoutResult, EsolveClientAsset, EsolveClientAssetList, EsolveColour, EsolveCompetition, EsolveCompetitionDates, EsolveCompetitionEntryResult, EsolveCompetitionWinner, EsolveCompetitionsService, EsolveConfigService, EsolveCookieService, EsolveCountry, EsolveCountryService, EsolveCoupon, EsolveCouponsService, EsolveDeliveriesService, EsolveDelivery, EsolveDeliveryCategoryTotals, EsolveDeliveryList, EsolveDeliveryStatus, EsolveDependantItem, EsolveDeviceService, EsolveEmptyCartResult, EsolveEmptyWishlistResult, EsolveEnquiryResult, EsolveEnquiryService, EsolveErpDocumentRequest, EsolveErpDocumentsRequestResult, EsolveErrorHandlerService, EsolveFilterFactory, EsolveGenericFilter, EsolveGeocodeAddressResult, EsolveGeocodeCoordsResult, EsolveGeocodeResult, EsolveGeocoderService, EsolveHttpError, EsolveLinkedAsset, EsolveLinkedStockItem, EsolveList, EsolveLocation, EsolveLocationAddress, EsolveLocationContactInfo, EsolveLocationGEO, EsolveLocationList, EsolveLocationPOBoxAddress, EsolveLocationTradingDay, EsolveLocationTradingTimes, EsolveLocationUpdateResult, EsolveLocationsService, EsolveManufacturer, EsolveManufacturersService, EsolveMediaStockItem, EsolveMenuItem, EsolveMenuService, EsolveMultipleSelectFilter, EsolveNewsArticle, EsolveNewsArticleAuthor, EsolveNewsArticleList, EsolveNewsGroup, EsolveNewsService, EsolveNewsletterResult, EsolveOtp, EsolveOtpService, EsolveOtpValidation, EsolvePaymentMethod, EsolvePaymentResult, EsolvePaymentService, EsolveRange, EsolveRangeFilter, EsolveRangesService, EsolveRecipeStockItem, EsolveRegistrationResult, EsolveResetPasswordResult, EsolveResponseHandlerService, EsolveResponseResult, EsolveResult, EsolveReview, EsolveReviewList, EsolveReviewResult, EsolveReviewsService, EsolveSeoInfo, EsolveSeoService, EsolveSessionAddressUpdateResult, EsolveSessionClientUpdateResult, EsolveSessionMetadataService, EsolveSessionService, EsolveSessionShippingUpdateResult, EsolveSetDeviceResult, EsolveSetNotifyResult, EsolveShippingCost, EsolveShippingMethod, EsolveShippingService, EsolveShippingTotals, EsolveSingleSelectFilter, EsolveSpecial, EsolveSpecialDates, EsolveSpecialImage, EsolveSpecialImageCollection, EsolveSpecialsService, EsolveStatement, EsolveStatementAgeing, EsolveStatementBalances, EsolveStatementTransaction, EsolveStockBadge, EsolveStockGroup, EsolveStockGroupItem, EsolveStockImage, EsolveStockImageCollection, EsolveStockItem, EsolveStockItemBase, EsolveStockItemList, EsolveStockItemLocationLevel, EsolveStockLeadTimes, EsolveStockPrice, EsolveStockReviewsReport, EsolveStockService, EsolveStockTransactionSales, EsolveSuggestedStockItem, EsolveSupplier, EsolveSuppliersService, EsolveTag, EsolveTagsService, EsolveTimeSlot, EsolveTimeSlotConfig, EsolveTimeSlotDate, EsolveTimeSlotDays, EsolveTimeSlotTimes, EsolveToggleFilter, EsolveTopic, EsolveTopicService, EsolveTransaction, EsolveTransactionAddress, EsolveTransactionAnalyticsData, EsolveTransactionApprovalResult, EsolveTransactionClient, EsolveTransactionDelivery, EsolveTransactionItem, EsolveTransactionItemPrice, EsolveTransactionList, EsolveTransactionLocation, EsolveTransactionPaymentMethod, EsolveTransactionPick, EsolveTransactionShippingMethod, EsolveTransactionTimeSlot, EsolveTransactionUser, EsolveTransactionsService, EsolveUserAccount, EsolveUserAccountBusiness, EsolveUserAccountContact, EsolveUserAccountResult, EsolveUserClientAccount, EsolveUserClientAccountBalances, EsolveUserDevice, EsolveVaultItem, EsolveVaultItemResult, EsolveVoucher, EsolveVouchersService, EsolveWalletBalances, EsolveWalletService, EsolveWalletTransaction, EsolveWalletTransactionsList, EsolveWishlistItem, EsolveWishlistService, NgEsolveConnectModule, esolveAuthInterceptor, esolveHexHash, isEsolveCdnPath, isFtgCdnPath, isLegacyEsolveCdnPath, processEsolveImageSrc, provideEsolveImageLoader, provideNgEsolveConnect };
9949
+ export { ESOLVE_CONNECT_CONFIG, ESOLVE_EURUS_AUTO_LOGIN, EsolveAccountConfirmationResult, EsolveAccountPayment, EsolveAccountService, EsolveAdditionalStockImage, EsolveAddress, EsolveAddressResult, EsolveAffiliate, EsolveAffiliateCheckResult, EsolveAffiliateLinkResult, EsolveAffiliateService, EsolveAlbum, EsolveAlbumImage, EsolveAlbumImageList, EsolveAlbumList, EsolveAlbumsService, EsolveAsset, EsolveAssetsService, EsolveAuthService, EsolveBankingDetails, EsolveBanner, EsolveBannerImage, EsolveBannerImageHotspot, EsolveBannerService, EsolveCaptcha, EsolveCaptchaService, EsolveCartAlternative, EsolveCartItem, EsolveCartService, EsolveCartStockItem, EsolveCartTotals, EsolveCategoryTreeItem, EsolveCategoryTreeService, EsolveCdnSrcDirective, EsolveChangePasswordResult, EsolveCheckoutResult, EsolveClientAsset, EsolveClientAssetList, EsolveColour, EsolveCompetition, EsolveCompetitionDates, EsolveCompetitionEntryResult, EsolveCompetitionWinner, EsolveCompetitionsService, EsolveConfigService, EsolveCookieService, EsolveCountry, EsolveCountryService, EsolveCoupon, EsolveCouponsService, EsolveDeliveriesService, EsolveDelivery, EsolveDeliveryCategoryTotals, EsolveDeliveryList, EsolveDeliveryStatus, EsolveDependantItem, EsolveDeviceService, EsolveEmptyCartResult, EsolveEmptyWishlistResult, EsolveEnquiryResult, EsolveEnquiryService, EsolveErpDocumentRequest, EsolveErpDocumentsRequestResult, EsolveErrorHandlerService, EsolveFilterFactory, EsolveGenericFilter, EsolveGeocodeAddressResult, EsolveGeocodeCoordsResult, EsolveGeocodeResult, EsolveGeocoderService, EsolveHttpError, EsolveLinkedAsset, EsolveLinkedStockItem, EsolveList, EsolveLocation, EsolveLocationAddress, EsolveLocationContactInfo, EsolveLocationGEO, EsolveLocationList, EsolveLocationPOBoxAddress, EsolveLocationTradingDay, EsolveLocationTradingTimes, EsolveLocationUpdateResult, EsolveLocationsService, EsolveManufacturer, EsolveManufacturersService, EsolveMediaStockItem, EsolveMenuItem, EsolveMenuService, EsolveMultipleSelectFilter, EsolveNewsArticle, EsolveNewsArticleAuthor, EsolveNewsArticleList, EsolveNewsGroup, EsolveNewsService, EsolveNewsletterResult, EsolveOtp, EsolveOtpService, EsolveOtpValidation, EsolvePaymentMethod, EsolvePaymentResult, EsolvePaymentService, EsolveRange, EsolveRangeFilter, EsolveRangesService, EsolveRecipeStockItem, EsolveRegistrationResult, EsolveResetPasswordResult, EsolveResponseHandlerService, EsolveResponseResult, EsolveResult, EsolveReview, EsolveReviewList, EsolveReviewResult, EsolveReviewsService, EsolveSeoInfo, EsolveSeoService, EsolveSessionAddressUpdateResult, EsolveSessionClientUpdateResult, EsolveSessionMetadataService, EsolveSessionService, EsolveSessionShippingUpdateResult, EsolveSetDeviceResult, EsolveSetNotifyResult, EsolveShippingCost, EsolveShippingMethod, EsolveShippingService, EsolveShippingTotals, EsolveSingleSelectFilter, EsolveSpecial, EsolveSpecialDates, EsolveSpecialImage, EsolveSpecialImageCollection, EsolveSpecialsService, EsolveStatement, EsolveStatementAgeing, EsolveStatementBalances, EsolveStatementTransaction, EsolveStockBadge, EsolveStockBarcode, EsolveStockGroup, EsolveStockGroupItem, EsolveStockImage, EsolveStockImageCollection, EsolveStockItem, EsolveStockItemBase, EsolveStockItemList, EsolveStockItemLocationLevel, EsolveStockLeadTimes, EsolveStockPrice, EsolveStockReviewsReport, EsolveStockService, EsolveStockTransactionSales, EsolveSuggestedStockItem, EsolveSupplier, EsolveSuppliersService, EsolveTag, EsolveTagsService, EsolveTimeSlot, EsolveTimeSlotConfig, EsolveTimeSlotDate, EsolveTimeSlotDays, EsolveTimeSlotTimes, EsolveToggleFilter, EsolveTopic, EsolveTopicService, EsolveTransaction, EsolveTransactionAddress, EsolveTransactionAnalyticsData, EsolveTransactionApprovalResult, EsolveTransactionClient, EsolveTransactionDelivery, EsolveTransactionItem, EsolveTransactionItemPrice, EsolveTransactionList, EsolveTransactionLocation, EsolveTransactionPaymentMethod, EsolveTransactionPick, EsolveTransactionShippingMethod, EsolveTransactionTimeSlot, EsolveTransactionUser, EsolveTransactionsService, EsolveUserAccount, EsolveUserAccountBusiness, EsolveUserAccountContact, EsolveUserAccountResult, EsolveUserClientAccount, EsolveUserClientAccountBalances, EsolveUserDevice, EsolveVaultItem, EsolveVaultItemResult, EsolveVoucher, EsolveVouchersService, EsolveWalletBalances, EsolveWalletService, EsolveWalletTransaction, EsolveWalletTransactionsList, EsolveWishlistItem, EsolveWishlistService, NgEsolveConnectModule, esolveAuthInterceptor, esolveHexHash, esolveUnauthorizedErrorInterceptor, isEsolveCdnPath, isFtgCdnPath, isLegacyEsolveCdnPath, processEsolveImageSrc, provideEsolveImageLoader, provideNgEsolveConnect };
9744
9950
  //# sourceMappingURL=esolve-ng-esolve-connect.mjs.map