@arsedizioni/ars-utils 22.5.50 → 22.5.51
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/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-clipper.common.d.ts +12 -12
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +1 -1
- package/types/arsedizioni-ars-utils-core.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.controls.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.navigation.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-clipper.common.mjs","sources":["../../../projects/ars-utils/clipper.common/messages.ts","../../../projects/ars-utils/clipper.common/definitions.ts","../../../projects/ars-utils/clipper.common/html.ts","../../../projects/ars-utils/clipper.common/interceptors/auth.interceptor.ts","../../../projects/ars-utils/clipper.common/services/login.service.ts","../../../projects/ars-utils/clipper.common/services/core.service.ts","../../../projects/ars-utils/clipper.common/services/account.service.ts","../../../projects/ars-utils/clipper.common/services/documents.service.ts","../../../projects/ars-utils/clipper.common/services/clipper.service.ts","../../../projects/ars-utils/clipper.common/services/index.ts","../../../projects/ars-utils/clipper.common/public_api.ts","../../../projects/ars-utils/clipper.common/arsedizioni-ars-utils-clipper.common.ts"],"sourcesContent":["export const ClipperMessages = {\r\n /**\r\n * Messages\r\n */\r\n\r\n // Error\r\n ERROR: '§clipper-error', \r\n\r\n /**\r\n * The session is gone: a 401 on a request that was not a login attempt.\r\n * Emitted once per dead session by `clipperAuthInterceptor`, which re-arms on the first\r\n * good response.\r\n */\r\n ERROR_401: '§clipper-error-401',\r\n\r\n /**\r\n * The API is not answering: the interceptor has already sent the request three times over\r\n * ten seconds. Emitted once, and re-armed on the first good response.\r\n */\r\n ERROR_UNAVAILABLE: '§clipper-error-unavailable',\r\n SUCCESS: '§clipper-success',\r\n SUCCESS_TOAST: '§clipper-success-toast',\r\n\r\n // Login\r\n LOGIN_CHANGED: '§clipper-login-changed',\r\n LOGIN_COMPLETED: '§clipper-login-completed',\r\n LOGIN_PENDING: '§clipper-login-pending',\r\n LOGIN_FAILED: '§clipper-login-failed',\r\n LOGOUT: '§clipper-logout',\r\n LOGOUT_COMPLETED: '§clipper-logout-completed',\r\n LOGOUT_FAILED: '§clipper-logout-failed',\r\n\r\n // Document\r\n DOCUMENT_READ: '$clipper-document-read',\r\n DOCUMENT_NAVIGATE: '$clipper-document-navigate',\r\n DOCUMENT_NAVIGATED: '$clipper-document-navigated',\r\n DOCUMENT_SELECTED: '$clipper-document-selected',\r\n DOCUMENT_SELECTED_INNER: '$clipper-document-selected_inner',\r\n\r\n // Settings\r\n SETTINGS_CHANGED: '$clipper-settings-changed',\r\n\r\n // Commands\r\n COMMAND_WORKING_OPEN: '$clipper-command-working-documents-open',\r\n COMMAND_WORKING_ADD: '$clipper-command-working-documents-add',\r\n COMMAND_SEARCH_RESTORED: '$clipper-command-search-restored',\r\n COMMAND_SEARCH_EXECUTED: '$clipper-command-search-executed',\r\n COMMAND_SEARCH_EMPTY_RESULT: '$clipper-command-search-empty-result',\r\n COMMAND_HISTORY_OPEN: '$clipper-command-history-open',\r\n COMMAND_DASHBOARD_UPDATED: '$clipper-command-dashboard-updated',\r\n\r\n\r\n // AI\r\n AI_CONCERN_ME: '$clipper-ai-concernme',\r\n AI_EXPLAIN: '$clipper-ai-explain',\r\n AI_COMMENT: '$clipper-ai-comment',\r\n AI_NEWS: '$clipper-ai-news',\r\n\r\n // Interop\r\n INTEROP_RS_NEW_LAW: '$clipper-interop-rs-new-law',\r\n INTEROP_RS_NEW_ACTIVITY: '$clipper-interop-rs-new-activity',\r\n INTEROP_RS_USAGE_REPORT: '$clipper-interop-rs-usage-report',\r\n\r\n // Updates\r\n UPDATE_RELOAD: '§update-reload',\r\n};\r\n","import { computed, Signal, signal } from '@angular/core';\nimport { LoginResult, NameValueItem } from '@arsedizioni/ars-utils/core';\nimport { SendToDialogResult } from '@arsedizioni/ars-utils/ui';\n\n\nexport interface EditedEventArgs<T> {\n data: T;\n isNew?: boolean;\n}\n\nexport enum ClipperServiceFlags {\n None = 0,\n NotifySystemErrors = 1,\n DisplayConnectionStateMessages = 1 << 1,\n Embedded = 1 << 2\n}\n\nexport enum ClipperSelectionMode {\n None = 0,\n Single = 1,\n TwoOrMore = 2,\n Multi = 3\n}\n\n\n\nexport enum ClipperModuleGroup {\n Home = 0,\n NormativaVigente = 1,\n UltimeNovità = 2,\n ParApprofondire = 3,\n DGInfo = 4,\n Giurisprudenza = 5,\n Calendario = 11,\n Archivio = 12,\n Evolution = 201,\n Ars = 202,\n Ricerca = 99\n}\n\nexport enum ClipperModule {\n NormativaVigente = 4,\n News = 1,\n GazzetteBollettiniEFontiDiverse = 2,\n Giurisprudenza = 5,\n ModificheAbrogazioniERinvii = 3,\n ScadenzeESegnalazioni = 12,\n //AllerteAlimentari = 8,\n Approfondimenti = 6,\n QuesitiECasiRisolti = 10,\n MetodiDiAnalisi = 11,\n DGInfo = 61,\n Ricerca = 99,\n GiurisprudenzaRecente = 18\n\n}\n\nexport enum ClipperModel {\n Unknown = 0,\n AggiornamentoNormativo = 2,\n News = 3,\n Articoli = 4,\n Juris = 5,\n Quesiti = 8,\n NormativaVigente = 9,\n Scadenze = 10,\n Coordinamento = 11,\n //AllerteAlimentari = 13,\n MetodiDiAnalisi = 14,\n GiurisprudenzaRecente = 18,\n Segnalazioni = 20,\n UltimeNovità = 21\n}\n\nexport const ClipperModels: NameValueItem<number>[] = [\n { value: ClipperModel.AggiornamentoNormativo, name: \"Testi storici\" },\n { value: ClipperModel.News, name: 'News' },\n { value: ClipperModel.Articoli, name: 'Articoli' },\n { value: ClipperModel.Juris, name: 'Note a sentenza' },\n { value: ClipperModel.GiurisprudenzaRecente, name: 'Giurisprudenza' },\n { value: ClipperModel.Quesiti, name: 'Quesiti' },\n { value: ClipperModel.NormativaVigente, name: 'Normativa vigente' },\n { value: ClipperModel.Scadenze, name: 'Scadenze' },\n //{ value: ClipperModel.AllerteAlimentari, name: 'Allerte alimentari' },\n { value: ClipperModel.Coordinamento, name: 'Modifiche e abrogazioni' },\n]\n\nexport const ClipperModuleGroups: NameValueItem<number>[] = [\n { name: \"Ultime novità\", value: ClipperModuleGroup.Home },\n { name: \"Ricerca\", value: ClipperModuleGroup.Ricerca },\n { name: \"DG Info\", value: ClipperModuleGroup.DGInfo },\n { name: \"Calendario\", value: ClipperModuleGroup.Calendario },\n { name: \"Archivio\", value: ClipperModuleGroup.Archivio }\n];\n\nexport const ClipperModules: NameValueItem<number>[] = [\n { name: 'News, articoli di approfondimento e note a sentenza', shortName: 'Novità', value: ClipperModule.News },\n { name: 'Gazzette, Bollettini e fonti diverse', shortName: 'Gazzette, Bollettini e fonti diverse', value: ClipperModule.GazzetteBollettiniEFontiDiverse },\n { name: 'Giurisprudenza', shortName: 'Giurisprudenza', value: ClipperModule.Giurisprudenza },\n { name: 'Modifiche, abrogazioni e rinvii', shortName: 'Modifiche, abrogazioni e rinvii', value: ClipperModule.ModificheAbrogazioniERinvii },\n //{ name: 'Allerte alimentari', shortName: 'Allerte alimentari', value: ClipperModule.AllerteAlimentari },\n { name: 'Scadenze e segnalazioni', shortName: 'Scadenze e segnalazioni', value: ClipperModule.ScadenzeESegnalazioni },\n { name: 'Normativa vigente', shortName: 'Normativa vigente', value: ClipperModule.NormativaVigente },\n { name: 'Quesiti e casi risolti', shortName: 'Quesiti', value: ClipperModule.QuesitiECasiRisolti },\n]\n\nexport enum ClipperChannel {\n None = 0,\n LavoroEAmbiente = 1,\n SostanzeAlimentari = 2,\n MerciPericolose = 3,\n Energia = 4,\n DGInfo = 5\n}\n\nexport const ClipperChannels: NameValueItem<ClipperChannel>[] = [\n { value: ClipperChannel.LavoroEAmbiente, name: \"Lavoro e Ambiente\", header: \"LA\" },\n { value: ClipperChannel.SostanzeAlimentari, name: \"Sostanze Alimentari\", header: \"SA\" },\n { value: ClipperChannel.Energia, name: \"Energia\", header: \"E\" },\n { value: ClipperChannel.MerciPericolose, name: \"Merci Pericolose\", header: \"MP\" }\n]\n\nexport interface ClipperAvailableChannel extends NameValueItem<ClipperChannel> {\n active?: boolean;\n suspended?: boolean;\n}\n\nexport const ClipperRegions: NameValueItem<string>[] = [\n {\n value: '4RAB',\n name: 'Abruzzo',\n },\n {\n value: '4RBA',\n name: 'Basilicata',\n },\n {\n value: '4RCAL',\n name: 'Calabria',\n },\n {\n value: '4RCAM',\n name: 'Campania',\n },\n {\n value: '4REM',\n name: 'Emilia Romagna',\n },\n {\n value: '4RFVG',\n name: 'Friuli Venezia Giulia',\n },\n {\n value: '4RLA',\n name: 'Lazio',\n },\n {\n value: '4RLI',\n name: 'Liguria',\n },\n {\n value: '4RLO',\n name: 'Lombardia',\n },\n {\n value: '4RMA',\n name: 'Marche',\n },\n {\n value: '4RMO',\n name: 'Molise',\n },\n {\n value: '4RPI',\n name: 'Piemonte',\n },\n {\n value: '4RPU',\n name: 'Puglia',\n },\n {\n value: '4RSA',\n name: 'Sardegna',\n },\n {\n value: '4RSI',\n name: 'Sicilia',\n },\n {\n value: '4RTO',\n name: 'Toscana',\n },\n {\n value: '4RTAA',\n name: 'Trentino Alto Adige',\n },\n {\n value: '4RUM',\n name: 'Umbria',\n },\n {\n value: '4RVA',\n name: \"Valle D'Aosta\",\n },\n {\n value: '4RVE',\n name: 'Veneto',\n },\n {\n value: '4PAT',\n name: 'Prov. Aut. Trento',\n },\n {\n value: '4PAB',\n name: 'Prov. Aut. Bolzano',\n }\n]\n\nexport interface SectorInfo extends NameValueItem<string> {\n\n group?: string;\n channels?: string;\n sectorId?: string;\n}\n\nexport const ClipperSectors: SectorInfo[] = [\n {\n value: 'LC',\n name: 'Legislazione comunitaria',\n shortName: 'Comunitaria',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: 'LN',\n name: 'Legislazione nazionale',\n shortName: 'Nazionale',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n\n {\n value: 'LR',\n name: 'Legislazione regionale',\n shortName: 'Regionale',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RAB',\n name: ' Abruzzo',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4PAB',\n name: ' Prov. Aut. Bolzano',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RBA',\n name: ' Basilicata',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RCAL',\n name: ' Calabria',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RCAM',\n name: ' Campania',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4REM',\n name: ' Emilia Romagna',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RFVG',\n name: ' Friuli Venezia Giulia',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RLA',\n name: ' Lazio',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RLI',\n name: ' Liguria',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RLO',\n name: ' Lombardia',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RMA',\n name: ' Marche',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RMO',\n name: ' Molise',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RPI',\n name: ' Piemonte',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RPU',\n name: ' Puglia',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RSA',\n name: ' Sardegna',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RSI',\n name: ' Sicilia',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RTO',\n name: ' Toscana',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RTAA',\n name: ' Trentino Alto Adige',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4PAT',\n name: ' Prov. Aut. Trento',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RUM',\n name: ' Umbria',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RVA',\n name: \" Valle D'Aosta\",\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RVE',\n name: ' Veneto',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: 'GC',\n name: 'Giurisprudenza comunitaria',\n shortName: 'Giur. comunitaria',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: 'GN',\n name: 'Giurisprudenza nazionale',\n shortName: 'Giur. nazionale',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: 'TN',\n name: 'Normativa tecnica',\n shortName: 'Tecnica',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n /* {\n value: 'TI',\n name: 'Normativa tecnica internazionale',\n shortName: 'Tecnica internaz.',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },*/\n {\n value: 'NI',\n name: 'Normativa internazionale',\n shortName: 'Internazionale',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n /* {\n value: 'SN',\n name: 'Documentazione scientifica',\n shortName: 'Scientifica',\n group: 'S',\n channels: '|SA|',\n } */\n]\n\nexport const ClipperSectorTypes: NameValueItem<string>[] =\n [\n { parentValue: \"LN\", value: \"10\", name: \"Circolare Ministeriale\" },\n { parentValue: \"LN\", value: \"100\", name: \"Rettifica (naz.)\" },\n { parentValue: \"LR\", value: \"102\", name: \"Rettifica (reg.)\" },\n { parentValue: \"NI\", value: \"104\", name: \"Regolamento UNECE\" },\n { parentValue: \"SN\", value: \"105\", name: \"Documento\" },\n { parentValue: \"TN\", value: \"106\", name: \"Direttiva (Enti e Istituti)\" },\n { parentValue: \"TI\", value: \"107\", name: \"Normativa Tecnica Internazionale\" },\n { parentValue: \"LR\", value: \"11\", name: \"Circolare Pres. Giunta Reg\" },\n { parentValue: \"LC\", value: \"111\", name: \"Decisione (CEE)\" },\n { parentValue: \"LC\", value: \"112\", name: \"Decisione (CE)\" },\n { parentValue: \"LC\", value: \"113\", name: \"Decisione (UE)\" },\n { parentValue: \"LC\", value: \"114\", name: \"Decisione delegata (UE)\" },\n { parentValue: \"LC\", value: \"115\", name: \"Decisione di esecuzione (UE)\" },\n { parentValue: \"LC\", value: \"116\", name: \"Regolamento (CEE)\" },\n { parentValue: \"LC\", value: \"117\", name: \"Regolamento (CE)\" },\n { parentValue: \"LC\", value: \"118\", name: \"Regolamento (UE)\" },\n { parentValue: \"LC\", value: \"119\", name: \"Regolamento delegato (UE)\" },\n { parentValue: \"LR\", value: \"12\", name: \"Direttiva (reg.)\" },\n { parentValue: \"LC\", value: \"120\", name: \"Regolamento di esecuzione (UE)\" },\n { parentValue: \"LC\", value: \"121\", name: \"Direttiva (CEE)\" },\n { parentValue: \"LC\", value: \"122\", name: \"Direttiva (CE)\" },\n { parentValue: \"LC\", value: \"123\", name: \"Direttiva (UE)\" },\n { parentValue: \"LC\", value: \"124\", name: \"Direttiva delegata (UE)\" },\n { parentValue: \"LC\", value: \"125\", name: \"Direttiva di esecuzione (UE)\" },\n { parentValue: \"LC\", value: \"126\", name: \"Comunicazione (CE)\" },\n { parentValue: \"LC\", value: \"127\", name: \"Comunicazione (UE)\" },\n { parentValue: \"LC\", value: \"128\", name: \"Raccomandazione (CEE)\" },\n { parentValue: \"LC\", value: \"129\", name: \"Raccomandazione (CE)\" },\n { parentValue: \"LN\", value: \"13\", name: \"Comunicato (naz.)\" },\n { parentValue: \"LC\", value: \"130\", name: \"Raccomandazione (UE)\" },\n { parentValue: \"LC\", value: \"131\", name: \"Posizione Comune (CE)\" },\n { parentValue: \"LC\", value: \"132\", name: \"Posizione Comune (UE)\" },\n { parentValue: \"LC\", value: \"133\", name: \"Risoluzione\" },\n { parentValue: \"LC\", value: \"134\", name: \"Trattato\" },\n { parentValue: \"LC\", value: \"135\", name: \"Rettifica\" },\n { parentValue: \"LC\", value: \"138\", name: \"Parere\" },\n { parentValue: \"LC\", value: \"139\", name: \"Accordi (CE)\" },\n { parentValue: \"NI\", value: \"14\", name: \"Convenzione Internazionale\" },\n { parentValue: \"LC\", value: \"140\", name: \"Atti diversi (CE/UE)\" },\n { parentValue: \"GC\", value: \"141\", name: \"Sentenza (CE)\" },\n { parentValue: \"GC\", value: \"142\", name: \"Sentenza (UE)\" },\n { parentValue: \"GC\", value: \"143\", name: \"Ordinanza (CE)\" },\n { parentValue: \"GC\", value: \"144\", name: \"Ordinanza (UE)\" },\n { parentValue: \"LC\", value: \"145\", name: \"Direttiva (Euratom)\" },\n { parentValue: \"LC\", value: \"146\", name: \"Decisione (Euratom)\" },\n { parentValue: \"LC\", value: \"147\", name: \"Regolamento (Euratom)\" },\n { parentValue: \"LC\", value: \"148\", name: \"Raccomandazione (Euratom)\" },\n { parentValue: \"LN\", value: \"15\", name: \"Costituzione della Repubblica\" },\n { parentValue: \"LN\", value: \"16\", name: \"Linee guida (naz.)\" },\n { parentValue: \"LN\", value: \"17\", name: \"Circolare Commissariale\" },\n { parentValue: \"LN\", value: \"18\", name: \"Decreto Commissariale\" },\n { parentValue: \"LR\", value: \"19\", name: \"Decreto dell'Assessore Regionale\" },\n { parentValue: \"TN\", value: \"20\", name: \"Comunicato (Enti ed Istituti)\" },\n { parentValue: \"LN\", value: \"21\", name: \"Decreto Capo Provv. Stato\" },\n { parentValue: \"LN\", value: \"22\", name: \"Decreto Pres. Cons. Ministri\" },\n { parentValue: \"LR\", value: \"23\", name: \"Decreto Pres. Giunta Reg.\" },\n { parentValue: \"LR\", value: \"24\", name: \"Decreto Pres. Giunta Prov.\" },\n { parentValue: \"LN\", value: \"25\", name: \"Decreto Presidente Repubblica\" },\n { parentValue: \"LN\", value: \"26\", name: \"Documento di consultazione\" },\n { parentValue: \"LN\", value: \"27\", name: \"Decreto Legge\" },\n { parentValue: \"LN\", value: \"28\", name: \"Decreto Legge Luogotenenziale\" },\n { parentValue: \"LN\", value: \"29\", name: \"D.Lgs. Capo Provv. Stato\" },\n { parentValue: \"LN\", value: \"3\", name: \"Direttiva (naz.)\" },\n { parentValue: \"LN\", value: \"30\", name: \"D.Lgs. Governo\" },\n { parentValue: \"LR\", value: \"31\", name: \"Delib. Consiglio Prov.\" },\n { parentValue: \"LN\", value: \"32\", name: \"D.Lgs. Luogotenenziale\" },\n { parentValue: \"LN\", value: \"33\", name: \"Decreto Luogotenenziale\" },\n { parentValue: \"LN\", value: \"34\", name: \"Decreto Ministeriale\" },\n { parentValue: \"LN\", value: \"35\", name: \"Deliberazione (naz.)\" },\n { parentValue: \"LR\", value: \"36\", name: \"Delib. Consiglio Reg.\" },\n { parentValue: \"LR\", value: \"37\", name: \"Delib. Giunta Prov.\" },\n { parentValue: \"LR\", value: \"38\", name: \"Delib. Giunta Reg.\" },\n { parentValue: \"LN\", value: \"4\", name: \"Accordo\" },\n { parentValue: \"TN\", value: \"40\", name: \"Delibera (Enti ed Istituti)\" },\n { parentValue: \"GN\", value: \"41\", name: \"Decreto Penale\" },\n { parentValue: \"LN\", value: \"42\", name: \"Lettera Circolare (Comitati)\" },\n { parentValue: \"LN\", value: \"43\", name: \"Lettera Circolare Ministeriale\" },\n { parentValue: \"TN\", value: \"44\", name: \"Circolare (Enti ed Istituti)\" },\n { parentValue: \"TN\", value: \"45\", name: \"Istruzione Tecnica\" },\n { parentValue: \"LR\", value: \"46\", name: \"Circolare dell'Assessore Regionale\" },\n { parentValue: \"LN\", value: \"47\", name: \"Determinazione (naz.)\" },\n { parentValue: \"LN\", value: \"48\", name: \"Legge\" },\n { parentValue: \"LR\", value: \"49\", name: \"Legge Prov. Aut.\" },\n { parentValue: \"LR\", value: \"5\", name: \"Decreto Assessore Prov.\" },\n { parentValue: \"LR\", value: \"50\", name: \"Legge Regionale\" },\n { parentValue: \"LR\", value: \"51\", name: \"Linee guida (reg.)\" },\n { parentValue: \"TN\", value: \"52\", name: \"Regolamento (Enti ed Istituti)\" },\n { parentValue: \"TN\", value: \"53\", name: \"Fascicolo (Enti ed Istituti)\" },\n { parentValue: \"GN\", value: \"54\", name: \"Ordinanza\" },\n { parentValue: \"LR\", value: \"55\", name: \"Ordinanza Pres. Reg.\" },\n { parentValue: \"LN\", value: \"56\", name: \"Nota Ministeriale\" },\n { parentValue: \"LN\", value: \"57\", name: \"Ordinanza Ministeriale\" },\n { parentValue: \"LN\", value: \"58\", name: \"Circolare (Comitati)\" },\n { parentValue: \"TN\", value: \"59\", name: \"Lettera Circolare (Enti ed Istituti)\" },\n { parentValue: \"NI\", value: \"6\", name: \"Accordo Multilaterale\" },\n { parentValue: \"TN\", value: \"60\", name: \"Decreto (Enti ed Istituti)\" },\n { parentValue: \"LN\", value: \"61\", name: \"Decreto del Capo del Governo\" },\n { parentValue: \"GN\", value: \"62\", name: \"Ricorso\" },\n { parentValue: \"GN\", value: \"63\", name: \"Decisione\" },\n { parentValue: \"LR\", value: \"65\", name: \"Regolamento Regionale\" },\n { parentValue: \"LN\", value: \"66\", name: \"Regio Decreto\" },\n { parentValue: \"LN\", value: \"67\", name: \"Regio Decreto Legge\" },\n { parentValue: \"LN\", value: \"68\", name: \"Regio Decreto Legislativo\" },\n { parentValue: \"LR\", value: \"69\", name: \"Altri documenti (reg.)\" },\n { parentValue: \"LR\", value: \"70\", name: \"Comunicato (reg.)\" },\n { parentValue: \"LN\", value: \"71\", name: \"Statuto delle Regioni Ordinarie\" },\n { parentValue: \"GN\", value: \"72\", name: \"Sentenza\" },\n { parentValue: \"TN\", value: \"73\", name: \"Altri documenti (Enti ed Istituti)\" },\n { parentValue: \"TN\", value: \"74\", name: \"Prassi di riferimento\" },\n { parentValue: \"LN\", value: \"75\", name: \"Altri documenti (naz.)\" },\n { parentValue: \"LN\", value: \"76\", name: \"Provvedimento (naz.)\" },\n { parentValue: \"TN\", value: \"77\", name: \"Pubblicazione (Enti ed Istituti)\" },\n { parentValue: \"TN\", value: \"79\", name: \"Linee guida (Enti ed Istituti)\" },\n { parentValue: \"LR\", value: \"80\", name: \"Decreto del Dirigente (reg.)\" },\n { parentValue: \"LR\", value: \"81\", name: \"Determinazione del Dirigente (reg.)\" },\n { parentValue: \"LN\", value: \"82\", name: \"Ordinanza Pres. Cons. Ministri\" },\n { parentValue: \"LR\", value: \"83\", name: \"Circolare (reg.)\" },\n { parentValue: \"TN\", value: \"84\", name: \"Istruzione Operativa (Enti e Istituti)\" },\n { parentValue: \"LR\", value: \"85\", name: \"Provvedimento (reg.)\" },\n { parentValue: \"TN\", value: \"86\", name: \"Quaderno\" },\n { parentValue: \"LR\", value: \"9\", name: \"Ordinanza Pres. Prov.\" },\n { parentValue: \"LN\", value: \"91\", name: \"Ordinanza Commissariale\" },\n { parentValue: \"LN\", value: \"93\", name: \"Risoluzione (naz.)\" },\n { parentValue: \"TN\", value: \"94\", name: \"Nota (Enti e Istituti)\" },\n { parentValue: \"TN\", value: \"97\", name: \"Opuscolo Tecnico\" },\n { parentValue: \"TN\", value: \"98\", name: \"Norma Tecnica\" },\n { parentValue: \"NI\", value: \"99\", name: \"Norma Tecnica Internaz.\" }\n ]\n\nexport const ClipperAuthors: SectorInfo[] = [\n {\n value: \"1CAM\",\n sectorId: undefined,\n name: \"Camera dei Deputati\",\n channels: undefined\n },\n {\n value: \"1MA\",\n sectorId: undefined,\n name: \"Ministero dell'Ambiente\",\n channels: undefined\n },\n {\n value: \"1MAE\",\n sectorId: undefined,\n name: \"Ministero degli Affari Esteri\",\n channels: undefined\n },\n {\n value: \"1MAF\",\n sectorId: undefined,\n name: \"Ministero dell'Agricoltura e delle Foreste\",\n channels: undefined\n },\n {\n value: \"1MAP\",\n sectorId: undefined,\n name: \"Ministero delle Attività Produttive\",\n channels: undefined\n },\n {\n value: \"1MARP\",\n sectorId: undefined,\n name: \"Ministero per gli Affari Regionali e per i Problemi Istituzionali\",\n channels: undefined\n },\n {\n value: \"1MASAF\",\n sectorId: undefined,\n name: \"Ministero dell'Agricoltura, della Sovranità Alimentare e delle Foreste\",\n channels: undefined\n },\n {\n value: \"1MASE\",\n sectorId: undefined,\n name: \"Ministero dell'Ambiente e della Sicurezza Energetica\",\n channels: undefined\n },\n {\n value: \"1MATT\",\n sectorId: undefined,\n name: \"Ministero dell'Ambiente e della Tutela del Territorio\",\n channels: undefined\n },\n {\n value: \"1MATTM\",\n sectorId: undefined,\n name: \"Ministero dell'Ambiente e della Tutela del Territorio e del Mare\",\n channels: undefined\n },\n {\n value: \"1MAU\",\n sectorId: undefined,\n name: \"Ministero del Aree Urbane\",\n channels: undefined\n },\n {\n value: \"1MBAC\",\n sectorId: undefined,\n name: \"Ministero dei Beni e delle Attività Culturali\",\n channels: undefined\n },\n {\n value: \"1MBCA\",\n sectorId: undefined,\n name: \"Ministero dei Beni Culturali e Ambientali\",\n channels: undefined\n },\n {\n value: \"1MC\",\n sectorId: undefined,\n name: \"Ministero delle Comunicazioni\",\n channels: undefined\n },\n {\n value: \"1MCE\",\n sectorId: undefined,\n name: \"Ministero del Commercio con l'Estero\",\n channels: undefined\n },\n {\n value: \"1MCI\",\n sectorId: undefined,\n name: \"Ministero del Commercio Internazionale\",\n channels: undefined\n },\n {\n value: \"1MCPC\",\n sectorId: undefined,\n name: \"Ministero per il Coordinamento delle Politiche Comunitarie\",\n channels: undefined\n },\n {\n value: \"1MCRU\",\n sectorId: undefined,\n name: \"Ministero della Ricerca Universitaria\",\n channels: undefined\n },\n {\n value: \"1MCU\",\n sectorId: undefined,\n name: \"Ministero della Cultura\",\n channels: undefined\n },\n {\n value: \"1MDIF\",\n sectorId: undefined,\n name: \"Ministero della Difesa\",\n channels: undefined\n },\n {\n value: \"1MEF\",\n sectorId: undefined,\n name: \"Ministero dell'Economia e delle Finanze\",\n channels: undefined\n },\n {\n value: \"1MF\",\n sectorId: undefined,\n name: \"Ministero delle Finanze\",\n channels: undefined\n },\n {\n value: \"1MFP\",\n sectorId: undefined,\n name: \"Ministero della Funzione Pubblica\",\n channels: undefined\n },\n {\n value: \"1MG\",\n sectorId: undefined,\n name: \"Ministero della Giustizia\",\n channels: undefined\n },\n {\n value: \"1MGG\",\n sectorId: undefined,\n name: \"Ministero di Grazia e Giustizia\",\n channels: undefined\n },\n {\n value: \"1MI\",\n sectorId: undefined,\n name: \"Ministero dell'Interno\",\n channels: undefined\n },\n {\n value: \"1MICA\",\n sectorId: undefined,\n name: \"Ministero per l'Industria, il Commercio e l'Artigianato\",\n channels: undefined\n },\n {\n value: \"1MIME\",\n sectorId: undefined,\n name: \"Ministero dell'Istruzione e del Merito\",\n channels: undefined\n },\n {\n value: \"1MIMI\",\n sectorId: undefined,\n name: \"Ministero delle Imprese e del Made in Italy\",\n channels: undefined\n },\n {\n value: \"1MIMS\",\n sectorId: undefined,\n name: \"Ministero delle Infrastrutture e della Mobilità Sostenibili\",\n channels: undefined\n },\n {\n value: \"1MINF\",\n sectorId: undefined,\n name: \"Ministero delle Infrastrutture\",\n channels: undefined\n },\n {\n value: \"1MISM\",\n sectorId: undefined,\n name: \"Ministero per l'Intervento Straordinario nel Mezzogiorno\",\n channels: undefined\n },\n {\n value: \"1MIT\",\n sectorId: undefined,\n name: \"Ministero delle Infrastrutture e dei Trasporti\",\n channels: undefined\n },\n {\n value: \"1MIUR\",\n sectorId: undefined,\n name: \"Ministero dell'Istruzione, Università e Ricerca\",\n channels: undefined\n },\n {\n value: \"1MLP\",\n sectorId: undefined,\n name: \"Ministero dei Lavori Pubblici\",\n channels: undefined\n },\n {\n value: \"1MLPO\",\n sectorId: undefined,\n name: \"Ministero del Lavoro e Politiche Sociali\",\n channels: undefined\n },\n {\n value: \"1MLPS\",\n sectorId: undefined,\n name: \"Ministero del Lavoro e Previdenza Sociale\",\n channels: undefined\n },\n {\n value: \"1MLSPS\",\n sectorId: undefined,\n name: \"Ministero del Lavoro, della Salute e delle Politiche Sociali\",\n channels: undefined\n },\n {\n value: \"1MMM\",\n sectorId: undefined,\n name: \"Ministero della Marina Mercantile\",\n channels: undefined\n },\n {\n value: \"1MPAAF\",\n sectorId: undefined,\n name: \"Ministero delle Politiche Agricole, Alimentari e Forestali\",\n channels: undefined\n },\n {\n value: \"1MPAAFT\",\n sectorId: undefined,\n name: \"Ministero delle Politiche Agricole Alimentari e Forestali e del Turismo\",\n channels: undefined\n },\n {\n value: \"1MPAF\",\n sectorId: undefined,\n name: \"Ministero delle Politiche Agricole e Forestali\",\n channels: undefined\n },\n {\n value: \"1MPC\",\n sectorId: undefined,\n name: \"Ministero per il Coordinamento della Protezione Civile\",\n channels: undefined\n },\n {\n value: \"1MPI\",\n sectorId: undefined,\n name: \"Ministero della Pubblica Istruzione\",\n channels: undefined\n },\n {\n value: \"1MPT\",\n sectorId: undefined,\n name: \"Ministero delle Poste e Telecomunicazioni\",\n channels: undefined\n },\n {\n value: \"1MRAAF\",\n sectorId: undefined,\n name: \"Ministero delle Risorse Agricole, Alimentari e Forestali\",\n channels: undefined\n },\n {\n value: \"1MRP\",\n sectorId: undefined,\n name: \"Ministero per i Rapporti Parlamentari\",\n channels: undefined\n },\n {\n value: \"1MS\",\n sectorId: undefined,\n name: \"Ministero della Sanità\",\n channels: undefined\n },\n {\n value: \"1MSA\",\n sectorId: undefined,\n name: \"Ministero della Salute\",\n channels: undefined\n },\n {\n value: \"1MSE\",\n sectorId: undefined,\n name: \"Ministero dello Sviluppo Economico\",\n channels: undefined\n },\n {\n value: \"1MT\",\n sectorId: undefined,\n name: \"Ministero del Tesoro\",\n channels: undefined\n },\n {\n value: \"1MTAC\",\n sectorId: undefined,\n name: \"Ministero dei Trasporti e dell'Aviazione Civile\",\n channels: undefined\n },\n {\n value: \"1MTE\",\n sectorId: undefined,\n name: \"Ministero della Transizione Ecologica\",\n channels: undefined\n },\n {\n value: \"1MTNA\",\n sectorId: undefined,\n name: \"Ministero dei Trasporti e della Navigazione\",\n channels: undefined\n },\n {\n value: \"1MTRA\",\n sectorId: undefined,\n name: \"Ministero dei Trasporti\",\n channels: undefined\n },\n {\n value: \"1MTS\",\n sectorId: undefined,\n name: \"Ministero del Turismo e dello Spettacolo\",\n channels: undefined\n },\n {\n value: \"1MTU\",\n sectorId: undefined,\n name: \"Ministero del Turismo\",\n channels: undefined\n },\n {\n value: \"1MURS\",\n sectorId: undefined,\n name: \"Ministero dell'Universitá e della Ricerca Scientifica e Tecnica\",\n channels: undefined\n },\n {\n value: \"1PCM\",\n sectorId: undefined,\n name: \"Presidente del Consiglio dei Ministri\",\n channels: undefined\n },\n {\n value: \"1PR\",\n sectorId: undefined,\n name: \"Presidente della Repubblica\",\n channels: undefined\n },\n {\n value: \"1SEN\",\n sectorId: undefined,\n name: \"Senato della Repubblica\",\n channels: undefined\n },\n {\n value: \"2AEEG\",\n sectorId: undefined,\n name: \"Autorità per l'Energia Elettrica e il Gas\",\n channels: undefined\n },\n {\n value: \"2AEEGSI\",\n sectorId: undefined,\n name: \"Autorità Energia Elettrica e Gas e Sistema Idrico\",\n channels: undefined\n },\n {\n value: \"2ARERA\",\n sectorId: undefined,\n name: \"Autorità di Regolazione per Energia, Reti e Ambiente\",\n channels: undefined\n },\n {\n value: \"2ARIR\",\n sectorId: undefined,\n name: \"Autorità di Vigilanza sulle Risorse Idriche e sui Rifiuti\",\n channels: undefined\n },\n {\n value: \"2AVCP\",\n sectorId: undefined,\n name: \"Autorità per la Vigilanza sui Contratti Pubblici di Lavori, Servizi e Forniture\",\n channels: undefined\n },\n {\n value: \"2AVLP\",\n sectorId: undefined,\n name: \"Autorità per la Vigilanza sui Lavori Pubblici\",\n channels: undefined\n },\n {\n value: \"2CAGA\",\n sectorId: undefined,\n name: \"Comitato Naz. Albo Naz. Gestori Ambientali\",\n channels: undefined\n },\n {\n value: \"2CAN\",\n sectorId: undefined,\n name: \"Comitato per le Aree Naturali protette.\",\n channels: undefined\n },\n {\n value: \"2CDEA\",\n sectorId: undefined,\n name: \"Commissario delegato per l'Emergenza Ambientale\",\n channels: undefined\n },\n {\n value: \"2CDMN\",\n sectorId: undefined,\n name: \"Commissario delegato per la Sicurezza dei Materiali Nucleari\",\n channels: undefined\n },\n {\n value: \"2CDRA\",\n sectorId: undefined,\n name: \"Commissario delegato per l'Emergenza Rifiuti e la Tutela delle Acque\",\n channels: undefined\n },\n {\n value: \"2CIAB\",\n sectorId: undefined,\n name: \"Comitato Istituzionale Autorità di Bacino\",\n channels: undefined\n },\n {\n value: \"2CICP\",\n sectorId: undefined,\n name: \"Comitato Interministeriale Coordinamento Politica Economica\",\n channels: undefined\n },\n {\n value: \"2CIP\",\n sectorId: undefined,\n name: \"Comitato Interministeriale Prezzi\",\n channels: undefined\n },\n {\n value: \"2CIPE\",\n sectorId: undefined,\n name: \"Comitato Interministeriale per la Programmazione Economica\",\n channels: undefined\n },\n {\n value: \"2CIPESS\",\n sectorId: undefined,\n name: \"Comitato Interministeriale per la Programmazione Economica e lo Sviluppo Sostenibile\",\n channels: undefined\n },\n {\n value: \"2CIR\",\n sectorId: undefined,\n name: \"Comitato Interministeriale per i Rifiuti\",\n channels: undefined\n },\n {\n value: \"2CITA\",\n sectorId: undefined,\n name: \"Comitato Interministeriale per la Tutela delle Acque\",\n channels: undefined\n },\n {\n value: \"2CSR\",\n sectorId: undefined,\n name: \"Conferenza Permanente Rapporti Stato e Regioni\",\n channels: undefined\n },\n {\n value: \"2CSSR\",\n sectorId: undefined,\n name: \"Comitato Naz. Albo Imprese Esercenti Servizi Smaltimento Rifiuti\",\n channels: undefined\n },\n {\n value: \"2CUN\",\n sectorId: undefined,\n name: \"Conferenza Unificata\",\n channels: undefined\n },\n {\n value: \"2GPDP\",\n sectorId: undefined,\n name: \"Garante per la Protezione dei Dati Personali\",\n channels: undefined\n },\n {\n value: \"3CCEE\",\n sectorId: \"LC\",\n name: \"Commissario CEE/CE\",\n channels: undefined\n },\n {\n value: \"3CDR\",\n sectorId: \"LC\",\n name: \"Comitato delle Regioni\",\n channels: undefined\n },\n {\n value: \"3CEDM\",\n sectorId: \"LC\",\n name: \"Corte Europea per i Diritti dell'Uomo\",\n channels: undefined\n },\n {\n value: \"3CES\",\n sectorId: \"LC\",\n name: \"Comitato Economico e Sociale\",\n channels: undefined\n },\n {\n value: \"3CJCE\",\n sectorId: \"LC\",\n name: \"Corte di Giustizia\",\n channels: undefined\n },\n {\n value: \"3CJCO\",\n sectorId: \"LC\",\n name: \"Corte dei Conti\",\n channels: undefined\n },\n {\n value: \"3COMM\",\n sectorId: \"LC\",\n name: \"Commissione\",\n channels: undefined\n },\n {\n value: \"3CONS\",\n sectorId: \"LC\",\n name: \"Consiglio\",\n channels: undefined\n },\n {\n value: \"3CONSUE\",\n sectorId: \"LC\",\n name: \"Parlamento e Consiglio\",\n channels: undefined\n },\n {\n value: \"3CWJ\",\n sectorId: \"LC\",\n name: \"Corte Internazionale di Giustizia\",\n channels: undefined\n },\n {\n value: \"3EFTA\",\n sectorId: \"LC\",\n name: \"EFTA - Associaz. Europea di Libero Scambio\",\n channels: undefined\n },\n {\n value: \"3OTIF\",\n sectorId: \"LC\",\n name: \"OTIF - Intergov. Org. for International Carriage by Rail\",\n channels: undefined\n },\n {\n value: \"3PAE\",\n sectorId: \"LC\",\n name: \"Parlamento\",\n channels: undefined\n },\n {\n value: \"3T1CE\",\n sectorId: \"LC\",\n name: \"Tribunale di Primo Grado\",\n channels: undefined\n },\n {\n value: \"3UNECE\",\n sectorId: \"LC\",\n name: \"UNECE - United Nations Economic Commission for Europe\",\n channels: undefined\n },\n {\n value: \"4PAB\",\n sectorId: \"LR\",\n name: \"Prov. Autonoma di Bolzano\",\n channels: undefined\n },\n {\n value: \"4PAT\",\n sectorId: \"LR\",\n name: \"Prov. Autonoma di Trento\",\n channels: undefined\n },\n {\n value: \"4RAB\",\n sectorId: \"LR\",\n name: \"Regione Abruzzo\",\n channels: undefined\n },\n {\n value: \"4RBA\",\n sectorId: \"LR\",\n name: \"Regione Basilicata\",\n channels: undefined\n },\n {\n value: \"4RCAL\",\n sectorId: \"LR\",\n name: \"Regione Calabria\",\n channels: undefined\n },\n {\n value: \"4RCAM\",\n sectorId: \"LR\",\n name: \"Regione Campania\",\n channels: undefined\n },\n {\n value: \"4REM\",\n sectorId: \"LR\",\n name: \"Regione Emilia Romagna\",\n channels: undefined\n },\n {\n value: \"4RFVG\",\n sectorId: \"LR\",\n name: \"Regione Friuli Venezia Giulia\",\n channels: undefined\n },\n {\n value: \"4RLA\",\n sectorId: \"LR\",\n name: \"Regione Lazio\",\n channels: undefined\n },\n {\n value: \"4RLI\",\n sectorId: \"LR\",\n name: \"Regione Liguria\",\n channels: undefined\n },\n {\n value: \"4RLO\",\n sectorId: \"LR\",\n name: \"Regione Lombardia\",\n channels: undefined\n },\n {\n value: \"4RMA\",\n sectorId: \"LR\",\n name: \"Regione Marche\",\n channels: undefined\n },\n {\n value: \"4RMO\",\n sectorId: \"LR\",\n name: \"Regione Molise\",\n channels: undefined\n },\n {\n value: \"4RPI\",\n sectorId: \"LR\",\n name: \"Regione Piemonte\",\n channels: undefined\n },\n {\n value: \"4RPU\",\n sectorId: \"LR\",\n name: \"Regione Puglia\",\n channels: undefined\n },\n {\n value: \"4RSA\",\n sectorId: \"LR\",\n name: \"Regione Sardegna\",\n channels: undefined\n },\n {\n value: \"4RSI\",\n sectorId: \"LR\",\n name: \"Regione Sicilia\",\n channels: undefined\n },\n {\n value: \"4RTAA\",\n sectorId: \"LR\",\n name: \"Regione Trentino Alto Adige\",\n channels: undefined\n },\n {\n value: \"4RTO\",\n sectorId: \"LR\",\n name: \"Regione Toscana\",\n channels: undefined\n },\n {\n value: \"4RUM\",\n sectorId: \"LR\",\n name: \"Regione Umbria\",\n channels: undefined\n },\n {\n value: \"4RVA\",\n sectorId: \"LR\",\n name: \"Regione Valle D'Aosta\",\n channels: undefined\n },\n {\n value: \"4RVE\",\n sectorId: \"LR\",\n name: \"Regione Veneto\",\n channels: undefined\n },\n {\n value: \"5CA\",\n sectorId: \"GN\",\n name: \"Corte d'Appello\",\n channels: undefined\n },\n {\n value: \"5CAS\",\n sectorId: \"GN\",\n name: \"Corte d'Assise\",\n channels: undefined\n },\n {\n value: \"5CASA\",\n sectorId: \"GN\",\n name: \"Corte d'Assise d'Appello\",\n channels: undefined\n },\n {\n value: \"5CC\",\n sectorId: \"GN\",\n name: \"Corte Costituzionale\",\n channels: undefined\n },\n {\n value: \"5CCC\",\n sectorId: \"GN\",\n name: \"Corte di Cassazione Civile\",\n channels: undefined\n },\n {\n value: \"5CCP\",\n sectorId: \"GN\",\n name: \"Corte di Cassazione Penale\",\n channels: undefined\n },\n {\n value: \"5CDC\",\n sectorId: \"GN\",\n name: \"Corte dei Conti\",\n channels: undefined\n },\n {\n value: \"5CDS\",\n sectorId: \"GN\",\n name: \"Consiglio di Stato\",\n channels: undefined\n },\n {\n value: \"5CGAS\",\n sectorId: \"GN\",\n name: \"Cons. di Giustizia Amm.va della Sicilia\",\n channels: undefined\n },\n {\n value: \"5CTP\",\n sectorId: \"GN\",\n name: \"Commissione Tributaria Provinciale\",\n channels: undefined\n },\n {\n value: \"5CTR\",\n sectorId: \"GN\",\n name: \"Commissione Tributaria Regionale\",\n channels: undefined\n },\n {\n value: \"5GDP\",\n sectorId: \"GN\",\n name: \"Giudice di Pace\",\n channels: undefined\n },\n {\n value: \"5P\",\n sectorId: \"GN\",\n name: \"Pretura\",\n channels: undefined\n },\n {\n value: \"5PCA\",\n sectorId: \"GN\",\n name: \"Procura Generale Corte d'Appello\",\n channels: undefined\n },\n {\n value: \"5PR\",\n sectorId: \"GN\",\n name: \"Procura della Repubblica\",\n channels: undefined\n },\n {\n value: \"5T\",\n sectorId: \"GN\",\n name: \"Tribunale\",\n channels: undefined\n },\n {\n value: \"5TAR\",\n sectorId: \"GN\",\n name: \"Tribunale Amministrativo Regionale\",\n channels: undefined\n },\n {\n value: \"5TGA\",\n sectorId: \"GN\",\n name: \"Tribunale Regionale acque\",\n channels: undefined\n },\n {\n value: \"5TSA\",\n sectorId: \"GN\",\n name: \"Tribunale Superiore delle Acque\",\n channels: undefined\n },\n {\n value: \"6CAC\",\n sectorId: \"TN\",\n name: \"Codex Alimentarius Commission\",\n channels: undefined\n },\n {\n value: \"6CEI\",\n sectorId: \"TN\",\n name: \"C.E.I.\",\n channels: undefined\n },\n {\n value: \"6CNR\",\n sectorId: \"TN\",\n name: \"C.N.R.\",\n channels: undefined\n },\n {\n value: \"6ENPI\",\n sectorId: \"TN\",\n name: \"E.N.P.I.\",\n channels: undefined\n },\n {\n value: \"6INAI\",\n sectorId: \"TN\",\n name: \"I.N.A.I.L.\",\n channels: undefined\n },\n {\n value: \"6INPS\",\n sectorId: \"TN\",\n name: \"I.N.P.S.\",\n channels: undefined\n },\n {\n value: \"6ISO\",\n sectorId: \"NI\",\n name: \"I.S.O.\",\n channels: undefined\n },\n {\n value: \"6ISPS\",\n sectorId: \"TN\",\n name: \"I.S.P.E.S.L.\",\n channels: undefined\n },\n {\n value: \"6ISS\",\n sectorId: \"TN\",\n name: \"I.S.S. - Istituto Superiore di Sanità\",\n channels: undefined\n },\n {\n value: \"6NSF\",\n sectorId: \"TN\",\n name: \"NSF International\",\n channels: undefined\n },\n {\n value: \"6UNI\",\n sectorId: \"TN\",\n name: \"U.N.I.\",\n channels: undefined\n },\n {\n value: \"6USDA\",\n sectorId: \"TN\",\n name: \"USDA - United States Department of Agriculture\",\n channels: undefined\n }\n]\n\nexport const ClipperSources: NameValueItem<string>[] = [\n {\n value: 'ACCML',\n name: 'Accordi Multilaterali',\n },\n {\n value: 'AEEG',\n name: \"Sito Autorità per l'Energia Elettrica, il Gas e il Sistema Idrico\",\n },\n {\n value: 'ARERA',\n name: 'Sito Autorità di Regolazione per Energia, Reti e Ambiente',\n },\n {\n value: 'BUR',\n name: 'Bollettino Uff. Regione',\n },\n {\n value: 'BUS',\n name: 'Suppl. speciale al Bollettino Uff.',\n },\n {\n value: 'BUSO',\n name: 'Suppl. ordin. al Bollettino Uff.',\n },\n {\n value: 'BUSS',\n name: 'Suppl. straord. al Bollettino Uff.',\n },\n {\n value: 'GU',\n name: 'Gazzetta Ufficiale Italiana',\n },\n {\n value: 'GUCC',\n name: 'Gazz. Uff. Corte Costituzionale',\n },\n {\n value: 'GUCE',\n name: 'Gazzetta ufficiale delle Comunità europee',\n },\n {\n value: 'GUES',\n name: 'Gazz. Uff. Ediz. Speciale',\n },\n {\n value: 'GURS',\n name: 'Gazz. Uff. Regione Sicilia',\n },\n {\n value: 'GUS',\n name: 'Gazz. Uff. Serie Speciale',\n },\n {\n value: 'GUSO',\n name: 'Suppl. ordin. alla Gazzetta Ufficiale',\n },\n {\n value: 'GUSS',\n name: 'Suppl. straord. alla Gazzetta Ufficiale',\n },\n {\n value: 'GUUE',\n name: 'Gazzetta ufficiale dell’Unione europea',\n },\n {\n value: 'MAC',\n name: 'Massimario Civile',\n },\n {\n value: 'MAP',\n name: 'Massimario Penale',\n },\n {\n value: 'NONE',\n name: 'Fonti diverse',\n }\n]\n\n\nexport interface ClipperChannelSettingsItem<T> {\n name: string;\n value: T;\n checked: boolean;\n}\n\nexport class ClipperChannelSettings {\n channelId?: ClipperChannel;\n channelName?: string;\n isEnabled?: boolean = false;\n isSuspended?: boolean = false;\n isActive?: boolean = false;\n sectors: ClipperChannelSettingsItem<string>[] = [];\n regions: ClipperChannelSettingsItem<string>[] = [];\n\n /**\n * Returns `true` when the channel is active and at least one of the given sector codes\n * matches a sector assigned to this channel.\n * @param values - Array of sector code strings to test against.\n */\n hasAnyOfSectors(values: string[]): boolean {\n if (this.isEnabled !== true || this.isActive !== true) return false;\n return values.some(v => this.sectors.some(s => s.value === v));\n }\n\n /**\n * Returns `true` when the channel is active and at least one of the given region codes\n * matches a region assigned to this channel.\n * @param values - Array of region code strings to test against.\n */\n hasAnyOfRegions(values: string[]): boolean {\n if (this.isEnabled !== true || this.isActive !== true) return false;\n return values.some(v => this.regions.some(r => r.value === v));\n }\n\n}\n\nexport interface ClipperUserChannelInfo {\n channel: ClipperChannel;\n channelName?: string;\n expiringDate: string;\n isTrial?: boolean;\n isDisabled: boolean;\n isSuspended: boolean;\n isDvd: boolean;\n isActive: boolean;\n documentsViewable?: number;\n documentsViewed?: number;\n settings?: ClipperChannelSettings;\n}\n\nexport interface ClipperUserInfo {\n userId: number;\n customerId?: number;\n companyName: string;\n displayName: string;\n firstName: string;\n email: string;\n oauth?: boolean;\n sessionId?: string;\n scope: number;\n isAuthenticated: boolean;\n isTemporary: boolean;\n hasTrial: boolean;\n hasBulletin: boolean;\n hasAI: boolean;\n hasAIAssistant: boolean;\n hasAIEditor: boolean;\n channels: ClipperUserChannelInfo[];\n firstChannelTrial: ClipperUserChannelInfo;\n trialInfo?: ClipperUserTrialInfo;\n}\n\nexport interface ClipperLoginResult extends LoginResult<ClipperUserInfo> {\n settings?: ClipperChannelSettings[];\n}\n\n/**\n * Answer of `GET /session/status`: whether this browser holds a live session towards the Clipper API.\n *\n * This is the probe behind the link state. The auth cookie is HttpOnly and belongs to the API's\n * host, so nothing here can read it, and its presence would prove nothing anyway — the session also\n * lives server-side and may have been revoked or evicted. The endpoint never answers 401, which is\n * what makes it safe to call with no session at all: a probe that failed with a status code would be\n * reported by the interceptor as an expired session.\n */\nexport interface ClipperSessionStatus {\n /** True when the cookie this browser presented resolves to a live, validated session. */\n connected: boolean;\n}\n\nexport interface ClipperLoginInfo {\n context?: ClipperUserInfo;\n channels?: ClipperChannelSettings[];\n}\n\nexport enum ClipperQueryDocumentFlags {\n None = 0,\n TitleOnly = 1,\n AbrogatedOnly = 1 << 1,\n NotAbrogatedOnly = 1 << 2,\n CommentedOnly = 1 << 3,\n UseSemanticSearch = 1 << 5,\n NotRead = 1 << 6,\n ExcludeUserFilters = 1 << 7\n}\n\nexport class ClipperSearchParams {\n version: number = 6;\n searchId?: number;\n searchName?: string;\n text?: string;\n title?: string;\n titleOnly?: boolean = false;\n showUnreadDocumentsOnly?: boolean = false;\n showCommentedDocumentsOnly?: boolean = false;\n showNotAbrogatedDocumentsOnly?: boolean = false;\n number?: string;\n fromDate?: Date;\n toDate?: Date;\n year?: number;\n sourceNumber?: string;\n source?: string;\n sourceFromDate?: Date;\n sourceToDate?: Date;\n sourceYear?: number;\n sector?: string;\n sectors?: SectorInfo[];\n topic?: string;\n topics?: NameValueItem<string>[];\n taxonomy?: string;\n taxonomies?: NameValueItem<string>[];\n taxonomyPath?: string;\n taxonomyNode?: string;\n type?: string;\n types?: NameValueItem<string>[];\n tag?: string;\n tags?: NameValueItem<string>[];\n author?: string;\n authors?: NameValueItem<string>[];\n changeReason?: number;\n changedNumber?: string;\n changedYear?: number;\n changedTitle?: string;\n changedId?: string;\n modifierId?: string;\n modifierNumber?: string;\n modifierYear?: number;\n modifierTitle?: string;\n model?: ClipperModel;\n models?: ClipperModel[];\n module?: ClipperModule;\n modules?: NameValueItem<ClipperModule>[];\n mode?: ClipperQueryReferencesMode;\n channels?: NameValueItem<ClipperChannel>[] = [...ClipperChannels];\n count?: number = 15;\n id?: string;\n anchor?: string;\n excludeTextReferences?: boolean = false;\n excludeNotesReferences?: boolean = false;\n useModifierInfo?: boolean = false;\n returnModifierInfo?: boolean = false;\n flags?: ClipperQueryDocumentFlags;\n first?: number = 0;\n sortMode?: number;\n}\n\nexport interface ClipperReferencesSearchParams {\n documentId: string;\n year?: number;\n sector?: string;\n author?: string;\n anchor?: string;\n model?: string;\n mode?: ClipperQueryReferencesMode;\n excludeTextReferences?: boolean;\n excludeNotesReferences?: boolean;\n useModifierInfo?: boolean;\n returnModifierInfo?: boolean;\n count?: number;\n first?: number;\n}\n\nexport enum ClipperDocumentContainer {\n None = 0,\n LavoroEAmbiente = 1,\n SostanzeAlimentari = 2,\n OrangeProject = 4,\n Energia = 8,\n DGInfo = 0x10,\n DLGS231 = 0x20,\n All = 0x3F\n}\n\nexport const ClipperDocumentChangeReasons: NameValueItem<number>[] = [\n { name: 'Abrogazione', value: 1 },\n { name: 'Annullamento', value: 5 },\n { name: 'Modifica', value: 2 },\n { name: 'Sostiuzione', value: 3 },\n { name: 'Segnalazione', value: 6 },\n { name: 'Rettifica', value: 7 },\n]\n\nexport interface ClipperDocumentAnchorInfo {\n documentId?: string;\n type?: number;\n typeDescription?: string;\n text?: string;\n title?: string;\n description?: string;\n uri: string;\n ordinal?: string;\n score?: number;\n chunk?: number;\n veryRelevant?: boolean;\n value?: string;\n level?: number;\n}\n\nexport interface ClipperDocumentRelevantChunkHit {\n id?: number;\n score: string;\n text: string;\n index?: number;\n uri?: string;\n}\n\nexport interface ClipperDocumentRelevants {\n items: ClipperDocumentAnchorInfo[];\n hits: number;\n hit: number;\n chunks: number;\n}\n\n\n/** One delivery of a shared note by email, and whether the recipient opened it. */\nexport interface ClipperDocumentNoteTracking {\n id: string;\n userMailId: number;\n email?: string;\n sentDate: Date;\n openDate?: Date;\n}\n\n/**\n * A shared note attached to a document.\n *\n * The library never creates or edits one -- notes belong to the application that owns the\n * account -- but the API attaches them to documents and to `metadata()`, so the shape is\n * declared here rather than letting a consumer read a response it cannot see.\n */\nexport interface ClipperDocumentNote {\n id?: number;\n teamId?: string;\n teamTitle?: string;\n documentId?: string;\n documentTitle?: string;\n color?: string;\n name?: string;\n note?: string;\n trackings?: ClipperDocumentNoteTracking[];\n trackingsCount?: number;\n trackingsOpenedCount?: number;\n expiringDate?: Date;\n isExpired?: boolean;\n isTroubled?: boolean;\n isMenuOpen?: boolean;\n isOver?: boolean;\n created?: Date;\n}\n\nexport interface ClipperDocumentInfo {\n id?: string;\n documentId?: string;\n documentCode?: string;\n model?: number;\n modelName?: string;\n module?: number;\n moduleName?: string;\n channelName?: string;\n group?: string;\n title2?: string;\n title1?: string;\n tags?: string;\n topics?: string;\n number?: string;\n date?: Date;\n description?: string;\n publishingDate?: Date;\n pictureId?: string;\n sourceNumber?: string;\n sourceDate?: Date;\n source?: string;\n sector?: string;\n origin?: string;\n originDescription?: string;\n author?: string;\n anchors?: ClipperDocumentAnchorInfo[];\n notes?: ClipperDocumentNote[];\n chunks?: ClipperDocumentAnchorInfo[];\n chunksList?: string;\n taxonomy?: string;\n taxonomyPath?: string;\n info?: string;\n isRead?: boolean;\n isExportable?: boolean;\n isCommented?: boolean;\n isJuris?: boolean;\n isOver?: boolean;\n isTrial?: boolean;\n isNew?: boolean;\n isExpired?: boolean;\n isExpiring?: boolean;\n isMenuOpen?: boolean;\n applicableFromDate?: Date;\n validityState?: number;\n validFromDate?: Date;\n validUntilDate?: Date;\n validityDescription?: string;\n validityInfo?: string;\n expiringDate?: Date;\n expiringDescription?: string;\n expiringInfo?: string;\n popularity?: number;\n part?: number;\n primaryId?: string;\n primaryDescription?: string;\n primaryModel?: number;\n hasPrimary?: boolean;\n secondaryId?: string;\n bag?: any;\n lastUpdate?: string;\n\n}\n\nexport class ClipperSearchResult {\n days?: string;\n interval?: string;\n items?: ClipperDocumentInfo[];\n facets?: ClipperSearchFacetsSnapshot = new ClipperSearchFacetsSnapshot();\n tags?: NameValueItem<string>[];\n total?: number;\n terms?: string[];\n searchInfo?: any;\n searchParams?: ClipperSearchParams = new ClipperSearchParams();\n snapshotMode?: ClipperQueryReferencesMode;\n}\n\nexport interface ClipperSearchFacet {\n type: number;\n typeName: string;\n title: string;\n value: string;\n count: number;\n}\n\nexport interface ClipperSearchFacetGroup {\n name: string;\n selectedValue?: string;\n selectedValueDescription?: string;\n values: ClipperSearchFacet[];\n index: number;\n}\n\nexport interface ClipperSearchFacetsResult {\n interval?: string;\n facets?: ClipperSearchFacet[][];\n total?: number;\n}\n\n\nexport class ClipperSearchFacetsSnapshot {\n groups: ClipperSearchFacetGroup[] = [];\n usedGroups: ClipperSearchFacetGroup[] = [];\n hasFacets: boolean = false;\n hasMoreFacets: boolean = false;\n hasTooManyResults: boolean = false;\n sector?: string;\n author?: string;\n anchor?: string;\n type?: string;\n reason?: string;\n fromDate?: Date;\n toDate?: Date;\n interval?: string;\n}\n\nexport interface ClipperSearchCalendarSnapshotMonth {\n days: number[];\n monthShortName: string;\n monthName: string;\n month: number;\n year: number;\n total: number;\n expired: number;\n expiring: number;\n}\n\nexport class ClipperSearchCalendarSnapshotResult {\n months?: ClipperSearchCalendarSnapshotMonth[];\n}\n\n\n\nexport enum ClipperSort {\n Default = 0,\n Relevance = 1,\n DateAsc = 2,\n DateDesc = 3,\n SourceDateAsc = 7,\n SourceDateDesc = 8,\n Popularity = 5\n}\n\nexport enum ClipperQueryReferencesMode {\n ReferencesIn = 1,\n ReferencesOut = 2,\n ChangesIn = 3,\n ChangesOut = 5,\n Juris = 4\n}\n\nexport enum ClipperFacet {\n Sector = 1,\n Year = 2,\n DocumentType = 3,\n Topic = 4,\n Article = 5,\n Author = 6,\n Reason = 95\n}\n\nexport interface ClipperOTPInfo {\n code: string;\n canPreview?: boolean;\n canEmbed?: boolean;\n}\n\nexport enum ClipperExportDocumentsFormat {\n Deafault = 1,\n iCalendar = 2\n}\n\nexport interface ClipperExportDocumentsParams {\n query?: ClipperSearchParams;\n ids: string[];\n format?: ClipperExportDocumentsFormat;\n}\n\nexport interface ClipperSendDocumentsByEmailParams extends SendToDialogResult {\n ids?: string[];\n isCalendar?: boolean;\n public?: string;\n userNoteId?: number;\n}\n\n\nexport interface ClipperDocumentStructure {\n id: string;\n title: string;\n items?: ClipperDocumentAnchorInfo[];\n}\n\n\nexport interface ClipperSearchFilter {\n container: ClipperDocumentContainer;\n models: number[];\n sectors: string[];\n regions: string[];\n notifications: number[];\n isEnabled: boolean;\n isActive: boolean;\n}\nexport interface ClipperTaxonomyParams {\n countItems: boolean;\n model: ClipperModel;\n userFilters?: ClipperSearchFilter[];\n}\n\nexport interface ClipperUserSearch {\n id?: number;\n userId?: number;\n name?: string;\n module?: ClipperModule;\n data?: string;\n}\n\nexport interface ClipperUserWorkingDocument {\n userId?: number;\n documentId?: string;\n documentDescriptor?: string;\n title1?: string;\n title2?: string;\n timestamp?: string;\n}\n\nexport interface ClipperDeleteWorkingDocumentsParams {\n documentIds: string[];\n deleteAll: boolean;\n}\n\n\nexport interface ClipperUserTrialInfo {\n channelName: string;\n expiringDate: Date;\n remainingDocuments: number;\n}\n\nexport interface ClipperDocumentUpdateStateParams {\n documentIds: string[];\n isRead: boolean;\n}\n\nexport interface ClipperDashboardModelItem {\n id: ClipperModel;\n newItems: number;\n unreadItems: number;\n}\n\nexport interface ClipperDashboardItem {\n id: ClipperModule;\n models: ClipperDashboardModelItem[];\n newItems: number;\n unreadItems: number;\n lastUpdated?: string;\n}\n\nexport class ClipperDashboard {\n items = signal<ClipperDashboardItem[]>([]);\n isTrial?: boolean = false;\n expiredDeadlines?: number;\n expiringDeadlines?: number;\n documentUpdates?: number;\n unreadItems: Signal<[ClipperModule, number][]> = computed(() => {\n const states: [ClipperModule, number][] = [];\n states.push([ClipperModule.News, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.News)?.unreadItems ?? 0]);\n states.push([ClipperModule.GazzetteBollettiniEFontiDiverse, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.GazzetteBollettiniEFontiDiverse)?.unreadItems ?? 0]);\n states.push([ClipperModule.Giurisprudenza, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.Giurisprudenza)?.unreadItems ?? 0]);\n states.push([ClipperModule.ModificheAbrogazioniERinvii, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.ModificheAbrogazioniERinvii)?.unreadItems ?? 0]);\n //states.push([ClipperModule.AllerteAlimentari, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.AllerteAlimentari)?.unreadItems ?? 0]);\n states.push([ClipperModule.Approfondimenti, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.Approfondimenti)?.unreadItems ?? 0]);\n states.push([ClipperModule.QuesitiECasiRisolti, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.QuesitiECasiRisolti)?.unreadItems ?? 0]);\n return states;\n });\n unreadItemsByModel: Signal<[ClipperModel, number][]> = computed(() => {\n const states: [ClipperModel, number][] = [];\n this.items().forEach(item => {\n if (item.models) {\n item.models.forEach(itemModel => {\n states.push([itemModel.id, itemModel.unreadItems]);\n });\n } else {\n if (item.id == ClipperModule.News) {\n states.push([ClipperModel.News, item.unreadItems]);\n } else if (item.id == ClipperModule.GazzetteBollettiniEFontiDiverse) {\n states.push([ClipperModel.AggiornamentoNormativo, item.unreadItems]);\n } else if (item.id == ClipperModule.QuesitiECasiRisolti) {\n states.push([ClipperModel.Quesiti, item.unreadItems]);\n // } else if (item.id == ClipperModule.AllerteAlimentari) {\n // states.push([ClipperModel.AllerteAlimentari, item.unreadItems]);\n } else if (item.id == ClipperModule.Approfondimenti) {\n states.push([ClipperModel.Articoli, item.unreadItems]);\n } else if (item.id == ClipperModule.ModificheAbrogazioniERinvii) {\n states.push([ClipperModel.Coordinamento, item.unreadItems]);\n } else if (item.id == ClipperModule.Giurisprudenza) {\n states.push([ClipperModel.Juris, item.unreadItems]);\n }\n }\n })\n return states;\n });\n\n /**\n * Increments (or decrements) the unread item counter for the given module or model.\n * Triggers a signal update so computed values and templates react to the change.\n * @param module - The `ClipperModule` whose counter should be adjusted.\n * @param model - Optional `ClipperModel` for sub-module granularity.\n * @param increment - Amount to add (use a negative value to decrement).\n */\n updateUnreadItems(module: ClipperModule, model: ClipperModel | undefined, increment: number): void {\n if (model) {\n for (const item of this.items()) {\n const itemModel = item.models?.find(x => x.id === model);\n if (itemModel) {\n itemModel.unreadItems += increment;\n break;\n }\n }\n }\n const item = this.items().find((x: ClipperDashboardItem) => x.id === module);\n if (item) {\n item.unreadItems += increment;\n }\n this.items.update(values => [...values]);\n }\n\n /**\n * Returns the unread-item count for the given module, or for a specific model within it.\n * @param module - The `ClipperModule` to query.\n * @param model - Optional `ClipperModel` for sub-module granularity.\n * @returns Number of unread items, or `0` when none are found.\n */\n getUnreadItems(module: ClipperModule, model?: ClipperModel): number {\n if (model) {\n return this.unreadItemsByModel().find((x: [ClipperModel, number]) => x[0] === model)?.[1] ?? 0;\n }\n return this.unreadItems().find((x: [ClipperModule, number]) => x[0] === module)?.[1] ?? 0;\n }\n\n /**\n * Returns the sum of unread items across all tracked modules.\n * @returns Total unread-item count.\n */\n getTotalUnreadItems(): number {\n return this.unreadItems().reduce((acc, item) => acc + item[1], 0);\n }\n}\n\nexport interface ClipperTopicInfo {\n id: string;\n name: string;\n}\n\nexport enum ClipperCalendarState {\n Open = 101,\n Expired = 102,\n Expiring = 103,\n Closed = 104\n}\n\nexport const ClipperCalendarStates: NameValueItem<ClipperCalendarState>[] = [\n { name: 'Aperte', value: ClipperCalendarState.Open },\n { name: 'Chiuse', value: ClipperCalendarState.Closed },\n { name: 'Scadute', value: ClipperCalendarState.Expired },\n { name: 'Imminenti', value: ClipperCalendarState.Expiring }\n]\n\n\nexport class ClipperCalendarSearchParams {\n id?: string;\n fromDate?: Date;\n toDate?: Date;\n teamId?: string;\n text?: string;\n month?: number;\n year?: number;\n sortDescending?: boolean;\n state?: ClipperCalendarState;\n recurrentOnly?: boolean;\n first?: number = 0;\n count?: number = 15\n}\n\nexport class ClipperUtils {\n\n /**\n * Returns `true` when the given model corresponds to a readable document type\n * (i.e., can be opened in the document viewer).\n * @param model - The `ClipperModel` to test.\n */\n static isClipperModelReadable(model: ClipperModel): boolean {\n return model !== ClipperModel.Unknown &&\n model !== ClipperModel.NormativaVigente &&\n model !== ClipperModel.Scadenze &&\n model !== ClipperModel.Segnalazioni\n }\n\n /**\n * Returns the `ClipperModule` that owns the given document, derived from its model type.\n * @param item - The document info object to inspect.\n * @returns The matching `ClipperModule`, or `undefined` when the model has no direct module mapping.\n */\n static getClipperModuleFromModel(item: ClipperDocumentInfo): ClipperModule | undefined {\n switch (item.model) {\n // case ClipperModel.AllerteAlimentari: return ClipperModule.AllerteAlimentari;\n case ClipperModel.News: return ClipperModule.News;\n case ClipperModel.Articoli:\n case ClipperModel.Juris: return ClipperModule.Approfondimenti;\n case ClipperModel.Quesiti: return ClipperModule.QuesitiECasiRisolti;\n case ClipperModel.Coordinamento: return ClipperModule.ModificheAbrogazioniERinvii;\n case ClipperModel.GiurisprudenzaRecente: return ClipperModule.Giurisprudenza;\n case ClipperModel.NormativaVigente: return ClipperModule.NormativaVigente;\n case ClipperModel.Segnalazioni:\n case ClipperModel.Scadenze: return ClipperModule.ScadenzeESegnalazioni;\n case ClipperModel.AggiornamentoNormativo: return ClipperModule.GazzetteBollettiniEFontiDiverse;\n }\n return undefined;\n }\n\n\n /**\n * Returns the display name for the given `ClipperModuleGroup`.\n * @param value - The module group enum value to look up.\n * @returns The group display name, or an empty string when not found.\n */\n static getClipperModuleGroupName(value: ClipperModuleGroup): string {\n return ClipperModuleGroups.find(n => n.value === value)?.name ?? '';\n }\n\n /**\n * Returns the list of `ClipperModule` items belonging to the given module group.\n * @param value - The module group to filter by.\n * @returns Array of matching `NameValueItem` entries.\n */\n static getClipperModuleGroupItems(value: ClipperModuleGroup): NameValueItem<ClipperModule>[] {\n return ClipperModules.filter(n => n.parentValue === value);\n }\n\n /**\n * Tests a set of modules against the currently selected modules in the search filter.\n * @param modules - The modules to test.\n * @param currentModules - The currently selected modules to check against.\n * @param mode - Matching strategy:\n * `1` = all and only the specified modules (exact set),\n * `2` = all specified modules must be present,\n * `3` = at least one specified module must be present.\n * @returns `true` when the condition defined by `mode` is satisfied.\n */\n private static checkModules(\n modules: ClipperModule[],\n currentModules: NameValueItem<ClipperModule>[],\n mode: number = 1\n ): boolean {\n let ok = false;\n if (mode === 1) {\n // All and only the elements specified\n for (const current of currentModules) {\n ok = modules.findIndex(x => x === current.value) !== -1;\n if (!ok) break;\n }\n ok = ok && modules.length >= currentModules.length;\n } else if (mode === 2) {\n // All the elements specified\n for (const mod of modules) {\n ok = currentModules.findIndex(x => x.value === mod) !== -1;\n if (!ok) break;\n }\n } else if (mode === 3) {\n // Any of the specified elements\n for (const mod of modules) {\n ok = currentModules.findIndex(x => x.value === mod) !== -1;\n if (ok) break;\n }\n }\n return ok;\n }\n\n /**\n * Returns the sort options available for the given module selection.\n * Includes the relevance option only when the query contains free text.\n * @param modules - Currently selected modules (used to determine which date axes are available).\n * @param params - Current search params (checked for free-text content).\n * @returns Array of applicable `NameValueItem<ClipperSort>` sort options.\n */\n static getClipperAvailableSortOptions(\n modules?: NameValueItem<ClipperModule>[],\n params?: ClipperSearchParams): NameValueItem<ClipperSort>[] {\n const options: NameValueItem<ClipperSort>[] = [\n { name: \"Data decrescente\", value: ClipperSort.DateDesc },\n { name: \"Data crescente\", value: ClipperSort.DateAsc },\n { name: \"Data fonte decrescente\", value: ClipperSort.SourceDateDesc },\n { name: \"Data fonte crescente\", value: ClipperSort.SourceDateAsc },\n { name: \"Rilevanza\", value: ClipperSort.Relevance },\n //{ name: \"Popolarità\", value: ClipperSort.Popularity },\n ];\n const sortOptions: NameValueItem<ClipperSort>[] = []\n if (params && ClipperSearchUtils.isTextQuery(params)) {\n sortOptions.push(options[4]);\n }\n if (modules && modules.length > 0) {\n if (this.checkModules([ClipperModule.GazzetteBollettiniEFontiDiverse], modules, 1)) {\n sortOptions.push(options[2]);\n sortOptions.push(options[3]);\n } else if (this.checkModules([ClipperModule.NormativaVigente], modules, 1) ||\n this.checkModules([ClipperModule.Giurisprudenza], modules, 1)) {\n sortOptions.push(options[0]);\n sortOptions.push(options[1]);\n } else {\n sortOptions.push(options[0]);\n sortOptions.push(options[1]);\n }\n } else {\n sortOptions.push(options[0]);\n sortOptions.push(options[1]);\n }\n return sortOptions;\n }\n\n}\n\nexport class ClipperSearchUtils {\n\n /**\n * Resets all filter fields of a `ClipperSearchParams` instance to their default (empty) values.\n * @param params - The search-params object to clear.\n */\n static clear(params: ClipperSearchParams): void {\n params.sector = undefined;\n params.sectors = undefined;\n params.author = undefined;\n params.authors = undefined;\n params.topic = undefined;\n params.topics = undefined;\n params.taxonomy = undefined;\n params.taxonomies = undefined;\n params.taxonomyPath = undefined;\n params.taxonomyNode = undefined;\n params.number = undefined;\n params.fromDate = undefined;\n params.toDate = undefined;\n params.year = undefined;\n params.sourceNumber = undefined;\n params.source = undefined;\n params.sourceFromDate = undefined;\n params.sourceToDate = undefined;\n params.sourceYear = undefined;\n params.tags = undefined;\n params.text = undefined;\n params.titleOnly = false;\n params.type = undefined;\n params.types = undefined;\n params.showUnreadDocumentsOnly = false;\n params.showCommentedDocumentsOnly = false;\n params.showNotAbrogatedDocumentsOnly = false;\n if (!params.channels || params.channels.length === 0) {\n params.channels = [...ClipperChannels];\n }\n params.changeReason = undefined;\n params.changedNumber = undefined;\n params.changedYear = undefined;\n params.changedTitle = undefined;\n params.changedId = undefined;\n params.modifierId = undefined;\n params.modifierNumber = undefined;\n params.modifierYear = undefined;\n params.modifierTitle = undefined;\n params.model = undefined;\n params.models = undefined;\n params.module = undefined;\n params.modules = undefined;\n }\n\n\n /**\n * Returns the list of `ClipperModel` values that correspond to the given modules.\n * @param modules - The selected modules to map to their underlying data models.\n * @returns Array of `ClipperModel` values matching the provided modules.\n */\n static getModulesModels(modules?: NameValueItem<ClipperModule>[]): ClipperModel[] {\n const models: ClipperModel[] = [];\n if (modules && modules.length > 0) {\n modules.forEach(module => {\n switch (module.value) {\n case ClipperModule.ScadenzeESegnalazioni:\n [ClipperModel.Scadenze, ClipperModel.Segnalazioni].forEach(x => models.push(x));\n break;\n case ClipperModule.QuesitiECasiRisolti:\n models.push(ClipperModel.Quesiti);\n break;\n case ClipperModule.News:\n models.push(ClipperModel.News);\n break;\n case ClipperModule.Approfondimenti:\n models.push(ClipperModel.Articoli);\n break;\n //case ClipperModule.AllerteAlimentari:\n // models.push(ClipperModel.AllerteAlimentari);\n // break;\n case ClipperModule.GazzetteBollettiniEFontiDiverse:\n models.push(ClipperModel.AggiornamentoNormativo);\n break;\n case ClipperModule.GiurisprudenzaRecente:\n models.push(ClipperModel.GiurisprudenzaRecente);\n break;\n case ClipperModule.NormativaVigente:\n models.push(ClipperModel.NormativaVigente);\n break;\n case ClipperModule.ModificheAbrogazioniERinvii:\n models.push(ClipperModel.Coordinamento);\n break;\n case ClipperModule.Giurisprudenza:\n models.push(ClipperModel.Juris);\n break;\n }\n });\n }\n return models;\n }\n\n /**\n * Returns `true` when the search params contain a non-empty free-text query.\n * @param params - The search params to inspect.\n */\n static isTextQuery(params: ClipperSearchParams): boolean {\n return params.text != null && params.text.length > 0;\n }\n\n /**\n * Wraps `q` in quotes (if not already quoted) and appends it to `queries`.\n * @param q - A single search term to process.\n * @param queries - The accumulated query string to append to.\n * @returns The updated `queries` string.\n */\n private static concatTextQuery(q: string, queries: string): string {\n if (q && q.length > 1) {\n if ((q[0] === '+' || q[0] === '-') && q[1] !== '\"') {\n q = q[0] + '\"' + q.substring(1) + '\"';\n } else if (q[0] !== '\"') {\n q = \"\\\"\" + q + \"\\\"\";\n }\n queries += q + \" \";\n }\n return queries;\n }\n\n /**\n * Normalises a comma-separated search string by wrapping each term in quotes.\n * @param text - The raw search input to normalise.\n * @returns The normalised query string, or `undefined` when `text` is empty.\n */\n static normalizeTextQuery(text: string): string | undefined {\n if (!text || text.length === 0) return undefined;\n let q: string = '';\n let queries: string = '';\n for (let i = 0; i < text.length; i++) {\n if (text[i] === ',') {\n queries = this.concatTextQuery(q.trim(), queries);\n q = '';\n }\n else q += text[i];\n }\n queries = this.concatTextQuery(q.trim(), queries);\n return queries;\n }\n\n /**\n * Wraps the entire query in double quotes when it contains no boolean operators\n * (`\"`, `+`, or ` -`), making it an exact-phrase search.\n * @param text - The query string to normalise.\n * @returns The normalised query string.\n */\n static normalizeTextQuery2(text: string): string {\n if (!text) return text;\n // Add quotes only if there are no quoted elements, no '+', and no ' -'\n if (!text.includes('\"') && !text.includes('+') && !text.includes(' -')) {\n return '\"' + text + '\"';\n }\n return text;\n }\n\n\n /**\n * Maps a letter rank (`A`, `B`, or any other) to a numeric relevance threshold.\n * @param value - The single-character rank string.\n * @returns `0.751` for `'A'`, `0.71` for `'B'`, `0.51` for anything else.\n */\n static getRankFromChar(value: string): number {\n switch (value.toUpperCase()) {\n case 'A': return 0.751;\n case 'B': return 0.71;\n default:\n return 0.51;\n }\n }\n}","/**\n * HTML text helpers with no dependencies of their own.\n *\n * Not exported from `public_api`: it is an internal detail of this entry point. `escapeHtml` lives\n * in a file of its own, and not next to the service that needs it, because `ClipperCoreService`\n * has to escape and everything else in its neighbourhood imports it back -- a helper that turns\n * text into text has no business being in that cycle.\n */\n\n/**\n * Escapes the five characters that give HTML its meaning, so a string can be shown inside markup\n * without being parsed as markup.\n *\n * It exists because the dialogs bind their content with `[innerHTML]` through the `safeHtml` pipe,\n * which calls `bypassSecurityTrustHtml`: whatever reaches them is rendered, not escaped. Text that\n * comes from outside the application -- an API error message above all -- has to be neutralised\n * before it gets there, and any formatting the application itself wants must be added afterwards.\n * The overloads keep the caller's own optionality: escaping a string gives a string back, so a\n * call site that already knew it had text does not suddenly have to handle `undefined`.\n * @param value - The raw text to escape.\n * @returns The escaped text, or `undefined` when there was nothing to escape.\n */\nexport function escapeHtml(value: string): string;\nexport function escapeHtml(value: string | undefined): string | undefined;\nexport function escapeHtml(value?: string): string | undefined {\n if (value === undefined || value === null) return undefined;\n return String(value)\n .replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\"', '"')\n .replaceAll(\"'\", \"'\");\n}\n","import { HttpInterceptorFn, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { BroadcastService, ErrorInfo } from '@arsedizioni/ars-utils/core';\nimport { EMPTY, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { ClipperServiceFlags } from '../definitions';\nimport { escapeHtml } from '../html';\nimport { ClipperMessages } from '../messages';\n\n/** How many more times a request is sent when the API is not there. */\nconst UNAVAILABLE_RETRIES = 2;\n\n/** How long to wait before each of those retries, in milliseconds. */\nconst UNAVAILABLE_RETRY_DELAY = 5000;\n\n/** The statuses a server that is being replaced answers with, plus the one it cannot answer at all. */\nconst UNAVAILABLE_STATUSES = [0, 500, 502, 503, 504];\n\n/** Minimum milliseconds between consecutive generic error broadcasts. */\nconst ERROR_DEBOUNCE_MS = 5000;\n\n/**\n * Returns whether the failure means the API is not there, rather than the request being wrong.\n *\n * The discriminator is the body, not the status. An error raised INSIDE the application arrives\n * through `ApiExceptionHandler` wrapped in the usual `ApiResult` envelope, so it has been seen,\n * parsed and acted upon: replaying it would run whatever it already ran a second time. A server\n * that is being replaced answers with IIS's own HTML, or with nothing at all — no envelope — and\n * that request never reached any handler. Only the second kind is retried, which is what makes it\n * safe to retry a POST.\n * @param error - The raw HTTP error object.\n * @returns True when the request is worth sending again.\n */\nfunction isServiceUnavailable(error: any): boolean {\n if (!UNAVAILABLE_STATUSES.includes(parseInt(error?.status ?? '0'))) return false;\n\n const body = error?.error;\n const isApiEnvelope = !!body\n && typeof body === 'object'\n && !(body instanceof Blob)\n && ('success' in body || 'problem' in body);\n\n return !isApiEnvelope;\n}\n\n/**\n * Returns whether the URL is an authentication endpoint where a 401 is a normal outcome — wrong\n * credentials, a pending code challenge, a rejected assertion — rather than an expired session.\n *\n * The list covers the whole Clipper 7.5 sign-in surface, including the ways in that this library\n * does not itself offer: a host application registers one interceptor for every call it makes to\n * the API, its own passkey and recovery flows included.\n * @param url - The request URL.\n * @returns True when the URL is a login/confirm/otp/oauth/passkey endpoint.\n */\nfunction isAuthEndpoint(url: string): boolean {\n return url.includes('/session/login')\n || url.includes('/session/confirm')\n || url.includes('/session/otp')\n || url.includes('/session/oauth')\n || url.includes('/passkeys/login')\n || url.includes('/passkeys/request-options');\n}\n\n/**\n * Returns whether the failure means the session is gone rather than the request being wrong.\n * @param errorStatus - The numeric HTTP status code.\n * @param url - The request URL.\n * @returns True when the client must be sent back to the sign-in page.\n */\nfunction isSessionExpired(errorStatus: number, url: string): boolean {\n return errorStatus === 401 && !isAuthEndpoint(url);\n}\n\n/**\n * Returns whether the URL is the silent link probe, whose failures must never reach the user.\n *\n * `/session/status` runs unconditionally at every bootstrap, including for users who never linked\n * Clipper at all. When the API is unreachable, reporting that failure would show \"Clipper non\n * disponibile\" to somebody who never asked Clipper for anything: the probe simply stays unanswered\n * and the link state keeps whatever the stored hint says.\n * @param url - The request URL.\n * @returns True when the URL is the status probe.\n */\nfunction isStatusProbe(url: string): boolean {\n return url.includes('/session/status');\n}\n\n/**\n * Resolves a user-facing error message based on the HTTP status code.\n *\n * There is no branch for status 0 any more, nor for the 5xx family: a request that got no answer,\n * or an answer with no `ApiResult` envelope, never reaches here — it is retried and then reported\n * as `ERROR_UNAVAILABLE`. What is left is the failures the API itself described.\n *\n * Whatever the API sends is escaped before anything else happens to it. The dialog that shows this\n * string binds it with `[innerHTML]` through a pipe that calls `bypassSecurityTrustHtml`, so an\n * error message echoing back something a user had typed would be rendered as markup rather than\n * read as text. The paragraph breaks in the default branch are applied AFTER the escape, which is\n * exactly why they survive it and nothing else does.\n * @param error - The raw HTTP error object.\n * @param errorStatus - The numeric HTTP status code.\n * @returns A localised error message, safe to render as HTML.\n */\nfunction resolveErrorMessage(error: any, errorStatus: number): string {\n const message = escapeHtml(error?.error?.message ?? error?.message);\n switch (errorStatus) {\n case 401:\n // A 401 that reaches here comes from a login attempt: wrong credentials, a rejected\n // assertion, or an account whose access was revoked.\n return message ?? 'Credenziali non valide o accesso non abilitato.';\n case 403:\n return 'Non hai i permessi necessari per eseguire l\\'operazione richiesta.';\n case 429:\n return message ?? 'Troppe richieste consecutive. Aspetta qualche secondo.';\n default:\n return (message ?? 'Impossibile eseguire l\\'operazione richiesta.')\n .replaceAll('\\r\\n', '</p><p>');\n }\n}\n\n/**\n * Builds the Clipper auth HTTP interceptor.\n *\n * Attaches the credentials and the service-worker bypass header to every request aimed at the\n * Clipper API, and turns HTTP failures into broadcast messages — no UI dependency here.\n *\n * Takes the Clipper base URI and the service flags directly as arguments, captured in the closure,\n * so it never injects `ClipperService`: registering it does not pull the whole Clipper service into\n * the eager bundle. The debounce and the two notification latches live in that same closure, so two\n * applications registering two interceptors never share them.\n *\n * ## What the statuses mean\n *\n * Aligned with the Clipper 7.5 API on 2026-08-25. The meaning of the status codes changed with the\n * API: failures used to arrive as `200 OK` with `success: false`, and this interceptor had to guess.\n * Now the status is the truth — a 401 on an already-authenticated request means the session is\n * gone, a 403 means the permission is missing, and a 5xx means the server broke, which is not the\n * same thing at all and must not sign the user out.\n *\n * A dead session is broadcast as `ClipperMessages.ERROR_401`, for the host application to handle\n * centrally; every other failure stays a `ClipperMessages.ERROR` carrying a message. The two are\n * separate because they call for opposite things: one returns to the sign-in page, the other shows\n * a dialog and leaves the user where they are.\n *\n * Between them sits the third case, which is neither: the API is being replaced. A deployment\n * answers with a 5xx that has no `ApiResult` envelope, or does not answer at all, for the few\n * seconds the process takes to come back. That is not worth a dialog and not worth a redirect\n * either, so the request is simply sent again — twice, five seconds apart — and only if the third\n * attempt fails too does it become `ClipperMessages.ERROR_UNAVAILABLE`.\n *\n * `ClipperServiceFlags.NotifySystemErrors` still governs one narrow case, and only that one: a 5xx\n * that DOES carry an envelope, i.e. a server error the API itself described. Without the flag it is\n * swallowed, as it always was in this library.\n *\n * Register it with `withInterceptors`:\n * @example\n * provideHttpClient(withInterceptors([\n * clipperAuthInterceptor(environment.serviceUri, ClipperServiceFlags.NotifySystemErrors),\n * ]))\n *\n * @param serviceUri - Base URI of the Clipper service; only requests starting with it are handled.\n * @param flags - Service flags (e.g. NotifySystemErrors). Defaults to None.\n * @returns An `HttpInterceptorFn` ready to register.\n */\nexport function clipperAuthInterceptor(\n serviceUri: string,\n flags: ClipperServiceFlags = ClipperServiceFlags.None\n): HttpInterceptorFn {\n\n /** Timestamp of the last generic error shown, used to debounce repeated error messages. */\n let lastErrorTime = -1;\n\n /**\n * Whether the unavailable-API notification has already been sent. A deployment fails every\n * request in flight, and one notification is enough. Re-armed on the next successful response.\n */\n let unavailableNotified = false;\n\n /**\n * Whether the session-expiry notification has already been sent. Prevents a storm of dialogs when\n * several in-flight requests fail at once; re-armed on the next successful response.\n */\n let sessionExpiredNotified = false;\n\n /**\n * Broadcasts a generic, user-facing error for a Clipper HTTP failure, debounced.\n * @param error - The raw error value thrown by the HTTP layer.\n * @param errorStatus - The numeric HTTP status code.\n * @param broadcastService - The broadcast service for the current request.\n * @returns void\n */\n function notifyError(error: unknown, errorStatus: number, broadcastService: BroadcastService): void {\n // A 5xx the API described itself is the one case the flag still governs.\n if (errorStatus >= 500 && (flags & ClipperServiceFlags.NotifySystemErrors) === 0) return;\n\n const now = Date.now();\n if (now - lastErrorTime <= ERROR_DEBOUNCE_MS) return;\n lastErrorTime = now;\n\n broadcastService.sendMessage(\n ClipperMessages.ERROR,\n {\n message: resolveErrorMessage(error, errorStatus),\n title: \"Errore in Clipper\",\n errorStatus,\n service: serviceUri\n } as ErrorInfo\n );\n }\n\n // The interceptor itself. Runs in an injection context, so `inject()` works.\n return (request, next) => {\n if (!request.url.startsWith(serviceUri)) {\n return next(request);\n }\n\n const broadcastService = inject(BroadcastService);\n\n const authenticatedRequest = request.clone({\n withCredentials: true,\n setHeaders: {\n 'ngsw-bypass': 'ngsw-bypass',\n 'X-Client-Id': sessionStorage.getItem('clipper_client_id') ?? ''\n }\n });\n\n return next(authenticatedRequest).pipe(\n // An API that is being replaced is not an error to show, it is a wait: two more attempts,\n // five seconds apart. Anything else is rethrown on the spot, so a request that genuinely\n // failed still fails immediately.\n retry({\n count: UNAVAILABLE_RETRIES,\n delay: error => isServiceUnavailable(error)\n ? timer(UNAVAILABLE_RETRY_DELAY)\n : throwError(() => error)\n }),\n tap(event => {\n // A successful response means the session is valid again, and the API is back: re-arm both\n // notifiers.\n if (event instanceof HttpResponse) {\n sessionExpiredNotified = false;\n unavailableNotified = false;\n }\n }),\n catchError((error: any) => {\n // Which request this was is read from the request, not from `error.url`: a failure with no\n // response — the browser refusing the connection while the API restarts — carries no URL\n // at all. Everything that gets here is a Clipper request anyway: the others returned\n // before the pipe was built.\n const errorStatus = parseInt(error?.status ?? '0');\n\n if (isStatusProbe(authenticatedRequest.url)) {\n // The silent probe stays silent: its caller reads the outcome from the stream, nobody\n // else needs to hear about it.\n } else if (isServiceUnavailable(error)) {\n // Three attempts over ten seconds and the API is still not answering. There is nothing\n // left to retry, so the host application is told once, however many requests were in\n // flight.\n if (!unavailableNotified) {\n unavailableNotified = true;\n broadcastService.sendMessage(ClipperMessages.ERROR_UNAVAILABLE);\n }\n } else if (isSessionExpired(errorStatus, authenticatedRequest.url)) {\n // Expired or invalidated session on an authenticated request. Notified once: several\n // in-flight requests failing together is how a single expiry becomes a wall of dialogs.\n if (!sessionExpiredNotified) {\n sessionExpiredNotified = true;\n broadcastService.sendMessage(ClipperMessages.ERROR_401);\n }\n } else {\n // Any other failure, including a 401 from a login attempt.\n notifyError(error, errorStatus, broadcastService);\n }\n\n // Consumed, not rethrown — as in Clipper 7.5. The failure has been reported on the bus, and\n // rethrowing it a second time only gave every subscriber its own chance to report it again.\n // A caller that must know how a request ended reads `ApiResult.success`; one that subscribes\n // to a failing request now simply completes without emitting.\n return EMPTY;\n })\n );\n };\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Service, inject } from '@angular/core';\nimport { ApiResult, BroadcastService, SplashService } from '@arsedizioni/ars-utils/core';\nimport { Observable, catchError, finalize, map, of, throwError } from 'rxjs';\nimport { ClipperLoginResult, ClipperOTPInfo, ClipperSessionStatus, ClipperUserInfo } from '../definitions';\nimport { ClipperMessages } from '../messages';\nimport { ClipperCoreService } from './core.service';\n\n/**\n * Authentication: password login, e-mailed code confirmation, logout and session restore.\n * The login context, the channels and the logged-in flag live in `ClipperCoreService`.\n *\n * Aligned with the Clipper 7.5 API on 2026-08-25. Everything here now goes through `/session/*`\n * and an HttpOnly cookie: there is no bearer token, no `remember` credential the API can replay,\n * and no OAuth token acquired by the caller — the external-provider flow is a full-page redirect\n * handled server-side, and all that reaches this service is the `/session/me` call on the way back.\n *\n * This is a deliberately reduced subset of what the Clipper application itself does. Passkeys and\n * the passwordless recovery code (`/session/otp`) are not here: a library whose job is showing\n * documents signs in with a password, and an application that offers the other ways in owns them.\n */\n@Service()\nexport class ClipperLoginService {\n\n private readonly httpClient = inject(HttpClient);\n private readonly broadcastService = inject(BroadcastService);\n private readonly splashService = inject(SplashService);\n private readonly core = inject(ClipperCoreService);\n\n /** Whether {@link initialize} has already run. */\n private initialized = false;\n\n /**\n * Gets the signed-in account.\n * @returns The current {@link ClipperUserInfo}, or `undefined` when there is no session.\n */\n get user(): ClipperUserInfo | undefined { return this.core.user; }\n\n\n ////\n // BOOTSTRAP\n ////\n\n /**\n * Establishes the session state at bootstrap by asking the API — the only party that can read the\n * HttpOnly cookie — whether this browser still holds one.\n *\n * Called by `ClipperService.initialize`, right after `ClipperCoreService.initialize`, so a\n * consumer gets the restore for free and never has to know this method exists.\n *\n * The probe now runs UNCONDITIONALLY, where it used to run only when a stored context existed.\n * The stored context is just a hint — \"this browser signed in at some point\" — and the cookie can\n * outlive it: local storage cleared while the month-long cookie stayed put made this library\n * declare \"no link\" with a perfectly valid session in the browser. The API is the only source of\n * truth on the matter, so it is asked every time.\n *\n * A host application that drives its own return from an external provider, or that starts on its\n * own sign-in page, should call `core.setLoggedIn(false)` before bootstrapping rather than let\n * this race its own restore.\n * @returns void\n */\n initialize(): void {\n if (this.initialized) return;\n this.initialized = true;\n\n this.core.loggingIn.set(true);\n this.restoreSession();\n }\n\n /**\n * Asks `/session/status` whether this browser holds a live session, and hydrates the context\n * through {@link me} when it does.\n *\n * The probe is silent by construction: `/session/status` never answers 401, so a visitor who\n * never signed in — or a cookie whose session has died — comes back as `connected: false` with no\n * error broadcast and no dialog. Only then is the stale stored context cleared, so the `loggedIn`\n * signal tells the truth at every bootstrap.\n *\n * Nothing is cleared on a transport failure, and that is deliberate: an unreachable API is not\n * proof of a dead session — the proxy may have answered 502, the device may be offline — and\n * clearing on any of those would sign the user out with a perfectly valid cookie.\n * @returns void\n */\n private restoreSession(): void {\n // Whether the probe handed over to `/session/me`, which then owns lowering `loggingIn`.\n let restoring = false;\n this.status()\n .pipe(finalize(() => { if (!restoring) { this.core.loggingIn.set(false); } }))\n .subscribe({\n next: r => {\n if (r?.success && r.value?.connected) {\n restoring = true;\n this.me()\n .pipe(finalize(() => this.core.loggingIn.set(false)))\n .subscribe({\n next: m => {\n if (m?.success) {\n this.broadcastService.sendMessage(ClipperMessages.LOGIN_COMPLETED);\n }\n },\n // Consumed so the rethrown error is not reported a second time as an unhandled one.\n error: () => { }\n });\n } else if (this.core.loggedIn()) {\n // The stored context outlived its session: drop it, or the next bootstrap would keep\n // claiming a session that is gone.\n this.core.clear(true);\n }\n },\n // Transport failure: keep the stored hint, the next bootstrap will ask again.\n error: () => { }\n });\n }\n\n\n ////\n // SESSION\n ////\n\n /**\n * Authenticates the user with email and password.\n *\n * Nothing is replayed from a stored credential any more: the former \"remember me\" token, which\n * let the API sign a caller in from something kept for sixty days, is gone. A login always starts\n * from what the user just typed.\n * @param email - The user's email address.\n * @param password - The user's password.\n * @returns An observable emitting the API result wrapping the login result.\n */\n login(email?: string, password?: string): Observable<ApiResult<ClipperLoginResult>> {\n this.splashService.setMessage('Accesso in corso...');\n return this.httpClient\n .post<ApiResult<ClipperLoginResult>>(\n this.core.serviceUri + '/session/login',\n { user: email ?? '', password: password ?? '' })\n .pipe(\n catchError(err => throwError(() => err)),\n map(r => {\n if (r.success) {\n if (r.value.requiresMfa) {\n // Notify the login is pending an e-mailed code.\n this.broadcastService.sendMessage(ClipperMessages.LOGIN_PENDING, {});\n } else {\n this.completeLogin(r.value);\n }\n }\n return r;\n }),\n );\n }\n\n /**\n * Confirms a pending e-mailed code challenge, which establishes the session.\n *\n * The address travels with the code because the API stores each code under the account it was\n * issued to: a code alone is not redeemable, which is what stops a guessed code from opening\n * whatever session happens to be pending. It also keeps the code out of the URL, where it used to\n * sit — `/login/confirm/{code}` put it in the path, and therefore in the server logs and in the\n * browser history.\n * @param code - The one-time confirmation code provided to the user.\n * @param email - The address the code was sent to.\n * @returns An observable emitting the API result wrapping the login result.\n */\n confirm(code: string, email?: string): Observable<ApiResult<ClipperLoginResult>> {\n return this.httpClient\n .post<ApiResult<ClipperLoginResult>>(\n this.core.serviceUri + '/session/confirm',\n { email: email, code: code })\n .pipe(\n catchError(err => throwError(() => err)),\n map(r => {\n if (r.success) {\n this.completeLogin(r.value);\n }\n return r;\n }),\n );\n }\n\n /**\n * Logs the user out on the server and clears the local state.\n * @returns An observable that emits once the logout has been processed.\n */\n logout(): Observable<ApiResult<unknown>> {\n return this.httpClient\n .post<ApiResult<unknown>>(this.core.serviceUri + '/session/logout', {})\n .pipe(\n finalize(() => this.core.clear(true)),\n catchError(() => of({ success: false } as ApiResult<unknown>)));\n }\n\n /**\n * Asks the API whether this browser holds a live session, without ever failing with a 401: the\n * route is anonymous and answers `connected: false` to a caller with no session. This is the one\n * honest way to know the link state — the auth cookie is HttpOnly and belongs to the API's host,\n * so it cannot be read from here, and its presence would prove nothing anyway, since the session\n * also lives server-side and may have been revoked or evicted.\n * @returns An observable emitting the API result wrapping the session status.\n */\n status(): Observable<ApiResult<ClipperSessionStatus>> {\n return this.httpClient\n .get<ApiResult<ClipperSessionStatus>>(this.core.serviceUri + '/session/status');\n }\n\n /**\n * Reads the current session from the server, which resolves it from the auth cookie claims\n * without touching the database. Used to restore the state after a page refresh instead of\n * trusting what local storage holds, and to close an external-provider round-trip.\n * @returns An observable emitting the current session.\n */\n me(): Observable<ApiResult<ClipperLoginResult>> {\n return this.httpClient\n .get<ApiResult<ClipperLoginResult>>(this.core.serviceUri + '/session/me', { withCredentials: true })\n .pipe(\n map(r => {\n if (r.success) {\n this.completeLogin(r.value, false);\n }\n return r;\n }),\n );\n }\n\n /**\n * Finalises the login flow after an authentication, a code confirmation or a session restore:\n * writes the context into the shared state, raises the logged-in signal, rebuilds the channel\n * list and announces `LOGIN_COMPLETED`.\n *\n * `loggingIn` is deliberately left alone. Whoever raised it lowers it — {@link restoreSession}\n * for a refresh, the host application for an external-login round-trip — because lowering it\n * here would drop the splash the instant the response arrived, before anything was on screen.\n * @param result - The login result returned by the API.\n * @param notify - Whether to broadcast `LOGIN_COMPLETED`. Defaults to `true`.\n * @returns void\n */\n private completeLogin(result: ClipperLoginResult, notify: boolean = true): void {\n this.core.updateContext(result);\n this.core.setLoggedIn(true);\n this.core.initializeChannels();\n if (notify) {\n this.broadcastService.sendMessage(ClipperMessages.LOGIN_COMPLETED);\n }\n }\n\n /**\n * Requests a new one-time password used to authorise a binary download.\n * @param id - The repository ID of the binary the OTP is generated for.\n * @returns An observable emitting the API result wrapping the generated OTP info.\n */\n newOTP(id: string): Observable<ApiResult<ClipperOTPInfo>> {\n return this.httpClient.get<ApiResult<ClipperOTPInfo>>(\n this.core.serviceUri + '/otp/new/?id=' + id,\n );\n }\n\n\n ////\n // CONTEXT (re-published from ClipperCoreService for consumer convenience)\n ////\n\n /**\n * Persists the current login context to `localStorage`.\n * Delegates to `ClipperCoreService.storeContext()`.\n * @returns void\n */\n storeContext(): void {\n this.core.storeContext();\n }\n\n /**\n * Clears every trace of the current session on this device: the stored context, the logged-in\n * signal and the session-storage keys. Does NOT call the server — use {@link logout} for that.\n * Delegates to `ClipperCoreService.clear()`.\n * @param clearOAuthToken - Whether to drop the legacy OAuth token too. Defaults to `true`.\n * @returns void\n */\n clear(clearOAuthToken: boolean = true): void {\n this.core.clear(clearOAuthToken);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, Injector, Service, Signal, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ApiResult, BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { EMPTY } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport {\n ClipperAvailableChannel,\n ClipperChannels,\n ClipperDashboard,\n ClipperDocumentInfo,\n ClipperLoginInfo,\n ClipperLoginResult,\n ClipperSearchResult,\n ClipperServiceFlags,\n ClipperUserInfo,\n} from '../definitions';\nimport { escapeHtml } from '../html';\nimport { ClipperMessages } from '../messages';\nimport { ClipperLoginService } from './login.service';\n\n/**\n * Shared state and bootstrap for the Clipper application.\n *\n * Holds every piece of state used by more than one feature service (service URI,\n * flags, login context, dashboard, working-documents bag, channels and the various\n * UI signals) plus the low-level helpers that mutate that state.\n *\n * The feature services (`ClipperLoginService`, `ClipperDocumentsService`, ...) inject\n * this service to read shared state and call shared helpers. `ClipperService` (the\n * barrel/facade) re-exports the state declared here.\n */\n@Service()\nexport class ClipperCoreService {\n\n private readonly httpClient = inject(HttpClient);\n private readonly destroyRef = inject(DestroyRef);\n private readonly broadcastService = inject(BroadcastService);\n /** Used to lazily resolve feature services inside `initialize`, avoiding circular DI. */\n private readonly injector = inject(Injector);\n\n private broadcastInitialized = false;\n\n private _appUri?: string;\n /** @returns The URI of the Clipper web application, or `undefined` if not set. */\n get appUri(): string | undefined {\n return this._appUri;\n }\n\n private _serviceUri: string = '';\n /** @returns The base URI of the Clipper REST API. */\n get serviceUri(): string {\n return this._serviceUri;\n }\n\n private _flags: ClipperServiceFlags = ClipperServiceFlags.None;\n /** @returns The active feature flags. */\n get flags(): ClipperServiceFlags {\n return this._flags;\n }\n\n private _loginInfo?: ClipperLoginInfo;\n /**\n * Lazily loads the login context from `localStorage` on first access.\n * @returns The current login context, or `undefined` if not authenticated.\n */\n get loginInfo(): ClipperLoginInfo | undefined {\n if (!this._loginInfo) {\n const loginInfo = localStorage.getItem('clipper_context');\n if (loginInfo) {\n try {\n this._loginInfo = JSON.parse(loginInfo) as ClipperLoginInfo;\n } catch { }\n }\n }\n return this._loginInfo;\n }\n\n /**\n * Gets the signed-in account.\n * @returns The current {@link ClipperUserInfo}, or `undefined` when there is no session.\n */\n get user(): ClipperUserInfo | undefined { return this.loginInfo?.context; }\n\n /**\n * Seeded from the stored context, which is the only trace a session leaves on this device: the\n * auth cookie is HttpOnly and unreadable from here. It means \"there WAS a session\", never \"there\n * is one\" -- `ClipperLoginService.initialize` validates it against `/session/me` before it is\n * trusted, and a failure there ends as a 401 that clears the session.\n *\n * It used to be seeded from a `clipper_oauth_token` session-storage key, which nothing has\n * written since the provider flow moved server-side: the flag was therefore false at every\n * bootstrap and the whole restore path could never run.\n */\n private readonly _loggedIn = signal<boolean>(localStorage.getItem('clipper_context') !== null);\n public readonly loggedIn: Signal<boolean> = this._loggedIn.asReadonly();\n public readonly loggingIn = signal<boolean>(false);\n public readonly snapshot = signal<ClipperSearchResult | undefined>(undefined);\n public readonly supportsRS = signal<boolean>(false);\n public readonly referencesSnapshot = signal<ClipperSearchResult | undefined>(undefined);\n public readonly dashboard: ClipperDashboard = new ClipperDashboard();\n public readonly bag = signal<ClipperDocumentInfo[]>([]);\n public readonly bagTotal: Signal<number> = computed(() => this.bag().length);\n public readonly visible = signal<boolean>(false);\n\n public readonly availableChannels = signal<ClipperAvailableChannel[]>([]);\n public readonly activeChannels: Signal<ClipperAvailableChannel[]> = computed(() => {\n return this.availableChannels()?.filter(x => !x.suspended && !x.disabled && x.active === true);\n });\n public readonly allowTags = signal<boolean>(false);\n\n\n ////\n // SHARED MUTATORS\n ////\n\n /**\n * Ensures a login-info object exists and returns it for further mutation.\n * Replaces the inline `if (!this._loginInfo) { ... }` guards now that the field\n * is private to this service.\n *\n * Reads through the getter, never the field: the context is loaded from storage lazily, so a\n * caller that mutates before anyone has read would find the field empty and start from a blank\n * object, silently dropping a perfectly good stored context.\n * @returns The existing login-info object, or a freshly created empty one.\n */\n ensureLoginInfo(): ClipperLoginInfo {\n if (!this.loginInfo) {\n this._loginInfo = { context: undefined };\n }\n return this._loginInfo!;\n }\n\n /**\n * Sets the logged-in state. The backing signal is read-only to consumers, so the\n * feature services use this method instead.\n * @param value - The new logged-in state.\n */\n setLoggedIn(value: boolean): void {\n this._loggedIn.set(value);\n }\n\n /**\n * Persists the current login context to `localStorage`, but only when there is a context to\n * persist. A login-info object with no `context` is not a session: it is the empty shell\n * `ensureLoginInfo` hands out before anything has been written into it, and storing it would leave\n * behind a key whose mere presence makes the next bootstrap declare the user logged in.\n */\n storeContext(): void {\n // Through the getter, never the field: the context is loaded from storage lazily, so a caller\n // that stores before anyone has read would otherwise find the field empty and DELETE a\n // perfectly good stored context.\n if (!this.user) {\n // Nothing to store. Falling through would call `JSON.stringify(undefined)`, whose result is\n // the value `undefined`, which local storage writes as the nine-letter STRING \"undefined\" --\n // a key that exists, parses to nothing, and makes the next bootstrap believe a session was\n // left behind here. Removing it says the truth instead.\n localStorage.removeItem('clipper_context');\n return;\n }\n localStorage.setItem('clipper_context', JSON.stringify(this._loginInfo));\n }\n\n /**\n * Updates the stored login context with the values from a fresh login result.\n *\n * Each half is written only when the server actually sent it. An absent `context` or `settings`\n * means \"not carried by this response\", never \"the user has none\": overwriting on absence is what\n * made a page refresh empty the channel list, because `/session/me` answers without the settings\n * and this method wrote that emptiness -- through `storeContext`, onto the disk, where it survived\n * the reload it was born in. An EMPTY array is a different matter and is stored as it comes: that\n * is the server saying the subscription really is gone.\n * @param result - The login result containing the new user context and channel settings.\n */\n updateContext(result: ClipperLoginResult): void {\n const info = this.ensureLoginInfo();\n if (result.context) {\n info.context = result.context;\n }\n if (result.settings) {\n info.channels = result.settings;\n }\n this.storeContext();\n }\n\n /**\n * Rebuilds the `availableChannels` signal from the current login context.\n */\n initializeChannels(): void {\n if (this.loginInfo) {\n const channels: ClipperAvailableChannel[] = [];\n this.loginInfo.channels?.forEach(n => {\n const channelSubscription = this.user?.channels?.find(x => x.channel === n.channelId);\n n.isSuspended = channelSubscription?.isSuspended === true;\n const channel = ClipperChannels.find(x => x.value === n.channelId) as ClipperAvailableChannel;\n if (channel) {\n channel.disabled = !n.isActive;\n channel.suspended = n.isSuspended === true;\n channel.active = n.isActive === true && n.isEnabled === true;\n channels.push(channel);\n }\n });\n this.availableChannels.set(channels);\n }\n }\n\n /**\n * Resets the login state, clears the stored login info, and broadcasts `LOGOUT_COMPLETED`.\n */\n reset(): void {\n // Clear login info, in memory AND on disk: `loginInfo` re-reads local storage whenever the\n // field is empty, so leaving the stored copy behind would resurrect the previous user.\n this._loginInfo = undefined;\n localStorage.removeItem('clipper_context');\n // Logged out\n this._loggedIn.set(false);\n // Reset channels\n this.availableChannels.set([]);\n // Notify\n this.broadcastService.sendMessage(ClipperMessages.LOGOUT_COMPLETED);\n }\n\n /**\n * Clears all session-storage authentication keys and resets the login state.\n * @param clearOAuthToken - When `true`, the OAuth bearer token is also removed.\n */\n clear(clearOAuthToken: boolean = false): void {\n // Clear local storage\n sessionStorage.removeItem('clipper_auth');\n sessionStorage.removeItem('clipper_oauth');\n if (clearOAuthToken) {\n sessionStorage.removeItem('clipper_oauth_token');\n }\n\n // Reset login\n this.reset();\n }\n\n\n ////\n // BOOTSTRAP\n ////\n\n /**\n * Initialises the service with the API base URI, optional app URI, and feature flags.\n * @param serviceUri - The base URI of the Clipper REST API.\n * @param appUri - Optional URI of the Clipper web application (used to build document links).\n * @param flags - Feature flags that control service behaviour. Defaults to `ClipperServiceFlags.None`.\n */\n initialize(\n serviceUri: string,\n appUri?: string,\n flags: ClipperServiceFlags = ClipperServiceFlags.None,\n ) {\n\n // Create unique client and machine id\n if (!sessionStorage.getItem('clipper_client_id')) {\n sessionStorage.setItem('clipper_client_id',\n (flags && ClipperServiceFlags.Embedded) > 0\n ? 'embedded'\n : SystemUtils.generateUUID());\n }\n\n // Initialize\n this._serviceUri = serviceUri;\n this._appUri = appUri;\n this._flags = flags;\n\n // React to message broadcasting\n if (!this.broadcastInitialized) {\n this.broadcastInitialized = true;\n this.broadcastService.getMessage()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(message => {\n if (message.id === ClipperMessages.LOGOUT) {\n if (this.loggedIn()) {\n this.injector.get(ClipperLoginService).logout().subscribe(r => {\n if (!r.success) {\n if (r.message) {\n this.broadcastService.sendMessage(ClipperMessages.ERROR,\n // The surrounding markup is ours; the server's message is escaped, because\n // the dialog renders this string as HTML.\n { message: \"<p>\" + escapeHtml(r.message) + \"</p><br><br><hr><p class='small'><i>Per eliminare la configurazione di Clipper accedere a:<br><b>menu > personalizza > collegamenti</b></i></p>\" });\n }\n } else {\n if ((this.flags & ClipperServiceFlags.DisplayConnectionStateMessages) > 0) {\n this.broadcastService.sendMessage(ClipperMessages.SUCCESS_TOAST,\n { message: \"Disconnesso da Clipper\", icon: 'power_off', duration: 1500 });\n }\n // Empty bag\n this.bag.set([]);\n }\n });\n } else {\n // No session to close server-side, but the device must still be left clean.\n this.clear(true);\n }\n }\n });\n }\n\n // A page refresh is NOT handled here. Announcing LOGIN_COMPLETED from a stored context would\n // declare a session before anyone has asked the server whether it is still alive, and the\n // consumer would then treat the inevitable 401 as \"your session just expired\" rather than as a\n // bootstrap that never got off the ground. `ClipperLoginService.initialize` -- which\n // `ClipperService.initialize` runs right after this method -- validates the context against\n // `/session/me` first and announces the login only if it holds.\n }\n\n /**\n * Ping\n */\n ping() {\n this.httpClient.get<ApiResult<number>>(\n this._serviceUri + '/ping?nocache=' + SystemUtils.generateUUID()\n )\n .pipe(catchError(() => { return EMPTY }))\n .subscribe();\n }\n}\n","import { Service, inject } from '@angular/core';\nimport { BroadcastService, NameValueItem } from '@arsedizioni/ars-utils/core';\nimport {\n ClipperChannel,\n ClipperModel,\n ClipperModule,\n} from '../definitions';\nimport { ClipperMessages } from '../messages';\nimport { ClipperCoreService } from './core.service';\n\n/**\n * The two pieces of account state the document views actually move: which channels are\n * active, and the unread counters on the dashboard.\n *\n * Everything else an account can do — password reset and recovery, settings, channel\n * activation towards the server, trial info, user links, loading the dashboard — belongs to\n * the application that owns the account, not to a library whose job is showing documents.\n * It was removed on 2026-08-25 together with the archive, calendar and collaboration worlds;\n * a product that needs those endpoints calls them itself.\n *\n * What is left touches no HTTP: both methods only mutate the shared state in\n * `ClipperCoreService` and announce the change on the broadcast bus.\n */\n@Service()\nexport class ClipperAccountService {\n\n private readonly broadcastService = inject(BroadcastService);\n private readonly core = inject(ClipperCoreService);\n\n /**\n * Toggles the active state of available channels based on the supplied selection list.\n * @param values - The selected channel items; channels absent from this list are deactivated.\n */\n updateChannels(values: NameValueItem<ClipperChannel>[]): void {\n this.core.availableChannels().forEach(channel => {\n if (!channel.disabled) {\n channel.active = values?.findIndex(x => x.value === channel.value) !== -1;\n }\n });\n }\n\n /**\n * Adjusts the unread-item counter for the given module and broadcasts a dashboard update.\n * @param module - The Clipper module whose counter should be adjusted.\n * @param model - Optional document model to further scope the counter update.\n * @param increment - The signed increment to apply (use negative values to decrement).\n */\n updateUnreadItems(module: ClipperModule, model?: ClipperModel, increment?: number): void {\n increment ??= 0;\n if (increment !== 0) {\n this.core.dashboard.updateUnreadItems(module, model, increment);\n }\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_DASHBOARD_UPDATED);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Service, inject } from '@angular/core';\nimport { ApiResult, BroadcastService, FolderTree, NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport {\n ClipperCalendarSearchParams,\n ClipperDocumentInfo,\n ClipperDocumentNote,\n ClipperDocumentStructure,\n ClipperDocumentUpdateStateParams,\n ClipperExportDocumentsParams,\n ClipperModule,\n ClipperQueryReferencesMode,\n ClipperReferencesSearchParams,\n ClipperSearchCalendarSnapshotResult,\n ClipperSearchFacetsResult,\n ClipperSearchParams,\n ClipperSearchResult,\n ClipperSendDocumentsByEmailParams,\n ClipperTaxonomyParams,\n ClipperUserSearch,\n ClipperUserWorkingDocument,\n} from '../definitions';\nimport { ClipperMessages } from '../messages';\nimport { ClipperCoreService } from './core.service';\n\n/**\n * Document search, references, export and metadata, plus the dashboard counters,\n * taxonomy/topics/tags lookups, the working-documents \"bag\" and saved searches.\n */\n@Service()\nexport class ClipperDocumentsService {\n\n private readonly httpClient = inject(HttpClient);\n private readonly broadcastService = inject(BroadcastService);\n private readonly core = inject(ClipperCoreService);\n\n\n /////\n // DOCUMENTS\n /////\n\n /**\n * Queries documents matching the given search parameters.\n * @param params - The document search parameters.\n * @returns An observable emitting the API result wrapping the search result.\n */\n query(params: ClipperSearchParams) {\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents',\n params\n );\n }\n\n /**\n * Retrieves the facets for a document query.\n * @param params - The document search parameters.\n * @returns An observable emitting the API result wrapping the search facets.\n */\n queryFacets(params: ClipperSearchParams) {\n return this.httpClient.post<ApiResult<ClipperSearchFacetsResult>>(\n this.core.serviceUri + '/documents/facets',\n params\n );\n }\n\n /**\n * Updates the state of one or more documents.\n * @param params - The document state update parameters.\n * @returns An observable emitting the API result wrapping the number of updated documents.\n */\n updateState(params: ClipperDocumentUpdateStateParams) {\n return this.httpClient.post<ApiResult<number>>(\n this.core.serviceUri + '/documents/state/update',\n params\n );\n }\n\n /**\n * Exports a single document in PDF format.\n * @param id - The ID of the document to export.\n * @returns An observable emitting the PDF binary content as a blob.\n */\n exportPdf(id: string) {\n return this.httpClient.get(\n this.core.serviceUri + '/documents/export/' + id,\n { responseType: 'blob' }\n );\n }\n\n /**\n * Exports a document list (query or selected items), or exports deadlines as ICS.\n * @param params - The export parameters.\n * @returns An observable emitting the exported content as a blob.\n */\n export(params: ClipperExportDocumentsParams) {\n return this.httpClient.post(\n this.core.serviceUri + '/documents/export',\n params,\n { responseType: 'blob' }\n );\n }\n\n /**\n * Sends document links by email.\n * @param params - The send-by-email parameters including recipients and documents.\n * @returns An observable emitting the API result wrapping the number of sent items.\n */\n sendTo(params: ClipperSendDocumentsByEmailParams) {\n return this.httpClient.post<ApiResult<number>>(\n this.core.serviceUri + '/documents/send',\n params\n );\n }\n\n /**\n * Retrieves the full document report page.\n * @param id - The ID of the document.\n * @returns An observable emitting the report content as a blob.\n */\n report(id: string) {\n return this.httpClient.get(\n this.core.serviceUri + '/documents/report/' + id,\n { responseType: 'blob' }\n );\n }\n\n /**\n * Gets the comment associated with a document.\n * @param id - The ID of the document.\n * @returns An observable emitting the API result wrapping the comment text.\n */\n comment(id: string) {\n return this.httpClient.get<ApiResult<string>>(\n this.core.serviceUri + '/documents/comment/' + id\n );\n }\n\n /**\n * Gets the info for a document.\n * @param id - The ID of the document.\n * @returns An observable emitting the API result wrapping the document info.\n */\n info(id: string) {\n return this.httpClient.get<ApiResult<ClipperDocumentInfo>>(\n this.core.serviceUri + '/documents/info/' + id\n );\n }\n\n /**\n * Gets the structure (index) of a document.\n * @param id - The ID of the document.\n * @returns An observable emitting the API result wrapping the document structure.\n */\n index(id: string) {\n return this.httpClient.get<ApiResult<ClipperDocumentStructure>>(\n this.core.serviceUri + '/documents/structure/' + id\n );\n }\n\n /**\n * Gets the last-update metadata for a document.\n *\n * The response carries two things, not one: the last-update string and the shared notes attached\n * to the document. The second was long left undeclared here, so a consumer of this library could\n * not see data the API had already sent it.\n * @param id - The ID of the document.\n * @returns An observable emitting the API result wrapping the last update string and its notes.\n */\n metadata(id: string) {\n return this.httpClient.get<ApiResult<{ item1?: string; item2?: ClipperDocumentNote[] }>>(\n this.core.serviceUri + '/documents/metadata/' + id\n );\n }\n\n /**\n * Queries document references, changes or jurisprudence depending on the requested mode.\n * @param params - The references search parameters; `mode` defaults to `ReferencesIn`.\n * @returns An observable emitting the API result wrapping the search result, or `null` for an unsupported mode.\n */\n references(params: ClipperReferencesSearchParams) {\n let mode = params.mode;\n if (!mode) mode = ClipperQueryReferencesMode.ReferencesIn;\n switch (mode) {\n case ClipperQueryReferencesMode.ReferencesIn:\n case ClipperQueryReferencesMode.ReferencesOut:\n params.mode = mode;\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents/references',\n params\n );\n case ClipperQueryReferencesMode.ChangesIn:\n case ClipperQueryReferencesMode.ChangesOut:\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents/changes',\n params\n );\n case ClipperQueryReferencesMode.Juris:\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents/juris',\n params\n );\n default:\n return null;\n }\n }\n\n /**\n * Retrieves the facets for a document references query.\n * @param params - The references search parameters; `mode` defaults to `ReferencesIn`.\n * @returns An observable emitting the API result wrapping the search facets, or `null` for an unsupported mode.\n */\n referencesFacets(params: ClipperReferencesSearchParams) {\n let mode = params.mode ?? ClipperQueryReferencesMode.ReferencesIn;\n switch (mode) {\n case ClipperQueryReferencesMode.ReferencesIn:\n case ClipperQueryReferencesMode.ReferencesOut:\n params.mode = mode;\n return this.httpClient.post<ApiResult<ClipperSearchFacetsResult>>(\n this.core.serviceUri + '/documents/references/facets',\n params\n );\n case ClipperQueryReferencesMode.ChangesIn:\n case ClipperQueryReferencesMode.ChangesOut:\n return this.httpClient.post<ApiResult<ClipperSearchFacetsResult>>(\n this.core.serviceUri + '/documents/changes/facets',\n params\n );\n case ClipperQueryReferencesMode.Juris:\n return this.httpClient.post<ApiResult<ClipperSearchFacetsResult>>(\n this.core.serviceUri + '/documents/juris/facets',\n params\n );\n default: return null;\n }\n }\n\n /**\n * Wraps document rendering to allow token refresh.\n * @returns An observable emitting the API result wrapping a boolean readiness flag.\n */\n preRender() {\n return this.httpClient.get<ApiResult<boolean>>(\n this.core.serviceUri + '/documents/pre-render?nocache=' + SystemUtils.generateUUID()\n );\n }\n\n /**\n * Gets the jurisprudence articles for a document query.\n * @param params - The document search parameters.\n * @returns An observable emitting the API result wrapping the search result.\n */\n jurisArticles(params: ClipperSearchParams) {\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents/juris/articles',\n params\n );\n }\n\n /**\n * Gets a deadlines snapshot based on the supplied deadlines.\n * @param params - The calendar search parameters.\n * @returns An observable emitting the API result wrapping the calendar snapshot result.\n */\n deadlinesSnapshot(params: ClipperCalendarSearchParams) {\n return this.httpClient.post<ApiResult<ClipperSearchCalendarSnapshotResult>>(\n this.core.serviceUri + '/documents/calendar/snapshot',\n params\n );\n }\n\n /**\n * Retrieves the taxonomy.\n * @param params - Optional taxonomy parameters. Defaults to `{ model: 0, countItems: false }`.\n * @returns An observable emitting the API result wrapping the taxonomy folder tree.\n */\n getTaxonomy(params?: ClipperTaxonomyParams) {\n return this.httpClient.post<ApiResult<FolderTree>>(\n this.core.serviceUri + '/taxonomy',\n params ?? { model: 0, countItems: false }\n );\n }\n\n /**\n * Retrieves the topics as a flat list.\n * @returns An observable emitting the API result wrapping the list of topics.\n */\n getTopics() {\n return this.httpClient.get<ApiResult<NameValueItem<string>[]>>(\n this.core.serviceUri + '/topics'\n );\n }\n\n /**\n * Retrieves the topics as a tree.\n * @returns An observable emitting the API result wrapping the topics folder tree.\n */\n getTopicsAsTree() {\n return this.httpClient.get<ApiResult<FolderTree>>(\n this.core.serviceUri + '/topics2'\n );\n }\n\n /**\n * Retrieves the tags.\n * @returns An observable emitting the API result wrapping the list of tags.\n */\n getTags() {\n return this.httpClient.get<ApiResult<NameValueItem<string>[]>>(\n this.core.serviceUri + '/tags'\n );\n }\n\n\n ///\n // BAG\n ///\n\n /**\n * Loads the working documents and populates the shared bag.\n * @returns The subscription to the working-documents request.\n */\n loadBag() {\n return this.httpClient\n .get<ApiResult<ClipperUserWorkingDocument[]>>(\n this.core.serviceUri + '/documents/working'\n )\n .subscribe(\n r => {\n if (!r.success) {\n this.broadcastService.sendMessage(ClipperMessages.ERROR, { message: r.message });\n } else {\n if (r.value) {\n const items: ClipperDocumentInfo[] = [];\n r.value.forEach(n => {\n if (n.documentDescriptor) {\n const documentInfo = JSON.parse(n.documentDescriptor);\n if (documentInfo) {\n if (!n.documentId) {\n n.documentId = documentInfo.DocumentId || documentInfo.Id;\n }\n n.title1 = documentInfo.Title1 ?? documentInfo.Title2;\n n.title2 = documentInfo.Title1 ? documentInfo.Title2 : undefined;\n }\n n.documentDescriptor = undefined;\n items.push(n);\n }\n });\n this.core.bag.set(items);\n }\n }\n });\n }\n\n /**\n * Adds one or more documents to the working documents bag.\n * @param documentIds - The IDs of the documents to add.\n * @returns The subscription to the add-to-bag request.\n */\n addToBag(documentIds: string[]) {\n return this.httpClient\n .post<ApiResult<ClipperUserWorkingDocument[]>>(\n this.core.serviceUri + '/documents/working/add',\n { documentIds: documentIds }\n )\n .subscribe((r: ApiResult<ClipperUserWorkingDocument[]>) => {\n // A failure needs no broadcast here: `clipperAuthInterceptor` already turns an expired\n // session into an `ERROR_401` message and reports every other status the same way.\n if (r.success) {\n if (r.value) {\n const newItems: ClipperDocumentInfo[] = [];\n r.value.forEach(n => {\n if (n.documentDescriptor) {\n const documentInfo = JSON.parse(n.documentDescriptor);\n if (documentInfo) {\n n.documentId = documentInfo.DocumentId || documentInfo.Id;\n n.title1 = documentInfo.Title1 ?? documentInfo.Title2;\n n.title2 = documentInfo.Title1 ? documentInfo.Title2 : null;\n }\n n.documentDescriptor = undefined;\n newItems.push(n);\n }\n });\n if (newItems.length > 0) {\n this.core.bag.update((values: any) => [...values, ...newItems]);\n }\n this.broadcastService.sendMessage(\n ClipperMessages.SUCCESS_TOAST,\n { message: \"Operazione completata con successo.\", icon: 'check', duration: 1500 });\n }\n }\n });\n }\n\n /**\n * Removes a document from the working documents bag.\n * @param documentId - The ID of the document to remove.\n * @returns The subscription to the remove-from-bag request.\n */\n removeFromBag(documentId: string) {\n return this.httpClient\n .post<ApiResult<number>>(\n this.core.serviceUri + '/documents/working/delete',\n { documentIds: [documentId] }\n )\n .subscribe((r: ApiResult<number>) => {\n if (!r.success) {\n this.broadcastService.sendMessage(ClipperMessages.ERROR, { message: r.message });\n } else {\n const p = this.core.bag().findIndex((n: any) => n.documentId === documentId);\n if (p !== -1) {\n this.core.bag.update((values: any) => {\n values.splice(p, 1);\n return [...values];\n });\n this.broadcastService.sendMessage(\n ClipperMessages.SUCCESS_TOAST,\n { message: \"Operazione completata con successo.\", icon: 'check', duration: 1500 });\n }\n }\n });\n }\n\n /**\n * Clears all working documents from the bag.\n * @returns The subscription to the clear-bag request.\n */\n clearBag() {\n return this.httpClient\n .post<ApiResult<number>>(\n this.core.serviceUri + '/documents/working/delete',\n { deleteAll: true }\n )\n .subscribe((r: ApiResult<number>) => {\n if (!r.success) {\n this.broadcastService.sendMessage(ClipperMessages.ERROR, { message: r.message });\n } else {\n this.core.bag.set([]);\n this.broadcastService.sendMessage(\n ClipperMessages.SUCCESS_TOAST,\n { message: \"Operazione completata con successo.\", icon: 'check', duration: 1500 });\n }\n });\n }\n\n /**\n * Retrieves the saved searches for the given module.\n * @param module - The Clipper module whose saved searches to load.\n * @returns An observable emitting the API result wrapping the list of saved searches.\n */\n loadSearches(module: ClipperModule) {\n return this.httpClient\n .get<ApiResult<ClipperUserSearch[]>>(\n this.core.serviceUri + '/documents/searches/?module=' + module\n );\n }\n\n /**\n * Persists a user search configuration on the server.\n * @param params - The search configuration to save.\n * @returns An observable emitting the API result wrapping the saved search.\n */\n saveSearch(params: ClipperUserSearch) {\n return this.httpClient\n .post<ApiResult<ClipperUserSearch>>(\n this.core.serviceUri + '/documents/searches/save',\n params\n );\n }\n\n /**\n * Deletes a saved search by its ID.\n * @param id - The ID of the saved search to remove.\n * @returns An observable emitting the API result wrapping the number of deleted searches.\n */\n deleteSearch(id: number) {\n return this.httpClient\n .post<ApiResult<number>>(\n this.core.serviceUri + '/documents/searches/delete',\n { id: id }\n );\n }\n}","import { Service, Signal, WritableSignal, inject } from '@angular/core';\nimport {\n ClipperAvailableChannel,\n ClipperDashboard,\n ClipperDocumentInfo,\n ClipperLoginInfo,\n ClipperSearchResult,\n ClipperServiceFlags,\n ClipperUserInfo,\n} from '../definitions';\nimport { ClipperAccountService } from './account.service';\nimport { ClipperCoreService } from './core.service';\nimport { ClipperDocumentsService } from './documents.service';\nimport { ClipperLoginService } from './login.service';\n\n/**\n * Barrel / facade for the Clipper application.\n *\n * Exposes the feature services as named properties and re-exports the shared state\n * declared in `ClipperCoreService`. Inject `ClipperService` and reach a feature via\n * its property, e.g. `clipper.session.login(...)`, `clipper.documents.query(...)`,\n * `clipper.account.updateUnreadItems(...)`.\n */\n@Service()\nexport class ClipperService {\n\n private readonly core = inject(ClipperCoreService);\n\n /** Authentication: login/logout, e-mailed code confirmation, session restore, OTP. */\n readonly session = inject(ClipperLoginService);\n /** Document search, references, export, working-documents bag and saved searches. */\n readonly documents = inject(ClipperDocumentsService);\n /** The account state the document views move: active channels and unread counters. */\n readonly account = inject(ClipperAccountService);\n\n\n ////\n // RE-EXPORTED CORE STATE\n ////\n\n /** @returns The URI of the Clipper web application, or `undefined` if not set. */\n get appUri(): string | undefined { return this.core.appUri; }\n\n /** @returns The base URI of the Clipper REST API. */\n get serviceUri(): string { return this.core.serviceUri; }\n\n /** @returns The active feature flags. */\n get flags(): ClipperServiceFlags { return this.core.flags; }\n\n /** @returns The current login context, or `undefined` if not authenticated. */\n get loginInfo(): ClipperLoginInfo | undefined { return this.core.loginInfo; }\n\n /** @returns The signed-in account, or `undefined` when there is no session. */\n get user(): ClipperUserInfo | undefined { return this.core.user; }\n\n /** @returns A read-only signal indicating whether the user is logged in. */\n get loggedIn(): Signal<boolean> { return this.core.loggedIn; }\n\n /** @returns A signal indicating whether a login is in progress. */\n get loggingIn(): WritableSignal<boolean> { return this.core.loggingIn; }\n\n /** @returns A signal holding the current documents search snapshot. */\n get snapshot(): WritableSignal<ClipperSearchResult | undefined> { return this.core.snapshot; }\n\n /** @returns A signal indicating whether reference search is supported. */\n get supportsRS(): WritableSignal<boolean> { return this.core.supportsRS; }\n\n /** @returns A signal holding the current references search snapshot. */\n get referencesSnapshot(): WritableSignal<ClipperSearchResult | undefined> { return this.core.referencesSnapshot; }\n\n /** @returns The shared dashboard state object. */\n get dashboard(): ClipperDashboard { return this.core.dashboard; }\n\n /** @returns A signal holding the working-documents bag. */\n get bag(): WritableSignal<ClipperDocumentInfo[]> { return this.core.bag; }\n\n /** @returns A computed signal with the number of items in the bag. */\n get bagTotal(): Signal<number> { return this.core.bagTotal; }\n\n /** @returns A signal controlling the Clipper UI visibility. */\n get visible(): WritableSignal<boolean> { return this.core.visible; }\n\n /** @returns A signal holding the available channels. */\n get availableChannels(): WritableSignal<ClipperAvailableChannel[]> { return this.core.availableChannels; }\n\n /** @returns A computed signal with the currently active channels. */\n get activeChannels(): Signal<ClipperAvailableChannel[]> { return this.core.activeChannels; }\n\n /** @returns A signal indicating whether tagging is allowed. */\n get allowTags(): WritableSignal<boolean> { return this.core.allowTags; }\n\n\n ////\n // BOOTSTRAP\n ////\n\n /**\n * Initialises the application with the API base URI, optional app URI, and feature flags, then\n * validates any session that survived a page refresh.\n * @param serviceUri - The base URI of the Clipper REST API.\n * @param appUri - Optional URI of the Clipper web application (used to build document links).\n * @param flags - Feature flags that control service behaviour. Defaults to `ClipperServiceFlags.None`.\n * @returns void\n */\n initialize(\n serviceUri: string,\n appUri?: string,\n flags: ClipperServiceFlags = ClipperServiceFlags.None,\n ) {\n this.core.initialize(serviceUri, appUri, flags);\n // Second, and in this order: the core sets the base URI that `/session/status` and\n // `/session/me` are built from, and it no longer declares a session from what local storage\n // holds. Asking the API whether a session actually exists is what\n // `ClipperLoginService.initialize` does — unconditionally, since the HttpOnly cookie can\n // outlive any local hint — and doing it from here means a consumer keeps calling one method to\n // bootstrap, exactly as before.\n this.session.initialize();\n }\n\n /**\n * Pings the Clipper REST API to keep the session/token alive.\n */\n ping() {\n this.core.ping();\n }\n}\n","// Public API surface for the Clipper services.\r\n//\r\n// `ClipperService` is the facade/barrel: inject it and reach a feature via its\r\n// property (e.g. `clipper.login.login(...)`, `clipper.documents.query(...)`).\r\n// The feature and core services are exported as well so they can be injected\r\n// directly or referenced as types where needed.\r\n\r\nexport * from './clipper.service';\r\nexport * from './login.service';\r\nexport * from './documents.service';\r\nexport * from './account.service';\r\nexport * from './core.service';\r\n","/*\n * Public API Surface of @arsedizioni/ars-utils/clipper.common\n */\nexport * from './messages';\nexport * from './definitions';\nexport * from './interceptors/index';\nexport * from './services/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["catchError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-clipper.common.mjs","sources":["../../../projects/ars-utils/clipper.common/messages.ts","../../../projects/ars-utils/clipper.common/definitions.ts","../../../projects/ars-utils/clipper.common/html.ts","../../../projects/ars-utils/clipper.common/interceptors/auth.interceptor.ts","../../../projects/ars-utils/clipper.common/services/login.service.ts","../../../projects/ars-utils/clipper.common/services/core.service.ts","../../../projects/ars-utils/clipper.common/services/account.service.ts","../../../projects/ars-utils/clipper.common/services/documents.service.ts","../../../projects/ars-utils/clipper.common/services/clipper.service.ts","../../../projects/ars-utils/clipper.common/services/index.ts","../../../projects/ars-utils/clipper.common/public_api.ts","../../../projects/ars-utils/clipper.common/arsedizioni-ars-utils-clipper.common.ts"],"sourcesContent":["export const ClipperMessages = {\r\n /**\r\n * Messages\r\n */\r\n\r\n // Error\r\n ERROR: '§clipper-error', \r\n\r\n /**\r\n * The session is gone: a 401 on a request that was not a login attempt.\r\n * Emitted once per dead session by `clipperAuthInterceptor`, which re-arms on the first\r\n * good response.\r\n */\r\n ERROR_401: '§clipper-error-401',\r\n\r\n /**\r\n * The API is not answering: the interceptor has already sent the request three times over\r\n * ten seconds. Emitted once, and re-armed on the first good response.\r\n */\r\n ERROR_UNAVAILABLE: '§clipper-error-unavailable',\r\n SUCCESS: '§clipper-success',\r\n SUCCESS_TOAST: '§clipper-success-toast',\r\n\r\n // Login\r\n LOGIN_CHANGED: '§clipper-login-changed',\r\n LOGIN_COMPLETED: '§clipper-login-completed',\r\n LOGIN_PENDING: '§clipper-login-pending',\r\n LOGIN_FAILED: '§clipper-login-failed',\r\n LOGOUT: '§clipper-logout',\r\n LOGOUT_COMPLETED: '§clipper-logout-completed',\r\n LOGOUT_FAILED: '§clipper-logout-failed',\r\n\r\n // Document\r\n DOCUMENT_READ: '$clipper-document-read',\r\n DOCUMENT_NAVIGATE: '$clipper-document-navigate',\r\n DOCUMENT_NAVIGATED: '$clipper-document-navigated',\r\n DOCUMENT_SELECTED: '$clipper-document-selected',\r\n DOCUMENT_SELECTED_INNER: '$clipper-document-selected_inner',\r\n\r\n // Settings\r\n SETTINGS_CHANGED: '$clipper-settings-changed',\r\n\r\n // Commands\r\n COMMAND_WORKING_OPEN: '$clipper-command-working-documents-open',\r\n COMMAND_WORKING_ADD: '$clipper-command-working-documents-add',\r\n COMMAND_SEARCH_RESTORED: '$clipper-command-search-restored',\r\n COMMAND_SEARCH_EXECUTED: '$clipper-command-search-executed',\r\n COMMAND_SEARCH_EMPTY_RESULT: '$clipper-command-search-empty-result',\r\n COMMAND_HISTORY_OPEN: '$clipper-command-history-open',\r\n COMMAND_DASHBOARD_UPDATED: '$clipper-command-dashboard-updated',\r\n\r\n\r\n // AI\r\n AI_CONCERN_ME: '$clipper-ai-concernme',\r\n AI_EXPLAIN: '$clipper-ai-explain',\r\n AI_COMMENT: '$clipper-ai-comment',\r\n AI_NEWS: '$clipper-ai-news',\r\n\r\n // Interop\r\n INTEROP_RS_NEW_LAW: '$clipper-interop-rs-new-law',\r\n INTEROP_RS_NEW_ACTIVITY: '$clipper-interop-rs-new-activity',\r\n INTEROP_RS_USAGE_REPORT: '$clipper-interop-rs-usage-report',\r\n\r\n // Updates\r\n UPDATE_RELOAD: '§update-reload',\r\n};\r\n","import { computed, Signal, signal } from '@angular/core';\nimport { LoginResult, NameValueItem } from '@arsedizioni/ars-utils/core';\nimport { SendToDialogResult } from '@arsedizioni/ars-utils/ui';\n\n\nexport interface EditedEventArgs<T> {\n data: T;\n isNew?: boolean;\n}\n\nexport enum ClipperServiceFlags {\n None = 0,\n NotifySystemErrors = 1,\n DisplayConnectionStateMessages = 1 << 1,\n Embedded = 1 << 2\n}\n\nexport enum ClipperSelectionMode {\n None = 0,\n Single = 1,\n TwoOrMore = 2,\n Multi = 3\n}\n\n\n\nexport enum ClipperModuleGroup {\n Home = 0,\n NormativaVigente = 1,\n UltimeNovità = 2,\n ParApprofondire = 3,\n DGInfo = 4,\n Giurisprudenza = 5,\n Calendario = 11,\n Archivio = 12,\n Evolution = 201,\n Ars = 202,\n Ricerca = 99\n}\n\nexport enum ClipperModule {\n NormativaVigente = 4,\n News = 1,\n GazzetteBollettiniEFontiDiverse = 2,\n Giurisprudenza = 5,\n ModificheAbrogazioniERinvii = 3,\n ScadenzeESegnalazioni = 12,\n //AllerteAlimentari = 8,\n Approfondimenti = 6,\n QuesitiECasiRisolti = 10,\n MetodiDiAnalisi = 11,\n DGInfo = 61,\n Ricerca = 99,\n GiurisprudenzaRecente = 18\n\n}\n\nexport enum ClipperModel {\n Unknown = 0,\n AggiornamentoNormativo = 2,\n News = 3,\n Articoli = 4,\n Juris = 5,\n Quesiti = 8,\n NormativaVigente = 9,\n Scadenze = 10,\n Coordinamento = 11,\n //AllerteAlimentari = 13,\n MetodiDiAnalisi = 14,\n GiurisprudenzaRecente = 18,\n Segnalazioni = 20,\n UltimeNovità = 21\n}\n\nexport const ClipperModels: NameValueItem<number>[] = [\n { value: ClipperModel.AggiornamentoNormativo, name: \"Testi storici\" },\n { value: ClipperModel.News, name: 'News' },\n { value: ClipperModel.Articoli, name: 'Articoli' },\n { value: ClipperModel.Juris, name: 'Note a sentenza' },\n { value: ClipperModel.GiurisprudenzaRecente, name: 'Giurisprudenza' },\n { value: ClipperModel.Quesiti, name: 'Quesiti' },\n { value: ClipperModel.NormativaVigente, name: 'Normativa vigente' },\n { value: ClipperModel.Scadenze, name: 'Scadenze' },\n //{ value: ClipperModel.AllerteAlimentari, name: 'Allerte alimentari' },\n { value: ClipperModel.Coordinamento, name: 'Modifiche e abrogazioni' },\n]\n\nexport const ClipperModuleGroups: NameValueItem<number>[] = [\n { name: \"Ultime novità\", value: ClipperModuleGroup.Home },\n { name: \"Ricerca\", value: ClipperModuleGroup.Ricerca },\n { name: \"DG Info\", value: ClipperModuleGroup.DGInfo },\n { name: \"Calendario\", value: ClipperModuleGroup.Calendario },\n { name: \"Archivio\", value: ClipperModuleGroup.Archivio }\n];\n\nexport const ClipperModules: NameValueItem<number>[] = [\n { name: 'News, articoli di approfondimento e note a sentenza', shortName: 'Novità', value: ClipperModule.News },\n { name: 'Gazzette, Bollettini e fonti diverse', shortName: 'Gazzette, Bollettini e fonti diverse', value: ClipperModule.GazzetteBollettiniEFontiDiverse },\n { name: 'Giurisprudenza', shortName: 'Giurisprudenza', value: ClipperModule.Giurisprudenza },\n { name: 'Modifiche, abrogazioni e rinvii', shortName: 'Modifiche, abrogazioni e rinvii', value: ClipperModule.ModificheAbrogazioniERinvii },\n //{ name: 'Allerte alimentari', shortName: 'Allerte alimentari', value: ClipperModule.AllerteAlimentari },\n { name: 'Scadenze e segnalazioni', shortName: 'Scadenze e segnalazioni', value: ClipperModule.ScadenzeESegnalazioni },\n { name: 'Normativa vigente', shortName: 'Normativa vigente', value: ClipperModule.NormativaVigente },\n { name: 'Quesiti e casi risolti', shortName: 'Quesiti', value: ClipperModule.QuesitiECasiRisolti },\n]\n\nexport enum ClipperChannel {\n None = 0,\n LavoroEAmbiente = 1,\n SostanzeAlimentari = 2,\n MerciPericolose = 3,\n Energia = 4,\n DGInfo = 5\n}\n\nexport const ClipperChannels: NameValueItem<ClipperChannel>[] = [\n { value: ClipperChannel.LavoroEAmbiente, name: \"Lavoro e Ambiente\", header: \"LA\" },\n { value: ClipperChannel.SostanzeAlimentari, name: \"Sostanze Alimentari\", header: \"SA\" },\n { value: ClipperChannel.Energia, name: \"Energia\", header: \"E\" },\n { value: ClipperChannel.MerciPericolose, name: \"Merci Pericolose\", header: \"MP\" }\n]\n\nexport interface ClipperAvailableChannel extends NameValueItem<ClipperChannel> {\n active?: boolean;\n suspended?: boolean;\n}\n\nexport const ClipperRegions: NameValueItem<string>[] = [\n {\n value: '4RAB',\n name: 'Abruzzo',\n },\n {\n value: '4RBA',\n name: 'Basilicata',\n },\n {\n value: '4RCAL',\n name: 'Calabria',\n },\n {\n value: '4RCAM',\n name: 'Campania',\n },\n {\n value: '4REM',\n name: 'Emilia Romagna',\n },\n {\n value: '4RFVG',\n name: 'Friuli Venezia Giulia',\n },\n {\n value: '4RLA',\n name: 'Lazio',\n },\n {\n value: '4RLI',\n name: 'Liguria',\n },\n {\n value: '4RLO',\n name: 'Lombardia',\n },\n {\n value: '4RMA',\n name: 'Marche',\n },\n {\n value: '4RMO',\n name: 'Molise',\n },\n {\n value: '4RPI',\n name: 'Piemonte',\n },\n {\n value: '4RPU',\n name: 'Puglia',\n },\n {\n value: '4RSA',\n name: 'Sardegna',\n },\n {\n value: '4RSI',\n name: 'Sicilia',\n },\n {\n value: '4RTO',\n name: 'Toscana',\n },\n {\n value: '4RTAA',\n name: 'Trentino Alto Adige',\n },\n {\n value: '4RUM',\n name: 'Umbria',\n },\n {\n value: '4RVA',\n name: \"Valle D'Aosta\",\n },\n {\n value: '4RVE',\n name: 'Veneto',\n },\n {\n value: '4PAT',\n name: 'Prov. Aut. Trento',\n },\n {\n value: '4PAB',\n name: 'Prov. Aut. Bolzano',\n }\n]\n\nexport interface SectorInfo extends NameValueItem<string> {\n\n group?: string;\n channels?: string;\n sectorId?: string;\n}\n\nexport const ClipperSectors: SectorInfo[] = [\n {\n value: 'LC',\n name: 'Legislazione comunitaria',\n shortName: 'Comunitaria',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: 'LN',\n name: 'Legislazione nazionale',\n shortName: 'Nazionale',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n\n {\n value: 'LR',\n name: 'Legislazione regionale',\n shortName: 'Regionale',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RAB',\n name: ' Abruzzo',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4PAB',\n name: ' Prov. Aut. Bolzano',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RBA',\n name: ' Basilicata',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RCAL',\n name: ' Calabria',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RCAM',\n name: ' Campania',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4REM',\n name: ' Emilia Romagna',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RFVG',\n name: ' Friuli Venezia Giulia',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RLA',\n name: ' Lazio',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RLI',\n name: ' Liguria',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RLO',\n name: ' Lombardia',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RMA',\n name: ' Marche',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RMO',\n name: ' Molise',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RPI',\n name: ' Piemonte',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RPU',\n name: ' Puglia',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RSA',\n name: ' Sardegna',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RSI',\n name: ' Sicilia',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RTO',\n name: ' Toscana',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RTAA',\n name: ' Trentino Alto Adige',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4PAT',\n name: ' Prov. Aut. Trento',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RUM',\n name: ' Umbria',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RVA',\n name: \" Valle D'Aosta\",\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: '4RVE',\n name: ' Veneto',\n group: 'A',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: 'GC',\n name: 'Giurisprudenza comunitaria',\n shortName: 'Giur. comunitaria',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: 'GN',\n name: 'Giurisprudenza nazionale',\n shortName: 'Giur. nazionale',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n {\n value: 'TN',\n name: 'Normativa tecnica',\n shortName: 'Tecnica',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n /* {\n value: 'TI',\n name: 'Normativa tecnica internazionale',\n shortName: 'Tecnica internaz.',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },*/\n {\n value: 'NI',\n name: 'Normativa internazionale',\n shortName: 'Internazionale',\n group: 'S',\n channels: '|LA|SA|OP|E|',\n },\n /* {\n value: 'SN',\n name: 'Documentazione scientifica',\n shortName: 'Scientifica',\n group: 'S',\n channels: '|SA|',\n } */\n]\n\nexport const ClipperSectorTypes: NameValueItem<string>[] =\n [\n { parentValue: \"LN\", value: \"10\", name: \"Circolare Ministeriale\" },\n { parentValue: \"LN\", value: \"100\", name: \"Rettifica (naz.)\" },\n { parentValue: \"LR\", value: \"102\", name: \"Rettifica (reg.)\" },\n { parentValue: \"NI\", value: \"104\", name: \"Regolamento UNECE\" },\n { parentValue: \"SN\", value: \"105\", name: \"Documento\" },\n { parentValue: \"TN\", value: \"106\", name: \"Direttiva (Enti e Istituti)\" },\n { parentValue: \"TI\", value: \"107\", name: \"Normativa Tecnica Internazionale\" },\n { parentValue: \"LR\", value: \"11\", name: \"Circolare Pres. Giunta Reg\" },\n { parentValue: \"LC\", value: \"111\", name: \"Decisione (CEE)\" },\n { parentValue: \"LC\", value: \"112\", name: \"Decisione (CE)\" },\n { parentValue: \"LC\", value: \"113\", name: \"Decisione (UE)\" },\n { parentValue: \"LC\", value: \"114\", name: \"Decisione delegata (UE)\" },\n { parentValue: \"LC\", value: \"115\", name: \"Decisione di esecuzione (UE)\" },\n { parentValue: \"LC\", value: \"116\", name: \"Regolamento (CEE)\" },\n { parentValue: \"LC\", value: \"117\", name: \"Regolamento (CE)\" },\n { parentValue: \"LC\", value: \"118\", name: \"Regolamento (UE)\" },\n { parentValue: \"LC\", value: \"119\", name: \"Regolamento delegato (UE)\" },\n { parentValue: \"LR\", value: \"12\", name: \"Direttiva (reg.)\" },\n { parentValue: \"LC\", value: \"120\", name: \"Regolamento di esecuzione (UE)\" },\n { parentValue: \"LC\", value: \"121\", name: \"Direttiva (CEE)\" },\n { parentValue: \"LC\", value: \"122\", name: \"Direttiva (CE)\" },\n { parentValue: \"LC\", value: \"123\", name: \"Direttiva (UE)\" },\n { parentValue: \"LC\", value: \"124\", name: \"Direttiva delegata (UE)\" },\n { parentValue: \"LC\", value: \"125\", name: \"Direttiva di esecuzione (UE)\" },\n { parentValue: \"LC\", value: \"126\", name: \"Comunicazione (CE)\" },\n { parentValue: \"LC\", value: \"127\", name: \"Comunicazione (UE)\" },\n { parentValue: \"LC\", value: \"128\", name: \"Raccomandazione (CEE)\" },\n { parentValue: \"LC\", value: \"129\", name: \"Raccomandazione (CE)\" },\n { parentValue: \"LN\", value: \"13\", name: \"Comunicato (naz.)\" },\n { parentValue: \"LC\", value: \"130\", name: \"Raccomandazione (UE)\" },\n { parentValue: \"LC\", value: \"131\", name: \"Posizione Comune (CE)\" },\n { parentValue: \"LC\", value: \"132\", name: \"Posizione Comune (UE)\" },\n { parentValue: \"LC\", value: \"133\", name: \"Risoluzione\" },\n { parentValue: \"LC\", value: \"134\", name: \"Trattato\" },\n { parentValue: \"LC\", value: \"135\", name: \"Rettifica\" },\n { parentValue: \"LC\", value: \"138\", name: \"Parere\" },\n { parentValue: \"LC\", value: \"139\", name: \"Accordi (CE)\" },\n { parentValue: \"NI\", value: \"14\", name: \"Convenzione Internazionale\" },\n { parentValue: \"LC\", value: \"140\", name: \"Atti diversi (CE/UE)\" },\n { parentValue: \"GC\", value: \"141\", name: \"Sentenza (CE)\" },\n { parentValue: \"GC\", value: \"142\", name: \"Sentenza (UE)\" },\n { parentValue: \"GC\", value: \"143\", name: \"Ordinanza (CE)\" },\n { parentValue: \"GC\", value: \"144\", name: \"Ordinanza (UE)\" },\n { parentValue: \"LC\", value: \"145\", name: \"Direttiva (Euratom)\" },\n { parentValue: \"LC\", value: \"146\", name: \"Decisione (Euratom)\" },\n { parentValue: \"LC\", value: \"147\", name: \"Regolamento (Euratom)\" },\n { parentValue: \"LC\", value: \"148\", name: \"Raccomandazione (Euratom)\" },\n { parentValue: \"LN\", value: \"15\", name: \"Costituzione della Repubblica\" },\n { parentValue: \"LN\", value: \"16\", name: \"Linee guida (naz.)\" },\n { parentValue: \"LN\", value: \"17\", name: \"Circolare Commissariale\" },\n { parentValue: \"LN\", value: \"18\", name: \"Decreto Commissariale\" },\n { parentValue: \"LR\", value: \"19\", name: \"Decreto dell'Assessore Regionale\" },\n { parentValue: \"TN\", value: \"20\", name: \"Comunicato (Enti ed Istituti)\" },\n { parentValue: \"LN\", value: \"21\", name: \"Decreto Capo Provv. Stato\" },\n { parentValue: \"LN\", value: \"22\", name: \"Decreto Pres. Cons. Ministri\" },\n { parentValue: \"LR\", value: \"23\", name: \"Decreto Pres. Giunta Reg.\" },\n { parentValue: \"LR\", value: \"24\", name: \"Decreto Pres. Giunta Prov.\" },\n { parentValue: \"LN\", value: \"25\", name: \"Decreto Presidente Repubblica\" },\n { parentValue: \"LN\", value: \"26\", name: \"Documento di consultazione\" },\n { parentValue: \"LN\", value: \"27\", name: \"Decreto Legge\" },\n { parentValue: \"LN\", value: \"28\", name: \"Decreto Legge Luogotenenziale\" },\n { parentValue: \"LN\", value: \"29\", name: \"D.Lgs. Capo Provv. Stato\" },\n { parentValue: \"LN\", value: \"3\", name: \"Direttiva (naz.)\" },\n { parentValue: \"LN\", value: \"30\", name: \"D.Lgs. Governo\" },\n { parentValue: \"LR\", value: \"31\", name: \"Delib. Consiglio Prov.\" },\n { parentValue: \"LN\", value: \"32\", name: \"D.Lgs. Luogotenenziale\" },\n { parentValue: \"LN\", value: \"33\", name: \"Decreto Luogotenenziale\" },\n { parentValue: \"LN\", value: \"34\", name: \"Decreto Ministeriale\" },\n { parentValue: \"LN\", value: \"35\", name: \"Deliberazione (naz.)\" },\n { parentValue: \"LR\", value: \"36\", name: \"Delib. Consiglio Reg.\" },\n { parentValue: \"LR\", value: \"37\", name: \"Delib. Giunta Prov.\" },\n { parentValue: \"LR\", value: \"38\", name: \"Delib. Giunta Reg.\" },\n { parentValue: \"LN\", value: \"4\", name: \"Accordo\" },\n { parentValue: \"TN\", value: \"40\", name: \"Delibera (Enti ed Istituti)\" },\n { parentValue: \"GN\", value: \"41\", name: \"Decreto Penale\" },\n { parentValue: \"LN\", value: \"42\", name: \"Lettera Circolare (Comitati)\" },\n { parentValue: \"LN\", value: \"43\", name: \"Lettera Circolare Ministeriale\" },\n { parentValue: \"TN\", value: \"44\", name: \"Circolare (Enti ed Istituti)\" },\n { parentValue: \"TN\", value: \"45\", name: \"Istruzione Tecnica\" },\n { parentValue: \"LR\", value: \"46\", name: \"Circolare dell'Assessore Regionale\" },\n { parentValue: \"LN\", value: \"47\", name: \"Determinazione (naz.)\" },\n { parentValue: \"LN\", value: \"48\", name: \"Legge\" },\n { parentValue: \"LR\", value: \"49\", name: \"Legge Prov. Aut.\" },\n { parentValue: \"LR\", value: \"5\", name: \"Decreto Assessore Prov.\" },\n { parentValue: \"LR\", value: \"50\", name: \"Legge Regionale\" },\n { parentValue: \"LR\", value: \"51\", name: \"Linee guida (reg.)\" },\n { parentValue: \"TN\", value: \"52\", name: \"Regolamento (Enti ed Istituti)\" },\n { parentValue: \"TN\", value: \"53\", name: \"Fascicolo (Enti ed Istituti)\" },\n { parentValue: \"GN\", value: \"54\", name: \"Ordinanza\" },\n { parentValue: \"LR\", value: \"55\", name: \"Ordinanza Pres. Reg.\" },\n { parentValue: \"LN\", value: \"56\", name: \"Nota Ministeriale\" },\n { parentValue: \"LN\", value: \"57\", name: \"Ordinanza Ministeriale\" },\n { parentValue: \"LN\", value: \"58\", name: \"Circolare (Comitati)\" },\n { parentValue: \"TN\", value: \"59\", name: \"Lettera Circolare (Enti ed Istituti)\" },\n { parentValue: \"NI\", value: \"6\", name: \"Accordo Multilaterale\" },\n { parentValue: \"TN\", value: \"60\", name: \"Decreto (Enti ed Istituti)\" },\n { parentValue: \"LN\", value: \"61\", name: \"Decreto del Capo del Governo\" },\n { parentValue: \"GN\", value: \"62\", name: \"Ricorso\" },\n { parentValue: \"GN\", value: \"63\", name: \"Decisione\" },\n { parentValue: \"LR\", value: \"65\", name: \"Regolamento Regionale\" },\n { parentValue: \"LN\", value: \"66\", name: \"Regio Decreto\" },\n { parentValue: \"LN\", value: \"67\", name: \"Regio Decreto Legge\" },\n { parentValue: \"LN\", value: \"68\", name: \"Regio Decreto Legislativo\" },\n { parentValue: \"LR\", value: \"69\", name: \"Altri documenti (reg.)\" },\n { parentValue: \"LR\", value: \"70\", name: \"Comunicato (reg.)\" },\n { parentValue: \"LN\", value: \"71\", name: \"Statuto delle Regioni Ordinarie\" },\n { parentValue: \"GN\", value: \"72\", name: \"Sentenza\" },\n { parentValue: \"TN\", value: \"73\", name: \"Altri documenti (Enti ed Istituti)\" },\n { parentValue: \"TN\", value: \"74\", name: \"Prassi di riferimento\" },\n { parentValue: \"LN\", value: \"75\", name: \"Altri documenti (naz.)\" },\n { parentValue: \"LN\", value: \"76\", name: \"Provvedimento (naz.)\" },\n { parentValue: \"TN\", value: \"77\", name: \"Pubblicazione (Enti ed Istituti)\" },\n { parentValue: \"TN\", value: \"79\", name: \"Linee guida (Enti ed Istituti)\" },\n { parentValue: \"LR\", value: \"80\", name: \"Decreto del Dirigente (reg.)\" },\n { parentValue: \"LR\", value: \"81\", name: \"Determinazione del Dirigente (reg.)\" },\n { parentValue: \"LN\", value: \"82\", name: \"Ordinanza Pres. Cons. Ministri\" },\n { parentValue: \"LR\", value: \"83\", name: \"Circolare (reg.)\" },\n { parentValue: \"TN\", value: \"84\", name: \"Istruzione Operativa (Enti e Istituti)\" },\n { parentValue: \"LR\", value: \"85\", name: \"Provvedimento (reg.)\" },\n { parentValue: \"TN\", value: \"86\", name: \"Quaderno\" },\n { parentValue: \"LR\", value: \"9\", name: \"Ordinanza Pres. Prov.\" },\n { parentValue: \"LN\", value: \"91\", name: \"Ordinanza Commissariale\" },\n { parentValue: \"LN\", value: \"93\", name: \"Risoluzione (naz.)\" },\n { parentValue: \"TN\", value: \"94\", name: \"Nota (Enti e Istituti)\" },\n { parentValue: \"TN\", value: \"97\", name: \"Opuscolo Tecnico\" },\n { parentValue: \"TN\", value: \"98\", name: \"Norma Tecnica\" },\n { parentValue: \"NI\", value: \"99\", name: \"Norma Tecnica Internaz.\" }\n ]\n\nexport const ClipperAuthors: SectorInfo[] = [\n {\n value: \"1CAM\",\n sectorId: undefined,\n name: \"Camera dei Deputati\",\n channels: undefined\n },\n {\n value: \"1MA\",\n sectorId: undefined,\n name: \"Ministero dell'Ambiente\",\n channels: undefined\n },\n {\n value: \"1MAE\",\n sectorId: undefined,\n name: \"Ministero degli Affari Esteri\",\n channels: undefined\n },\n {\n value: \"1MAF\",\n sectorId: undefined,\n name: \"Ministero dell'Agricoltura e delle Foreste\",\n channels: undefined\n },\n {\n value: \"1MAP\",\n sectorId: undefined,\n name: \"Ministero delle Attività Produttive\",\n channels: undefined\n },\n {\n value: \"1MARP\",\n sectorId: undefined,\n name: \"Ministero per gli Affari Regionali e per i Problemi Istituzionali\",\n channels: undefined\n },\n {\n value: \"1MASAF\",\n sectorId: undefined,\n name: \"Ministero dell'Agricoltura, della Sovranità Alimentare e delle Foreste\",\n channels: undefined\n },\n {\n value: \"1MASE\",\n sectorId: undefined,\n name: \"Ministero dell'Ambiente e della Sicurezza Energetica\",\n channels: undefined\n },\n {\n value: \"1MATT\",\n sectorId: undefined,\n name: \"Ministero dell'Ambiente e della Tutela del Territorio\",\n channels: undefined\n },\n {\n value: \"1MATTM\",\n sectorId: undefined,\n name: \"Ministero dell'Ambiente e della Tutela del Territorio e del Mare\",\n channels: undefined\n },\n {\n value: \"1MAU\",\n sectorId: undefined,\n name: \"Ministero del Aree Urbane\",\n channels: undefined\n },\n {\n value: \"1MBAC\",\n sectorId: undefined,\n name: \"Ministero dei Beni e delle Attività Culturali\",\n channels: undefined\n },\n {\n value: \"1MBCA\",\n sectorId: undefined,\n name: \"Ministero dei Beni Culturali e Ambientali\",\n channels: undefined\n },\n {\n value: \"1MC\",\n sectorId: undefined,\n name: \"Ministero delle Comunicazioni\",\n channels: undefined\n },\n {\n value: \"1MCE\",\n sectorId: undefined,\n name: \"Ministero del Commercio con l'Estero\",\n channels: undefined\n },\n {\n value: \"1MCI\",\n sectorId: undefined,\n name: \"Ministero del Commercio Internazionale\",\n channels: undefined\n },\n {\n value: \"1MCPC\",\n sectorId: undefined,\n name: \"Ministero per il Coordinamento delle Politiche Comunitarie\",\n channels: undefined\n },\n {\n value: \"1MCRU\",\n sectorId: undefined,\n name: \"Ministero della Ricerca Universitaria\",\n channels: undefined\n },\n {\n value: \"1MCU\",\n sectorId: undefined,\n name: \"Ministero della Cultura\",\n channels: undefined\n },\n {\n value: \"1MDIF\",\n sectorId: undefined,\n name: \"Ministero della Difesa\",\n channels: undefined\n },\n {\n value: \"1MEF\",\n sectorId: undefined,\n name: \"Ministero dell'Economia e delle Finanze\",\n channels: undefined\n },\n {\n value: \"1MF\",\n sectorId: undefined,\n name: \"Ministero delle Finanze\",\n channels: undefined\n },\n {\n value: \"1MFP\",\n sectorId: undefined,\n name: \"Ministero della Funzione Pubblica\",\n channels: undefined\n },\n {\n value: \"1MG\",\n sectorId: undefined,\n name: \"Ministero della Giustizia\",\n channels: undefined\n },\n {\n value: \"1MGG\",\n sectorId: undefined,\n name: \"Ministero di Grazia e Giustizia\",\n channels: undefined\n },\n {\n value: \"1MI\",\n sectorId: undefined,\n name: \"Ministero dell'Interno\",\n channels: undefined\n },\n {\n value: \"1MICA\",\n sectorId: undefined,\n name: \"Ministero per l'Industria, il Commercio e l'Artigianato\",\n channels: undefined\n },\n {\n value: \"1MIME\",\n sectorId: undefined,\n name: \"Ministero dell'Istruzione e del Merito\",\n channels: undefined\n },\n {\n value: \"1MIMI\",\n sectorId: undefined,\n name: \"Ministero delle Imprese e del Made in Italy\",\n channels: undefined\n },\n {\n value: \"1MIMS\",\n sectorId: undefined,\n name: \"Ministero delle Infrastrutture e della Mobilità Sostenibili\",\n channels: undefined\n },\n {\n value: \"1MINF\",\n sectorId: undefined,\n name: \"Ministero delle Infrastrutture\",\n channels: undefined\n },\n {\n value: \"1MISM\",\n sectorId: undefined,\n name: \"Ministero per l'Intervento Straordinario nel Mezzogiorno\",\n channels: undefined\n },\n {\n value: \"1MIT\",\n sectorId: undefined,\n name: \"Ministero delle Infrastrutture e dei Trasporti\",\n channels: undefined\n },\n {\n value: \"1MIUR\",\n sectorId: undefined,\n name: \"Ministero dell'Istruzione, Università e Ricerca\",\n channels: undefined\n },\n {\n value: \"1MLP\",\n sectorId: undefined,\n name: \"Ministero dei Lavori Pubblici\",\n channels: undefined\n },\n {\n value: \"1MLPO\",\n sectorId: undefined,\n name: \"Ministero del Lavoro e Politiche Sociali\",\n channels: undefined\n },\n {\n value: \"1MLPS\",\n sectorId: undefined,\n name: \"Ministero del Lavoro e Previdenza Sociale\",\n channels: undefined\n },\n {\n value: \"1MLSPS\",\n sectorId: undefined,\n name: \"Ministero del Lavoro, della Salute e delle Politiche Sociali\",\n channels: undefined\n },\n {\n value: \"1MMM\",\n sectorId: undefined,\n name: \"Ministero della Marina Mercantile\",\n channels: undefined\n },\n {\n value: \"1MPAAF\",\n sectorId: undefined,\n name: \"Ministero delle Politiche Agricole, Alimentari e Forestali\",\n channels: undefined\n },\n {\n value: \"1MPAAFT\",\n sectorId: undefined,\n name: \"Ministero delle Politiche Agricole Alimentari e Forestali e del Turismo\",\n channels: undefined\n },\n {\n value: \"1MPAF\",\n sectorId: undefined,\n name: \"Ministero delle Politiche Agricole e Forestali\",\n channels: undefined\n },\n {\n value: \"1MPC\",\n sectorId: undefined,\n name: \"Ministero per il Coordinamento della Protezione Civile\",\n channels: undefined\n },\n {\n value: \"1MPI\",\n sectorId: undefined,\n name: \"Ministero della Pubblica Istruzione\",\n channels: undefined\n },\n {\n value: \"1MPT\",\n sectorId: undefined,\n name: \"Ministero delle Poste e Telecomunicazioni\",\n channels: undefined\n },\n {\n value: \"1MRAAF\",\n sectorId: undefined,\n name: \"Ministero delle Risorse Agricole, Alimentari e Forestali\",\n channels: undefined\n },\n {\n value: \"1MRP\",\n sectorId: undefined,\n name: \"Ministero per i Rapporti Parlamentari\",\n channels: undefined\n },\n {\n value: \"1MS\",\n sectorId: undefined,\n name: \"Ministero della Sanità\",\n channels: undefined\n },\n {\n value: \"1MSA\",\n sectorId: undefined,\n name: \"Ministero della Salute\",\n channels: undefined\n },\n {\n value: \"1MSE\",\n sectorId: undefined,\n name: \"Ministero dello Sviluppo Economico\",\n channels: undefined\n },\n {\n value: \"1MT\",\n sectorId: undefined,\n name: \"Ministero del Tesoro\",\n channels: undefined\n },\n {\n value: \"1MTAC\",\n sectorId: undefined,\n name: \"Ministero dei Trasporti e dell'Aviazione Civile\",\n channels: undefined\n },\n {\n value: \"1MTE\",\n sectorId: undefined,\n name: \"Ministero della Transizione Ecologica\",\n channels: undefined\n },\n {\n value: \"1MTNA\",\n sectorId: undefined,\n name: \"Ministero dei Trasporti e della Navigazione\",\n channels: undefined\n },\n {\n value: \"1MTRA\",\n sectorId: undefined,\n name: \"Ministero dei Trasporti\",\n channels: undefined\n },\n {\n value: \"1MTS\",\n sectorId: undefined,\n name: \"Ministero del Turismo e dello Spettacolo\",\n channels: undefined\n },\n {\n value: \"1MTU\",\n sectorId: undefined,\n name: \"Ministero del Turismo\",\n channels: undefined\n },\n {\n value: \"1MURS\",\n sectorId: undefined,\n name: \"Ministero dell'Universitá e della Ricerca Scientifica e Tecnica\",\n channels: undefined\n },\n {\n value: \"1PCM\",\n sectorId: undefined,\n name: \"Presidente del Consiglio dei Ministri\",\n channels: undefined\n },\n {\n value: \"1PR\",\n sectorId: undefined,\n name: \"Presidente della Repubblica\",\n channels: undefined\n },\n {\n value: \"1SEN\",\n sectorId: undefined,\n name: \"Senato della Repubblica\",\n channels: undefined\n },\n {\n value: \"2AEEG\",\n sectorId: undefined,\n name: \"Autorità per l'Energia Elettrica e il Gas\",\n channels: undefined\n },\n {\n value: \"2AEEGSI\",\n sectorId: undefined,\n name: \"Autorità Energia Elettrica e Gas e Sistema Idrico\",\n channels: undefined\n },\n {\n value: \"2ARERA\",\n sectorId: undefined,\n name: \"Autorità di Regolazione per Energia, Reti e Ambiente\",\n channels: undefined\n },\n {\n value: \"2ARIR\",\n sectorId: undefined,\n name: \"Autorità di Vigilanza sulle Risorse Idriche e sui Rifiuti\",\n channels: undefined\n },\n {\n value: \"2AVCP\",\n sectorId: undefined,\n name: \"Autorità per la Vigilanza sui Contratti Pubblici di Lavori, Servizi e Forniture\",\n channels: undefined\n },\n {\n value: \"2AVLP\",\n sectorId: undefined,\n name: \"Autorità per la Vigilanza sui Lavori Pubblici\",\n channels: undefined\n },\n {\n value: \"2CAGA\",\n sectorId: undefined,\n name: \"Comitato Naz. Albo Naz. Gestori Ambientali\",\n channels: undefined\n },\n {\n value: \"2CAN\",\n sectorId: undefined,\n name: \"Comitato per le Aree Naturali protette.\",\n channels: undefined\n },\n {\n value: \"2CDEA\",\n sectorId: undefined,\n name: \"Commissario delegato per l'Emergenza Ambientale\",\n channels: undefined\n },\n {\n value: \"2CDMN\",\n sectorId: undefined,\n name: \"Commissario delegato per la Sicurezza dei Materiali Nucleari\",\n channels: undefined\n },\n {\n value: \"2CDRA\",\n sectorId: undefined,\n name: \"Commissario delegato per l'Emergenza Rifiuti e la Tutela delle Acque\",\n channels: undefined\n },\n {\n value: \"2CIAB\",\n sectorId: undefined,\n name: \"Comitato Istituzionale Autorità di Bacino\",\n channels: undefined\n },\n {\n value: \"2CICP\",\n sectorId: undefined,\n name: \"Comitato Interministeriale Coordinamento Politica Economica\",\n channels: undefined\n },\n {\n value: \"2CIP\",\n sectorId: undefined,\n name: \"Comitato Interministeriale Prezzi\",\n channels: undefined\n },\n {\n value: \"2CIPE\",\n sectorId: undefined,\n name: \"Comitato Interministeriale per la Programmazione Economica\",\n channels: undefined\n },\n {\n value: \"2CIPESS\",\n sectorId: undefined,\n name: \"Comitato Interministeriale per la Programmazione Economica e lo Sviluppo Sostenibile\",\n channels: undefined\n },\n {\n value: \"2CIR\",\n sectorId: undefined,\n name: \"Comitato Interministeriale per i Rifiuti\",\n channels: undefined\n },\n {\n value: \"2CITA\",\n sectorId: undefined,\n name: \"Comitato Interministeriale per la Tutela delle Acque\",\n channels: undefined\n },\n {\n value: \"2CSR\",\n sectorId: undefined,\n name: \"Conferenza Permanente Rapporti Stato e Regioni\",\n channels: undefined\n },\n {\n value: \"2CSSR\",\n sectorId: undefined,\n name: \"Comitato Naz. Albo Imprese Esercenti Servizi Smaltimento Rifiuti\",\n channels: undefined\n },\n {\n value: \"2CUN\",\n sectorId: undefined,\n name: \"Conferenza Unificata\",\n channels: undefined\n },\n {\n value: \"2GPDP\",\n sectorId: undefined,\n name: \"Garante per la Protezione dei Dati Personali\",\n channels: undefined\n },\n {\n value: \"3CCEE\",\n sectorId: \"LC\",\n name: \"Commissario CEE/CE\",\n channels: undefined\n },\n {\n value: \"3CDR\",\n sectorId: \"LC\",\n name: \"Comitato delle Regioni\",\n channels: undefined\n },\n {\n value: \"3CEDM\",\n sectorId: \"LC\",\n name: \"Corte Europea per i Diritti dell'Uomo\",\n channels: undefined\n },\n {\n value: \"3CES\",\n sectorId: \"LC\",\n name: \"Comitato Economico e Sociale\",\n channels: undefined\n },\n {\n value: \"3CJCE\",\n sectorId: \"LC\",\n name: \"Corte di Giustizia\",\n channels: undefined\n },\n {\n value: \"3CJCO\",\n sectorId: \"LC\",\n name: \"Corte dei Conti\",\n channels: undefined\n },\n {\n value: \"3COMM\",\n sectorId: \"LC\",\n name: \"Commissione\",\n channels: undefined\n },\n {\n value: \"3CONS\",\n sectorId: \"LC\",\n name: \"Consiglio\",\n channels: undefined\n },\n {\n value: \"3CONSUE\",\n sectorId: \"LC\",\n name: \"Parlamento e Consiglio\",\n channels: undefined\n },\n {\n value: \"3CWJ\",\n sectorId: \"LC\",\n name: \"Corte Internazionale di Giustizia\",\n channels: undefined\n },\n {\n value: \"3EFTA\",\n sectorId: \"LC\",\n name: \"EFTA - Associaz. Europea di Libero Scambio\",\n channels: undefined\n },\n {\n value: \"3OTIF\",\n sectorId: \"LC\",\n name: \"OTIF - Intergov. Org. for International Carriage by Rail\",\n channels: undefined\n },\n {\n value: \"3PAE\",\n sectorId: \"LC\",\n name: \"Parlamento\",\n channels: undefined\n },\n {\n value: \"3T1CE\",\n sectorId: \"LC\",\n name: \"Tribunale di Primo Grado\",\n channels: undefined\n },\n {\n value: \"3UNECE\",\n sectorId: \"LC\",\n name: \"UNECE - United Nations Economic Commission for Europe\",\n channels: undefined\n },\n {\n value: \"4PAB\",\n sectorId: \"LR\",\n name: \"Prov. Autonoma di Bolzano\",\n channels: undefined\n },\n {\n value: \"4PAT\",\n sectorId: \"LR\",\n name: \"Prov. Autonoma di Trento\",\n channels: undefined\n },\n {\n value: \"4RAB\",\n sectorId: \"LR\",\n name: \"Regione Abruzzo\",\n channels: undefined\n },\n {\n value: \"4RBA\",\n sectorId: \"LR\",\n name: \"Regione Basilicata\",\n channels: undefined\n },\n {\n value: \"4RCAL\",\n sectorId: \"LR\",\n name: \"Regione Calabria\",\n channels: undefined\n },\n {\n value: \"4RCAM\",\n sectorId: \"LR\",\n name: \"Regione Campania\",\n channels: undefined\n },\n {\n value: \"4REM\",\n sectorId: \"LR\",\n name: \"Regione Emilia Romagna\",\n channels: undefined\n },\n {\n value: \"4RFVG\",\n sectorId: \"LR\",\n name: \"Regione Friuli Venezia Giulia\",\n channels: undefined\n },\n {\n value: \"4RLA\",\n sectorId: \"LR\",\n name: \"Regione Lazio\",\n channels: undefined\n },\n {\n value: \"4RLI\",\n sectorId: \"LR\",\n name: \"Regione Liguria\",\n channels: undefined\n },\n {\n value: \"4RLO\",\n sectorId: \"LR\",\n name: \"Regione Lombardia\",\n channels: undefined\n },\n {\n value: \"4RMA\",\n sectorId: \"LR\",\n name: \"Regione Marche\",\n channels: undefined\n },\n {\n value: \"4RMO\",\n sectorId: \"LR\",\n name: \"Regione Molise\",\n channels: undefined\n },\n {\n value: \"4RPI\",\n sectorId: \"LR\",\n name: \"Regione Piemonte\",\n channels: undefined\n },\n {\n value: \"4RPU\",\n sectorId: \"LR\",\n name: \"Regione Puglia\",\n channels: undefined\n },\n {\n value: \"4RSA\",\n sectorId: \"LR\",\n name: \"Regione Sardegna\",\n channels: undefined\n },\n {\n value: \"4RSI\",\n sectorId: \"LR\",\n name: \"Regione Sicilia\",\n channels: undefined\n },\n {\n value: \"4RTAA\",\n sectorId: \"LR\",\n name: \"Regione Trentino Alto Adige\",\n channels: undefined\n },\n {\n value: \"4RTO\",\n sectorId: \"LR\",\n name: \"Regione Toscana\",\n channels: undefined\n },\n {\n value: \"4RUM\",\n sectorId: \"LR\",\n name: \"Regione Umbria\",\n channels: undefined\n },\n {\n value: \"4RVA\",\n sectorId: \"LR\",\n name: \"Regione Valle D'Aosta\",\n channels: undefined\n },\n {\n value: \"4RVE\",\n sectorId: \"LR\",\n name: \"Regione Veneto\",\n channels: undefined\n },\n {\n value: \"5CA\",\n sectorId: \"GN\",\n name: \"Corte d'Appello\",\n channels: undefined\n },\n {\n value: \"5CAS\",\n sectorId: \"GN\",\n name: \"Corte d'Assise\",\n channels: undefined\n },\n {\n value: \"5CASA\",\n sectorId: \"GN\",\n name: \"Corte d'Assise d'Appello\",\n channels: undefined\n },\n {\n value: \"5CC\",\n sectorId: \"GN\",\n name: \"Corte Costituzionale\",\n channels: undefined\n },\n {\n value: \"5CCC\",\n sectorId: \"GN\",\n name: \"Corte di Cassazione Civile\",\n channels: undefined\n },\n {\n value: \"5CCP\",\n sectorId: \"GN\",\n name: \"Corte di Cassazione Penale\",\n channels: undefined\n },\n {\n value: \"5CDC\",\n sectorId: \"GN\",\n name: \"Corte dei Conti\",\n channels: undefined\n },\n {\n value: \"5CDS\",\n sectorId: \"GN\",\n name: \"Consiglio di Stato\",\n channels: undefined\n },\n {\n value: \"5CGAS\",\n sectorId: \"GN\",\n name: \"Cons. di Giustizia Amm.va della Sicilia\",\n channels: undefined\n },\n {\n value: \"5CTP\",\n sectorId: \"GN\",\n name: \"Commissione Tributaria Provinciale\",\n channels: undefined\n },\n {\n value: \"5CTR\",\n sectorId: \"GN\",\n name: \"Commissione Tributaria Regionale\",\n channels: undefined\n },\n {\n value: \"5GDP\",\n sectorId: \"GN\",\n name: \"Giudice di Pace\",\n channels: undefined\n },\n {\n value: \"5P\",\n sectorId: \"GN\",\n name: \"Pretura\",\n channels: undefined\n },\n {\n value: \"5PCA\",\n sectorId: \"GN\",\n name: \"Procura Generale Corte d'Appello\",\n channels: undefined\n },\n {\n value: \"5PR\",\n sectorId: \"GN\",\n name: \"Procura della Repubblica\",\n channels: undefined\n },\n {\n value: \"5T\",\n sectorId: \"GN\",\n name: \"Tribunale\",\n channels: undefined\n },\n {\n value: \"5TAR\",\n sectorId: \"GN\",\n name: \"Tribunale Amministrativo Regionale\",\n channels: undefined\n },\n {\n value: \"5TGA\",\n sectorId: \"GN\",\n name: \"Tribunale Regionale acque\",\n channels: undefined\n },\n {\n value: \"5TSA\",\n sectorId: \"GN\",\n name: \"Tribunale Superiore delle Acque\",\n channels: undefined\n },\n {\n value: \"6CAC\",\n sectorId: \"TN\",\n name: \"Codex Alimentarius Commission\",\n channels: undefined\n },\n {\n value: \"6CEI\",\n sectorId: \"TN\",\n name: \"C.E.I.\",\n channels: undefined\n },\n {\n value: \"6CNR\",\n sectorId: \"TN\",\n name: \"C.N.R.\",\n channels: undefined\n },\n {\n value: \"6ENPI\",\n sectorId: \"TN\",\n name: \"E.N.P.I.\",\n channels: undefined\n },\n {\n value: \"6INAI\",\n sectorId: \"TN\",\n name: \"I.N.A.I.L.\",\n channels: undefined\n },\n {\n value: \"6INPS\",\n sectorId: \"TN\",\n name: \"I.N.P.S.\",\n channels: undefined\n },\n {\n value: \"6ISO\",\n sectorId: \"NI\",\n name: \"I.S.O.\",\n channels: undefined\n },\n {\n value: \"6ISPS\",\n sectorId: \"TN\",\n name: \"I.S.P.E.S.L.\",\n channels: undefined\n },\n {\n value: \"6ISS\",\n sectorId: \"TN\",\n name: \"I.S.S. - Istituto Superiore di Sanità\",\n channels: undefined\n },\n {\n value: \"6NSF\",\n sectorId: \"TN\",\n name: \"NSF International\",\n channels: undefined\n },\n {\n value: \"6UNI\",\n sectorId: \"TN\",\n name: \"U.N.I.\",\n channels: undefined\n },\n {\n value: \"6USDA\",\n sectorId: \"TN\",\n name: \"USDA - United States Department of Agriculture\",\n channels: undefined\n }\n]\n\nexport const ClipperSources: NameValueItem<string>[] = [\n {\n value: 'ACCML',\n name: 'Accordi Multilaterali',\n },\n {\n value: 'AEEG',\n name: \"Sito Autorità per l'Energia Elettrica, il Gas e il Sistema Idrico\",\n },\n {\n value: 'ARERA',\n name: 'Sito Autorità di Regolazione per Energia, Reti e Ambiente',\n },\n {\n value: 'BUR',\n name: 'Bollettino Uff. Regione',\n },\n {\n value: 'BUS',\n name: 'Suppl. speciale al Bollettino Uff.',\n },\n {\n value: 'BUSO',\n name: 'Suppl. ordin. al Bollettino Uff.',\n },\n {\n value: 'BUSS',\n name: 'Suppl. straord. al Bollettino Uff.',\n },\n {\n value: 'GU',\n name: 'Gazzetta Ufficiale Italiana',\n },\n {\n value: 'GUCC',\n name: 'Gazz. Uff. Corte Costituzionale',\n },\n {\n value: 'GUCE',\n name: 'Gazzetta ufficiale delle Comunità europee',\n },\n {\n value: 'GUES',\n name: 'Gazz. Uff. Ediz. Speciale',\n },\n {\n value: 'GURS',\n name: 'Gazz. Uff. Regione Sicilia',\n },\n {\n value: 'GUS',\n name: 'Gazz. Uff. Serie Speciale',\n },\n {\n value: 'GUSO',\n name: 'Suppl. ordin. alla Gazzetta Ufficiale',\n },\n {\n value: 'GUSS',\n name: 'Suppl. straord. alla Gazzetta Ufficiale',\n },\n {\n value: 'GUUE',\n name: 'Gazzetta ufficiale dell’Unione europea',\n },\n {\n value: 'MAC',\n name: 'Massimario Civile',\n },\n {\n value: 'MAP',\n name: 'Massimario Penale',\n },\n {\n value: 'NONE',\n name: 'Fonti diverse',\n }\n]\n\n\nexport interface ClipperChannelSettingsItem<T> {\n name: string;\n value: T;\n checked: boolean;\n}\n\nexport class ClipperChannelSettings {\n channelId?: ClipperChannel;\n channelName?: string;\n isEnabled?: boolean = false;\n isSuspended?: boolean = false;\n isActive?: boolean = false;\n sectors: ClipperChannelSettingsItem<string>[] = [];\n regions: ClipperChannelSettingsItem<string>[] = [];\n\n /**\n * Returns `true` when the channel is active and at least one of the given sector codes\n * matches a sector assigned to this channel.\n * @param values - Array of sector code strings to test against.\n */\n hasAnyOfSectors(values: string[]): boolean {\n if (this.isEnabled !== true || this.isActive !== true) return false;\n return values.some(v => this.sectors.some(s => s.value === v));\n }\n\n /**\n * Returns `true` when the channel is active and at least one of the given region codes\n * matches a region assigned to this channel.\n * @param values - Array of region code strings to test against.\n */\n hasAnyOfRegions(values: string[]): boolean {\n if (this.isEnabled !== true || this.isActive !== true) return false;\n return values.some(v => this.regions.some(r => r.value === v));\n }\n\n}\n\nexport interface ClipperUserChannelInfo {\n channel: ClipperChannel;\n channelName?: string;\n expiringDate: Date;\n isTrial?: boolean;\n isDisabled: boolean;\n isSuspended: boolean;\n isDvd: boolean;\n isActive: boolean;\n documentsViewable?: number;\n documentsViewed?: number;\n settings?: ClipperChannelSettings;\n}\n\nexport interface ClipperUserInfo {\n userId: number;\n customerId?: number;\n companyName?: string;\n displayName?: string;\n firstName?: string;\n email: string;\n oauth?: boolean;\n sessionId?: string;\n scope: number;\n isAuthenticated: boolean;\n isTemporary: boolean;\n hasTrial: boolean;\n hasBulletin: boolean;\n hasAI: boolean;\n hasAIAssistant: boolean;\n hasAIEditor: boolean;\n channels?: ClipperUserChannelInfo[];\n firstChannelTrial?: ClipperUserChannelInfo;\n trialInfo?: ClipperUserTrialInfo;\n}\n\nexport interface ClipperLoginResult extends LoginResult<ClipperUserInfo> {\n settings?: ClipperChannelSettings[];\n}\n\n/**\n * Answer of `GET /session/status`: whether this browser holds a live session towards the Clipper API.\n *\n * This is the probe behind the link state. The auth cookie is HttpOnly and belongs to the API's\n * host, so nothing here can read it, and its presence would prove nothing anyway — the session also\n * lives server-side and may have been revoked or evicted. The endpoint never answers 401, which is\n * what makes it safe to call with no session at all: a probe that failed with a status code would be\n * reported by the interceptor as an expired session.\n */\nexport interface ClipperSessionStatus {\n /** True when the cookie this browser presented resolves to a live, validated session. */\n connected: boolean;\n}\n\nexport interface ClipperLoginInfo {\n context?: ClipperUserInfo;\n channels?: ClipperChannelSettings[];\n}\n\nexport enum ClipperQueryDocumentFlags {\n None = 0,\n TitleOnly = 1,\n AbrogatedOnly = 1 << 1,\n NotAbrogatedOnly = 1 << 2,\n CommentedOnly = 1 << 3,\n UseSemanticSearch = 1 << 5,\n NotRead = 1 << 6,\n ExcludeUserFilters = 1 << 7\n}\n\nexport class ClipperSearchParams {\n version: number = 6;\n searchId?: number;\n searchName?: string;\n text?: string;\n title?: string;\n titleOnly?: boolean = false;\n showUnreadDocumentsOnly?: boolean = false;\n showCommentedDocumentsOnly?: boolean = false;\n showNotAbrogatedDocumentsOnly?: boolean = false;\n number?: string;\n fromDate?: Date;\n toDate?: Date;\n year?: number;\n sourceNumber?: string;\n source?: string;\n sourceFromDate?: Date;\n sourceToDate?: Date;\n sourceYear?: number;\n sector?: string;\n sectors?: SectorInfo[];\n topic?: string;\n topics?: NameValueItem<string>[];\n taxonomy?: string;\n taxonomies?: NameValueItem<string>[];\n taxonomyPath?: string;\n taxonomyNode?: string;\n type?: string;\n types?: NameValueItem<string>[];\n tag?: string;\n tags?: NameValueItem<string>[];\n author?: string;\n authors?: NameValueItem<string>[];\n changeReason?: number;\n changedNumber?: string;\n changedYear?: number;\n changedTitle?: string;\n changedId?: string;\n modifierId?: string;\n modifierNumber?: string;\n modifierYear?: number;\n modifierTitle?: string;\n model?: ClipperModel;\n models?: ClipperModel[];\n module?: ClipperModule;\n modules?: NameValueItem<ClipperModule>[];\n mode?: ClipperQueryReferencesMode;\n channels?: NameValueItem<ClipperChannel>[] = [...ClipperChannels];\n count?: number = 15;\n id?: string;\n anchor?: string;\n excludeTextReferences?: boolean = false;\n excludeNotesReferences?: boolean = false;\n useModifierInfo?: boolean = false;\n returnModifierInfo?: boolean = false;\n flags?: ClipperQueryDocumentFlags;\n first?: number = 0;\n sortMode?: number;\n}\n\nexport interface ClipperReferencesSearchParams {\n documentId: string;\n year?: number;\n sector?: string;\n author?: string;\n anchor?: string;\n model?: string;\n mode?: ClipperQueryReferencesMode;\n excludeTextReferences?: boolean;\n excludeNotesReferences?: boolean;\n useModifierInfo?: boolean;\n returnModifierInfo?: boolean;\n count?: number;\n first?: number;\n}\n\nexport enum ClipperDocumentContainer {\n None = 0,\n LavoroEAmbiente = 1,\n SostanzeAlimentari = 2,\n OrangeProject = 4,\n Energia = 8,\n DGInfo = 0x10,\n DLGS231 = 0x20,\n All = 0x3F\n}\n\nexport const ClipperDocumentChangeReasons: NameValueItem<number>[] = [\n { name: 'Abrogazione', value: 1 },\n { name: 'Annullamento', value: 5 },\n { name: 'Modifica', value: 2 },\n { name: 'Sostiuzione', value: 3 },\n { name: 'Segnalazione', value: 6 },\n { name: 'Rettifica', value: 7 },\n]\n\nexport interface ClipperDocumentAnchorInfo {\n documentId?: string;\n type?: number;\n typeDescription?: string;\n text?: string;\n title?: string;\n description?: string;\n uri: string;\n ordinal?: string;\n score?: number;\n chunk?: number;\n veryRelevant?: boolean;\n value?: string;\n level?: number;\n}\n\nexport interface ClipperDocumentRelevantChunkHit {\n id?: number;\n score: string;\n text: string;\n index?: number;\n uri?: string;\n}\n\nexport interface ClipperDocumentRelevants {\n items: ClipperDocumentAnchorInfo[];\n hits: number;\n hit: number;\n chunks: number;\n}\n\n\n/** One delivery of a shared note by email, and whether the recipient opened it. */\nexport interface ClipperDocumentNoteTracking {\n id: string;\n userMailId: number;\n email?: string;\n sentDate: Date;\n openDate?: Date;\n}\n\n/**\n * A shared note attached to a document.\n *\n * The library never creates or edits one -- notes belong to the application that owns the\n * account -- but the API attaches them to documents and to `metadata()`, so the shape is\n * declared here rather than letting a consumer read a response it cannot see.\n */\nexport interface ClipperDocumentNote {\n id?: number;\n teamId?: string;\n teamTitle?: string;\n documentId?: string;\n documentTitle?: string;\n color?: string;\n name?: string;\n note?: string;\n trackings?: ClipperDocumentNoteTracking[];\n trackingsCount?: number;\n trackingsOpenedCount?: number;\n expiringDate?: Date;\n isExpired?: boolean;\n isTroubled?: boolean;\n isMenuOpen?: boolean;\n isOver?: boolean;\n created?: Date;\n}\n\nexport interface ClipperDocumentInfo {\n id?: string;\n documentId?: string;\n documentCode?: string;\n model?: number;\n modelName?: string;\n module?: number;\n moduleName?: string;\n channelName?: string;\n group?: string;\n title2?: string;\n title1?: string;\n tags?: string;\n topics?: string;\n number?: string;\n date?: Date;\n description?: string;\n publishingDate?: Date;\n pictureId?: string;\n sourceNumber?: string;\n sourceDate?: Date;\n source?: string;\n sector?: string;\n origin?: string;\n originDescription?: string;\n author?: string;\n anchors?: ClipperDocumentAnchorInfo[];\n notes?: ClipperDocumentNote[];\n chunks?: ClipperDocumentAnchorInfo[];\n chunksList?: string;\n taxonomy?: string;\n taxonomyPath?: string;\n info?: string;\n isRead?: boolean;\n isExportable?: boolean;\n isCommented?: boolean;\n isJuris?: boolean;\n isOver?: boolean;\n isTrial?: boolean;\n isNew?: boolean;\n isExpired?: boolean;\n isExpiring?: boolean;\n isMenuOpen?: boolean;\n applicableFromDate?: Date;\n validityState?: number;\n validFromDate?: Date;\n validUntilDate?: Date;\n validityDescription?: string;\n validityInfo?: string;\n expiringDate?: Date;\n expiringDescription?: string;\n expiringInfo?: string;\n popularity?: number;\n part?: number;\n primaryId?: string;\n primaryDescription?: string;\n primaryModel?: number;\n hasPrimary?: boolean;\n secondaryId?: string;\n bag?: any;\n lastUpdate?: string;\n\n}\n\nexport class ClipperSearchResult {\n days?: string;\n interval?: string;\n items?: ClipperDocumentInfo[];\n facets?: ClipperSearchFacetsSnapshot = new ClipperSearchFacetsSnapshot();\n tags?: NameValueItem<string>[];\n total?: number;\n terms?: string[];\n searchInfo?: any;\n searchParams?: ClipperSearchParams = new ClipperSearchParams();\n snapshotMode?: ClipperQueryReferencesMode;\n}\n\nexport interface ClipperSearchFacet {\n type: number;\n typeName: string;\n title: string;\n value: string;\n count: number;\n}\n\nexport interface ClipperSearchFacetGroup {\n name: string;\n selectedValue?: string;\n selectedValueDescription?: string;\n values: ClipperSearchFacet[];\n index: number;\n}\n\nexport interface ClipperSearchFacetsResult {\n interval?: string;\n facets?: ClipperSearchFacet[][];\n total?: number;\n}\n\n\nexport class ClipperSearchFacetsSnapshot {\n groups: ClipperSearchFacetGroup[] = [];\n usedGroups: ClipperSearchFacetGroup[] = [];\n hasFacets: boolean = false;\n hasMoreFacets: boolean = false;\n hasTooManyResults: boolean = false;\n sector?: string;\n author?: string;\n anchor?: string;\n type?: string;\n reason?: string;\n fromDate?: Date;\n toDate?: Date;\n interval?: string;\n}\n\nexport interface ClipperSearchCalendarSnapshotMonth {\n days: number[];\n monthShortName?: string;\n monthName?: string;\n month: number;\n year: number;\n total: number;\n expired: number;\n expiring: number;\n}\n\nexport class ClipperSearchCalendarSnapshotResult {\n months?: ClipperSearchCalendarSnapshotMonth[];\n}\n\n\n\nexport enum ClipperSort {\n Default = 0,\n Relevance = 1,\n DateAsc = 2,\n DateDesc = 3,\n SourceDateAsc = 7,\n SourceDateDesc = 8,\n Popularity = 5\n}\n\nexport enum ClipperQueryReferencesMode {\n ReferencesIn = 1,\n ReferencesOut = 2,\n ChangesIn = 3,\n ChangesOut = 5,\n Juris = 4\n}\n\nexport enum ClipperFacet {\n Sector = 1,\n Year = 2,\n DocumentType = 3,\n Topic = 4,\n Article = 5,\n Author = 6,\n Reason = 95\n}\n\nexport interface ClipperOTPInfo {\n code?: string;\n canPreview?: boolean;\n canEmbed?: boolean;\n}\n\nexport enum ClipperExportDocumentsFormat {\n Deafault = 1,\n iCalendar = 2\n}\n\nexport interface ClipperExportDocumentsParams {\n query?: ClipperSearchParams;\n ids: string[];\n format?: ClipperExportDocumentsFormat;\n}\n\nexport interface ClipperSendDocumentsByEmailParams extends SendToDialogResult {\n ids?: string[];\n isCalendar?: boolean;\n public?: string;\n userNoteId?: number;\n}\n\n\nexport interface ClipperDocumentStructure {\n id: string;\n title: string;\n items?: ClipperDocumentAnchorInfo[];\n}\n\n\nexport interface ClipperSearchFilter {\n container: ClipperDocumentContainer;\n models: number[];\n sectors: string[];\n regions: string[];\n notifications: number[];\n isEnabled: boolean;\n isActive: boolean;\n}\nexport interface ClipperTaxonomyParams {\n countItems: boolean;\n model: ClipperModel;\n userFilters?: ClipperSearchFilter[];\n}\n\nexport interface ClipperUserSearch {\n id?: number;\n userId?: number;\n name?: string;\n module?: ClipperModule;\n data?: string;\n}\n\nexport interface ClipperUserWorkingDocument {\n userId?: number;\n documentId?: string;\n documentDescriptor?: string;\n title1?: string;\n title2?: string;\n timestamp?: string;\n}\n\nexport interface ClipperDeleteWorkingDocumentsParams {\n documentIds: string[];\n deleteAll: boolean;\n}\n\n\nexport interface ClipperUserTrialInfo {\n channelName?: string;\n expiringDate: Date;\n remainingDocuments: number;\n}\n\nexport interface ClipperDocumentUpdateStateParams {\n documentIds: string[];\n isRead: boolean;\n}\n\nexport interface ClipperDashboardModelItem {\n id?: ClipperModel;\n newItems: number;\n unreadItems: number;\n}\n\nexport interface ClipperDashboardItem {\n id: ClipperModule;\n models: ClipperDashboardModelItem[];\n newItems: number;\n unreadItems: number;\n lastUpdated?: Date;\n}\n\nexport class ClipperDashboard {\n items = signal<ClipperDashboardItem[]>([]);\n isTrial?: boolean = false;\n expiredDeadlines?: number;\n expiringDeadlines?: number;\n documentUpdates?: number;\n unreadItems: Signal<[ClipperModule, number][]> = computed(() => {\n const states: [ClipperModule, number][] = [];\n states.push([ClipperModule.News, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.News)?.unreadItems ?? 0]);\n states.push([ClipperModule.GazzetteBollettiniEFontiDiverse, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.GazzetteBollettiniEFontiDiverse)?.unreadItems ?? 0]);\n states.push([ClipperModule.Giurisprudenza, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.Giurisprudenza)?.unreadItems ?? 0]);\n states.push([ClipperModule.ModificheAbrogazioniERinvii, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.ModificheAbrogazioniERinvii)?.unreadItems ?? 0]);\n //states.push([ClipperModule.AllerteAlimentari, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.AllerteAlimentari)?.unreadItems ?? 0]);\n states.push([ClipperModule.Approfondimenti, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.Approfondimenti)?.unreadItems ?? 0]);\n states.push([ClipperModule.QuesitiECasiRisolti, this.items().find((x: ClipperDashboardItem) => x.id == ClipperModule.QuesitiECasiRisolti)?.unreadItems ?? 0]);\n return states;\n });\n unreadItemsByModel: Signal<[ClipperModel, number][]> = computed(() => {\n const states: [ClipperModel, number][] = [];\n this.items().forEach(item => {\n if (item.models) {\n item.models.forEach(itemModel => {\n states.push([itemModel.id, itemModel.unreadItems]);\n });\n } else {\n if (item.id == ClipperModule.News) {\n states.push([ClipperModel.News, item.unreadItems]);\n } else if (item.id == ClipperModule.GazzetteBollettiniEFontiDiverse) {\n states.push([ClipperModel.AggiornamentoNormativo, item.unreadItems]);\n } else if (item.id == ClipperModule.QuesitiECasiRisolti) {\n states.push([ClipperModel.Quesiti, item.unreadItems]);\n // } else if (item.id == ClipperModule.AllerteAlimentari) {\n // states.push([ClipperModel.AllerteAlimentari, item.unreadItems]);\n } else if (item.id == ClipperModule.Approfondimenti) {\n states.push([ClipperModel.Articoli, item.unreadItems]);\n } else if (item.id == ClipperModule.ModificheAbrogazioniERinvii) {\n states.push([ClipperModel.Coordinamento, item.unreadItems]);\n } else if (item.id == ClipperModule.Giurisprudenza) {\n states.push([ClipperModel.Juris, item.unreadItems]);\n }\n }\n })\n return states;\n });\n\n /**\n * Increments (or decrements) the unread item counter for the given module or model.\n * Triggers a signal update so computed values and templates react to the change.\n * @param module - The `ClipperModule` whose counter should be adjusted.\n * @param model - Optional `ClipperModel` for sub-module granularity.\n * @param increment - Amount to add (use a negative value to decrement).\n */\n updateUnreadItems(module: ClipperModule, model: ClipperModel | undefined, increment: number): void {\n if (model) {\n for (const item of this.items()) {\n const itemModel = item.models?.find(x => x.id === model);\n if (itemModel) {\n itemModel.unreadItems += increment;\n break;\n }\n }\n }\n const item = this.items().find((x: ClipperDashboardItem) => x.id === module);\n if (item) {\n item.unreadItems += increment;\n }\n this.items.update(values => [...values]);\n }\n\n /**\n * Returns the unread-item count for the given module, or for a specific model within it.\n * @param module - The `ClipperModule` to query.\n * @param model - Optional `ClipperModel` for sub-module granularity.\n * @returns Number of unread items, or `0` when none are found.\n */\n getUnreadItems(module: ClipperModule, model?: ClipperModel): number {\n if (model) {\n return this.unreadItemsByModel().find((x: [ClipperModel, number]) => x[0] === model)?.[1] ?? 0;\n }\n return this.unreadItems().find((x: [ClipperModule, number]) => x[0] === module)?.[1] ?? 0;\n }\n\n /**\n * Returns the sum of unread items across all tracked modules.\n * @returns Total unread-item count.\n */\n getTotalUnreadItems(): number {\n return this.unreadItems().reduce((acc, item) => acc + item[1], 0);\n }\n}\n\nexport interface ClipperTopicInfo {\n id: string;\n name: string;\n}\n\nexport enum ClipperCalendarState {\n Open = 101,\n Expired = 102,\n Expiring = 103,\n Closed = 104\n}\n\nexport const ClipperCalendarStates: NameValueItem<ClipperCalendarState>[] = [\n { name: 'Aperte', value: ClipperCalendarState.Open },\n { name: 'Chiuse', value: ClipperCalendarState.Closed },\n { name: 'Scadute', value: ClipperCalendarState.Expired },\n { name: 'Imminenti', value: ClipperCalendarState.Expiring }\n]\n\n\nexport class ClipperCalendarSearchParams {\n id?: string;\n fromDate?: Date;\n toDate?: Date;\n teamId?: string;\n text?: string;\n month?: number;\n year?: number;\n sortDescending?: boolean;\n state?: ClipperCalendarState;\n recurrentOnly?: boolean;\n first?: number = 0;\n count?: number = 15\n}\n\nexport class ClipperUtils {\n\n /**\n * Returns `true` when the given model corresponds to a readable document type\n * (i.e., can be opened in the document viewer).\n * @param model - The `ClipperModel` to test.\n */\n static isClipperModelReadable(model: ClipperModel): boolean {\n return model !== ClipperModel.Unknown &&\n model !== ClipperModel.NormativaVigente &&\n model !== ClipperModel.Scadenze &&\n model !== ClipperModel.Segnalazioni\n }\n\n /**\n * Returns the `ClipperModule` that owns the given document, derived from its model type.\n * @param item - The document info object to inspect.\n * @returns The matching `ClipperModule`, or `undefined` when the model has no direct module mapping.\n */\n static getClipperModuleFromModel(item: ClipperDocumentInfo): ClipperModule | undefined {\n switch (item.model) {\n // case ClipperModel.AllerteAlimentari: return ClipperModule.AllerteAlimentari;\n case ClipperModel.News: return ClipperModule.News;\n case ClipperModel.Articoli:\n case ClipperModel.Juris: return ClipperModule.Approfondimenti;\n case ClipperModel.Quesiti: return ClipperModule.QuesitiECasiRisolti;\n case ClipperModel.Coordinamento: return ClipperModule.ModificheAbrogazioniERinvii;\n case ClipperModel.GiurisprudenzaRecente: return ClipperModule.Giurisprudenza;\n case ClipperModel.NormativaVigente: return ClipperModule.NormativaVigente;\n case ClipperModel.Segnalazioni:\n case ClipperModel.Scadenze: return ClipperModule.ScadenzeESegnalazioni;\n case ClipperModel.AggiornamentoNormativo: return ClipperModule.GazzetteBollettiniEFontiDiverse;\n }\n return undefined;\n }\n\n\n /**\n * Returns the display name for the given `ClipperModuleGroup`.\n * @param value - The module group enum value to look up.\n * @returns The group display name, or an empty string when not found.\n */\n static getClipperModuleGroupName(value: ClipperModuleGroup): string {\n return ClipperModuleGroups.find(n => n.value === value)?.name ?? '';\n }\n\n /**\n * Returns the list of `ClipperModule` items belonging to the given module group.\n * @param value - The module group to filter by.\n * @returns Array of matching `NameValueItem` entries.\n */\n static getClipperModuleGroupItems(value: ClipperModuleGroup): NameValueItem<ClipperModule>[] {\n return ClipperModules.filter(n => n.parentValue === value);\n }\n\n /**\n * Tests a set of modules against the currently selected modules in the search filter.\n * @param modules - The modules to test.\n * @param currentModules - The currently selected modules to check against.\n * @param mode - Matching strategy:\n * `1` = all and only the specified modules (exact set),\n * `2` = all specified modules must be present,\n * `3` = at least one specified module must be present.\n * @returns `true` when the condition defined by `mode` is satisfied.\n */\n private static checkModules(\n modules: ClipperModule[],\n currentModules: NameValueItem<ClipperModule>[],\n mode: number = 1\n ): boolean {\n let ok = false;\n if (mode === 1) {\n // All and only the elements specified\n for (const current of currentModules) {\n ok = modules.findIndex(x => x === current.value) !== -1;\n if (!ok) break;\n }\n ok = ok && modules.length >= currentModules.length;\n } else if (mode === 2) {\n // All the elements specified\n for (const mod of modules) {\n ok = currentModules.findIndex(x => x.value === mod) !== -1;\n if (!ok) break;\n }\n } else if (mode === 3) {\n // Any of the specified elements\n for (const mod of modules) {\n ok = currentModules.findIndex(x => x.value === mod) !== -1;\n if (ok) break;\n }\n }\n return ok;\n }\n\n /**\n * Returns the sort options available for the given module selection.\n * Includes the relevance option only when the query contains free text.\n * @param modules - Currently selected modules (used to determine which date axes are available).\n * @param params - Current search params (checked for free-text content).\n * @returns Array of applicable `NameValueItem<ClipperSort>` sort options.\n */\n static getClipperAvailableSortOptions(\n modules?: NameValueItem<ClipperModule>[],\n params?: ClipperSearchParams): NameValueItem<ClipperSort>[] {\n const options: NameValueItem<ClipperSort>[] = [\n { name: \"Data decrescente\", value: ClipperSort.DateDesc },\n { name: \"Data crescente\", value: ClipperSort.DateAsc },\n { name: \"Data fonte decrescente\", value: ClipperSort.SourceDateDesc },\n { name: \"Data fonte crescente\", value: ClipperSort.SourceDateAsc },\n { name: \"Rilevanza\", value: ClipperSort.Relevance },\n //{ name: \"Popolarità\", value: ClipperSort.Popularity },\n ];\n const sortOptions: NameValueItem<ClipperSort>[] = []\n if (params && ClipperSearchUtils.isTextQuery(params)) {\n sortOptions.push(options[4]);\n }\n if (modules && modules.length > 0) {\n if (this.checkModules([ClipperModule.GazzetteBollettiniEFontiDiverse], modules, 1)) {\n sortOptions.push(options[2]);\n sortOptions.push(options[3]);\n } else if (this.checkModules([ClipperModule.NormativaVigente], modules, 1) ||\n this.checkModules([ClipperModule.Giurisprudenza], modules, 1)) {\n sortOptions.push(options[0]);\n sortOptions.push(options[1]);\n } else {\n sortOptions.push(options[0]);\n sortOptions.push(options[1]);\n }\n } else {\n sortOptions.push(options[0]);\n sortOptions.push(options[1]);\n }\n return sortOptions;\n }\n\n}\n\nexport class ClipperSearchUtils {\n\n /**\n * Resets all filter fields of a `ClipperSearchParams` instance to their default (empty) values.\n * @param params - The search-params object to clear.\n */\n static clear(params: ClipperSearchParams): void {\n params.sector = undefined;\n params.sectors = undefined;\n params.author = undefined;\n params.authors = undefined;\n params.topic = undefined;\n params.topics = undefined;\n params.taxonomy = undefined;\n params.taxonomies = undefined;\n params.taxonomyPath = undefined;\n params.taxonomyNode = undefined;\n params.number = undefined;\n params.fromDate = undefined;\n params.toDate = undefined;\n params.year = undefined;\n params.sourceNumber = undefined;\n params.source = undefined;\n params.sourceFromDate = undefined;\n params.sourceToDate = undefined;\n params.sourceYear = undefined;\n params.tags = undefined;\n params.text = undefined;\n params.titleOnly = false;\n params.type = undefined;\n params.types = undefined;\n params.showUnreadDocumentsOnly = false;\n params.showCommentedDocumentsOnly = false;\n params.showNotAbrogatedDocumentsOnly = false;\n if (!params.channels || params.channels.length === 0) {\n params.channels = [...ClipperChannels];\n }\n params.changeReason = undefined;\n params.changedNumber = undefined;\n params.changedYear = undefined;\n params.changedTitle = undefined;\n params.changedId = undefined;\n params.modifierId = undefined;\n params.modifierNumber = undefined;\n params.modifierYear = undefined;\n params.modifierTitle = undefined;\n params.model = undefined;\n params.models = undefined;\n params.module = undefined;\n params.modules = undefined;\n }\n\n\n /**\n * Returns the list of `ClipperModel` values that correspond to the given modules.\n * @param modules - The selected modules to map to their underlying data models.\n * @returns Array of `ClipperModel` values matching the provided modules.\n */\n static getModulesModels(modules?: NameValueItem<ClipperModule>[]): ClipperModel[] {\n const models: ClipperModel[] = [];\n if (modules && modules.length > 0) {\n modules.forEach(module => {\n switch (module.value) {\n case ClipperModule.ScadenzeESegnalazioni:\n [ClipperModel.Scadenze, ClipperModel.Segnalazioni].forEach(x => models.push(x));\n break;\n case ClipperModule.QuesitiECasiRisolti:\n models.push(ClipperModel.Quesiti);\n break;\n case ClipperModule.News:\n models.push(ClipperModel.News);\n break;\n case ClipperModule.Approfondimenti:\n models.push(ClipperModel.Articoli);\n break;\n //case ClipperModule.AllerteAlimentari:\n // models.push(ClipperModel.AllerteAlimentari);\n // break;\n case ClipperModule.GazzetteBollettiniEFontiDiverse:\n models.push(ClipperModel.AggiornamentoNormativo);\n break;\n case ClipperModule.GiurisprudenzaRecente:\n models.push(ClipperModel.GiurisprudenzaRecente);\n break;\n case ClipperModule.NormativaVigente:\n models.push(ClipperModel.NormativaVigente);\n break;\n case ClipperModule.ModificheAbrogazioniERinvii:\n models.push(ClipperModel.Coordinamento);\n break;\n case ClipperModule.Giurisprudenza:\n models.push(ClipperModel.Juris);\n break;\n }\n });\n }\n return models;\n }\n\n /**\n * Returns `true` when the search params contain a non-empty free-text query.\n * @param params - The search params to inspect.\n */\n static isTextQuery(params: ClipperSearchParams): boolean {\n return params.text != null && params.text.length > 0;\n }\n\n /**\n * Wraps `q` in quotes (if not already quoted) and appends it to `queries`.\n * @param q - A single search term to process.\n * @param queries - The accumulated query string to append to.\n * @returns The updated `queries` string.\n */\n private static concatTextQuery(q: string, queries: string): string {\n if (q && q.length > 1) {\n if ((q[0] === '+' || q[0] === '-') && q[1] !== '\"') {\n q = q[0] + '\"' + q.substring(1) + '\"';\n } else if (q[0] !== '\"') {\n q = \"\\\"\" + q + \"\\\"\";\n }\n queries += q + \" \";\n }\n return queries;\n }\n\n /**\n * Normalises a comma-separated search string by wrapping each term in quotes.\n * @param text - The raw search input to normalise.\n * @returns The normalised query string, or `undefined` when `text` is empty.\n */\n static normalizeTextQuery(text: string): string | undefined {\n if (!text || text.length === 0) return undefined;\n let q: string = '';\n let queries: string = '';\n for (let i = 0; i < text.length; i++) {\n if (text[i] === ',') {\n queries = this.concatTextQuery(q.trim(), queries);\n q = '';\n }\n else q += text[i];\n }\n queries = this.concatTextQuery(q.trim(), queries);\n return queries;\n }\n\n /**\n * Wraps the entire query in double quotes when it contains no boolean operators\n * (`\"`, `+`, or ` -`), making it an exact-phrase search.\n * @param text - The query string to normalise.\n * @returns The normalised query string.\n */\n static normalizeTextQuery2(text: string): string {\n if (!text) return text;\n // Add quotes only if there are no quoted elements, no '+', and no ' -'\n if (!text.includes('\"') && !text.includes('+') && !text.includes(' -')) {\n return '\"' + text + '\"';\n }\n return text;\n }\n\n\n /**\n * Maps a letter rank (`A`, `B`, or any other) to a numeric relevance threshold.\n * @param value - The single-character rank string.\n * @returns `0.751` for `'A'`, `0.71` for `'B'`, `0.51` for anything else.\n */\n static getRankFromChar(value: string): number {\n switch (value.toUpperCase()) {\n case 'A': return 0.751;\n case 'B': return 0.71;\n default:\n return 0.51;\n }\n }\n}","/**\n * HTML text helpers with no dependencies of their own.\n *\n * Not exported from `public_api`: it is an internal detail of this entry point. `escapeHtml` lives\n * in a file of its own, and not next to the service that needs it, because `ClipperCoreService`\n * has to escape and everything else in its neighbourhood imports it back -- a helper that turns\n * text into text has no business being in that cycle.\n */\n\n/**\n * Escapes the five characters that give HTML its meaning, so a string can be shown inside markup\n * without being parsed as markup.\n *\n * It exists because the dialogs bind their content with `[innerHTML]` through the `safeHtml` pipe,\n * which calls `bypassSecurityTrustHtml`: whatever reaches them is rendered, not escaped. Text that\n * comes from outside the application -- an API error message above all -- has to be neutralised\n * before it gets there, and any formatting the application itself wants must be added afterwards.\n * The overloads keep the caller's own optionality: escaping a string gives a string back, so a\n * call site that already knew it had text does not suddenly have to handle `undefined`.\n * @param value - The raw text to escape.\n * @returns The escaped text, or `undefined` when there was nothing to escape.\n */\nexport function escapeHtml(value: string): string;\nexport function escapeHtml(value: string | undefined): string | undefined;\nexport function escapeHtml(value?: string): string | undefined {\n if (value === undefined || value === null) return undefined;\n return String(value)\n .replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\"', '"')\n .replaceAll(\"'\", \"'\");\n}\n","import { HttpInterceptorFn, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { BroadcastService, ErrorInfo } from '@arsedizioni/ars-utils/core';\nimport { EMPTY, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { ClipperServiceFlags } from '../definitions';\nimport { escapeHtml } from '../html';\nimport { ClipperMessages } from '../messages';\n\n/** How many more times a request is sent when the API is not there. */\nconst UNAVAILABLE_RETRIES = 2;\n\n/** How long to wait before each of those retries, in milliseconds. */\nconst UNAVAILABLE_RETRY_DELAY = 5000;\n\n/** The statuses a server that is being replaced answers with, plus the one it cannot answer at all. */\nconst UNAVAILABLE_STATUSES = [0, 500, 502, 503, 504];\n\n/** Minimum milliseconds between consecutive generic error broadcasts. */\nconst ERROR_DEBOUNCE_MS = 5000;\n\n/**\n * Returns whether the failure means the API is not there, rather than the request being wrong.\n *\n * The discriminator is the body, not the status. An error raised INSIDE the application arrives\n * through `ApiExceptionHandler` wrapped in the usual `ApiResult` envelope, so it has been seen,\n * parsed and acted upon: replaying it would run whatever it already ran a second time. A server\n * that is being replaced answers with IIS's own HTML, or with nothing at all — no envelope — and\n * that request never reached any handler. Only the second kind is retried, which is what makes it\n * safe to retry a POST.\n * @param error - The raw HTTP error object.\n * @returns True when the request is worth sending again.\n */\nfunction isServiceUnavailable(error: any): boolean {\n if (!UNAVAILABLE_STATUSES.includes(parseInt(error?.status ?? '0'))) return false;\n\n const body = error?.error;\n const isApiEnvelope = !!body\n && typeof body === 'object'\n && !(body instanceof Blob)\n && ('success' in body || 'problem' in body);\n\n return !isApiEnvelope;\n}\n\n/**\n * Returns whether the URL is an authentication endpoint where a 401 is a normal outcome — wrong\n * credentials, a pending code challenge, a rejected assertion — rather than an expired session.\n *\n * The list covers the whole Clipper 7.5 sign-in surface, including the ways in that this library\n * does not itself offer: a host application registers one interceptor for every call it makes to\n * the API, its own passkey and recovery flows included.\n * @param url - The request URL.\n * @returns True when the URL is a login/confirm/otp/oauth/passkey endpoint.\n */\nfunction isAuthEndpoint(url: string): boolean {\n return url.includes('/session/login')\n || url.includes('/session/confirm')\n || url.includes('/session/otp')\n || url.includes('/session/oauth')\n || url.includes('/passkeys/login')\n || url.includes('/passkeys/request-options');\n}\n\n/**\n * Returns whether the failure means the session is gone rather than the request being wrong.\n * @param errorStatus - The numeric HTTP status code.\n * @param url - The request URL.\n * @returns True when the client must be sent back to the sign-in page.\n */\nfunction isSessionExpired(errorStatus: number, url: string): boolean {\n return errorStatus === 401 && !isAuthEndpoint(url);\n}\n\n/**\n * Returns whether the URL is the silent link probe, whose failures must never reach the user.\n *\n * `/session/status` runs unconditionally at every bootstrap, including for users who never linked\n * Clipper at all. When the API is unreachable, reporting that failure would show \"Clipper non\n * disponibile\" to somebody who never asked Clipper for anything: the probe simply stays unanswered\n * and the link state keeps whatever the stored hint says.\n * @param url - The request URL.\n * @returns True when the URL is the status probe.\n */\nfunction isStatusProbe(url: string): boolean {\n return url.includes('/session/status');\n}\n\n/**\n * Resolves a user-facing error message based on the HTTP status code.\n *\n * There is no branch for status 0 any more, nor for the 5xx family: a request that got no answer,\n * or an answer with no `ApiResult` envelope, never reaches here — it is retried and then reported\n * as `ERROR_UNAVAILABLE`. What is left is the failures the API itself described.\n *\n * Whatever the API sends is escaped before anything else happens to it. The dialog that shows this\n * string binds it with `[innerHTML]` through a pipe that calls `bypassSecurityTrustHtml`, so an\n * error message echoing back something a user had typed would be rendered as markup rather than\n * read as text. The paragraph breaks in the default branch are applied AFTER the escape, which is\n * exactly why they survive it and nothing else does.\n * @param error - The raw HTTP error object.\n * @param errorStatus - The numeric HTTP status code.\n * @returns A localised error message, safe to render as HTML.\n */\nfunction resolveErrorMessage(error: any, errorStatus: number): string {\n const message = escapeHtml(error?.error?.message ?? error?.message);\n switch (errorStatus) {\n case 401:\n // A 401 that reaches here comes from a login attempt: wrong credentials, a rejected\n // assertion, or an account whose access was revoked.\n return message ?? 'Credenziali non valide o accesso non abilitato.';\n case 403:\n return 'Non hai i permessi necessari per eseguire l\\'operazione richiesta.';\n case 429:\n return message ?? 'Troppe richieste consecutive. Aspetta qualche secondo.';\n default:\n return (message ?? 'Impossibile eseguire l\\'operazione richiesta.')\n .replaceAll('\\r\\n', '</p><p>');\n }\n}\n\n/**\n * Builds the Clipper auth HTTP interceptor.\n *\n * Attaches the credentials and the service-worker bypass header to every request aimed at the\n * Clipper API, and turns HTTP failures into broadcast messages — no UI dependency here.\n *\n * Takes the Clipper base URI and the service flags directly as arguments, captured in the closure,\n * so it never injects `ClipperService`: registering it does not pull the whole Clipper service into\n * the eager bundle. The debounce and the two notification latches live in that same closure, so two\n * applications registering two interceptors never share them.\n *\n * ## What the statuses mean\n *\n * Aligned with the Clipper 7.5 API on 2026-08-25. The meaning of the status codes changed with the\n * API: failures used to arrive as `200 OK` with `success: false`, and this interceptor had to guess.\n * Now the status is the truth — a 401 on an already-authenticated request means the session is\n * gone, a 403 means the permission is missing, and a 5xx means the server broke, which is not the\n * same thing at all and must not sign the user out.\n *\n * A dead session is broadcast as `ClipperMessages.ERROR_401`, for the host application to handle\n * centrally; every other failure stays a `ClipperMessages.ERROR` carrying a message. The two are\n * separate because they call for opposite things: one returns to the sign-in page, the other shows\n * a dialog and leaves the user where they are.\n *\n * Between them sits the third case, which is neither: the API is being replaced. A deployment\n * answers with a 5xx that has no `ApiResult` envelope, or does not answer at all, for the few\n * seconds the process takes to come back. That is not worth a dialog and not worth a redirect\n * either, so the request is simply sent again — twice, five seconds apart — and only if the third\n * attempt fails too does it become `ClipperMessages.ERROR_UNAVAILABLE`.\n *\n * `ClipperServiceFlags.NotifySystemErrors` still governs one narrow case, and only that one: a 5xx\n * that DOES carry an envelope, i.e. a server error the API itself described. Without the flag it is\n * swallowed, as it always was in this library.\n *\n * Register it with `withInterceptors`:\n * @example\n * provideHttpClient(withInterceptors([\n * clipperAuthInterceptor(environment.serviceUri, ClipperServiceFlags.NotifySystemErrors),\n * ]))\n *\n * @param serviceUri - Base URI of the Clipper service; only requests starting with it are handled.\n * @param flags - Service flags (e.g. NotifySystemErrors). Defaults to None.\n * @returns An `HttpInterceptorFn` ready to register.\n */\nexport function clipperAuthInterceptor(\n serviceUri: string,\n flags: ClipperServiceFlags = ClipperServiceFlags.None\n): HttpInterceptorFn {\n\n /** Timestamp of the last generic error shown, used to debounce repeated error messages. */\n let lastErrorTime = -1;\n\n /**\n * Whether the unavailable-API notification has already been sent. A deployment fails every\n * request in flight, and one notification is enough. Re-armed on the next successful response.\n */\n let unavailableNotified = false;\n\n /**\n * Whether the session-expiry notification has already been sent. Prevents a storm of dialogs when\n * several in-flight requests fail at once; re-armed on the next successful response.\n */\n let sessionExpiredNotified = false;\n\n /**\n * Broadcasts a generic, user-facing error for a Clipper HTTP failure, debounced.\n * @param error - The raw error value thrown by the HTTP layer.\n * @param errorStatus - The numeric HTTP status code.\n * @param broadcastService - The broadcast service for the current request.\n * @returns void\n */\n function notifyError(error: unknown, errorStatus: number, broadcastService: BroadcastService): void {\n // A 5xx the API described itself is the one case the flag still governs.\n if (errorStatus >= 500 && (flags & ClipperServiceFlags.NotifySystemErrors) === 0) return;\n\n const now = Date.now();\n if (now - lastErrorTime <= ERROR_DEBOUNCE_MS) return;\n lastErrorTime = now;\n\n broadcastService.sendMessage(\n ClipperMessages.ERROR,\n {\n message: resolveErrorMessage(error, errorStatus),\n title: \"Errore in Clipper\",\n errorStatus,\n service: serviceUri\n } as ErrorInfo\n );\n }\n\n // The interceptor itself. Runs in an injection context, so `inject()` works.\n return (request, next) => {\n if (!request.url.startsWith(serviceUri)) {\n return next(request);\n }\n\n const broadcastService = inject(BroadcastService);\n\n const authenticatedRequest = request.clone({\n withCredentials: true,\n setHeaders: {\n 'ngsw-bypass': 'ngsw-bypass',\n 'X-Client-Id': sessionStorage.getItem('clipper_client_id') ?? ''\n }\n });\n\n return next(authenticatedRequest).pipe(\n // An API that is being replaced is not an error to show, it is a wait: two more attempts,\n // five seconds apart. Anything else is rethrown on the spot, so a request that genuinely\n // failed still fails immediately.\n retry({\n count: UNAVAILABLE_RETRIES,\n delay: error => isServiceUnavailable(error)\n ? timer(UNAVAILABLE_RETRY_DELAY)\n : throwError(() => error)\n }),\n tap(event => {\n // A successful response means the session is valid again, and the API is back: re-arm both\n // notifiers.\n if (event instanceof HttpResponse) {\n sessionExpiredNotified = false;\n unavailableNotified = false;\n }\n }),\n catchError((error: any) => {\n // Which request this was is read from the request, not from `error.url`: a failure with no\n // response — the browser refusing the connection while the API restarts — carries no URL\n // at all. Everything that gets here is a Clipper request anyway: the others returned\n // before the pipe was built.\n const errorStatus = parseInt(error?.status ?? '0');\n\n if (isStatusProbe(authenticatedRequest.url)) {\n // The silent probe stays silent: its caller reads the outcome from the stream, nobody\n // else needs to hear about it.\n } else if (isServiceUnavailable(error)) {\n // Three attempts over ten seconds and the API is still not answering. There is nothing\n // left to retry, so the host application is told once, however many requests were in\n // flight.\n if (!unavailableNotified) {\n unavailableNotified = true;\n broadcastService.sendMessage(ClipperMessages.ERROR_UNAVAILABLE);\n }\n } else if (isSessionExpired(errorStatus, authenticatedRequest.url)) {\n // Expired or invalidated session on an authenticated request. Notified once: several\n // in-flight requests failing together is how a single expiry becomes a wall of dialogs.\n if (!sessionExpiredNotified) {\n sessionExpiredNotified = true;\n broadcastService.sendMessage(ClipperMessages.ERROR_401);\n }\n } else {\n // Any other failure, including a 401 from a login attempt.\n notifyError(error, errorStatus, broadcastService);\n }\n\n // Consumed, not rethrown — as in Clipper 7.5. The failure has been reported on the bus, and\n // rethrowing it a second time only gave every subscriber its own chance to report it again.\n // A caller that must know how a request ended reads `ApiResult.success`; one that subscribes\n // to a failing request now simply completes without emitting.\n return EMPTY;\n })\n );\n };\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Service, inject } from '@angular/core';\nimport { ApiResult, BroadcastService, SplashService } from '@arsedizioni/ars-utils/core';\nimport { Observable, catchError, finalize, map, of, throwError } from 'rxjs';\nimport { ClipperLoginResult, ClipperOTPInfo, ClipperSessionStatus, ClipperUserInfo } from '../definitions';\nimport { ClipperMessages } from '../messages';\nimport { ClipperCoreService } from './core.service';\n\n/**\n * Authentication: password login, e-mailed code confirmation, logout and session restore.\n * The login context, the channels and the logged-in flag live in `ClipperCoreService`.\n *\n * Aligned with the Clipper 7.5 API on 2026-08-25. Everything here now goes through `/session/*`\n * and an HttpOnly cookie: there is no bearer token, no `remember` credential the API can replay,\n * and no OAuth token acquired by the caller — the external-provider flow is a full-page redirect\n * handled server-side, and all that reaches this service is the `/session/me` call on the way back.\n *\n * This is a deliberately reduced subset of what the Clipper application itself does. Passkeys and\n * the passwordless recovery code (`/session/otp`) are not here: a library whose job is showing\n * documents signs in with a password, and an application that offers the other ways in owns them.\n */\n@Service()\nexport class ClipperLoginService {\n\n private readonly httpClient = inject(HttpClient);\n private readonly broadcastService = inject(BroadcastService);\n private readonly splashService = inject(SplashService);\n private readonly core = inject(ClipperCoreService);\n\n /** Whether {@link initialize} has already run. */\n private initialized = false;\n\n /**\n * Gets the signed-in account.\n * @returns The current {@link ClipperUserInfo}, or `undefined` when there is no session.\n */\n get user(): ClipperUserInfo | undefined { return this.core.user; }\n\n\n ////\n // BOOTSTRAP\n ////\n\n /**\n * Establishes the session state at bootstrap by asking the API — the only party that can read the\n * HttpOnly cookie — whether this browser still holds one.\n *\n * Called by `ClipperService.initialize`, right after `ClipperCoreService.initialize`, so a\n * consumer gets the restore for free and never has to know this method exists.\n *\n * The probe now runs UNCONDITIONALLY, where it used to run only when a stored context existed.\n * The stored context is just a hint — \"this browser signed in at some point\" — and the cookie can\n * outlive it: local storage cleared while the month-long cookie stayed put made this library\n * declare \"no link\" with a perfectly valid session in the browser. The API is the only source of\n * truth on the matter, so it is asked every time.\n *\n * A host application that drives its own return from an external provider, or that starts on its\n * own sign-in page, should call `core.setLoggedIn(false)` before bootstrapping rather than let\n * this race its own restore.\n * @returns void\n */\n initialize(): void {\n if (this.initialized) return;\n this.initialized = true;\n\n this.core.loggingIn.set(true);\n this.restoreSession();\n }\n\n /**\n * Asks `/session/status` whether this browser holds a live session, and hydrates the context\n * through {@link me} when it does.\n *\n * The probe is silent by construction: `/session/status` never answers 401, so a visitor who\n * never signed in — or a cookie whose session has died — comes back as `connected: false` with no\n * error broadcast and no dialog. Only then is the stale stored context cleared, so the `loggedIn`\n * signal tells the truth at every bootstrap.\n *\n * Nothing is cleared on a transport failure, and that is deliberate: an unreachable API is not\n * proof of a dead session — the proxy may have answered 502, the device may be offline — and\n * clearing on any of those would sign the user out with a perfectly valid cookie.\n * @returns void\n */\n private restoreSession(): void {\n // Whether the probe handed over to `/session/me`, which then owns lowering `loggingIn`.\n let restoring = false;\n this.status()\n .pipe(finalize(() => { if (!restoring) { this.core.loggingIn.set(false); } }))\n .subscribe({\n next: r => {\n if (r?.success && r.value?.connected) {\n restoring = true;\n this.me()\n .pipe(finalize(() => this.core.loggingIn.set(false)))\n .subscribe({\n next: m => {\n if (m?.success) {\n this.broadcastService.sendMessage(ClipperMessages.LOGIN_COMPLETED);\n }\n },\n // Consumed so the rethrown error is not reported a second time as an unhandled one.\n error: () => { }\n });\n } else if (this.core.loggedIn()) {\n // The stored context outlived its session: drop it, or the next bootstrap would keep\n // claiming a session that is gone.\n this.core.clear(true);\n }\n },\n // Transport failure: keep the stored hint, the next bootstrap will ask again.\n error: () => { }\n });\n }\n\n\n ////\n // SESSION\n ////\n\n /**\n * Authenticates the user with email and password.\n *\n * Nothing is replayed from a stored credential any more: the former \"remember me\" token, which\n * let the API sign a caller in from something kept for sixty days, is gone. A login always starts\n * from what the user just typed.\n * @param email - The user's email address.\n * @param password - The user's password.\n * @returns An observable emitting the API result wrapping the login result.\n */\n login(email?: string, password?: string): Observable<ApiResult<ClipperLoginResult>> {\n this.splashService.setMessage('Accesso in corso...');\n return this.httpClient\n .post<ApiResult<ClipperLoginResult>>(\n this.core.serviceUri + '/session/login',\n { user: email ?? '', password: password ?? '' })\n .pipe(\n catchError(err => throwError(() => err)),\n map(r => {\n if (r.success) {\n if (r.value.requiresMfa) {\n // Notify the login is pending an e-mailed code.\n this.broadcastService.sendMessage(ClipperMessages.LOGIN_PENDING, {});\n } else {\n this.completeLogin(r.value);\n }\n }\n return r;\n }),\n );\n }\n\n /**\n * Confirms a pending e-mailed code challenge, which establishes the session.\n *\n * The address travels with the code because the API stores each code under the account it was\n * issued to: a code alone is not redeemable, which is what stops a guessed code from opening\n * whatever session happens to be pending. It also keeps the code out of the URL, where it used to\n * sit — `/login/confirm/{code}` put it in the path, and therefore in the server logs and in the\n * browser history.\n * @param code - The one-time confirmation code provided to the user.\n * @param email - The address the code was sent to.\n * @returns An observable emitting the API result wrapping the login result.\n */\n confirm(code: string, email?: string): Observable<ApiResult<ClipperLoginResult>> {\n return this.httpClient\n .post<ApiResult<ClipperLoginResult>>(\n this.core.serviceUri + '/session/confirm',\n { email: email, code: code })\n .pipe(\n catchError(err => throwError(() => err)),\n map(r => {\n if (r.success) {\n this.completeLogin(r.value);\n }\n return r;\n }),\n );\n }\n\n /**\n * Logs the user out on the server and clears the local state.\n * @returns An observable that emits once the logout has been processed.\n */\n logout(): Observable<ApiResult<unknown>> {\n return this.httpClient\n .post<ApiResult<unknown>>(this.core.serviceUri + '/session/logout', {})\n .pipe(\n finalize(() => this.core.clear(true)),\n catchError(() => of({ success: false } as ApiResult<unknown>)));\n }\n\n /**\n * Asks the API whether this browser holds a live session, without ever failing with a 401: the\n * route is anonymous and answers `connected: false` to a caller with no session. This is the one\n * honest way to know the link state — the auth cookie is HttpOnly and belongs to the API's host,\n * so it cannot be read from here, and its presence would prove nothing anyway, since the session\n * also lives server-side and may have been revoked or evicted.\n * @returns An observable emitting the API result wrapping the session status.\n */\n status(): Observable<ApiResult<ClipperSessionStatus>> {\n return this.httpClient\n .get<ApiResult<ClipperSessionStatus>>(this.core.serviceUri + '/session/status');\n }\n\n /**\n * Reads the current session from the server, which resolves it from the auth cookie claims\n * without touching the database. Used to restore the state after a page refresh instead of\n * trusting what local storage holds, and to close an external-provider round-trip.\n * @returns An observable emitting the current session.\n */\n me(): Observable<ApiResult<ClipperLoginResult>> {\n return this.httpClient\n .get<ApiResult<ClipperLoginResult>>(this.core.serviceUri + '/session/me', { withCredentials: true })\n .pipe(\n map(r => {\n if (r.success) {\n this.completeLogin(r.value, false);\n }\n return r;\n }),\n );\n }\n\n /**\n * Finalises the login flow after an authentication, a code confirmation or a session restore:\n * writes the context into the shared state, raises the logged-in signal, rebuilds the channel\n * list and announces `LOGIN_COMPLETED`.\n *\n * `loggingIn` is deliberately left alone. Whoever raised it lowers it — {@link restoreSession}\n * for a refresh, the host application for an external-login round-trip — because lowering it\n * here would drop the splash the instant the response arrived, before anything was on screen.\n * @param result - The login result returned by the API.\n * @param notify - Whether to broadcast `LOGIN_COMPLETED`. Defaults to `true`.\n * @returns void\n */\n private completeLogin(result: ClipperLoginResult, notify: boolean = true): void {\n this.core.updateContext(result);\n this.core.setLoggedIn(true);\n this.core.initializeChannels();\n if (notify) {\n this.broadcastService.sendMessage(ClipperMessages.LOGIN_COMPLETED);\n }\n }\n\n /**\n * Requests a new one-time password used to authorise a binary download.\n * @param id - The repository ID of the binary the OTP is generated for.\n * @returns An observable emitting the API result wrapping the generated OTP info.\n */\n newOTP(id: string): Observable<ApiResult<ClipperOTPInfo>> {\n return this.httpClient.get<ApiResult<ClipperOTPInfo>>(\n this.core.serviceUri + '/otp/new/?id=' + id,\n );\n }\n\n\n ////\n // CONTEXT (re-published from ClipperCoreService for consumer convenience)\n ////\n\n /**\n * Persists the current login context to `localStorage`.\n * Delegates to `ClipperCoreService.storeContext()`.\n * @returns void\n */\n storeContext(): void {\n this.core.storeContext();\n }\n\n /**\n * Clears every trace of the current session on this device: the stored context, the logged-in\n * signal and the session-storage keys. Does NOT call the server — use {@link logout} for that.\n * Delegates to `ClipperCoreService.clear()`.\n * @param clearOAuthToken - Whether to drop the legacy OAuth token too. Defaults to `true`.\n * @returns void\n */\n clear(clearOAuthToken: boolean = true): void {\n this.core.clear(clearOAuthToken);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, Injector, Service, Signal, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ApiResult, BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { EMPTY } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport {\n ClipperAvailableChannel,\n ClipperChannels,\n ClipperDashboard,\n ClipperDocumentInfo,\n ClipperLoginInfo,\n ClipperLoginResult,\n ClipperSearchResult,\n ClipperServiceFlags,\n ClipperUserInfo,\n} from '../definitions';\nimport { escapeHtml } from '../html';\nimport { ClipperMessages } from '../messages';\nimport { ClipperLoginService } from './login.service';\n\n/**\n * Shared state and bootstrap for the Clipper application.\n *\n * Holds every piece of state used by more than one feature service (service URI,\n * flags, login context, dashboard, working-documents bag, channels and the various\n * UI signals) plus the low-level helpers that mutate that state.\n *\n * The feature services (`ClipperLoginService`, `ClipperDocumentsService`, ...) inject\n * this service to read shared state and call shared helpers. `ClipperService` (the\n * barrel/facade) re-exports the state declared here.\n */\n@Service()\nexport class ClipperCoreService {\n\n private readonly httpClient = inject(HttpClient);\n private readonly destroyRef = inject(DestroyRef);\n private readonly broadcastService = inject(BroadcastService);\n /** Used to lazily resolve feature services inside `initialize`, avoiding circular DI. */\n private readonly injector = inject(Injector);\n\n private broadcastInitialized = false;\n\n private _appUri?: string;\n /** @returns The URI of the Clipper web application, or `undefined` if not set. */\n get appUri(): string | undefined {\n return this._appUri;\n }\n\n private _serviceUri: string = '';\n /** @returns The base URI of the Clipper REST API. */\n get serviceUri(): string {\n return this._serviceUri;\n }\n\n private _flags: ClipperServiceFlags = ClipperServiceFlags.None;\n /** @returns The active feature flags. */\n get flags(): ClipperServiceFlags {\n return this._flags;\n }\n\n private _loginInfo?: ClipperLoginInfo;\n /**\n * Lazily loads the login context from `localStorage` on first access.\n * @returns The current login context, or `undefined` if not authenticated.\n */\n get loginInfo(): ClipperLoginInfo | undefined {\n if (!this._loginInfo) {\n const loginInfo = localStorage.getItem('clipper_context');\n if (loginInfo) {\n try {\n this._loginInfo = JSON.parse(loginInfo) as ClipperLoginInfo;\n } catch { }\n }\n }\n return this._loginInfo;\n }\n\n /**\n * Gets the signed-in account.\n * @returns The current {@link ClipperUserInfo}, or `undefined` when there is no session.\n */\n get user(): ClipperUserInfo | undefined { return this.loginInfo?.context; }\n\n /**\n * Seeded from the stored context, which is the only trace a session leaves on this device: the\n * auth cookie is HttpOnly and unreadable from here. It means \"there WAS a session\", never \"there\n * is one\" -- `ClipperLoginService.initialize` validates it against `/session/me` before it is\n * trusted, and a failure there ends as a 401 that clears the session.\n *\n * It used to be seeded from a `clipper_oauth_token` session-storage key, which nothing has\n * written since the provider flow moved server-side: the flag was therefore false at every\n * bootstrap and the whole restore path could never run.\n */\n private readonly _loggedIn = signal<boolean>(localStorage.getItem('clipper_context') !== null);\n public readonly loggedIn: Signal<boolean> = this._loggedIn.asReadonly();\n public readonly loggingIn = signal<boolean>(false);\n public readonly snapshot = signal<ClipperSearchResult | undefined>(undefined);\n public readonly supportsRS = signal<boolean>(false);\n public readonly referencesSnapshot = signal<ClipperSearchResult | undefined>(undefined);\n public readonly dashboard: ClipperDashboard = new ClipperDashboard();\n public readonly bag = signal<ClipperDocumentInfo[]>([]);\n public readonly bagTotal: Signal<number> = computed(() => this.bag().length);\n public readonly visible = signal<boolean>(false);\n\n public readonly availableChannels = signal<ClipperAvailableChannel[]>([]);\n public readonly activeChannels: Signal<ClipperAvailableChannel[]> = computed(() => {\n return this.availableChannels()?.filter(x => !x.suspended && !x.disabled && x.active === true);\n });\n public readonly allowTags = signal<boolean>(false);\n\n\n ////\n // SHARED MUTATORS\n ////\n\n /**\n * Ensures a login-info object exists and returns it for further mutation.\n * Replaces the inline `if (!this._loginInfo) { ... }` guards now that the field\n * is private to this service.\n *\n * Reads through the getter, never the field: the context is loaded from storage lazily, so a\n * caller that mutates before anyone has read would find the field empty and start from a blank\n * object, silently dropping a perfectly good stored context.\n * @returns The existing login-info object, or a freshly created empty one.\n */\n ensureLoginInfo(): ClipperLoginInfo {\n if (!this.loginInfo) {\n this._loginInfo = { context: undefined };\n }\n return this._loginInfo!;\n }\n\n /**\n * Sets the logged-in state. The backing signal is read-only to consumers, so the\n * feature services use this method instead.\n * @param value - The new logged-in state.\n */\n setLoggedIn(value: boolean): void {\n this._loggedIn.set(value);\n }\n\n /**\n * Persists the current login context to `localStorage`, but only when there is a context to\n * persist. A login-info object with no `context` is not a session: it is the empty shell\n * `ensureLoginInfo` hands out before anything has been written into it, and storing it would leave\n * behind a key whose mere presence makes the next bootstrap declare the user logged in.\n */\n storeContext(): void {\n // Through the getter, never the field: the context is loaded from storage lazily, so a caller\n // that stores before anyone has read would otherwise find the field empty and DELETE a\n // perfectly good stored context.\n if (!this.user) {\n // Nothing to store. Falling through would call `JSON.stringify(undefined)`, whose result is\n // the value `undefined`, which local storage writes as the nine-letter STRING \"undefined\" --\n // a key that exists, parses to nothing, and makes the next bootstrap believe a session was\n // left behind here. Removing it says the truth instead.\n localStorage.removeItem('clipper_context');\n return;\n }\n localStorage.setItem('clipper_context', JSON.stringify(this._loginInfo));\n }\n\n /**\n * Updates the stored login context with the values from a fresh login result.\n *\n * Each half is written only when the server actually sent it. An absent `context` or `settings`\n * means \"not carried by this response\", never \"the user has none\": overwriting on absence is what\n * made a page refresh empty the channel list, because `/session/me` answers without the settings\n * and this method wrote that emptiness -- through `storeContext`, onto the disk, where it survived\n * the reload it was born in. An EMPTY array is a different matter and is stored as it comes: that\n * is the server saying the subscription really is gone.\n * @param result - The login result containing the new user context and channel settings.\n */\n updateContext(result: ClipperLoginResult): void {\n const info = this.ensureLoginInfo();\n if (result.context) {\n info.context = result.context;\n }\n if (result.settings) {\n info.channels = result.settings;\n }\n this.storeContext();\n }\n\n /**\n * Rebuilds the `availableChannels` signal from the current login context.\n */\n initializeChannels(): void {\n if (this.loginInfo) {\n const channels: ClipperAvailableChannel[] = [];\n this.loginInfo.channels?.forEach(n => {\n const channelSubscription = this.user?.channels?.find(x => x.channel === n.channelId);\n n.isSuspended = channelSubscription?.isSuspended === true;\n const channel = ClipperChannels.find(x => x.value === n.channelId) as ClipperAvailableChannel;\n if (channel) {\n channel.disabled = !n.isActive;\n channel.suspended = n.isSuspended === true;\n channel.active = n.isActive === true && n.isEnabled === true;\n channels.push(channel);\n }\n });\n this.availableChannels.set(channels);\n }\n }\n\n /**\n * Resets the login state, clears the stored login info, and broadcasts `LOGOUT_COMPLETED`.\n */\n reset(): void {\n // Clear login info, in memory AND on disk: `loginInfo` re-reads local storage whenever the\n // field is empty, so leaving the stored copy behind would resurrect the previous user.\n this._loginInfo = undefined;\n localStorage.removeItem('clipper_context');\n // Logged out\n this._loggedIn.set(false);\n // Reset channels\n this.availableChannels.set([]);\n // Notify\n this.broadcastService.sendMessage(ClipperMessages.LOGOUT_COMPLETED);\n }\n\n /**\n * Clears all session-storage authentication keys and resets the login state.\n * @param clearOAuthToken - When `true`, the OAuth bearer token is also removed.\n */\n clear(clearOAuthToken: boolean = false): void {\n // Clear local storage\n sessionStorage.removeItem('clipper_auth');\n sessionStorage.removeItem('clipper_oauth');\n if (clearOAuthToken) {\n sessionStorage.removeItem('clipper_oauth_token');\n }\n\n // Reset login\n this.reset();\n }\n\n\n ////\n // BOOTSTRAP\n ////\n\n /**\n * Initialises the service with the API base URI, optional app URI, and feature flags.\n * @param serviceUri - The base URI of the Clipper REST API.\n * @param appUri - Optional URI of the Clipper web application (used to build document links).\n * @param flags - Feature flags that control service behaviour. Defaults to `ClipperServiceFlags.None`.\n */\n initialize(\n serviceUri: string,\n appUri?: string,\n flags: ClipperServiceFlags = ClipperServiceFlags.None,\n ) {\n\n // Create unique client and machine id\n if (!sessionStorage.getItem('clipper_client_id')) {\n sessionStorage.setItem('clipper_client_id',\n (flags && ClipperServiceFlags.Embedded) > 0\n ? 'embedded'\n : SystemUtils.generateUUID());\n }\n\n // Initialize\n this._serviceUri = serviceUri;\n this._appUri = appUri;\n this._flags = flags;\n\n // React to message broadcasting\n if (!this.broadcastInitialized) {\n this.broadcastInitialized = true;\n this.broadcastService.getMessage()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(message => {\n if (message.id === ClipperMessages.LOGOUT) {\n if (this.loggedIn()) {\n this.injector.get(ClipperLoginService).logout().subscribe(r => {\n if (!r.success) {\n if (r.message) {\n this.broadcastService.sendMessage(ClipperMessages.ERROR,\n // The surrounding markup is ours; the server's message is escaped, because\n // the dialog renders this string as HTML.\n { message: \"<p>\" + escapeHtml(r.message) + \"</p><br><br><hr><p class='small'><i>Per eliminare la configurazione di Clipper accedere a:<br><b>menu > personalizza > collegamenti</b></i></p>\" });\n }\n } else {\n if ((this.flags & ClipperServiceFlags.DisplayConnectionStateMessages) > 0) {\n this.broadcastService.sendMessage(ClipperMessages.SUCCESS_TOAST,\n { message: \"Disconnesso da Clipper\", icon: 'power_off', duration: 1500 });\n }\n // Empty bag\n this.bag.set([]);\n }\n });\n } else {\n // No session to close server-side, but the device must still be left clean.\n this.clear(true);\n }\n }\n });\n }\n\n // A page refresh is NOT handled here. Announcing LOGIN_COMPLETED from a stored context would\n // declare a session before anyone has asked the server whether it is still alive, and the\n // consumer would then treat the inevitable 401 as \"your session just expired\" rather than as a\n // bootstrap that never got off the ground. `ClipperLoginService.initialize` -- which\n // `ClipperService.initialize` runs right after this method -- validates the context against\n // `/session/me` first and announces the login only if it holds.\n }\n\n /**\n * Ping\n */\n ping() {\n this.httpClient.get<ApiResult<number>>(\n this._serviceUri + '/ping?nocache=' + SystemUtils.generateUUID()\n )\n .pipe(catchError(() => { return EMPTY }))\n .subscribe();\n }\n}\n","import { Service, inject } from '@angular/core';\nimport { BroadcastService, NameValueItem } from '@arsedizioni/ars-utils/core';\nimport {\n ClipperChannel,\n ClipperModel,\n ClipperModule,\n} from '../definitions';\nimport { ClipperMessages } from '../messages';\nimport { ClipperCoreService } from './core.service';\n\n/**\n * The two pieces of account state the document views actually move: which channels are\n * active, and the unread counters on the dashboard.\n *\n * Everything else an account can do — password reset and recovery, settings, channel\n * activation towards the server, trial info, user links, loading the dashboard — belongs to\n * the application that owns the account, not to a library whose job is showing documents.\n * It was removed on 2026-08-25 together with the archive, calendar and collaboration worlds;\n * a product that needs those endpoints calls them itself.\n *\n * What is left touches no HTTP: both methods only mutate the shared state in\n * `ClipperCoreService` and announce the change on the broadcast bus.\n */\n@Service()\nexport class ClipperAccountService {\n\n private readonly broadcastService = inject(BroadcastService);\n private readonly core = inject(ClipperCoreService);\n\n /**\n * Toggles the active state of available channels based on the supplied selection list.\n * @param values - The selected channel items; channels absent from this list are deactivated.\n */\n updateChannels(values: NameValueItem<ClipperChannel>[]): void {\n this.core.availableChannels().forEach(channel => {\n if (!channel.disabled) {\n channel.active = values?.findIndex(x => x.value === channel.value) !== -1;\n }\n });\n }\n\n /**\n * Adjusts the unread-item counter for the given module and broadcasts a dashboard update.\n * @param module - The Clipper module whose counter should be adjusted.\n * @param model - Optional document model to further scope the counter update.\n * @param increment - The signed increment to apply (use negative values to decrement).\n */\n updateUnreadItems(module: ClipperModule, model?: ClipperModel, increment?: number): void {\n increment ??= 0;\n if (increment !== 0) {\n this.core.dashboard.updateUnreadItems(module, model, increment);\n }\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_DASHBOARD_UPDATED);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Service, inject } from '@angular/core';\nimport { ApiResult, BroadcastService, FolderTree, NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport {\n ClipperCalendarSearchParams,\n ClipperDocumentInfo,\n ClipperDocumentNote,\n ClipperDocumentStructure,\n ClipperDocumentUpdateStateParams,\n ClipperExportDocumentsParams,\n ClipperModule,\n ClipperQueryReferencesMode,\n ClipperReferencesSearchParams,\n ClipperSearchCalendarSnapshotResult,\n ClipperSearchFacetsResult,\n ClipperSearchParams,\n ClipperSearchResult,\n ClipperSendDocumentsByEmailParams,\n ClipperTaxonomyParams,\n ClipperUserSearch,\n ClipperUserWorkingDocument,\n} from '../definitions';\nimport { ClipperMessages } from '../messages';\nimport { ClipperCoreService } from './core.service';\n\n/**\n * Document search, references, export and metadata, plus the dashboard counters,\n * taxonomy/topics/tags lookups, the working-documents \"bag\" and saved searches.\n */\n@Service()\nexport class ClipperDocumentsService {\n\n private readonly httpClient = inject(HttpClient);\n private readonly broadcastService = inject(BroadcastService);\n private readonly core = inject(ClipperCoreService);\n\n\n /////\n // DOCUMENTS\n /////\n\n /**\n * Queries documents matching the given search parameters.\n * @param params - The document search parameters.\n * @returns An observable emitting the API result wrapping the search result.\n */\n query(params: ClipperSearchParams) {\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents',\n params\n );\n }\n\n /**\n * Retrieves the facets for a document query.\n * @param params - The document search parameters.\n * @returns An observable emitting the API result wrapping the search facets.\n */\n queryFacets(params: ClipperSearchParams) {\n return this.httpClient.post<ApiResult<ClipperSearchFacetsResult>>(\n this.core.serviceUri + '/documents/facets',\n params\n );\n }\n\n /**\n * Updates the state of one or more documents.\n * @param params - The document state update parameters.\n * @returns An observable emitting the API result wrapping the number of updated documents.\n */\n updateState(params: ClipperDocumentUpdateStateParams) {\n return this.httpClient.post<ApiResult<number>>(\n this.core.serviceUri + '/documents/state/update',\n params\n );\n }\n\n /**\n * Exports a single document in PDF format.\n * @param id - The ID of the document to export.\n * @returns An observable emitting the PDF binary content as a blob.\n */\n exportPdf(id: string) {\n return this.httpClient.get(\n this.core.serviceUri + '/documents/export/' + id,\n { responseType: 'blob' }\n );\n }\n\n /**\n * Exports a document list (query or selected items), or exports deadlines as ICS.\n * @param params - The export parameters.\n * @returns An observable emitting the exported content as a blob.\n */\n export(params: ClipperExportDocumentsParams) {\n return this.httpClient.post(\n this.core.serviceUri + '/documents/export',\n params,\n { responseType: 'blob' }\n );\n }\n\n /**\n * Sends document links by email.\n * @param params - The send-by-email parameters including recipients and documents.\n * @returns An observable emitting the API result wrapping the number of sent items.\n */\n sendTo(params: ClipperSendDocumentsByEmailParams) {\n return this.httpClient.post<ApiResult<number>>(\n this.core.serviceUri + '/documents/send',\n params\n );\n }\n\n /**\n * Retrieves the full document report page.\n * @param id - The ID of the document.\n * @returns An observable emitting the report content as a blob.\n */\n report(id: string) {\n return this.httpClient.get(\n this.core.serviceUri + '/documents/report/' + id,\n { responseType: 'blob' }\n );\n }\n\n /**\n * Gets the comment associated with a document.\n * @param id - The ID of the document.\n * @returns An observable emitting the API result wrapping the comment text.\n */\n comment(id: string) {\n return this.httpClient.get<ApiResult<string>>(\n this.core.serviceUri + '/documents/comment/' + id\n );\n }\n\n /**\n * Gets the info for a document.\n * @param id - The ID of the document.\n * @returns An observable emitting the API result wrapping the document info.\n */\n info(id: string) {\n return this.httpClient.get<ApiResult<ClipperDocumentInfo>>(\n this.core.serviceUri + '/documents/info/' + id\n );\n }\n\n /**\n * Gets the structure (index) of a document.\n * @param id - The ID of the document.\n * @returns An observable emitting the API result wrapping the document structure.\n */\n index(id: string) {\n return this.httpClient.get<ApiResult<ClipperDocumentStructure>>(\n this.core.serviceUri + '/documents/structure/' + id\n );\n }\n\n /**\n * Gets the last-update metadata for a document.\n *\n * The response carries two things, not one: the last-update string and the shared notes attached\n * to the document. The second was long left undeclared here, so a consumer of this library could\n * not see data the API had already sent it.\n * @param id - The ID of the document.\n * @returns An observable emitting the API result wrapping the last update string and its notes.\n */\n metadata(id: string) {\n return this.httpClient.get<ApiResult<{ item1?: string; item2?: ClipperDocumentNote[] }>>(\n this.core.serviceUri + '/documents/metadata/' + id\n );\n }\n\n /**\n * Queries document references, changes or jurisprudence depending on the requested mode.\n * @param params - The references search parameters; `mode` defaults to `ReferencesIn`.\n * @returns An observable emitting the API result wrapping the search result, or `null` for an unsupported mode.\n */\n references(params: ClipperReferencesSearchParams) {\n let mode = params.mode;\n if (!mode) mode = ClipperQueryReferencesMode.ReferencesIn;\n switch (mode) {\n case ClipperQueryReferencesMode.ReferencesIn:\n case ClipperQueryReferencesMode.ReferencesOut:\n params.mode = mode;\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents/references',\n params\n );\n case ClipperQueryReferencesMode.ChangesIn:\n case ClipperQueryReferencesMode.ChangesOut:\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents/changes',\n params\n );\n case ClipperQueryReferencesMode.Juris:\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents/juris',\n params\n );\n default:\n return null;\n }\n }\n\n /**\n * Retrieves the facets for a document references query.\n * @param params - The references search parameters; `mode` defaults to `ReferencesIn`.\n * @returns An observable emitting the API result wrapping the search facets, or `null` for an unsupported mode.\n */\n referencesFacets(params: ClipperReferencesSearchParams) {\n let mode = params.mode ?? ClipperQueryReferencesMode.ReferencesIn;\n switch (mode) {\n case ClipperQueryReferencesMode.ReferencesIn:\n case ClipperQueryReferencesMode.ReferencesOut:\n params.mode = mode;\n return this.httpClient.post<ApiResult<ClipperSearchFacetsResult>>(\n this.core.serviceUri + '/documents/references/facets',\n params\n );\n case ClipperQueryReferencesMode.ChangesIn:\n case ClipperQueryReferencesMode.ChangesOut:\n return this.httpClient.post<ApiResult<ClipperSearchFacetsResult>>(\n this.core.serviceUri + '/documents/changes/facets',\n params\n );\n case ClipperQueryReferencesMode.Juris:\n return this.httpClient.post<ApiResult<ClipperSearchFacetsResult>>(\n this.core.serviceUri + '/documents/juris/facets',\n params\n );\n default: return null;\n }\n }\n\n /**\n * Wraps document rendering to allow token refresh.\n * @returns An observable emitting the API result wrapping a boolean readiness flag.\n */\n preRender() {\n return this.httpClient.get<ApiResult<boolean>>(\n this.core.serviceUri + '/documents/pre-render?nocache=' + SystemUtils.generateUUID()\n );\n }\n\n /**\n * Gets the jurisprudence articles for a document query.\n * @param params - The document search parameters.\n * @returns An observable emitting the API result wrapping the search result.\n */\n jurisArticles(params: ClipperSearchParams) {\n return this.httpClient.post<ApiResult<ClipperSearchResult>>(\n this.core.serviceUri + '/documents/juris/articles',\n params\n );\n }\n\n /**\n * Gets a deadlines snapshot based on the supplied deadlines.\n * @param params - The calendar search parameters.\n * @returns An observable emitting the API result wrapping the calendar snapshot result.\n */\n deadlinesSnapshot(params: ClipperCalendarSearchParams) {\n return this.httpClient.post<ApiResult<ClipperSearchCalendarSnapshotResult>>(\n this.core.serviceUri + '/documents/calendar/snapshot',\n params\n );\n }\n\n /**\n * Retrieves the taxonomy.\n * @param params - Optional taxonomy parameters. Defaults to `{ model: 0, countItems: false }`.\n * @returns An observable emitting the API result wrapping the taxonomy folder tree.\n */\n getTaxonomy(params?: ClipperTaxonomyParams) {\n return this.httpClient.post<ApiResult<FolderTree>>(\n this.core.serviceUri + '/taxonomy',\n params ?? { model: 0, countItems: false }\n );\n }\n\n /**\n * Retrieves the topics as a flat list.\n * @returns An observable emitting the API result wrapping the list of topics.\n */\n getTopics() {\n return this.httpClient.get<ApiResult<NameValueItem<string>[]>>(\n this.core.serviceUri + '/topics'\n );\n }\n\n /**\n * Retrieves the topics as a tree.\n * @returns An observable emitting the API result wrapping the topics folder tree.\n */\n getTopicsAsTree() {\n return this.httpClient.get<ApiResult<FolderTree>>(\n this.core.serviceUri + '/topics2'\n );\n }\n\n /**\n * Retrieves the tags.\n * @returns An observable emitting the API result wrapping the list of tags.\n */\n getTags() {\n return this.httpClient.get<ApiResult<NameValueItem<string>[]>>(\n this.core.serviceUri + '/tags'\n );\n }\n\n\n ///\n // BAG\n ///\n\n /**\n * Loads the working documents and populates the shared bag.\n * @returns The subscription to the working-documents request.\n */\n loadBag() {\n return this.httpClient\n .get<ApiResult<ClipperUserWorkingDocument[]>>(\n this.core.serviceUri + '/documents/working'\n )\n .subscribe(\n r => {\n if (!r.success) {\n this.broadcastService.sendMessage(ClipperMessages.ERROR, { message: r.message });\n } else {\n if (r.value) {\n const items: ClipperDocumentInfo[] = [];\n r.value.forEach(n => {\n if (n.documentDescriptor) {\n const documentInfo = JSON.parse(n.documentDescriptor);\n if (documentInfo) {\n if (!n.documentId) {\n n.documentId = documentInfo.DocumentId || documentInfo.Id;\n }\n n.title1 = documentInfo.Title1 ?? documentInfo.Title2;\n n.title2 = documentInfo.Title1 ? documentInfo.Title2 : undefined;\n }\n n.documentDescriptor = undefined;\n items.push(n);\n }\n });\n this.core.bag.set(items);\n }\n }\n });\n }\n\n /**\n * Adds one or more documents to the working documents bag.\n * @param documentIds - The IDs of the documents to add.\n * @returns The subscription to the add-to-bag request.\n */\n addToBag(documentIds: string[]) {\n return this.httpClient\n .post<ApiResult<ClipperUserWorkingDocument[]>>(\n this.core.serviceUri + '/documents/working/add',\n { documentIds: documentIds }\n )\n .subscribe((r: ApiResult<ClipperUserWorkingDocument[]>) => {\n // A failure needs no broadcast here: `clipperAuthInterceptor` already turns an expired\n // session into an `ERROR_401` message and reports every other status the same way.\n if (r.success) {\n if (r.value) {\n const newItems: ClipperDocumentInfo[] = [];\n r.value.forEach(n => {\n if (n.documentDescriptor) {\n const documentInfo = JSON.parse(n.documentDescriptor);\n if (documentInfo) {\n n.documentId = documentInfo.DocumentId || documentInfo.Id;\n n.title1 = documentInfo.Title1 ?? documentInfo.Title2;\n n.title2 = documentInfo.Title1 ? documentInfo.Title2 : null;\n }\n n.documentDescriptor = undefined;\n newItems.push(n);\n }\n });\n if (newItems.length > 0) {\n this.core.bag.update((values: any) => [...values, ...newItems]);\n }\n this.broadcastService.sendMessage(\n ClipperMessages.SUCCESS_TOAST,\n { message: \"Operazione completata con successo.\", icon: 'check', duration: 1500 });\n }\n }\n });\n }\n\n /**\n * Removes a document from the working documents bag.\n * @param documentId - The ID of the document to remove.\n * @returns The subscription to the remove-from-bag request.\n */\n removeFromBag(documentId: string) {\n return this.httpClient\n .post<ApiResult<number>>(\n this.core.serviceUri + '/documents/working/delete',\n { documentIds: [documentId] }\n )\n .subscribe((r: ApiResult<number>) => {\n if (!r.success) {\n this.broadcastService.sendMessage(ClipperMessages.ERROR, { message: r.message });\n } else {\n const p = this.core.bag().findIndex((n: any) => n.documentId === documentId);\n if (p !== -1) {\n this.core.bag.update((values: any) => {\n values.splice(p, 1);\n return [...values];\n });\n this.broadcastService.sendMessage(\n ClipperMessages.SUCCESS_TOAST,\n { message: \"Operazione completata con successo.\", icon: 'check', duration: 1500 });\n }\n }\n });\n }\n\n /**\n * Clears all working documents from the bag.\n * @returns The subscription to the clear-bag request.\n */\n clearBag() {\n return this.httpClient\n .post<ApiResult<number>>(\n this.core.serviceUri + '/documents/working/delete',\n { deleteAll: true }\n )\n .subscribe((r: ApiResult<number>) => {\n if (!r.success) {\n this.broadcastService.sendMessage(ClipperMessages.ERROR, { message: r.message });\n } else {\n this.core.bag.set([]);\n this.broadcastService.sendMessage(\n ClipperMessages.SUCCESS_TOAST,\n { message: \"Operazione completata con successo.\", icon: 'check', duration: 1500 });\n }\n });\n }\n\n /**\n * Retrieves the saved searches for the given module.\n * @param module - The Clipper module whose saved searches to load.\n * @returns An observable emitting the API result wrapping the list of saved searches.\n */\n loadSearches(module: ClipperModule) {\n return this.httpClient\n .get<ApiResult<ClipperUserSearch[]>>(\n this.core.serviceUri + '/documents/searches/?module=' + module\n );\n }\n\n /**\n * Persists a user search configuration on the server.\n * @param params - The search configuration to save.\n * @returns An observable emitting the API result wrapping the saved search.\n */\n saveSearch(params: ClipperUserSearch) {\n return this.httpClient\n .post<ApiResult<ClipperUserSearch>>(\n this.core.serviceUri + '/documents/searches/save',\n params\n );\n }\n\n /**\n * Deletes a saved search by its ID.\n * @param id - The ID of the saved search to remove.\n * @returns An observable emitting the API result wrapping the number of deleted searches.\n */\n deleteSearch(id: number) {\n return this.httpClient\n .post<ApiResult<number>>(\n this.core.serviceUri + '/documents/searches/delete',\n { id: id }\n );\n }\n}","import { Service, Signal, WritableSignal, inject } from '@angular/core';\nimport {\n ClipperAvailableChannel,\n ClipperDashboard,\n ClipperDocumentInfo,\n ClipperLoginInfo,\n ClipperSearchResult,\n ClipperServiceFlags,\n ClipperUserInfo,\n} from '../definitions';\nimport { ClipperAccountService } from './account.service';\nimport { ClipperCoreService } from './core.service';\nimport { ClipperDocumentsService } from './documents.service';\nimport { ClipperLoginService } from './login.service';\n\n/**\n * Barrel / facade for the Clipper application.\n *\n * Exposes the feature services as named properties and re-exports the shared state\n * declared in `ClipperCoreService`. Inject `ClipperService` and reach a feature via\n * its property, e.g. `clipper.session.login(...)`, `clipper.documents.query(...)`,\n * `clipper.account.updateUnreadItems(...)`.\n */\n@Service()\nexport class ClipperService {\n\n private readonly core = inject(ClipperCoreService);\n\n /** Authentication: login/logout, e-mailed code confirmation, session restore, OTP. */\n readonly session = inject(ClipperLoginService);\n /** Document search, references, export, working-documents bag and saved searches. */\n readonly documents = inject(ClipperDocumentsService);\n /** The account state the document views move: active channels and unread counters. */\n readonly account = inject(ClipperAccountService);\n\n\n ////\n // RE-EXPORTED CORE STATE\n ////\n\n /** @returns The URI of the Clipper web application, or `undefined` if not set. */\n get appUri(): string | undefined { return this.core.appUri; }\n\n /** @returns The base URI of the Clipper REST API. */\n get serviceUri(): string { return this.core.serviceUri; }\n\n /** @returns The active feature flags. */\n get flags(): ClipperServiceFlags { return this.core.flags; }\n\n /** @returns The current login context, or `undefined` if not authenticated. */\n get loginInfo(): ClipperLoginInfo | undefined { return this.core.loginInfo; }\n\n /** @returns The signed-in account, or `undefined` when there is no session. */\n get user(): ClipperUserInfo | undefined { return this.core.user; }\n\n /** @returns A read-only signal indicating whether the user is logged in. */\n get loggedIn(): Signal<boolean> { return this.core.loggedIn; }\n\n /** @returns A signal indicating whether a login is in progress. */\n get loggingIn(): WritableSignal<boolean> { return this.core.loggingIn; }\n\n /** @returns A signal holding the current documents search snapshot. */\n get snapshot(): WritableSignal<ClipperSearchResult | undefined> { return this.core.snapshot; }\n\n /** @returns A signal indicating whether reference search is supported. */\n get supportsRS(): WritableSignal<boolean> { return this.core.supportsRS; }\n\n /** @returns A signal holding the current references search snapshot. */\n get referencesSnapshot(): WritableSignal<ClipperSearchResult | undefined> { return this.core.referencesSnapshot; }\n\n /** @returns The shared dashboard state object. */\n get dashboard(): ClipperDashboard { return this.core.dashboard; }\n\n /** @returns A signal holding the working-documents bag. */\n get bag(): WritableSignal<ClipperDocumentInfo[]> { return this.core.bag; }\n\n /** @returns A computed signal with the number of items in the bag. */\n get bagTotal(): Signal<number> { return this.core.bagTotal; }\n\n /** @returns A signal controlling the Clipper UI visibility. */\n get visible(): WritableSignal<boolean> { return this.core.visible; }\n\n /** @returns A signal holding the available channels. */\n get availableChannels(): WritableSignal<ClipperAvailableChannel[]> { return this.core.availableChannels; }\n\n /** @returns A computed signal with the currently active channels. */\n get activeChannels(): Signal<ClipperAvailableChannel[]> { return this.core.activeChannels; }\n\n /** @returns A signal indicating whether tagging is allowed. */\n get allowTags(): WritableSignal<boolean> { return this.core.allowTags; }\n\n\n ////\n // BOOTSTRAP\n ////\n\n /**\n * Initialises the application with the API base URI, optional app URI, and feature flags, then\n * validates any session that survived a page refresh.\n * @param serviceUri - The base URI of the Clipper REST API.\n * @param appUri - Optional URI of the Clipper web application (used to build document links).\n * @param flags - Feature flags that control service behaviour. Defaults to `ClipperServiceFlags.None`.\n * @returns void\n */\n initialize(\n serviceUri: string,\n appUri?: string,\n flags: ClipperServiceFlags = ClipperServiceFlags.None,\n ) {\n this.core.initialize(serviceUri, appUri, flags);\n // Second, and in this order: the core sets the base URI that `/session/status` and\n // `/session/me` are built from, and it no longer declares a session from what local storage\n // holds. Asking the API whether a session actually exists is what\n // `ClipperLoginService.initialize` does — unconditionally, since the HttpOnly cookie can\n // outlive any local hint — and doing it from here means a consumer keeps calling one method to\n // bootstrap, exactly as before.\n this.session.initialize();\n }\n\n /**\n * Pings the Clipper REST API to keep the session/token alive.\n */\n ping() {\n this.core.ping();\n }\n}\n","// Public API surface for the Clipper services.\r\n//\r\n// `ClipperService` is the facade/barrel: inject it and reach a feature via its\r\n// property (e.g. `clipper.login.login(...)`, `clipper.documents.query(...)`).\r\n// The feature and core services are exported as well so they can be injected\r\n// directly or referenced as types where needed.\r\n\r\nexport * from './clipper.service';\r\nexport * from './login.service';\r\nexport * from './documents.service';\r\nexport * from './account.service';\r\nexport * from './core.service';\r\n","/*\n * Public API Surface of @arsedizioni/ars-utils/clipper.common\n */\nexport * from './messages';\nexport * from './definitions';\nexport * from './interceptors/index';\nexport * from './services/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["catchError"],"mappings":"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"}
|