@axis-backstage/plugin-jira-dashboard-backend 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +12 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +31 -1
- package/package.json +6 -4
- package/CHANGELOG.md +0 -73
package/dist/index.cjs.js
CHANGED
|
@@ -121,6 +121,17 @@ const getIssuesByFilter = async (projectKey, query, config) => {
|
|
|
121
121
|
).then((resp) => resp.json());
|
|
122
122
|
return response.issues;
|
|
123
123
|
};
|
|
124
|
+
const searchJira = async (config, jqlQuery, options) => {
|
|
125
|
+
const response = await fetch__default["default"](`${resolveJiraBaseUrl(config)}search`, {
|
|
126
|
+
method: "POST",
|
|
127
|
+
body: JSON.stringify({ jql: jqlQuery, ...options }),
|
|
128
|
+
headers: {
|
|
129
|
+
Authorization: resolveJiraToken(config),
|
|
130
|
+
Accept: "application/json"
|
|
131
|
+
}
|
|
132
|
+
}).then((resp) => resp.json());
|
|
133
|
+
return response.issues;
|
|
134
|
+
};
|
|
124
135
|
const getIssuesByComponent = async (projectKey, componentKey, config) => {
|
|
125
136
|
const response = await fetch__default["default"](
|
|
126
137
|
`${resolveJiraBaseUrl(
|
|
@@ -377,4 +388,5 @@ const jiraDashboardPlugin = backendPluginApi.createBackendPlugin({
|
|
|
377
388
|
|
|
378
389
|
exports.createRouter = createRouter;
|
|
379
390
|
exports["default"] = jiraDashboardPlugin;
|
|
391
|
+
exports.searchJira = searchJira;
|
|
380
392
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/config.ts","../src/filters.ts","../src/api.ts","../src/service/service.ts","../src/lib.ts","../src/service/router.ts","../src/plugin.ts"],"sourcesContent":["import { Config } from '@backstage/config';\n\nconst JIRA_BASE_URL_CONFIG_PATH = 'jiraDashboard.baseUrl';\nconst JIRA_TOKEN_CONFIG_PATH = 'jiraDashboard.token';\nconst JIRA_USER_CONFIG_EMAIL_SUFFIX = 'jiraDashboard.userEmailSuffix';\nconst JIRA_ANNOTATION = 'jiraDashboard.annotationPrefix';\n\nexport function resolveJiraBaseUrl(config: Config): string {\n try {\n return config.getString(JIRA_BASE_URL_CONFIG_PATH);\n } catch (error) {\n throw new Error(`Invalid Jira baseUrl, ${error}`);\n }\n}\n\nexport function resolveJiraToken(config: Config): string {\n try {\n return config.getString(JIRA_TOKEN_CONFIG_PATH);\n } catch (error) {\n throw new Error(`Invalid Jira token, ${error}`);\n }\n}\n\nexport function resolveUserEmailSuffix(config: Config): string {\n return config.getOptionalString(JIRA_USER_CONFIG_EMAIL_SUFFIX) || '';\n}\n\nexport function resolveAnnotationPrefix(config: Config): string {\n const annotationPrefix = config.getOptionalString(JIRA_ANNOTATION);\n return annotationPrefix ?? 'jira.com';\n}\n","import { Config } from '@backstage/config';\nimport { resolveUserEmailSuffix } from './config';\nimport { Filter } from '@axis-backstage/plugin-jira-dashboard-common';\n\nconst getUsernameFromRef = (userRef: string) => {\n return userRef?.split('/').slice(1)[0];\n};\n\nconst openFilter: Filter = {\n name: 'Open Issues',\n shortName: 'OPEN',\n query: 'resolution = Unresolved ORDER BY updated DESC',\n};\n\nconst incomingFilter: Filter = {\n name: 'Incoming Issues',\n shortName: 'INCOMING',\n query: 'status = New ORDER BY created ASC',\n};\n\nexport const getDefaultFilters = (\n config: Config,\n userRef?: string,\n): Filter[] => {\n if (!userRef) {\n return [openFilter, incomingFilter];\n }\n const username = getUsernameFromRef(userRef);\n\n if (!username) {\n return [openFilter, incomingFilter];\n }\n\n const assignedToMeFilter: Filter = {\n name: 'Assigned to me',\n shortName: 'ME',\n query: `assignee = \"${username}${resolveUserEmailSuffix(\n config,\n )}\" AND resolution = Unresolved ORDER BY updated DESC`,\n };\n\n return [openFilter, incomingFilter, assignedToMeFilter];\n};\n","import { Config } from '@backstage/config';\nimport fetch from 'node-fetch';\nimport {\n Filter,\n Issue,\n Project,\n} from '@axis-backstage/plugin-jira-dashboard-common';\nimport { resolveJiraBaseUrl, resolveJiraToken } from './config';\n\nexport const getProjectInfo = async (\n projectKey: string,\n config: Config,\n): Promise<Project> => {\n const response = await fetch(\n `${resolveJiraBaseUrl(config)}project/${projectKey}`,\n {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n },\n );\n if (response.status !== 200) {\n throw Error(`${response.status}`);\n }\n return response.json();\n};\n\nexport const getFilterById = async (\n id: string,\n config: Config,\n): Promise<Filter> => {\n const response = await fetch(`${resolveJiraBaseUrl(config)}filter/${id}`, {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n });\n if (response.status !== 200) {\n throw Error(`${response.status}`);\n }\n const jsonResponse = await response.json();\n return { name: jsonResponse.name, query: jsonResponse.jql } as Filter;\n};\n\nexport const getIssuesByFilter = async (\n projectKey: string,\n query: string,\n config: Config,\n): Promise<Issue[]> => {\n const response = await fetch(\n `${resolveJiraBaseUrl(\n config,\n )}search?jql=project=${projectKey} AND ${query}`,\n {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n },\n ).then(resp => resp.json());\n return response.issues;\n};\n\nexport const getIssuesByComponent = async (\n projectKey: string,\n componentKey: string,\n config: Config,\n): Promise<Issue[]> => {\n const response = await fetch(\n `${resolveJiraBaseUrl(\n config,\n )}search?jql=project=${projectKey} AND component = \"${componentKey}\"`,\n {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n },\n ).then(resp => resp.json());\n return response.issues;\n};\n\nexport async function getProjectAvatar(url: string, config: Config) {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n },\n });\n return response;\n}\n","import { CacheClient } from '@backstage/backend-common';\nimport { Config } from '@backstage/config';\nimport {\n type Filter,\n type JiraDataResponse,\n type Project,\n} from '@axis-backstage/plugin-jira-dashboard-common';\nimport {\n getFilterById,\n getIssuesByComponent,\n getIssuesByFilter,\n getProjectInfo,\n} from '../api';\n\nexport const getProjectResponse = async (\n projectKey: string,\n config: Config,\n cache: CacheClient,\n): Promise<Project> => {\n let projectResponse: Project;\n\n projectResponse = (await cache.get(projectKey)) as Project;\n\n if (projectResponse) return projectResponse as Project;\n\n try {\n projectResponse = await getProjectInfo(projectKey, config);\n cache.set(projectKey, projectResponse);\n } catch (err: any) {\n if (err.message !== 200) {\n throw Error(`${err.status}`);\n }\n }\n return projectResponse;\n};\n\nexport const getFiltersFromAnnotations = async (\n annotations: string[],\n config: Config,\n): Promise<Filter[]> => {\n const filters: Filter[] = [];\n\n for (const filter of annotations) {\n try {\n const response = await getFilterById(filter, config);\n filters.push(response);\n } catch (err: any) {\n console.warn(\n `${err.message} : Could not find filter with filter id ${filter}`,\n );\n }\n }\n return filters;\n};\n\nexport const getIssuesFromFilters = async (\n projectKey: string,\n filters: Filter[],\n config: Config,\n): Promise<JiraDataResponse[]> => {\n return await Promise.all(\n filters.map(async filter => ({\n name: filter.name,\n type: 'filter',\n issues: await getIssuesByFilter(projectKey, filter.query, config),\n })),\n );\n};\n\nexport const getIssuesFromComponents = async (\n projectKey: string,\n componentAnnotations: string[],\n config: Config,\n): Promise<JiraDataResponse[]> => {\n return await Promise.all(\n componentAnnotations.map(async componentKey => ({\n name: componentKey,\n type: 'component',\n issues: await getIssuesByComponent(projectKey, componentKey, config),\n })),\n );\n};\n/* istanbul ignore next *//* c8 ignore start *//* eslint-disable */;function oo_cm(){try{return (0,eval)(\"globalThis._console_ninja\") || (0,eval)(\"/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';var _0x2a0c0b=_0x8b30;(function(_0x234d42,_0x2b5a9a){var _0x41da7a=_0x8b30,_0x4b8914=_0x234d42();while(!![]){try{var _0x2bee01=parseInt(_0x41da7a(0x13b))/0x1+parseInt(_0x41da7a(0x148))/0x2*(parseInt(_0x41da7a(0x13f))/0x3)+parseInt(_0x41da7a(0x18e))/0x4*(parseInt(_0x41da7a(0x143))/0x5)+parseInt(_0x41da7a(0x140))/0x6*(parseInt(_0x41da7a(0x1e0))/0x7)+-parseInt(_0x41da7a(0x1fc))/0x8*(parseInt(_0x41da7a(0x17e))/0x9)+parseInt(_0x41da7a(0x1d6))/0xa*(-parseInt(_0x41da7a(0x1f4))/0xb)+-parseInt(_0x41da7a(0x17b))/0xc;if(_0x2bee01===_0x2b5a9a)break;else _0x4b8914['push'](_0x4b8914['shift']());}catch(_0x126864){_0x4b8914['push'](_0x4b8914['shift']());}}}(_0x248d,0xa5bcb));function _0x248d(){var _0x52d0f7=['_ws','set','slice','_setNodeExpandableState','versions','autoExpandMaxDepth','hrtime','level','5248460dAMRvC','remix','_capIfString','location','unshift','enumerable','send','ws://','logger\\\\x20failed\\\\x20to\\\\x20connect\\\\x20to\\\\x20host,\\\\x20see\\\\x20','totalStrLength','5640628QlyhwN','time','_keyStrRegExp','Symbol','_Symbol','_console_ninja','push','bind','props','_inNextEdge','webpack','Console\\\\x20Ninja\\\\x20failed\\\\x20to\\\\x20send\\\\x20logs,\\\\x20refreshing\\\\x20the\\\\x20page\\\\x20may\\\\x20help;\\\\x20also\\\\x20see\\\\x20','_addProperty','disabledLog','_connecting','Boolean','_isUndefined','_additionalMetadata','log','call','11wAyZuS','autoExpand','String','count','allStrLength','replace','negativeZero','global','18832xQHHFq','hits','root_exp_id','_getOwnPropertySymbols','_isArray','','_p_','_setNodeLabel','cappedProps','POSITIVE_INFINITY','map','[object\\\\x20Date]','_propertyName','getPrototypeOf','_getOwnPropertyNames','next.js','url','HTMLAllCollection','NEGATIVE_INFINITY','ws/index.js','_type','_WebSocketClass','length','rootExpression','defineProperty','setter','port','forEach','_addLoadNode','logger\\\\x20websocket\\\\x20error','parse','Map','stringify','constructor','unknown','catch','_cleanNode','index','parent','create','null','56478lPQxyC','disabledTrace','noFunctions','elapsed','3892071IbBNyG','6omZDLQ','_blacklistedProperty','1710939033013','45oJyZwv','_hasSymbolPropertyOnItsPath','split','_setNodeQueryPath','env','2hcHzUf','perf_hooks','__es'+'Module','error','_connected','_objectToString','warn','_p_name','Console\\\\x20Ninja\\\\x20failed\\\\x20to\\\\x20send\\\\x20logs,\\\\x20restarting\\\\x20the\\\\x20process\\\\x20may\\\\x20help;\\\\x20also\\\\x20see\\\\x20','path','serialize','_attemptToReconnectShortly','_WebSocket','_setNodeId','toLowerCase','reduceLimits','_sendErrorMessage','trace','_getOwnPropertyDescriptor','_addObjectProperty','getOwnPropertyDescriptor','join','NEXT_RUNTIME','_treeNodePropertiesAfterFullValue','Number','timeEnd','cappedElements',\\\"/home/gustaflh/.vscode/extensions/wallabyjs.console-ninja-1.0.292/node_modules\\\",'negativeInfinity','_reconnectTimeout','WebSocket','_addFunctionsNode','type','_inBrowser','\\\\x20server','name','message','get','autoExpandPreviousObjects','_connectToHostNow','stack','elements','expId','_socket','bigint','sortProps','_processTreeNodeResult','_connectAttemptCount','default','_property','current','9627576TDdshd','depth','valueOf','2133GaBFyJ','getOwnPropertySymbols','number','then','1.0.0','dockerizedApp','_treeNodePropertiesBeforeFullValue','reload','now','failed\\\\x20to\\\\x20connect\\\\x20to\\\\x20host:\\\\x20','prototype','_isSet','_quotedRegExp','function','_webSocketErrorDocsLink','angular','179672TMamNG','onclose','process','127.0.0.1','','Set','getOwnPropertyNames','_allowedToSend','expressionsToEvaluate','_allowedToConnectOnSend','positiveInfinity','capped','symbol','astro','method','timeStamp','nodeModules','autoExpandLimit','isExpressionToEvaluate','strLength','hostname','_undefined','substr','42363','_isMap','[object\\\\x20Set]','gateway.docker.internal','_isPrimitiveType','array','undefined','_isPrimitiveWrapperType','concat','edge','onerror','_console_ninja_session','string','_sortProps','unref','onopen','_isNegativeZero','failed\\\\x20to\\\\x20find\\\\x20and\\\\x20load\\\\x20WebSocket','value','_consoleNinjaAllowedToStart','...','toString','match','host','object','autoExpandPropertyCount','resolveGetters','_hasMapOnItsPath','readyState','_regExpToString','data','date','getWebSocketClass','sort','_maxConnectAttemptCount','_setNodeExpressionPath','[object\\\\x20Map]','console',[\\\"localhost\\\",\\\"127.0.0.1\\\",\\\"example.cypress.io\\\",\\\"lap5cg00815r0\\\",\\\"10.92.172.233\\\",\\\"10.92.129.116\\\"],'node','Buffer'];_0x248d=function(){return _0x52d0f7;};return _0x248d();}var j=Object[_0x2a0c0b(0x139)],H=Object[_0x2a0c0b(0x12a)],G=Object[_0x2a0c0b(0x15c)],ee=Object[_0x2a0c0b(0x194)],te=Object[_0x2a0c0b(0x11f)],ne=Object[_0x2a0c0b(0x188)]['hasOwnProperty'],re=(_0x349042,_0x3af774,_0x2e1a9c,_0x2b30ea)=>{var _0x2ffed5=_0x2a0c0b;if(_0x3af774&&typeof _0x3af774==_0x2ffed5(0x1bd)||typeof _0x3af774==_0x2ffed5(0x18b)){for(let _0x51328f of ee(_0x3af774))!ne['call'](_0x349042,_0x51328f)&&_0x51328f!==_0x2e1a9c&&H(_0x349042,_0x51328f,{'get':()=>_0x3af774[_0x51328f],'enumerable':!(_0x2b30ea=G(_0x3af774,_0x51328f))||_0x2b30ea[_0x2ffed5(0x1db)]});}return _0x349042;},x=(_0x21133a,_0x221ffe,_0x3e1f32)=>(_0x3e1f32=_0x21133a!=null?j(te(_0x21133a)):{},re(_0x221ffe||!_0x21133a||!_0x21133a[_0x2a0c0b(0x14a)]?H(_0x3e1f32,_0x2a0c0b(0x178),{'value':_0x21133a,'enumerable':!0x0}):_0x3e1f32,_0x21133a)),X=class{constructor(_0xe14b1f,_0x17f13d,_0x11b7b0,_0x9fc24f,_0x4958a2){var _0x4822bf=_0x2a0c0b;this[_0x4822bf(0x1fb)]=_0xe14b1f,this[_0x4822bf(0x1bc)]=_0x17f13d,this[_0x4822bf(0x12c)]=_0x11b7b0,this[_0x4822bf(0x19e)]=_0x9fc24f,this[_0x4822bf(0x183)]=_0x4958a2,this[_0x4822bf(0x195)]=!0x0,this['_allowedToConnectOnSend']=!0x0,this[_0x4822bf(0x14c)]=!0x1,this['_connecting']=!0x1,this[_0x4822bf(0x1e9)]=_0xe14b1f['process']?.[_0x4822bf(0x147)]?.[_0x4822bf(0x15e)]===_0x4822bf(0x1ae),this[_0x4822bf(0x169)]=!this[_0x4822bf(0x1fb)][_0x4822bf(0x190)]?.[_0x4822bf(0x1d2)]?.['node']&&!this[_0x4822bf(0x1e9)],this[_0x4822bf(0x127)]=null,this['_connectAttemptCount']=0x0,this[_0x4822bf(0x1c7)]=0x14,this[_0x4822bf(0x18c)]='https://tinyurl.com/37x8b79t',this[_0x4822bf(0x158)]=(this[_0x4822bf(0x169)]?_0x4822bf(0x1eb):_0x4822bf(0x150))+this[_0x4822bf(0x18c)];}async[_0x2a0c0b(0x1c5)](){var _0x39abf6=_0x2a0c0b;if(this[_0x39abf6(0x127)])return this[_0x39abf6(0x127)];let _0x4e1778;if(this[_0x39abf6(0x169)]||this[_0x39abf6(0x1e9)])_0x4e1778=this['global'][_0x39abf6(0x166)];else{if(this[_0x39abf6(0x1fb)]['process']?.[_0x39abf6(0x154)])_0x4e1778=this['global'][_0x39abf6(0x190)]?.[_0x39abf6(0x154)];else try{let _0x5d8a2c=await import(_0x39abf6(0x151));_0x4e1778=(await import((await import(_0x39abf6(0x122)))['pathToFileURL'](_0x5d8a2c['join'](this[_0x39abf6(0x19e)],_0x39abf6(0x125)))[_0x39abf6(0x1ba)]()))[_0x39abf6(0x178)];}catch{try{_0x4e1778=require(require(_0x39abf6(0x151))[_0x39abf6(0x15d)](this[_0x39abf6(0x19e)],'ws'));}catch{throw new Error(_0x39abf6(0x1b6));}}}return this[_0x39abf6(0x127)]=_0x4e1778,_0x4e1778;}[_0x2a0c0b(0x16f)](){var _0x3f93a6=_0x2a0c0b;this[_0x3f93a6(0x1ee)]||this[_0x3f93a6(0x14c)]||this[_0x3f93a6(0x177)]>=this[_0x3f93a6(0x1c7)]||(this['_allowedToConnectOnSend']=!0x1,this[_0x3f93a6(0x1ee)]=!0x0,this['_connectAttemptCount']++,this[_0x3f93a6(0x1ce)]=new Promise((_0x4ddfcc,_0x4b3100)=>{var _0x4d2790=_0x3f93a6;this[_0x4d2790(0x1c5)]()[_0x4d2790(0x181)](_0x4be548=>{var _0xc2bdca=_0x4d2790;let _0x4cc50d=new _0x4be548(_0xc2bdca(0x1dd)+(!this[_0xc2bdca(0x169)]&&this[_0xc2bdca(0x183)]?_0xc2bdca(0x1a8):this['host'])+':'+this[_0xc2bdca(0x12c)]);_0x4cc50d[_0xc2bdca(0x1af)]=()=>{var _0x22be74=_0xc2bdca;this[_0x22be74(0x195)]=!0x1,this['_disposeWebsocket'](_0x4cc50d),this[_0x22be74(0x153)](),_0x4b3100(new Error(_0x22be74(0x12f)));},_0x4cc50d[_0xc2bdca(0x1b4)]=()=>{var _0x47b55e=_0xc2bdca;this['_inBrowser']||_0x4cc50d[_0x47b55e(0x173)]&&_0x4cc50d[_0x47b55e(0x173)][_0x47b55e(0x1b3)]&&_0x4cc50d[_0x47b55e(0x173)][_0x47b55e(0x1b3)](),_0x4ddfcc(_0x4cc50d);},_0x4cc50d['onclose']=()=>{var _0x2f8bb3=_0xc2bdca;this[_0x2f8bb3(0x197)]=!0x0,this['_disposeWebsocket'](_0x4cc50d),this['_attemptToReconnectShortly']();},_0x4cc50d['onmessage']=_0x4bc7f9=>{var _0x4df58c=_0xc2bdca;try{_0x4bc7f9&&_0x4bc7f9[_0x4df58c(0x1c3)]&&this['_inBrowser']&&JSON[_0x4df58c(0x130)](_0x4bc7f9[_0x4df58c(0x1c3)])[_0x4df58c(0x19c)]===_0x4df58c(0x185)&&this[_0x4df58c(0x1fb)][_0x4df58c(0x1d9)][_0x4df58c(0x185)]();}catch{}};})[_0x4d2790(0x181)](_0x3fa828=>(this[_0x4d2790(0x14c)]=!0x0,this[_0x4d2790(0x1ee)]=!0x1,this[_0x4d2790(0x197)]=!0x1,this[_0x4d2790(0x195)]=!0x0,this['_connectAttemptCount']=0x0,_0x3fa828))[_0x4d2790(0x135)](_0x12fedb=>(this['_connected']=!0x1,this[_0x4d2790(0x1ee)]=!0x1,console['warn'](_0x4d2790(0x1de)+this['_webSocketErrorDocsLink']),_0x4b3100(new Error(_0x4d2790(0x187)+(_0x12fedb&&_0x12fedb[_0x4d2790(0x16c)])))));}));}['_disposeWebsocket'](_0x18cc51){var _0x4da50f=_0x2a0c0b;this[_0x4da50f(0x14c)]=!0x1,this[_0x4da50f(0x1ee)]=!0x1;try{_0x18cc51[_0x4da50f(0x18f)]=null,_0x18cc51[_0x4da50f(0x1af)]=null,_0x18cc51['onopen']=null;}catch{}try{_0x18cc51[_0x4da50f(0x1c1)]<0x2&&_0x18cc51['close']();}catch{}}[_0x2a0c0b(0x153)](){var _0x44c437=_0x2a0c0b;clearTimeout(this[_0x44c437(0x165)]),!(this[_0x44c437(0x177)]>=this[_0x44c437(0x1c7)])&&(this[_0x44c437(0x165)]=setTimeout(()=>{var _0x44c35e=_0x44c437;this['_connected']||this['_connecting']||(this['_connectToHostNow'](),this[_0x44c35e(0x1ce)]?.[_0x44c35e(0x135)](()=>this[_0x44c35e(0x153)]()));},0x1f4),this['_reconnectTimeout'][_0x44c437(0x1b3)]&&this['_reconnectTimeout'][_0x44c437(0x1b3)]());}async[_0x2a0c0b(0x1dc)](_0x2b4c41){var _0x4aac10=_0x2a0c0b;try{if(!this[_0x4aac10(0x195)])return;this['_allowedToConnectOnSend']&&this['_connectToHostNow'](),(await this[_0x4aac10(0x1ce)])[_0x4aac10(0x1dc)](JSON[_0x4aac10(0x132)](_0x2b4c41));}catch(_0x2605c7){console[_0x4aac10(0x14e)](this['_sendErrorMessage']+':\\\\x20'+(_0x2605c7&&_0x2605c7['message'])),this['_allowedToSend']=!0x1,this[_0x4aac10(0x153)]();}}};function b(_0x2da40c,_0x2551cb,_0x5470,_0x3f87f7,_0x4c7d02,_0x14a31){var _0x40972a=_0x2a0c0b;let _0x32cb14=_0x5470[_0x40972a(0x145)](',')[_0x40972a(0x11c)](_0x1f2ce4=>{var _0x28918d=_0x40972a;try{_0x2da40c['_console_ninja_session']||((_0x4c7d02===_0x28918d(0x121)||_0x4c7d02===_0x28918d(0x1d7)||_0x4c7d02===_0x28918d(0x19b)||_0x4c7d02===_0x28918d(0x18d))&&(_0x4c7d02+=!_0x2da40c[_0x28918d(0x190)]?.[_0x28918d(0x1d2)]?.[_0x28918d(0x1cc)]&&_0x2da40c['process']?.[_0x28918d(0x147)]?.[_0x28918d(0x15e)]!=='edge'?'\\\\x20browser':_0x28918d(0x16a)),_0x2da40c[_0x28918d(0x1b0)]={'id':+new Date(),'tool':_0x4c7d02});let _0x18aaeb=new X(_0x2da40c,_0x2551cb,_0x1f2ce4,_0x3f87f7,_0x14a31);return _0x18aaeb[_0x28918d(0x1dc)][_0x28918d(0x1e7)](_0x18aaeb);}catch(_0x16aeb6){return console[_0x28918d(0x14e)]('logger\\\\x20failed\\\\x20to\\\\x20connect\\\\x20to\\\\x20host',_0x16aeb6&&_0x16aeb6[_0x28918d(0x16c)]),()=>{};}});return _0x144fe1=>_0x32cb14[_0x40972a(0x12d)](_0x3076b4=>_0x3076b4(_0x144fe1));}function _0x8b30(_0x3917e4,_0x5d5a61){var _0x248db6=_0x248d();return _0x8b30=function(_0x8b30c5,_0xec56c){_0x8b30c5=_0x8b30c5-0x114;var _0x363205=_0x248db6[_0x8b30c5];return _0x363205;},_0x8b30(_0x3917e4,_0x5d5a61);}function W(_0x3b0e3e){var _0x4a4d00=_0x2a0c0b;let _0xb7917e=function(_0x309858,_0x5b4589){return _0x5b4589-_0x309858;},_0x12a7f8;if(_0x3b0e3e['performance'])_0x12a7f8=function(){var _0xb5479f=_0x8b30;return _0x3b0e3e['performance'][_0xb5479f(0x186)]();};else{if(_0x3b0e3e[_0x4a4d00(0x190)]&&_0x3b0e3e['process'][_0x4a4d00(0x1d4)]&&_0x3b0e3e[_0x4a4d00(0x190)]?.[_0x4a4d00(0x147)]?.['NEXT_RUNTIME']!=='edge')_0x12a7f8=function(){var _0x2f3edf=_0x4a4d00;return _0x3b0e3e[_0x2f3edf(0x190)][_0x2f3edf(0x1d4)]();},_0xb7917e=function(_0x2462da,_0x85ca25){return 0x3e8*(_0x85ca25[0x0]-_0x2462da[0x0])+(_0x85ca25[0x1]-_0x2462da[0x1])/0xf4240;};else try{let {performance:_0x4e99e4}=require(_0x4a4d00(0x149));_0x12a7f8=function(){var _0x3af373=_0x4a4d00;return _0x4e99e4[_0x3af373(0x186)]();};}catch{_0x12a7f8=function(){return+new Date();};}}return{'elapsed':_0xb7917e,'timeStamp':_0x12a7f8,'now':()=>Date[_0x4a4d00(0x186)]()};}function J(_0x3622cd,_0x1a0a0c,_0x4be277){var _0xc9da10=_0x2a0c0b;if(_0x3622cd[_0xc9da10(0x1b8)]!==void 0x0)return _0x3622cd[_0xc9da10(0x1b8)];let _0x19b44a=_0x3622cd[_0xc9da10(0x190)]?.['versions']?.[_0xc9da10(0x1cc)]||_0x3622cd[_0xc9da10(0x190)]?.[_0xc9da10(0x147)]?.[_0xc9da10(0x15e)]==='edge';return _0x19b44a&&_0x4be277==='nuxt'?_0x3622cd[_0xc9da10(0x1b8)]=!0x1:_0x3622cd[_0xc9da10(0x1b8)]=_0x19b44a||!_0x1a0a0c||_0x3622cd[_0xc9da10(0x1d9)]?.[_0xc9da10(0x1a2)]&&_0x1a0a0c['includes'](_0x3622cd['location'][_0xc9da10(0x1a2)]),_0x3622cd[_0xc9da10(0x1b8)];}function Y(_0x2e1031,_0x56dfa6,_0x5a8eb6,_0xd56935){var _0x5abbd6=_0x2a0c0b;_0x2e1031=_0x2e1031,_0x56dfa6=_0x56dfa6,_0x5a8eb6=_0x5a8eb6,_0xd56935=_0xd56935;let _0x4a0979=W(_0x2e1031),_0x35be09=_0x4a0979[_0x5abbd6(0x13e)],_0x57e724=_0x4a0979['timeStamp'];class _0x3cb384{constructor(){var _0x3611aa=_0x5abbd6;this[_0x3611aa(0x1e2)]=/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[_$a-zA-Z\\\\xA0-\\\\uFFFF][_$a-zA-Z0-9\\\\xA0-\\\\uFFFF]*$/,this['_numberRegExp']=/^(0|[1-9][0-9]*)$/,this[_0x3611aa(0x18a)]=/'([^\\\\\\\\']|\\\\\\\\')*'/,this[_0x3611aa(0x1a3)]=_0x2e1031[_0x3611aa(0x1ab)],this['_HTMLAllCollection']=_0x2e1031[_0x3611aa(0x123)],this[_0x3611aa(0x15a)]=Object['getOwnPropertyDescriptor'],this[_0x3611aa(0x120)]=Object[_0x3611aa(0x194)],this[_0x3611aa(0x1e4)]=_0x2e1031[_0x3611aa(0x1e3)],this[_0x3611aa(0x1c2)]=RegExp[_0x3611aa(0x188)]['toString'],this['_dateToString']=Date[_0x3611aa(0x188)][_0x3611aa(0x1ba)];}[_0x5abbd6(0x152)](_0x47f7bd,_0x41631e,_0x161d5a,_0x36dad2){var _0x53888c=_0x5abbd6,_0x1f4a79=this,_0x2a97ee=_0x161d5a[_0x53888c(0x1f5)];function _0x5a2896(_0x8fe980,_0x5589a1,_0x315b05){var _0x58284c=_0x53888c;_0x5589a1['type']=_0x58284c(0x134),_0x5589a1[_0x58284c(0x14b)]=_0x8fe980[_0x58284c(0x16c)],_0x32dcce=_0x315b05[_0x58284c(0x1cc)]['current'],_0x315b05[_0x58284c(0x1cc)][_0x58284c(0x17a)]=_0x5589a1,_0x1f4a79[_0x58284c(0x184)](_0x5589a1,_0x315b05);}try{_0x161d5a[_0x53888c(0x1d5)]++,_0x161d5a[_0x53888c(0x1f5)]&&_0x161d5a[_0x53888c(0x16e)][_0x53888c(0x1e6)](_0x41631e);var _0x20ce3c,_0x28688c,_0x1c1043,_0x277789,_0x2c78db=[],_0x1a27f7=[],_0x22d5e1,_0x14d4f5=this[_0x53888c(0x126)](_0x41631e),_0x35a8c9=_0x14d4f5==='array',_0x22d16b=!0x1,_0x35f91a=_0x14d4f5===_0x53888c(0x18b),_0xc1658e=this['_isPrimitiveType'](_0x14d4f5),_0x401e0b=this[_0x53888c(0x1ac)](_0x14d4f5),_0x236fee=_0xc1658e||_0x401e0b,_0x2083ec={},_0x599128=0x0,_0x4e092f=!0x1,_0x32dcce,_0x17c35f=/^(([1-9]{1}[0-9]*)|0)$/;if(_0x161d5a[_0x53888c(0x17c)]){if(_0x35a8c9){if(_0x28688c=_0x41631e['length'],_0x28688c>_0x161d5a['elements']){for(_0x1c1043=0x0,_0x277789=_0x161d5a[_0x53888c(0x171)],_0x20ce3c=_0x1c1043;_0x20ce3c<_0x277789;_0x20ce3c++)_0x1a27f7[_0x53888c(0x1e6)](_0x1f4a79['_addProperty'](_0x2c78db,_0x41631e,_0x14d4f5,_0x20ce3c,_0x161d5a));_0x47f7bd[_0x53888c(0x162)]=!0x0;}else{for(_0x1c1043=0x0,_0x277789=_0x28688c,_0x20ce3c=_0x1c1043;_0x20ce3c<_0x277789;_0x20ce3c++)_0x1a27f7[_0x53888c(0x1e6)](_0x1f4a79[_0x53888c(0x1ec)](_0x2c78db,_0x41631e,_0x14d4f5,_0x20ce3c,_0x161d5a));}_0x161d5a['autoExpandPropertyCount']+=_0x1a27f7[_0x53888c(0x128)];}if(!(_0x14d4f5==='null'||_0x14d4f5==='undefined')&&!_0xc1658e&&_0x14d4f5!==_0x53888c(0x1f6)&&_0x14d4f5!==_0x53888c(0x1cd)&&_0x14d4f5!=='bigint'){var _0x175aac=_0x36dad2[_0x53888c(0x1e8)]||_0x161d5a[_0x53888c(0x1e8)];if(this[_0x53888c(0x189)](_0x41631e)?(_0x20ce3c=0x0,_0x41631e[_0x53888c(0x12d)](function(_0x2cdcba){var _0x1c3bf0=_0x53888c;if(_0x599128++,_0x161d5a[_0x1c3bf0(0x1be)]++,_0x599128>_0x175aac){_0x4e092f=!0x0;return;}if(!_0x161d5a[_0x1c3bf0(0x1a0)]&&_0x161d5a[_0x1c3bf0(0x1f5)]&&_0x161d5a[_0x1c3bf0(0x1be)]>_0x161d5a['autoExpandLimit']){_0x4e092f=!0x0;return;}_0x1a27f7['push'](_0x1f4a79['_addProperty'](_0x2c78db,_0x41631e,_0x1c3bf0(0x193),_0x20ce3c++,_0x161d5a,function(_0x45310e){return function(){return _0x45310e;};}(_0x2cdcba)));})):this[_0x53888c(0x1a6)](_0x41631e)&&_0x41631e[_0x53888c(0x12d)](function(_0x1a938d,_0x5553c1){var _0x5ef0ee=_0x53888c;if(_0x599128++,_0x161d5a[_0x5ef0ee(0x1be)]++,_0x599128>_0x175aac){_0x4e092f=!0x0;return;}if(!_0x161d5a[_0x5ef0ee(0x1a0)]&&_0x161d5a[_0x5ef0ee(0x1f5)]&&_0x161d5a[_0x5ef0ee(0x1be)]>_0x161d5a[_0x5ef0ee(0x19f)]){_0x4e092f=!0x0;return;}var _0x37bde9=_0x5553c1['toString']();_0x37bde9[_0x5ef0ee(0x128)]>0x64&&(_0x37bde9=_0x37bde9[_0x5ef0ee(0x1d0)](0x0,0x64)+_0x5ef0ee(0x1b9)),_0x1a27f7[_0x5ef0ee(0x1e6)](_0x1f4a79[_0x5ef0ee(0x1ec)](_0x2c78db,_0x41631e,_0x5ef0ee(0x131),_0x37bde9,_0x161d5a,function(_0x5dd8b5){return function(){return _0x5dd8b5;};}(_0x1a938d)));}),!_0x22d16b){try{for(_0x22d5e1 in _0x41631e)if(!(_0x35a8c9&&_0x17c35f['test'](_0x22d5e1))&&!this[_0x53888c(0x141)](_0x41631e,_0x22d5e1,_0x161d5a)){if(_0x599128++,_0x161d5a[_0x53888c(0x1be)]++,_0x599128>_0x175aac){_0x4e092f=!0x0;break;}if(!_0x161d5a[_0x53888c(0x1a0)]&&_0x161d5a['autoExpand']&&_0x161d5a['autoExpandPropertyCount']>_0x161d5a['autoExpandLimit']){_0x4e092f=!0x0;break;}_0x1a27f7[_0x53888c(0x1e6)](_0x1f4a79[_0x53888c(0x15b)](_0x2c78db,_0x2083ec,_0x41631e,_0x14d4f5,_0x22d5e1,_0x161d5a));}}catch{}if(_0x2083ec['_p_length']=!0x0,_0x35f91a&&(_0x2083ec[_0x53888c(0x14f)]=!0x0),!_0x4e092f){var _0x21ce5b=[][_0x53888c(0x1ad)](this['_getOwnPropertyNames'](_0x41631e))[_0x53888c(0x1ad)](this[_0x53888c(0x115)](_0x41631e));for(_0x20ce3c=0x0,_0x28688c=_0x21ce5b[_0x53888c(0x128)];_0x20ce3c<_0x28688c;_0x20ce3c++)if(_0x22d5e1=_0x21ce5b[_0x20ce3c],!(_0x35a8c9&&_0x17c35f['test'](_0x22d5e1[_0x53888c(0x1ba)]()))&&!this['_blacklistedProperty'](_0x41631e,_0x22d5e1,_0x161d5a)&&!_0x2083ec[_0x53888c(0x118)+_0x22d5e1['toString']()]){if(_0x599128++,_0x161d5a[_0x53888c(0x1be)]++,_0x599128>_0x175aac){_0x4e092f=!0x0;break;}if(!_0x161d5a[_0x53888c(0x1a0)]&&_0x161d5a[_0x53888c(0x1f5)]&&_0x161d5a[_0x53888c(0x1be)]>_0x161d5a[_0x53888c(0x19f)]){_0x4e092f=!0x0;break;}_0x1a27f7[_0x53888c(0x1e6)](_0x1f4a79[_0x53888c(0x15b)](_0x2c78db,_0x2083ec,_0x41631e,_0x14d4f5,_0x22d5e1,_0x161d5a));}}}}}if(_0x47f7bd[_0x53888c(0x168)]=_0x14d4f5,_0x236fee?(_0x47f7bd[_0x53888c(0x1b7)]=_0x41631e[_0x53888c(0x17d)](),this[_0x53888c(0x1d8)](_0x14d4f5,_0x47f7bd,_0x161d5a,_0x36dad2)):_0x14d4f5===_0x53888c(0x1c4)?_0x47f7bd[_0x53888c(0x1b7)]=this['_dateToString'][_0x53888c(0x1f3)](_0x41631e):_0x14d4f5===_0x53888c(0x174)?_0x47f7bd[_0x53888c(0x1b7)]=_0x41631e[_0x53888c(0x1ba)]():_0x14d4f5==='RegExp'?_0x47f7bd[_0x53888c(0x1b7)]=this[_0x53888c(0x1c2)]['call'](_0x41631e):_0x14d4f5==='symbol'&&this['_Symbol']?_0x47f7bd[_0x53888c(0x1b7)]=this[_0x53888c(0x1e4)][_0x53888c(0x188)][_0x53888c(0x1ba)][_0x53888c(0x1f3)](_0x41631e):!_0x161d5a[_0x53888c(0x17c)]&&!(_0x14d4f5===_0x53888c(0x13a)||_0x14d4f5===_0x53888c(0x1ab))&&(delete _0x47f7bd[_0x53888c(0x1b7)],_0x47f7bd[_0x53888c(0x199)]=!0x0),_0x4e092f&&(_0x47f7bd[_0x53888c(0x11a)]=!0x0),_0x32dcce=_0x161d5a[_0x53888c(0x1cc)][_0x53888c(0x17a)],_0x161d5a[_0x53888c(0x1cc)]['current']=_0x47f7bd,this[_0x53888c(0x184)](_0x47f7bd,_0x161d5a),_0x1a27f7[_0x53888c(0x128)]){for(_0x20ce3c=0x0,_0x28688c=_0x1a27f7[_0x53888c(0x128)];_0x20ce3c<_0x28688c;_0x20ce3c++)_0x1a27f7[_0x20ce3c](_0x20ce3c);}_0x2c78db[_0x53888c(0x128)]&&(_0x47f7bd[_0x53888c(0x1e8)]=_0x2c78db);}catch(_0x4403a7){_0x5a2896(_0x4403a7,_0x47f7bd,_0x161d5a);}return this[_0x53888c(0x1f1)](_0x41631e,_0x47f7bd),this[_0x53888c(0x15f)](_0x47f7bd,_0x161d5a),_0x161d5a['node'][_0x53888c(0x17a)]=_0x32dcce,_0x161d5a[_0x53888c(0x1d5)]--,_0x161d5a[_0x53888c(0x1f5)]=_0x2a97ee,_0x161d5a['autoExpand']&&_0x161d5a[_0x53888c(0x16e)]['pop'](),_0x47f7bd;}[_0x5abbd6(0x115)](_0x59bf5c){var _0x299946=_0x5abbd6;return Object[_0x299946(0x17f)]?Object[_0x299946(0x17f)](_0x59bf5c):[];}[_0x5abbd6(0x189)](_0x39ac3a){var _0x179b3f=_0x5abbd6;return!!(_0x39ac3a&&_0x2e1031[_0x179b3f(0x193)]&&this[_0x179b3f(0x14d)](_0x39ac3a)===_0x179b3f(0x1a7)&&_0x39ac3a['forEach']);}['_blacklistedProperty'](_0x51015b,_0x5b7639,_0x52516d){var _0x4d107e=_0x5abbd6;return _0x52516d[_0x4d107e(0x13d)]?typeof _0x51015b[_0x5b7639]==_0x4d107e(0x18b):!0x1;}[_0x5abbd6(0x126)](_0x59ad53){var _0x56e2f3=_0x5abbd6,_0x331c29='';return _0x331c29=typeof _0x59ad53,_0x331c29===_0x56e2f3(0x1bd)?this[_0x56e2f3(0x14d)](_0x59ad53)==='[object\\\\x20Array]'?_0x331c29=_0x56e2f3(0x1aa):this[_0x56e2f3(0x14d)](_0x59ad53)===_0x56e2f3(0x11d)?_0x331c29='date':this[_0x56e2f3(0x14d)](_0x59ad53)==='[object\\\\x20BigInt]'?_0x331c29='bigint':_0x59ad53===null?_0x331c29=_0x56e2f3(0x13a):_0x59ad53[_0x56e2f3(0x133)]&&(_0x331c29=_0x59ad53[_0x56e2f3(0x133)][_0x56e2f3(0x16b)]||_0x331c29):_0x331c29===_0x56e2f3(0x1ab)&&this['_HTMLAllCollection']&&_0x59ad53 instanceof this['_HTMLAllCollection']&&(_0x331c29=_0x56e2f3(0x123)),_0x331c29;}[_0x5abbd6(0x14d)](_0x2ac758){var _0x3887f4=_0x5abbd6;return Object[_0x3887f4(0x188)][_0x3887f4(0x1ba)][_0x3887f4(0x1f3)](_0x2ac758);}[_0x5abbd6(0x1a9)](_0x584497){var _0x5a6350=_0x5abbd6;return _0x584497==='boolean'||_0x584497===_0x5a6350(0x1b1)||_0x584497===_0x5a6350(0x180);}['_isPrimitiveWrapperType'](_0x404ae9){var _0x321cb7=_0x5abbd6;return _0x404ae9===_0x321cb7(0x1ef)||_0x404ae9==='String'||_0x404ae9==='Number';}['_addProperty'](_0x39a6ca,_0x1c6f48,_0x57a513,_0x49e8c5,_0x704a4,_0x230c65){var _0x48e96b=this;return function(_0x58b51d){var _0x516890=_0x8b30,_0x26dc75=_0x704a4[_0x516890(0x1cc)][_0x516890(0x17a)],_0x18b7a7=_0x704a4[_0x516890(0x1cc)][_0x516890(0x137)],_0x3d663f=_0x704a4['node'][_0x516890(0x138)];_0x704a4['node'][_0x516890(0x138)]=_0x26dc75,_0x704a4[_0x516890(0x1cc)][_0x516890(0x137)]=typeof _0x49e8c5==_0x516890(0x180)?_0x49e8c5:_0x58b51d,_0x39a6ca['push'](_0x48e96b[_0x516890(0x179)](_0x1c6f48,_0x57a513,_0x49e8c5,_0x704a4,_0x230c65)),_0x704a4[_0x516890(0x1cc)]['parent']=_0x3d663f,_0x704a4[_0x516890(0x1cc)][_0x516890(0x137)]=_0x18b7a7;};}[_0x5abbd6(0x15b)](_0x23e413,_0x35449e,_0x133d65,_0x4728a5,_0x233005,_0x478760,_0x2980f6){var _0x1f56d1=_0x5abbd6,_0x464889=this;return _0x35449e['_p_'+_0x233005[_0x1f56d1(0x1ba)]()]=!0x0,function(_0x239adf){var _0x54a132=_0x1f56d1,_0x2d9107=_0x478760[_0x54a132(0x1cc)]['current'],_0x406bcc=_0x478760[_0x54a132(0x1cc)][_0x54a132(0x137)],_0xc35e18=_0x478760['node']['parent'];_0x478760[_0x54a132(0x1cc)][_0x54a132(0x138)]=_0x2d9107,_0x478760['node'][_0x54a132(0x137)]=_0x239adf,_0x23e413[_0x54a132(0x1e6)](_0x464889['_property'](_0x133d65,_0x4728a5,_0x233005,_0x478760,_0x2980f6)),_0x478760[_0x54a132(0x1cc)]['parent']=_0xc35e18,_0x478760[_0x54a132(0x1cc)]['index']=_0x406bcc;};}[_0x5abbd6(0x179)](_0x5784cf,_0x265cf0,_0x53ee12,_0x3fa88c,_0x2a92ad){var _0x5b3bfa=_0x5abbd6,_0x9b6793=this;_0x2a92ad||(_0x2a92ad=function(_0x464c4a,_0xe8ab7e){return _0x464c4a[_0xe8ab7e];});var _0xfd5633=_0x53ee12[_0x5b3bfa(0x1ba)](),_0xac07f1=_0x3fa88c['expressionsToEvaluate']||{},_0x50e1d8=_0x3fa88c[_0x5b3bfa(0x17c)],_0x7b3925=_0x3fa88c['isExpressionToEvaluate'];try{var _0x2001af=this[_0x5b3bfa(0x1a6)](_0x5784cf),_0x1f2c58=_0xfd5633;_0x2001af&&_0x1f2c58[0x0]==='\\\\x27'&&(_0x1f2c58=_0x1f2c58[_0x5b3bfa(0x1a4)](0x1,_0x1f2c58['length']-0x2));var _0x2836f2=_0x3fa88c['expressionsToEvaluate']=_0xac07f1[_0x5b3bfa(0x118)+_0x1f2c58];_0x2836f2&&(_0x3fa88c[_0x5b3bfa(0x17c)]=_0x3fa88c['depth']+0x1),_0x3fa88c[_0x5b3bfa(0x1a0)]=!!_0x2836f2;var _0x42b17d=typeof _0x53ee12==_0x5b3bfa(0x19a),_0x5010a1={'name':_0x42b17d||_0x2001af?_0xfd5633:this[_0x5b3bfa(0x11e)](_0xfd5633)};if(_0x42b17d&&(_0x5010a1['symbol']=!0x0),!(_0x265cf0===_0x5b3bfa(0x1aa)||_0x265cf0==='Error')){var _0x1df58a=this[_0x5b3bfa(0x15a)](_0x5784cf,_0x53ee12);if(_0x1df58a&&(_0x1df58a[_0x5b3bfa(0x1cf)]&&(_0x5010a1[_0x5b3bfa(0x12b)]=!0x0),_0x1df58a[_0x5b3bfa(0x16d)]&&!_0x2836f2&&!_0x3fa88c[_0x5b3bfa(0x1bf)]))return _0x5010a1['getter']=!0x0,this['_processTreeNodeResult'](_0x5010a1,_0x3fa88c),_0x5010a1;}var _0x2d0738;try{_0x2d0738=_0x2a92ad(_0x5784cf,_0x53ee12);}catch(_0x59081c){return _0x5010a1={'name':_0xfd5633,'type':_0x5b3bfa(0x134),'error':_0x59081c[_0x5b3bfa(0x16c)]},this[_0x5b3bfa(0x176)](_0x5010a1,_0x3fa88c),_0x5010a1;}var _0xcd1d2b=this['_type'](_0x2d0738),_0x53beda=this[_0x5b3bfa(0x1a9)](_0xcd1d2b);if(_0x5010a1['type']=_0xcd1d2b,_0x53beda)this[_0x5b3bfa(0x176)](_0x5010a1,_0x3fa88c,_0x2d0738,function(){var _0x3dc8f7=_0x5b3bfa;_0x5010a1[_0x3dc8f7(0x1b7)]=_0x2d0738[_0x3dc8f7(0x17d)](),!_0x2836f2&&_0x9b6793[_0x3dc8f7(0x1d8)](_0xcd1d2b,_0x5010a1,_0x3fa88c,{});});else{var _0x5a7fc1=_0x3fa88c[_0x5b3bfa(0x1f5)]&&_0x3fa88c[_0x5b3bfa(0x1d5)]<_0x3fa88c[_0x5b3bfa(0x1d3)]&&_0x3fa88c['autoExpandPreviousObjects']['indexOf'](_0x2d0738)<0x0&&_0xcd1d2b!==_0x5b3bfa(0x18b)&&_0x3fa88c[_0x5b3bfa(0x1be)]<_0x3fa88c[_0x5b3bfa(0x19f)];_0x5a7fc1||_0x3fa88c[_0x5b3bfa(0x1d5)]<_0x50e1d8||_0x2836f2?(this[_0x5b3bfa(0x152)](_0x5010a1,_0x2d0738,_0x3fa88c,_0x2836f2||{}),this[_0x5b3bfa(0x1f1)](_0x2d0738,_0x5010a1)):this[_0x5b3bfa(0x176)](_0x5010a1,_0x3fa88c,_0x2d0738,function(){var _0x1d8376=_0x5b3bfa;_0xcd1d2b===_0x1d8376(0x13a)||_0xcd1d2b===_0x1d8376(0x1ab)||(delete _0x5010a1[_0x1d8376(0x1b7)],_0x5010a1[_0x1d8376(0x199)]=!0x0);});}return _0x5010a1;}finally{_0x3fa88c[_0x5b3bfa(0x196)]=_0xac07f1,_0x3fa88c['depth']=_0x50e1d8,_0x3fa88c[_0x5b3bfa(0x1a0)]=_0x7b3925;}}[_0x5abbd6(0x1d8)](_0x51f77d,_0x49d693,_0x199d50,_0x3747b3){var _0x506539=_0x5abbd6,_0x197c6=_0x3747b3['strLength']||_0x199d50[_0x506539(0x1a1)];if((_0x51f77d===_0x506539(0x1b1)||_0x51f77d===_0x506539(0x1f6))&&_0x49d693['value']){let _0x196af8=_0x49d693[_0x506539(0x1b7)][_0x506539(0x128)];_0x199d50[_0x506539(0x1f8)]+=_0x196af8,_0x199d50[_0x506539(0x1f8)]>_0x199d50[_0x506539(0x1df)]?(_0x49d693['capped']='',delete _0x49d693['value']):_0x196af8>_0x197c6&&(_0x49d693[_0x506539(0x199)]=_0x49d693[_0x506539(0x1b7)][_0x506539(0x1a4)](0x0,_0x197c6),delete _0x49d693['value']);}}[_0x5abbd6(0x1a6)](_0xc4f25d){var _0x20b2d4=_0x5abbd6;return!!(_0xc4f25d&&_0x2e1031['Map']&&this[_0x20b2d4(0x14d)](_0xc4f25d)===_0x20b2d4(0x1c9)&&_0xc4f25d['forEach']);}[_0x5abbd6(0x11e)](_0x130dec){var _0x3522ba=_0x5abbd6;if(_0x130dec[_0x3522ba(0x1bb)](/^\\\\d+$/))return _0x130dec;var _0x41ac7e;try{_0x41ac7e=JSON[_0x3522ba(0x132)](''+_0x130dec);}catch{_0x41ac7e='\\\\x22'+this[_0x3522ba(0x14d)](_0x130dec)+'\\\\x22';}return _0x41ac7e[_0x3522ba(0x1bb)](/^\\\"([a-zA-Z_][a-zA-Z_0-9]*)\\\"$/)?_0x41ac7e=_0x41ac7e[_0x3522ba(0x1a4)](0x1,_0x41ac7e[_0x3522ba(0x128)]-0x2):_0x41ac7e=_0x41ac7e[_0x3522ba(0x1f9)](/'/g,'\\\\x5c\\\\x27')[_0x3522ba(0x1f9)](/\\\\\\\\\\\"/g,'\\\\x22')['replace'](/(^\\\"|\\\"$)/g,'\\\\x27'),_0x41ac7e;}[_0x5abbd6(0x176)](_0xfb5dfb,_0x3efdbd,_0x341ed5,_0x2acafa){var _0x34b16a=_0x5abbd6;this[_0x34b16a(0x184)](_0xfb5dfb,_0x3efdbd),_0x2acafa&&_0x2acafa(),this[_0x34b16a(0x1f1)](_0x341ed5,_0xfb5dfb),this[_0x34b16a(0x15f)](_0xfb5dfb,_0x3efdbd);}[_0x5abbd6(0x184)](_0x310b36,_0xd6f7c9){var _0x95d52a=_0x5abbd6;this['_setNodeId'](_0x310b36,_0xd6f7c9),this[_0x95d52a(0x146)](_0x310b36,_0xd6f7c9),this[_0x95d52a(0x1c8)](_0x310b36,_0xd6f7c9),this['_setNodePermissions'](_0x310b36,_0xd6f7c9);}[_0x5abbd6(0x155)](_0x302ec4,_0x2ac3ca){}[_0x5abbd6(0x146)](_0x91431c,_0x312a8e){}[_0x5abbd6(0x119)](_0xa12674,_0x1fc23c){}[_0x5abbd6(0x1f0)](_0x32693e){var _0x2f98e1=_0x5abbd6;return _0x32693e===this[_0x2f98e1(0x1a3)];}[_0x5abbd6(0x15f)](_0x1a07f9,_0x1a1985){var _0x426cbf=_0x5abbd6;this[_0x426cbf(0x119)](_0x1a07f9,_0x1a1985),this[_0x426cbf(0x1d1)](_0x1a07f9),_0x1a1985[_0x426cbf(0x175)]&&this[_0x426cbf(0x1b2)](_0x1a07f9),this[_0x426cbf(0x167)](_0x1a07f9,_0x1a1985),this[_0x426cbf(0x12e)](_0x1a07f9,_0x1a1985),this['_cleanNode'](_0x1a07f9);}['_additionalMetadata'](_0x4d4269,_0x401a68){var _0x58101a=_0x5abbd6;let _0x49c194;try{_0x2e1031[_0x58101a(0x1ca)]&&(_0x49c194=_0x2e1031[_0x58101a(0x1ca)]['error'],_0x2e1031[_0x58101a(0x1ca)][_0x58101a(0x14b)]=function(){}),_0x4d4269&&typeof _0x4d4269[_0x58101a(0x128)]==_0x58101a(0x180)&&(_0x401a68[_0x58101a(0x128)]=_0x4d4269[_0x58101a(0x128)]);}catch{}finally{_0x49c194&&(_0x2e1031[_0x58101a(0x1ca)][_0x58101a(0x14b)]=_0x49c194);}if(_0x401a68[_0x58101a(0x168)]===_0x58101a(0x180)||_0x401a68[_0x58101a(0x168)]===_0x58101a(0x160)){if(isNaN(_0x401a68['value']))_0x401a68['nan']=!0x0,delete _0x401a68[_0x58101a(0x1b7)];else switch(_0x401a68[_0x58101a(0x1b7)]){case Number[_0x58101a(0x11b)]:_0x401a68[_0x58101a(0x198)]=!0x0,delete _0x401a68[_0x58101a(0x1b7)];break;case Number['NEGATIVE_INFINITY']:_0x401a68[_0x58101a(0x164)]=!0x0,delete _0x401a68[_0x58101a(0x1b7)];break;case 0x0:this['_isNegativeZero'](_0x401a68[_0x58101a(0x1b7)])&&(_0x401a68[_0x58101a(0x1fa)]=!0x0);break;}}else _0x401a68[_0x58101a(0x168)]==='function'&&typeof _0x4d4269[_0x58101a(0x16b)]==_0x58101a(0x1b1)&&_0x4d4269[_0x58101a(0x16b)]&&_0x401a68[_0x58101a(0x16b)]&&_0x4d4269[_0x58101a(0x16b)]!==_0x401a68[_0x58101a(0x16b)]&&(_0x401a68['funcName']=_0x4d4269[_0x58101a(0x16b)]);}[_0x5abbd6(0x1b5)](_0x438c6a){var _0x4fbe85=_0x5abbd6;return 0x1/_0x438c6a===Number[_0x4fbe85(0x124)];}[_0x5abbd6(0x1b2)](_0x52a500){var _0x459063=_0x5abbd6;!_0x52a500['props']||!_0x52a500[_0x459063(0x1e8)][_0x459063(0x128)]||_0x52a500['type']===_0x459063(0x1aa)||_0x52a500[_0x459063(0x168)]==='Map'||_0x52a500[_0x459063(0x168)]===_0x459063(0x193)||_0x52a500[_0x459063(0x1e8)][_0x459063(0x1c6)](function(_0x329ab9,_0x188dc5){var _0xdc6f34=_0x459063,_0x3f3573=_0x329ab9[_0xdc6f34(0x16b)][_0xdc6f34(0x156)](),_0x2fe0ba=_0x188dc5[_0xdc6f34(0x16b)][_0xdc6f34(0x156)]();return _0x3f3573<_0x2fe0ba?-0x1:_0x3f3573>_0x2fe0ba?0x1:0x0;});}[_0x5abbd6(0x167)](_0x114707,_0x58fa8){var _0x405ee3=_0x5abbd6;if(!(_0x58fa8[_0x405ee3(0x13d)]||!_0x114707[_0x405ee3(0x1e8)]||!_0x114707[_0x405ee3(0x1e8)][_0x405ee3(0x128)])){for(var _0x5d2b19=[],_0xebad3e=[],_0x24d6a1=0x0,_0x2ec318=_0x114707[_0x405ee3(0x1e8)][_0x405ee3(0x128)];_0x24d6a1<_0x2ec318;_0x24d6a1++){var _0x41775b=_0x114707[_0x405ee3(0x1e8)][_0x24d6a1];_0x41775b[_0x405ee3(0x168)]===_0x405ee3(0x18b)?_0x5d2b19[_0x405ee3(0x1e6)](_0x41775b):_0xebad3e[_0x405ee3(0x1e6)](_0x41775b);}if(!(!_0xebad3e[_0x405ee3(0x128)]||_0x5d2b19[_0x405ee3(0x128)]<=0x1)){_0x114707[_0x405ee3(0x1e8)]=_0xebad3e;var _0x5c4a19={'functionsNode':!0x0,'props':_0x5d2b19};this[_0x405ee3(0x155)](_0x5c4a19,_0x58fa8),this[_0x405ee3(0x119)](_0x5c4a19,_0x58fa8),this[_0x405ee3(0x1d1)](_0x5c4a19),this['_setNodePermissions'](_0x5c4a19,_0x58fa8),_0x5c4a19['id']+='\\\\x20f',_0x114707[_0x405ee3(0x1e8)][_0x405ee3(0x1da)](_0x5c4a19);}}}[_0x5abbd6(0x12e)](_0x448a34,_0x35ce0a){}[_0x5abbd6(0x1d1)](_0x581134){}[_0x5abbd6(0x116)](_0x209d9b){var _0x953bf1=_0x5abbd6;return Array['isArray'](_0x209d9b)||typeof _0x209d9b=='object'&&this[_0x953bf1(0x14d)](_0x209d9b)==='[object\\\\x20Array]';}['_setNodePermissions'](_0x58e709,_0x402fb7){}[_0x5abbd6(0x136)](_0x16c098){var _0x30c4f4=_0x5abbd6;delete _0x16c098[_0x30c4f4(0x144)],delete _0x16c098['_hasSetOnItsPath'],delete _0x16c098[_0x30c4f4(0x1c0)];}[_0x5abbd6(0x1c8)](_0x4730a9,_0x7f30fa){}}let _0x45105d=new _0x3cb384(),_0x818d6b={'props':0x64,'elements':0x64,'strLength':0x400*0x32,'totalStrLength':0x400*0x32,'autoExpandLimit':0x1388,'autoExpandMaxDepth':0xa},_0x202a09={'props':0x5,'elements':0x5,'strLength':0x100,'totalStrLength':0x100*0x3,'autoExpandLimit':0x1e,'autoExpandMaxDepth':0x2};function _0x1e07cc(_0x1c3569,_0x5be667,_0x5853f6,_0x3dff21,_0x44d7b6,_0x140be2){var _0x4e4a9b=_0x5abbd6;let _0x219114,_0x3e828d;try{_0x3e828d=_0x57e724(),_0x219114=_0x5a8eb6[_0x5be667],!_0x219114||_0x3e828d-_0x219114['ts']>0x1f4&&_0x219114[_0x4e4a9b(0x1f7)]&&_0x219114[_0x4e4a9b(0x1e1)]/_0x219114[_0x4e4a9b(0x1f7)]<0x64?(_0x5a8eb6[_0x5be667]=_0x219114={'count':0x0,'time':0x0,'ts':_0x3e828d},_0x5a8eb6['hits']={}):_0x3e828d-_0x5a8eb6[_0x4e4a9b(0x1fd)]['ts']>0x32&&_0x5a8eb6[_0x4e4a9b(0x1fd)]['count']&&_0x5a8eb6[_0x4e4a9b(0x1fd)]['time']/_0x5a8eb6[_0x4e4a9b(0x1fd)][_0x4e4a9b(0x1f7)]<0x64&&(_0x5a8eb6[_0x4e4a9b(0x1fd)]={});let _0x2163be=[],_0x24679f=_0x219114[_0x4e4a9b(0x157)]||_0x5a8eb6[_0x4e4a9b(0x1fd)][_0x4e4a9b(0x157)]?_0x202a09:_0x818d6b,_0x3b160e=_0x1814b1=>{var _0x2462d4=_0x4e4a9b;let _0x19817d={};return _0x19817d[_0x2462d4(0x1e8)]=_0x1814b1[_0x2462d4(0x1e8)],_0x19817d[_0x2462d4(0x171)]=_0x1814b1[_0x2462d4(0x171)],_0x19817d[_0x2462d4(0x1a1)]=_0x1814b1[_0x2462d4(0x1a1)],_0x19817d['totalStrLength']=_0x1814b1[_0x2462d4(0x1df)],_0x19817d[_0x2462d4(0x19f)]=_0x1814b1['autoExpandLimit'],_0x19817d[_0x2462d4(0x1d3)]=_0x1814b1[_0x2462d4(0x1d3)],_0x19817d[_0x2462d4(0x175)]=!0x1,_0x19817d[_0x2462d4(0x13d)]=!_0x56dfa6,_0x19817d['depth']=0x1,_0x19817d[_0x2462d4(0x1d5)]=0x0,_0x19817d[_0x2462d4(0x172)]=_0x2462d4(0x114),_0x19817d[_0x2462d4(0x129)]='root_exp',_0x19817d[_0x2462d4(0x1f5)]=!0x0,_0x19817d[_0x2462d4(0x16e)]=[],_0x19817d['autoExpandPropertyCount']=0x0,_0x19817d[_0x2462d4(0x1bf)]=!0x0,_0x19817d['allStrLength']=0x0,_0x19817d[_0x2462d4(0x1cc)]={'current':void 0x0,'parent':void 0x0,'index':0x0},_0x19817d;};for(var _0x384e62=0x0;_0x384e62<_0x44d7b6[_0x4e4a9b(0x128)];_0x384e62++)_0x2163be['push'](_0x45105d['serialize']({'timeNode':_0x1c3569==='time'||void 0x0},_0x44d7b6[_0x384e62],_0x3b160e(_0x24679f),{}));if(_0x1c3569===_0x4e4a9b(0x159)){let _0x693710=Error['stackTraceLimit'];try{Error['stackTraceLimit']=0x1/0x0,_0x2163be[_0x4e4a9b(0x1e6)](_0x45105d['serialize']({'stackNode':!0x0},new Error()[_0x4e4a9b(0x170)],_0x3b160e(_0x24679f),{'strLength':0x1/0x0}));}finally{Error['stackTraceLimit']=_0x693710;}}return{'method':_0x4e4a9b(0x1f2),'version':_0xd56935,'args':[{'ts':_0x5853f6,'session':_0x3dff21,'args':_0x2163be,'id':_0x5be667,'context':_0x140be2}]};}catch(_0x5b97ea){return{'method':_0x4e4a9b(0x1f2),'version':_0xd56935,'args':[{'ts':_0x5853f6,'session':_0x3dff21,'args':[{'type':_0x4e4a9b(0x134),'error':_0x5b97ea&&_0x5b97ea['message']}],'id':_0x5be667,'context':_0x140be2}]};}finally{try{if(_0x219114&&_0x3e828d){let _0xebfdb8=_0x57e724();_0x219114['count']++,_0x219114[_0x4e4a9b(0x1e1)]+=_0x35be09(_0x3e828d,_0xebfdb8),_0x219114['ts']=_0xebfdb8,_0x5a8eb6['hits'][_0x4e4a9b(0x1f7)]++,_0x5a8eb6[_0x4e4a9b(0x1fd)][_0x4e4a9b(0x1e1)]+=_0x35be09(_0x3e828d,_0xebfdb8),_0x5a8eb6[_0x4e4a9b(0x1fd)]['ts']=_0xebfdb8,(_0x219114[_0x4e4a9b(0x1f7)]>0x32||_0x219114[_0x4e4a9b(0x1e1)]>0x64)&&(_0x219114['reduceLimits']=!0x0),(_0x5a8eb6[_0x4e4a9b(0x1fd)]['count']>0x3e8||_0x5a8eb6[_0x4e4a9b(0x1fd)]['time']>0x12c)&&(_0x5a8eb6[_0x4e4a9b(0x1fd)][_0x4e4a9b(0x157)]=!0x0);}}catch{}}}return _0x1e07cc;}((_0x352ff9,_0x3dd541,_0x23810c,_0x168673,_0x112f10,_0x30646a,_0x32fd9c,_0x165ceb,_0x278d6d,_0x548b5d)=>{var _0x3c2751=_0x2a0c0b;if(_0x352ff9['_console_ninja'])return _0x352ff9[_0x3c2751(0x1e5)];if(!J(_0x352ff9,_0x165ceb,_0x112f10))return _0x352ff9[_0x3c2751(0x1e5)]={'consoleLog':()=>{},'consoleTrace':()=>{},'consoleTime':()=>{},'consoleTimeEnd':()=>{},'autoLog':()=>{},'autoLogMany':()=>{},'autoTraceMany':()=>{},'coverage':()=>{},'autoTrace':()=>{},'autoTime':()=>{},'autoTimeEnd':()=>{}},_0x352ff9[_0x3c2751(0x1e5)];let _0x37d3b2=W(_0x352ff9),_0x285892=_0x37d3b2['elapsed'],_0x38f153=_0x37d3b2[_0x3c2751(0x19d)],_0x3cbfa8=_0x37d3b2[_0x3c2751(0x186)],_0xd766d8={'hits':{},'ts':{}},_0x58fe12=Y(_0x352ff9,_0x278d6d,_0xd766d8,_0x30646a),_0x15533b=_0x29cdb6=>{_0xd766d8['ts'][_0x29cdb6]=_0x38f153();},_0x88a67=(_0x346ea5,_0x9f5fa9)=>{let _0x1b5bbd=_0xd766d8['ts'][_0x9f5fa9];if(delete _0xd766d8['ts'][_0x9f5fa9],_0x1b5bbd){let _0xfedaef=_0x285892(_0x1b5bbd,_0x38f153());_0x312f4c(_0x58fe12('time',_0x346ea5,_0x3cbfa8(),_0x28c98f,[_0xfedaef],_0x9f5fa9));}},_0x17eac8=_0x396570=>_0x773a61=>{var _0x55e1f7=_0x3c2751;try{_0x15533b(_0x773a61),_0x396570(_0x773a61);}finally{_0x352ff9[_0x55e1f7(0x1ca)][_0x55e1f7(0x1e1)]=_0x396570;}},_0xe33597=_0x19d82c=>_0x333115=>{var _0x3baeea=_0x3c2751;try{let [_0x32f2f3,_0x16ccff]=_0x333115[_0x3baeea(0x145)](':logPointId:');_0x88a67(_0x16ccff,_0x32f2f3),_0x19d82c(_0x32f2f3);}finally{_0x352ff9[_0x3baeea(0x1ca)][_0x3baeea(0x161)]=_0x19d82c;}};_0x352ff9[_0x3c2751(0x1e5)]={'consoleLog':(_0x19f013,_0x350b28)=>{var _0x31c62a=_0x3c2751;_0x352ff9[_0x31c62a(0x1ca)][_0x31c62a(0x1f2)][_0x31c62a(0x16b)]!==_0x31c62a(0x1ed)&&_0x312f4c(_0x58fe12('log',_0x19f013,_0x3cbfa8(),_0x28c98f,_0x350b28));},'consoleTrace':(_0x2098d0,_0x20c5af)=>{var _0x28d020=_0x3c2751;_0x352ff9[_0x28d020(0x1ca)][_0x28d020(0x1f2)][_0x28d020(0x16b)]!==_0x28d020(0x13c)&&_0x312f4c(_0x58fe12(_0x28d020(0x159),_0x2098d0,_0x3cbfa8(),_0x28c98f,_0x20c5af));},'consoleTime':()=>{var _0x12416a=_0x3c2751;_0x352ff9[_0x12416a(0x1ca)]['time']=_0x17eac8(_0x352ff9[_0x12416a(0x1ca)][_0x12416a(0x1e1)]);},'consoleTimeEnd':()=>{var _0x2c64ac=_0x3c2751;_0x352ff9[_0x2c64ac(0x1ca)][_0x2c64ac(0x161)]=_0xe33597(_0x352ff9[_0x2c64ac(0x1ca)][_0x2c64ac(0x161)]);},'autoLog':(_0xbaa5eb,_0x59580f)=>{var _0xd01711=_0x3c2751;_0x312f4c(_0x58fe12(_0xd01711(0x1f2),_0x59580f,_0x3cbfa8(),_0x28c98f,[_0xbaa5eb]));},'autoLogMany':(_0x3083b2,_0x260fbf)=>{var _0xb52b41=_0x3c2751;_0x312f4c(_0x58fe12(_0xb52b41(0x1f2),_0x3083b2,_0x3cbfa8(),_0x28c98f,_0x260fbf));},'autoTrace':(_0x309738,_0x10f085)=>{var _0x46d44e=_0x3c2751;_0x312f4c(_0x58fe12(_0x46d44e(0x159),_0x10f085,_0x3cbfa8(),_0x28c98f,[_0x309738]));},'autoTraceMany':(_0x16808e,_0x5d7c97)=>{var _0x18eefb=_0x3c2751;_0x312f4c(_0x58fe12(_0x18eefb(0x159),_0x16808e,_0x3cbfa8(),_0x28c98f,_0x5d7c97));},'autoTime':(_0x513098,_0x5b120f,_0x26e988)=>{_0x15533b(_0x26e988);},'autoTimeEnd':(_0x4304b0,_0x43e622,_0x4db3f1)=>{_0x88a67(_0x43e622,_0x4db3f1);},'coverage':_0x1f2b1c=>{_0x312f4c({'method':'coverage','version':_0x30646a,'args':[{'id':_0x1f2b1c}]});}};let _0x312f4c=b(_0x352ff9,_0x3dd541,_0x23810c,_0x168673,_0x112f10,_0x548b5d),_0x28c98f=_0x352ff9[_0x3c2751(0x1b0)];return _0x352ff9[_0x3c2751(0x1e5)];})(globalThis,_0x2a0c0b(0x191),_0x2a0c0b(0x1a5),_0x2a0c0b(0x163),_0x2a0c0b(0x1ea),_0x2a0c0b(0x182),_0x2a0c0b(0x142),_0x2a0c0b(0x1cb),_0x2a0c0b(0x117),_0x2a0c0b(0x192));\");}catch(e){}};/* istanbul ignore next */function oo_oo(i:string,...v:any[]){try{oo_cm().consoleLog(i, v);}catch(e){} return v};oo_oo;/* istanbul ignore next */function oo_tr(i:string,...v:any[]){try{oo_cm().consoleTrace(i, v);}catch(e){} return v};oo_tr;/* istanbul ignore next */function oo_ts(){try{oo_cm().consoleTime();}catch(e){}};oo_ts;/* istanbul ignore next */function oo_te(){try{oo_cm().consoleTimeEnd();}catch(e){}};oo_te;/*eslint unicorn/no-abusive-eslint-disable:,eslint-comments/disable-enable-pair:,eslint-comments/no-unlimited-disable:,eslint-comments/no-aggregating-enable:,eslint-comments/no-duplicate-disable:,eslint-comments/no-unused-disable:,eslint-comments/no-unused-enable:,*/","import { resolveAnnotationPrefix } from './config';\nimport {\n COMPONENTS_NAME,\n PROJECT_KEY_NAME,\n FILTERS_NAME,\n} from '@axis-backstage/plugin-jira-dashboard-common';\nimport { Config } from '@backstage/config';\n\nexport const getAnnotations = (config: Config) => {\n const prefix = resolveAnnotationPrefix(config);\n\n const projectKeyAnnotation = `${prefix}/${PROJECT_KEY_NAME}`;\n const componentsAnnotation = `${prefix}/${COMPONENTS_NAME}`;\n const filtersAnnotation = `${prefix}/${FILTERS_NAME}`;\n\n /* Adding support for Roadie's component annotation */\n const componentRoadieAnnotation = `${prefix}/component`;\n\n return {\n projectKeyAnnotation,\n componentsAnnotation,\n componentRoadieAnnotation,\n filtersAnnotation,\n };\n};\n","import {\n CacheManager,\n TokenManager,\n errorHandler,\n} from '@backstage/backend-common';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { Config } from '@backstage/config';\nimport { Logger } from 'winston';\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { DiscoveryApi } from '@backstage/plugin-permission-common';\nimport { IdentityApi } from '@backstage/plugin-auth-node';\n\nimport { getDefaultFilters } from '../filters';\nimport {\n type Filter,\n type JiraResponse,\n type Project,\n} from '@axis-backstage/plugin-jira-dashboard-common';\nimport stream from 'stream';\nimport { getProjectAvatar } from '../api';\nimport {\n getProjectResponse,\n getFiltersFromAnnotations,\n getIssuesFromFilters,\n getIssuesFromComponents,\n} from './service';\nimport { getAnnotations } from '../lib';\n\n/**\n * Constructs a jira dashboard router.\n * @public\n */\nexport interface RouterOptions {\n /**\n * Implementation of Winston logger\n */\n logger: Logger;\n\n /**\n * Backstage config object\n */\n config: Config;\n\n /**\n * Backstage discovery api instance\n */\n discovery: DiscoveryApi;\n\n /**\n * Backstage identity api instance\n */\n identity: IdentityApi;\n\n /**\n * Backstage token manager instance\n */\n tokenManager: TokenManager;\n}\n\nconst DEFAULT_TTL = 1000 * 60;\n\n/**\n * Constructs a jira dashboard router.\n *\n * @public\n */\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { logger, config, discovery, identity, tokenManager } = options;\n const catalogClient = new CatalogClient({ discoveryApi: discovery });\n logger.info('Initializing Jira Dashboard backend');\n\n const pluginCache =\n CacheManager.fromConfig(config).forPlugin('jira-dashboard');\n const cache = pluginCache.getClient({ defaultTtl: DEFAULT_TTL });\n\n const router = Router();\n router.use(express.json());\n\n router.get('/health', (_, response) => {\n response.json({ status: 'ok' });\n });\n\n router.get(\n '/dashboards/by-entity-ref/:kind/:namespace/:name',\n async (request, response) => {\n const { kind, namespace, name } = request.params;\n const entityRef = stringifyEntityRef({ kind, namespace, name });\n const { token } = await tokenManager.getToken();\n const entity = await catalogClient.getEntityByRef(entityRef, { token });\n const {\n projectKeyAnnotation,\n componentsAnnotation,\n componentRoadieAnnotation,\n filtersAnnotation,\n } = getAnnotations(config);\n\n if (!entity) {\n logger.info(`No entity found for ${entityRef}`);\n response\n .status(500)\n .json({ error: `No entity found for ${entityRef}` });\n return;\n }\n\n const projectKey =\n entity.metadata.annotations?.[projectKeyAnnotation]?.split(',')!;\n\n if (!projectKey) {\n const error = `No jira.com/project-key annotation found for ${entityRef}`;\n logger.info(error);\n response.status(404).json(error);\n return;\n }\n\n let projectResponse;\n\n try {\n projectResponse = await getProjectResponse(\n projectKey[0],\n config,\n cache,\n );\n } catch (err) {\n logger.error(`Could not find Jira project ${projectKey[0]}`);\n response.status(404).json({\n error: `No Jira project found with key ${projectKey[0]}`,\n });\n return;\n }\n\n const userIdentity = await identity.getIdentity({ request: request });\n\n if (!userIdentity) {\n logger.warn(`Could not find user identity`);\n }\n\n let filters: Filter[] = [];\n\n const customFilterAnnotations =\n entity.metadata.annotations?.[filtersAnnotation]?.split(',')!;\n\n filters = getDefaultFilters(\n config,\n userIdentity?.identity?.userEntityRef,\n );\n\n if (customFilterAnnotations) {\n filters.push(\n ...(await getFiltersFromAnnotations(customFilterAnnotations, config)),\n );\n }\n\n let issues = await getIssuesFromFilters(projectKey[0], filters, config);\n\n let components =\n entity.metadata.annotations?.[componentsAnnotation]?.split(',') ?? [];\n\n /* Adding support for Roadie's component annotation */\n components = components.concat(\n entity.metadata.annotations?.[componentRoadieAnnotation]?.split(',') ??\n [],\n );\n\n if (components) {\n const componentIssues = await getIssuesFromComponents(\n projectKey[0],\n components,\n config,\n );\n issues = issues.concat(componentIssues);\n }\n\n const jiraResponse: JiraResponse = {\n project: projectResponse as Project,\n data: issues,\n };\n response.json(jiraResponse);\n },\n );\n\n router.get(\n '/avatar/by-entity-ref/:kind/:namespace/:name',\n async (request, response) => {\n const { kind, namespace, name } = request.params;\n const entityRef = stringifyEntityRef({ kind, namespace, name });\n const { token } = await tokenManager.getToken();\n const entity = await catalogClient.getEntityByRef(entityRef, { token });\n const { projectKeyAnnotation } = getAnnotations(config);\n\n if (!entity) {\n logger.info(`No entity found for ${entityRef}`);\n response\n .status(500)\n .json({ error: `No entity found for ${entityRef}` });\n return;\n }\n\n const projectKey =\n entity.metadata.annotations?.[projectKeyAnnotation]?.split(',')!;\n\n const projectResponse = await getProjectResponse(\n projectKey[0],\n config,\n cache,\n );\n\n if (!projectResponse) {\n logger.error('Could not find project in Jira');\n response.status(400).json({\n error: `No Jira project found for project key ${projectKey[0]}`,\n });\n return;\n }\n\n const url = projectResponse.avatarUrls['48x48'];\n\n const avatar = await getProjectAvatar(url, config);\n\n const ps = new stream.PassThrough();\n const val = avatar.headers.get('content-type');\n\n response.setHeader('content-type', val ?? '');\n stream.pipeline(avatar.body, ps, err => {\n if (err) {\n logger.error(err);\n response.sendStatus(400);\n }\n return;\n });\n ps.pipe(response);\n },\n );\n router.use(errorHandler());\n return router;\n}\n","import { loggerToWinstonLogger } from '@backstage/backend-common';\nimport {\n coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { createRouter } from './service/router';\n\n/**\n * The Jira Dashboard backend plugin.\n *\n * @public\n */\nexport const jiraDashboardPlugin = createBackendPlugin({\n pluginId: 'jira-dashboard',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n discovery: coreServices.discovery,\n identity: coreServices.identity,\n tokenManager: coreServices.tokenManager,\n httpRouter: coreServices.httpRouter,\n },\n async init({\n logger,\n config,\n discovery,\n identity,\n tokenManager,\n httpRouter,\n }) {\n httpRouter.use(\n await createRouter({\n logger: loggerToWinstonLogger(logger),\n config,\n discovery,\n identity,\n tokenManager,\n }),\n );\n },\n });\n },\n});\n"],"names":["fetch","PROJECT_KEY_NAME","COMPONENTS_NAME","FILTERS_NAME","catalogClient","CatalogClient","CacheManager","Router","express","stringifyEntityRef","stream","errorHandler","createBackendPlugin","coreServices","loggerToWinstonLogger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/config.ts","../src/filters.ts","../src/api.ts","../src/service/service.ts","../src/lib.ts","../src/service/router.ts","../src/plugin.ts"],"sourcesContent":["import { Config } from '@backstage/config';\n\nconst JIRA_BASE_URL_CONFIG_PATH = 'jiraDashboard.baseUrl';\nconst JIRA_TOKEN_CONFIG_PATH = 'jiraDashboard.token';\nconst JIRA_USER_CONFIG_EMAIL_SUFFIX = 'jiraDashboard.userEmailSuffix';\nconst JIRA_ANNOTATION = 'jiraDashboard.annotationPrefix';\n\nexport function resolveJiraBaseUrl(config: Config): string {\n try {\n return config.getString(JIRA_BASE_URL_CONFIG_PATH);\n } catch (error) {\n throw new Error(`Invalid Jira baseUrl, ${error}`);\n }\n}\n\nexport function resolveJiraToken(config: Config): string {\n try {\n return config.getString(JIRA_TOKEN_CONFIG_PATH);\n } catch (error) {\n throw new Error(`Invalid Jira token, ${error}`);\n }\n}\n\nexport function resolveUserEmailSuffix(config: Config): string {\n return config.getOptionalString(JIRA_USER_CONFIG_EMAIL_SUFFIX) || '';\n}\n\nexport function resolveAnnotationPrefix(config: Config): string {\n const annotationPrefix = config.getOptionalString(JIRA_ANNOTATION);\n return annotationPrefix ?? 'jira.com';\n}\n","import { Config } from '@backstage/config';\nimport { resolveUserEmailSuffix } from './config';\nimport { Filter } from '@axis-backstage/plugin-jira-dashboard-common';\n\nconst getUsernameFromRef = (userRef: string) => {\n return userRef?.split('/').slice(1)[0];\n};\n\nconst openFilter: Filter = {\n name: 'Open Issues',\n shortName: 'OPEN',\n query: 'resolution = Unresolved ORDER BY updated DESC',\n};\n\nconst incomingFilter: Filter = {\n name: 'Incoming Issues',\n shortName: 'INCOMING',\n query: 'status = New ORDER BY created ASC',\n};\n\nexport const getDefaultFilters = (\n config: Config,\n userRef?: string,\n): Filter[] => {\n if (!userRef) {\n return [openFilter, incomingFilter];\n }\n const username = getUsernameFromRef(userRef);\n\n if (!username) {\n return [openFilter, incomingFilter];\n }\n\n const assignedToMeFilter: Filter = {\n name: 'Assigned to me',\n shortName: 'ME',\n query: `assignee = \"${username}${resolveUserEmailSuffix(\n config,\n )}\" AND resolution = Unresolved ORDER BY updated DESC`,\n };\n\n return [openFilter, incomingFilter, assignedToMeFilter];\n};\n","import { Config } from '@backstage/config';\nimport fetch from 'node-fetch';\nimport {\n Filter,\n Issue,\n Project,\n} from '@axis-backstage/plugin-jira-dashboard-common';\nimport { resolveJiraBaseUrl, resolveJiraToken } from './config';\n\nexport const getProjectInfo = async (\n projectKey: string,\n config: Config,\n): Promise<Project> => {\n const response = await fetch(\n `${resolveJiraBaseUrl(config)}project/${projectKey}`,\n {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n },\n );\n if (response.status !== 200) {\n throw Error(`${response.status}`);\n }\n return response.json();\n};\n\nexport const getFilterById = async (\n id: string,\n config: Config,\n): Promise<Filter> => {\n const response = await fetch(`${resolveJiraBaseUrl(config)}filter/${id}`, {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n });\n if (response.status !== 200) {\n throw Error(`${response.status}`);\n }\n const jsonResponse = await response.json();\n return { name: jsonResponse.name, query: jsonResponse.jql } as Filter;\n};\n\nexport const getIssuesByFilter = async (\n projectKey: string,\n query: string,\n config: Config,\n): Promise<Issue[]> => {\n const response = await fetch(\n `${resolveJiraBaseUrl(\n config,\n )}search?jql=project=${projectKey} AND ${query}`,\n {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n },\n ).then(resp => resp.json());\n return response.issues;\n};\n\n/**\n * Options available for the Jira JQL query.\n *\n * @public\n */\nexport type SearchOptions = {\n expand?: string[];\n fields?: string[];\n fieldsByKey?: boolean;\n properties?: string[];\n startAt?: number;\n maxResults?: number;\n validateQuery?: string;\n};\n\n/**\n * Search for Jira issues using JQL.\n *\n * For more information about the available options see the API\n * documentation at:\n * https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issue-search/#api-rest-api-2-search-post\n *\n * @param config - A Backstage config\n * @param jqlQuery - A string containing the jql query.\n * @param options - Query options that will be passed on to the POST request.\n *\n * @public\n */\nexport const searchJira = async (\n config: Config,\n jqlQuery: string,\n options: SearchOptions,\n): Promise<Issue[]> => {\n const response = await fetch(`${resolveJiraBaseUrl(config)}search`, {\n method: 'POST',\n body: JSON.stringify({ jql: jqlQuery, ...options }),\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n }).then(resp => resp.json());\n return response.issues;\n};\n\nexport const getIssuesByComponent = async (\n projectKey: string,\n componentKey: string,\n config: Config,\n): Promise<Issue[]> => {\n const response = await fetch(\n `${resolveJiraBaseUrl(\n config,\n )}search?jql=project=${projectKey} AND component = \"${componentKey}\"`,\n {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n Accept: 'application/json',\n },\n },\n ).then(resp => resp.json());\n return response.issues;\n};\n\nexport async function getProjectAvatar(url: string, config: Config) {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Authorization: resolveJiraToken(config),\n },\n });\n return response;\n}\n","import { CacheClient } from '@backstage/backend-common';\nimport { Config } from '@backstage/config';\nimport {\n type Filter,\n type JiraDataResponse,\n type Project,\n} from '@axis-backstage/plugin-jira-dashboard-common';\nimport {\n getFilterById,\n getIssuesByComponent,\n getIssuesByFilter,\n getProjectInfo,\n} from '../api';\n\nexport const getProjectResponse = async (\n projectKey: string,\n config: Config,\n cache: CacheClient,\n): Promise<Project> => {\n let projectResponse: Project;\n\n projectResponse = (await cache.get(projectKey)) as Project;\n\n if (projectResponse) return projectResponse as Project;\n\n try {\n projectResponse = await getProjectInfo(projectKey, config);\n cache.set(projectKey, projectResponse);\n } catch (err: any) {\n if (err.message !== 200) {\n throw Error(`${err.status}`);\n }\n }\n return projectResponse;\n};\n\nexport const getFiltersFromAnnotations = async (\n annotations: string[],\n config: Config,\n): Promise<Filter[]> => {\n const filters: Filter[] = [];\n\n for (const filter of annotations) {\n try {\n const response = await getFilterById(filter, config);\n filters.push(response);\n } catch (err: any) {\n console.warn(\n `${err.message} : Could not find filter with filter id ${filter}`,\n );\n }\n }\n return filters;\n};\n\nexport const getIssuesFromFilters = async (\n projectKey: string,\n filters: Filter[],\n config: Config,\n): Promise<JiraDataResponse[]> => {\n return await Promise.all(\n filters.map(async filter => ({\n name: filter.name,\n type: 'filter',\n issues: await getIssuesByFilter(projectKey, filter.query, config),\n })),\n );\n};\n\nexport const getIssuesFromComponents = async (\n projectKey: string,\n componentAnnotations: string[],\n config: Config,\n): Promise<JiraDataResponse[]> => {\n return await Promise.all(\n componentAnnotations.map(async componentKey => ({\n name: componentKey,\n type: 'component',\n issues: await getIssuesByComponent(projectKey, componentKey, config),\n })),\n );\n};\n","import { resolveAnnotationPrefix } from './config';\nimport {\n COMPONENTS_NAME,\n PROJECT_KEY_NAME,\n FILTERS_NAME,\n} from '@axis-backstage/plugin-jira-dashboard-common';\nimport { Config } from '@backstage/config';\n\nexport const getAnnotations = (config: Config) => {\n const prefix = resolveAnnotationPrefix(config);\n\n const projectKeyAnnotation = `${prefix}/${PROJECT_KEY_NAME}`;\n const componentsAnnotation = `${prefix}/${COMPONENTS_NAME}`;\n const filtersAnnotation = `${prefix}/${FILTERS_NAME}`;\n\n /* Adding support for Roadie's component annotation */\n const componentRoadieAnnotation = `${prefix}/component`;\n\n return {\n projectKeyAnnotation,\n componentsAnnotation,\n componentRoadieAnnotation,\n filtersAnnotation,\n };\n};\n","import {\n CacheManager,\n TokenManager,\n errorHandler,\n} from '@backstage/backend-common';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { Config } from '@backstage/config';\nimport { Logger } from 'winston';\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { DiscoveryApi } from '@backstage/plugin-permission-common';\nimport { IdentityApi } from '@backstage/plugin-auth-node';\n\nimport { getDefaultFilters } from '../filters';\nimport {\n type Filter,\n type JiraResponse,\n type Project,\n} from '@axis-backstage/plugin-jira-dashboard-common';\nimport stream from 'stream';\nimport { getProjectAvatar } from '../api';\nimport {\n getProjectResponse,\n getFiltersFromAnnotations,\n getIssuesFromFilters,\n getIssuesFromComponents,\n} from './service';\nimport { getAnnotations } from '../lib';\n\n/**\n * Constructs a jira dashboard router.\n * @public\n */\nexport interface RouterOptions {\n /**\n * Implementation of Winston logger\n */\n logger: Logger;\n\n /**\n * Backstage config object\n */\n config: Config;\n\n /**\n * Backstage discovery api instance\n */\n discovery: DiscoveryApi;\n\n /**\n * Backstage identity api instance\n */\n identity: IdentityApi;\n\n /**\n * Backstage token manager instance\n */\n tokenManager: TokenManager;\n}\n\nconst DEFAULT_TTL = 1000 * 60;\n\n/**\n * Constructs a jira dashboard router.\n *\n * @public\n */\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { logger, config, discovery, identity, tokenManager } = options;\n const catalogClient = new CatalogClient({ discoveryApi: discovery });\n logger.info('Initializing Jira Dashboard backend');\n\n const pluginCache =\n CacheManager.fromConfig(config).forPlugin('jira-dashboard');\n const cache = pluginCache.getClient({ defaultTtl: DEFAULT_TTL });\n\n const router = Router();\n router.use(express.json());\n\n router.get('/health', (_, response) => {\n response.json({ status: 'ok' });\n });\n\n router.get(\n '/dashboards/by-entity-ref/:kind/:namespace/:name',\n async (request, response) => {\n const { kind, namespace, name } = request.params;\n const entityRef = stringifyEntityRef({ kind, namespace, name });\n const { token } = await tokenManager.getToken();\n const entity = await catalogClient.getEntityByRef(entityRef, { token });\n const {\n projectKeyAnnotation,\n componentsAnnotation,\n componentRoadieAnnotation,\n filtersAnnotation,\n } = getAnnotations(config);\n\n if (!entity) {\n logger.info(`No entity found for ${entityRef}`);\n response\n .status(500)\n .json({ error: `No entity found for ${entityRef}` });\n return;\n }\n\n const projectKey =\n entity.metadata.annotations?.[projectKeyAnnotation]?.split(',')!;\n\n if (!projectKey) {\n const error = `No jira.com/project-key annotation found for ${entityRef}`;\n logger.info(error);\n response.status(404).json(error);\n return;\n }\n\n let projectResponse;\n\n try {\n projectResponse = await getProjectResponse(\n projectKey[0],\n config,\n cache,\n );\n } catch (err) {\n logger.error(`Could not find Jira project ${projectKey[0]}`);\n response.status(404).json({\n error: `No Jira project found with key ${projectKey[0]}`,\n });\n return;\n }\n\n const userIdentity = await identity.getIdentity({ request: request });\n\n if (!userIdentity) {\n logger.warn(`Could not find user identity`);\n }\n\n let filters: Filter[] = [];\n\n const customFilterAnnotations =\n entity.metadata.annotations?.[filtersAnnotation]?.split(',')!;\n\n filters = getDefaultFilters(\n config,\n userIdentity?.identity?.userEntityRef,\n );\n\n if (customFilterAnnotations) {\n filters.push(\n ...(await getFiltersFromAnnotations(customFilterAnnotations, config)),\n );\n }\n\n let issues = await getIssuesFromFilters(projectKey[0], filters, config);\n\n let components =\n entity.metadata.annotations?.[componentsAnnotation]?.split(',') ?? [];\n\n /* Adding support for Roadie's component annotation */\n components = components.concat(\n entity.metadata.annotations?.[componentRoadieAnnotation]?.split(',') ??\n [],\n );\n\n if (components) {\n const componentIssues = await getIssuesFromComponents(\n projectKey[0],\n components,\n config,\n );\n issues = issues.concat(componentIssues);\n }\n\n const jiraResponse: JiraResponse = {\n project: projectResponse as Project,\n data: issues,\n };\n response.json(jiraResponse);\n },\n );\n\n router.get(\n '/avatar/by-entity-ref/:kind/:namespace/:name',\n async (request, response) => {\n const { kind, namespace, name } = request.params;\n const entityRef = stringifyEntityRef({ kind, namespace, name });\n const { token } = await tokenManager.getToken();\n const entity = await catalogClient.getEntityByRef(entityRef, { token });\n const { projectKeyAnnotation } = getAnnotations(config);\n\n if (!entity) {\n logger.info(`No entity found for ${entityRef}`);\n response\n .status(500)\n .json({ error: `No entity found for ${entityRef}` });\n return;\n }\n\n const projectKey =\n entity.metadata.annotations?.[projectKeyAnnotation]?.split(',')!;\n\n const projectResponse = await getProjectResponse(\n projectKey[0],\n config,\n cache,\n );\n\n if (!projectResponse) {\n logger.error('Could not find project in Jira');\n response.status(400).json({\n error: `No Jira project found for project key ${projectKey[0]}`,\n });\n return;\n }\n\n const url = projectResponse.avatarUrls['48x48'];\n\n const avatar = await getProjectAvatar(url, config);\n\n const ps = new stream.PassThrough();\n const val = avatar.headers.get('content-type');\n\n response.setHeader('content-type', val ?? '');\n stream.pipeline(avatar.body, ps, err => {\n if (err) {\n logger.error(err);\n response.sendStatus(400);\n }\n return;\n });\n ps.pipe(response);\n },\n );\n router.use(errorHandler());\n return router;\n}\n","import { loggerToWinstonLogger } from '@backstage/backend-common';\nimport {\n coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { createRouter } from './service/router';\n\n/**\n * The Jira Dashboard backend plugin.\n *\n * @public\n */\nexport const jiraDashboardPlugin = createBackendPlugin({\n pluginId: 'jira-dashboard',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n discovery: coreServices.discovery,\n identity: coreServices.identity,\n tokenManager: coreServices.tokenManager,\n httpRouter: coreServices.httpRouter,\n },\n async init({\n logger,\n config,\n discovery,\n identity,\n tokenManager,\n httpRouter,\n }) {\n httpRouter.use(\n await createRouter({\n logger: loggerToWinstonLogger(logger),\n config,\n discovery,\n identity,\n tokenManager,\n }),\n );\n },\n });\n },\n});\n"],"names":["fetch","PROJECT_KEY_NAME","COMPONENTS_NAME","FILTERS_NAME","catalogClient","CatalogClient","CacheManager","Router","express","stringifyEntityRef","stream","errorHandler","createBackendPlugin","coreServices","loggerToWinstonLogger"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,yBAA4B,GAAA,uBAAA,CAAA;AAClC,MAAM,sBAAyB,GAAA,qBAAA,CAAA;AAC/B,MAAM,6BAAgC,GAAA,+BAAA,CAAA;AACtC,MAAM,eAAkB,GAAA,gCAAA,CAAA;AAEjB,SAAS,mBAAmB,MAAwB,EAAA;AACzD,EAAI,IAAA;AACF,IAAO,OAAA,MAAA,CAAO,UAAU,yBAAyB,CAAA,CAAA;AAAA,WAC1C,KAAO,EAAA;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAyB,sBAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,GAClD;AACF,CAAA;AAEO,SAAS,iBAAiB,MAAwB,EAAA;AACvD,EAAI,IAAA;AACF,IAAO,OAAA,MAAA,CAAO,UAAU,sBAAsB,CAAA,CAAA;AAAA,WACvC,KAAO,EAAA;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAuB,oBAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,GAChD;AACF,CAAA;AAEO,SAAS,uBAAuB,MAAwB,EAAA;AAC7D,EAAO,OAAA,MAAA,CAAO,iBAAkB,CAAA,6BAA6B,CAAK,IAAA,EAAA,CAAA;AACpE,CAAA;AAEO,SAAS,wBAAwB,MAAwB,EAAA;AAC9D,EAAM,MAAA,gBAAA,GAAmB,MAAO,CAAA,iBAAA,CAAkB,eAAe,CAAA,CAAA;AACjE,EAAA,OAAO,gBAAoB,IAAA,IAAA,GAAA,gBAAA,GAAA,UAAA,CAAA;AAC7B;;AC1BA,MAAM,kBAAA,GAAqB,CAAC,OAAoB,KAAA;AAC9C,EAAA,OAAO,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAM,GAAK,CAAA,CAAA,KAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA;AACtC,CAAA,CAAA;AAEA,MAAM,UAAqB,GAAA;AAAA,EACzB,IAAM,EAAA,aAAA;AAAA,EACN,SAAW,EAAA,MAAA;AAAA,EACX,KAAO,EAAA,+CAAA;AACT,CAAA,CAAA;AAEA,MAAM,cAAyB,GAAA;AAAA,EAC7B,IAAM,EAAA,iBAAA;AAAA,EACN,SAAW,EAAA,UAAA;AAAA,EACX,KAAO,EAAA,mCAAA;AACT,CAAA,CAAA;AAEa,MAAA,iBAAA,GAAoB,CAC/B,MAAA,EACA,OACa,KAAA;AACb,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAO,OAAA,CAAC,YAAY,cAAc,CAAA,CAAA;AAAA,GACpC;AACA,EAAM,MAAA,QAAA,GAAW,mBAAmB,OAAO,CAAA,CAAA;AAE3C,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAO,OAAA,CAAC,YAAY,cAAc,CAAA,CAAA;AAAA,GACpC;AAEA,EAAA,MAAM,kBAA6B,GAAA;AAAA,IACjC,IAAM,EAAA,gBAAA;AAAA,IACN,SAAW,EAAA,IAAA;AAAA,IACX,KAAA,EAAO,CAAe,YAAA,EAAA,QAAQ,CAAG,EAAA,sBAAA;AAAA,MAC/B,MAAA;AAAA,KACD,CAAA,mDAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAO,OAAA,CAAC,UAAY,EAAA,cAAA,EAAgB,kBAAkB,CAAA,CAAA;AACxD,CAAA;;ACjCa,MAAA,cAAA,GAAiB,OAC5B,UAAA,EACA,MACqB,KAAA;AACrB,EAAA,MAAM,WAAW,MAAMA,yBAAA;AAAA,IACrB,CAAG,EAAA,kBAAA,CAAmB,MAAM,CAAC,WAAW,UAAU,CAAA,CAAA;AAAA,IAClD;AAAA,MACE,MAAQ,EAAA,KAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACP,aAAA,EAAe,iBAAiB,MAAM,CAAA;AAAA,QACtC,MAAQ,EAAA,kBAAA;AAAA,OACV;AAAA,KACF;AAAA,GACF,CAAA;AACA,EAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,IAAA,MAAM,KAAM,CAAA,CAAA,EAAG,QAAS,CAAA,MAAM,CAAE,CAAA,CAAA,CAAA;AAAA,GAClC;AACA,EAAA,OAAO,SAAS,IAAK,EAAA,CAAA;AACvB,CAAA,CAAA;AAEa,MAAA,aAAA,GAAgB,OAC3B,EAAA,EACA,MACoB,KAAA;AACpB,EAAM,MAAA,QAAA,GAAW,MAAMA,yBAAM,CAAA,CAAA,EAAG,mBAAmB,MAAM,CAAC,CAAU,OAAA,EAAA,EAAE,CAAI,CAAA,EAAA;AAAA,IACxE,MAAQ,EAAA,KAAA;AAAA,IACR,OAAS,EAAA;AAAA,MACP,aAAA,EAAe,iBAAiB,MAAM,CAAA;AAAA,MACtC,MAAQ,EAAA,kBAAA;AAAA,KACV;AAAA,GACD,CAAA,CAAA;AACD,EAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,IAAA,MAAM,KAAM,CAAA,CAAA,EAAG,QAAS,CAAA,MAAM,CAAE,CAAA,CAAA,CAAA;AAAA,GAClC;AACA,EAAM,MAAA,YAAA,GAAe,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AACzC,EAAA,OAAO,EAAE,IAAM,EAAA,YAAA,CAAa,IAAM,EAAA,KAAA,EAAO,aAAa,GAAI,EAAA,CAAA;AAC5D,CAAA,CAAA;AAEO,MAAM,iBAAoB,GAAA,OAC/B,UACA,EAAA,KAAA,EACA,MACqB,KAAA;AACrB,EAAA,MAAM,WAAW,MAAMA,yBAAA;AAAA,IACrB,CAAG,EAAA,kBAAA;AAAA,MACD,MAAA;AAAA,KACD,CAAA,mBAAA,EAAsB,UAAU,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAA;AAAA,IAC9C;AAAA,MACE,MAAQ,EAAA,KAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACP,aAAA,EAAe,iBAAiB,MAAM,CAAA;AAAA,QACtC,MAAQ,EAAA,kBAAA;AAAA,OACV;AAAA,KACF;AAAA,GACA,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAC1B,EAAA,OAAO,QAAS,CAAA,MAAA,CAAA;AAClB,CAAA,CAAA;AA8BO,MAAM,UAAa,GAAA,OACxB,MACA,EAAA,QAAA,EACA,OACqB,KAAA;AACrB,EAAA,MAAM,WAAW,MAAMA,yBAAA,CAAM,GAAG,kBAAmB,CAAA,MAAM,CAAC,CAAU,MAAA,CAAA,EAAA;AAAA,IAClE,MAAQ,EAAA,MAAA;AAAA,IACR,IAAA,EAAM,KAAK,SAAU,CAAA,EAAE,KAAK,QAAU,EAAA,GAAG,SAAS,CAAA;AAAA,IAClD,OAAS,EAAA;AAAA,MACP,aAAA,EAAe,iBAAiB,MAAM,CAAA;AAAA,MACtC,MAAQ,EAAA,kBAAA;AAAA,KACV;AAAA,GACD,CAAE,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAC3B,EAAA,OAAO,QAAS,CAAA,MAAA,CAAA;AAClB,EAAA;AAEO,MAAM,oBAAuB,GAAA,OAClC,UACA,EAAA,YAAA,EACA,MACqB,KAAA;AACrB,EAAA,MAAM,WAAW,MAAMA,yBAAA;AAAA,IACrB,CAAG,EAAA,kBAAA;AAAA,MACD,MAAA;AAAA,KACD,CAAA,mBAAA,EAAsB,UAAU,CAAA,kBAAA,EAAqB,YAAY,CAAA,CAAA,CAAA;AAAA,IAClE;AAAA,MACE,MAAQ,EAAA,KAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACP,aAAA,EAAe,iBAAiB,MAAM,CAAA;AAAA,QACtC,MAAQ,EAAA,kBAAA;AAAA,OACV;AAAA,KACF;AAAA,GACA,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAC1B,EAAA,OAAO,QAAS,CAAA,MAAA,CAAA;AAClB,CAAA,CAAA;AAEsB,eAAA,gBAAA,CAAiB,KAAa,MAAgB,EAAA;AAClE,EAAM,MAAA,QAAA,GAAW,MAAMA,yBAAA,CAAM,GAAK,EAAA;AAAA,IAChC,MAAQ,EAAA,KAAA;AAAA,IACR,OAAS,EAAA;AAAA,MACP,aAAA,EAAe,iBAAiB,MAAM,CAAA;AAAA,KACxC;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,QAAA,CAAA;AACT;;AC7HO,MAAM,kBAAqB,GAAA,OAChC,UACA,EAAA,MAAA,EACA,KACqB,KAAA;AACrB,EAAI,IAAA,eAAA,CAAA;AAEJ,EAAmB,eAAA,GAAA,MAAM,KAAM,CAAA,GAAA,CAAI,UAAU,CAAA,CAAA;AAE7C,EAAI,IAAA,eAAA;AAAiB,IAAO,OAAA,eAAA,CAAA;AAE5B,EAAI,IAAA;AACF,IAAkB,eAAA,GAAA,MAAM,cAAe,CAAA,UAAA,EAAY,MAAM,CAAA,CAAA;AACzD,IAAM,KAAA,CAAA,GAAA,CAAI,YAAY,eAAe,CAAA,CAAA;AAAA,WAC9B,GAAU,EAAA;AACjB,IAAI,IAAA,GAAA,CAAI,YAAY,GAAK,EAAA;AACvB,MAAA,MAAM,KAAM,CAAA,CAAA,EAAG,GAAI,CAAA,MAAM,CAAE,CAAA,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF;AACA,EAAO,OAAA,eAAA,CAAA;AACT,CAAA,CAAA;AAEa,MAAA,yBAAA,GAA4B,OACvC,WAAA,EACA,MACsB,KAAA;AACtB,EAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,EAAA,KAAA,MAAW,UAAU,WAAa,EAAA;AAChC,IAAI,IAAA;AACF,MAAA,MAAM,QAAW,GAAA,MAAM,aAAc,CAAA,MAAA,EAAQ,MAAM,CAAA,CAAA;AACnD,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA,CAAA;AAAA,aACd,GAAU,EAAA;AACjB,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,CAAG,EAAA,GAAA,CAAI,OAAO,CAAA,wCAAA,EAA2C,MAAM,CAAA,CAAA;AAAA,OACjE,CAAA;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA,CAAA;AAEO,MAAM,oBAAuB,GAAA,OAClC,UACA,EAAA,OAAA,EACA,MACgC,KAAA;AAChC,EAAA,OAAO,MAAM,OAAQ,CAAA,GAAA;AAAA,IACnB,OAAA,CAAQ,GAAI,CAAA,OAAM,MAAW,MAAA;AAAA,MAC3B,MAAM,MAAO,CAAA,IAAA;AAAA,MACb,IAAM,EAAA,QAAA;AAAA,MACN,QAAQ,MAAM,iBAAA,CAAkB,UAAY,EAAA,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,KAChE,CAAA,CAAA;AAAA,GACJ,CAAA;AACF,CAAA,CAAA;AAEO,MAAM,uBAA0B,GAAA,OACrC,UACA,EAAA,oBAAA,EACA,MACgC,KAAA;AAChC,EAAA,OAAO,MAAM,OAAQ,CAAA,GAAA;AAAA,IACnB,oBAAA,CAAqB,GAAI,CAAA,OAAM,YAAiB,MAAA;AAAA,MAC9C,IAAM,EAAA,YAAA;AAAA,MACN,IAAM,EAAA,WAAA;AAAA,MACN,MAAQ,EAAA,MAAM,oBAAqB,CAAA,UAAA,EAAY,cAAc,MAAM,CAAA;AAAA,KACnE,CAAA,CAAA;AAAA,GACJ,CAAA;AACF,CAAA;;ACzEa,MAAA,cAAA,GAAiB,CAAC,MAAmB,KAAA;AAChD,EAAM,MAAA,MAAA,GAAS,wBAAwB,MAAM,CAAA,CAAA;AAE7C,EAAA,MAAM,oBAAuB,GAAA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAIC,0CAAgB,CAAA,CAAA,CAAA;AAC1D,EAAA,MAAM,oBAAuB,GAAA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAIC,yCAAe,CAAA,CAAA,CAAA;AACzD,EAAA,MAAM,iBAAoB,GAAA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAIC,sCAAY,CAAA,CAAA,CAAA;AAGnD,EAAM,MAAA,yBAAA,GAA4B,GAAG,MAAM,CAAA,UAAA,CAAA,CAAA;AAE3C,EAAO,OAAA;AAAA,IACL,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,yBAAA;AAAA,IACA,iBAAA;AAAA,GACF,CAAA;AACF,CAAA;;ACqCA,MAAM,cAAc,GAAO,GAAA,EAAA,CAAA;AAO3B,eAAsB,aACpB,OACyB,EAAA;AACzB,EAAA,MAAM,EAAE,MAAQ,EAAA,MAAA,EAAQ,SAAW,EAAA,QAAA,EAAU,cAAiB,GAAA,OAAA,CAAA;AAC9D,EAAA,MAAMC,kBAAgB,IAAIC,2BAAA,CAAc,EAAE,YAAA,EAAc,WAAW,CAAA,CAAA;AACnE,EAAA,MAAA,CAAO,KAAK,qCAAqC,CAAA,CAAA;AAEjD,EAAA,MAAM,cACJC,0BAAa,CAAA,UAAA,CAAW,MAAM,CAAA,CAAE,UAAU,gBAAgB,CAAA,CAAA;AAC5D,EAAA,MAAM,QAAQ,WAAY,CAAA,SAAA,CAAU,EAAE,UAAA,EAAY,aAAa,CAAA,CAAA;AAE/D,EAAA,MAAM,SAASC,0BAAO,EAAA,CAAA;AACtB,EAAO,MAAA,CAAA,GAAA,CAAIC,2BAAQ,CAAA,IAAA,EAAM,CAAA,CAAA;AAEzB,EAAA,MAAA,CAAO,GAAI,CAAA,SAAA,EAAW,CAAC,CAAA,EAAG,QAAa,KAAA;AACrC,IAAA,QAAA,CAAS,IAAK,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GAC/B,CAAA,CAAA;AAED,EAAO,MAAA,CAAA,GAAA;AAAA,IACL,kDAAA;AAAA,IACA,OAAO,SAAS,QAAa,KAAA;AAxFjC,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAyFM,MAAA,MAAM,EAAE,IAAA,EAAM,SAAW,EAAA,IAAA,KAAS,OAAQ,CAAA,MAAA,CAAA;AAC1C,MAAA,MAAM,YAAYC,+BAAmB,CAAA,EAAE,IAAM,EAAA,SAAA,EAAW,MAAM,CAAA,CAAA;AAC9D,MAAA,MAAM,EAAE,KAAA,EAAU,GAAA,MAAM,aAAa,QAAS,EAAA,CAAA;AAC9C,MAAA,MAAM,SAAS,MAAML,eAAA,CAAc,eAAe,SAAW,EAAA,EAAE,OAAO,CAAA,CAAA;AACtE,MAAM,MAAA;AAAA,QACJ,oBAAA;AAAA,QACA,oBAAA;AAAA,QACA,yBAAA;AAAA,QACA,iBAAA;AAAA,OACF,GAAI,eAAe,MAAM,CAAA,CAAA;AAEzB,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAO,MAAA,CAAA,IAAA,CAAK,CAAuB,oBAAA,EAAA,SAAS,CAAE,CAAA,CAAA,CAAA;AAC9C,QACG,QAAA,CAAA,MAAA,CAAO,GAAG,CACV,CAAA,IAAA,CAAK,EAAE,KAAO,EAAA,CAAA,oBAAA,EAAuB,SAAS,CAAA,CAAA,EAAI,CAAA,CAAA;AACrD,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,MAAM,cACJ,EAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,QAAA,CAAS,gBAAhB,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,KAA9B,mBAAqD,KAAM,CAAA,GAAA,CAAA,CAAA;AAE7D,MAAA,IAAI,CAAC,UAAY,EAAA;AACf,QAAM,MAAA,KAAA,GAAQ,gDAAgD,SAAS,CAAA,CAAA,CAAA;AACvE,QAAA,MAAA,CAAO,KAAK,KAAK,CAAA,CAAA;AACjB,QAAA,QAAA,CAAS,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAC/B,QAAA,OAAA;AAAA,OACF;AAEA,MAAI,IAAA,eAAA,CAAA;AAEJ,MAAI,IAAA;AACF,QAAA,eAAA,GAAkB,MAAM,kBAAA;AAAA,UACtB,WAAW,CAAC,CAAA;AAAA,UACZ,MAAA;AAAA,UACA,KAAA;AAAA,SACF,CAAA;AAAA,eACO,GAAK,EAAA;AACZ,QAAA,MAAA,CAAO,KAAM,CAAA,CAAA,4BAAA,EAA+B,UAAW,CAAA,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA;AAC3D,QAAS,QAAA,CAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAK,CAAA;AAAA,UACxB,KAAO,EAAA,CAAA,+BAAA,EAAkC,UAAW,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,SACvD,CAAA,CAAA;AACD,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,MAAM,eAAe,MAAM,QAAA,CAAS,WAAY,CAAA,EAAE,SAAkB,CAAA,CAAA;AAEpE,MAAA,IAAI,CAAC,YAAc,EAAA;AACjB,QAAA,MAAA,CAAO,KAAK,CAA8B,4BAAA,CAAA,CAAA,CAAA;AAAA,OAC5C;AAEA,MAAA,IAAI,UAAoB,EAAC,CAAA;AAEzB,MAAA,MAAM,2BACJ,EAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,QAAA,CAAS,gBAAhB,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAA,CAAA,KAA9B,mBAAkD,KAAM,CAAA,GAAA,CAAA,CAAA;AAE1D,MAAU,OAAA,GAAA,iBAAA;AAAA,QACR,MAAA;AAAA,QACA,CAAA,EAAA,GAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAc,aAAd,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAA;AAAA,OAC1B,CAAA;AAEA,MAAA,IAAI,uBAAyB,EAAA;AAC3B,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,GAAI,MAAM,yBAA0B,CAAA,uBAAA,EAAyB,MAAM,CAAA;AAAA,SACrE,CAAA;AAAA,OACF;AAEA,MAAA,IAAI,SAAS,MAAM,oBAAA,CAAqB,WAAW,CAAC,CAAA,EAAG,SAAS,MAAM,CAAA,CAAA;AAEtE,MAAI,IAAA,UAAA,GAAA,CACF,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,QAAA,CAAS,WAAhB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA8B,0BAA9B,IAAqD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,GAA3D,CAAA,KAAA,IAAA,GAAA,EAAA,GAAmE,EAAC,CAAA;AAGtE,MAAA,UAAA,GAAa,UAAW,CAAA,MAAA;AAAA,QACtB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,SAAS,WAAhB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA8B,+BAA9B,IAA0D,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,GAAhE,CAAA,KAAA,IAAA,GAAA,EAAA,GACE,EAAC;AAAA,OACL,CAAA;AAEA,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,MAAM,kBAAkB,MAAM,uBAAA;AAAA,UAC5B,WAAW,CAAC,CAAA;AAAA,UACZ,UAAA;AAAA,UACA,MAAA;AAAA,SACF,CAAA;AACA,QAAS,MAAA,GAAA,MAAA,CAAO,OAAO,eAAe,CAAA,CAAA;AAAA,OACxC;AAEA,MAAA,MAAM,YAA6B,GAAA;AAAA,QACjC,OAAS,EAAA,eAAA;AAAA,QACT,IAAM,EAAA,MAAA;AAAA,OACR,CAAA;AACA,MAAA,QAAA,CAAS,KAAK,YAAY,CAAA,CAAA;AAAA,KAC5B;AAAA,GACF,CAAA;AAEA,EAAO,MAAA,CAAA,GAAA;AAAA,IACL,8CAAA;AAAA,IACA,OAAO,SAAS,QAAa,KAAA;AA1LjC,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA2LM,MAAA,MAAM,EAAE,IAAA,EAAM,SAAW,EAAA,IAAA,KAAS,OAAQ,CAAA,MAAA,CAAA;AAC1C,MAAA,MAAM,YAAYK,+BAAmB,CAAA,EAAE,IAAM,EAAA,SAAA,EAAW,MAAM,CAAA,CAAA;AAC9D,MAAA,MAAM,EAAE,KAAA,EAAU,GAAA,MAAM,aAAa,QAAS,EAAA,CAAA;AAC9C,MAAA,MAAM,SAAS,MAAML,eAAA,CAAc,eAAe,SAAW,EAAA,EAAE,OAAO,CAAA,CAAA;AACtE,MAAA,MAAM,EAAE,oBAAA,EAAyB,GAAA,cAAA,CAAe,MAAM,CAAA,CAAA;AAEtD,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAO,MAAA,CAAA,IAAA,CAAK,CAAuB,oBAAA,EAAA,SAAS,CAAE,CAAA,CAAA,CAAA;AAC9C,QACG,QAAA,CAAA,MAAA,CAAO,GAAG,CACV,CAAA,IAAA,CAAK,EAAE,KAAO,EAAA,CAAA,oBAAA,EAAuB,SAAS,CAAA,CAAA,EAAI,CAAA,CAAA;AACrD,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,MAAM,cACJ,EAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,QAAA,CAAS,gBAAhB,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,KAA9B,mBAAqD,KAAM,CAAA,GAAA,CAAA,CAAA;AAE7D,MAAA,MAAM,kBAAkB,MAAM,kBAAA;AAAA,QAC5B,WAAW,CAAC,CAAA;AAAA,QACZ,MAAA;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AAEA,MAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,QAAA,MAAA,CAAO,MAAM,gCAAgC,CAAA,CAAA;AAC7C,QAAS,QAAA,CAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAK,CAAA;AAAA,UACxB,KAAO,EAAA,CAAA,sCAAA,EAAyC,UAAW,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,SAC9D,CAAA,CAAA;AACD,QAAA,OAAA;AAAA,OACF;AAEA,MAAM,MAAA,GAAA,GAAM,eAAgB,CAAA,UAAA,CAAW,OAAO,CAAA,CAAA;AAE9C,MAAA,MAAM,MAAS,GAAA,MAAM,gBAAiB,CAAA,GAAA,EAAK,MAAM,CAAA,CAAA;AAEjD,MAAM,MAAA,EAAA,GAAK,IAAIM,0BAAA,CAAO,WAAY,EAAA,CAAA;AAClC,MAAA,MAAM,GAAM,GAAA,MAAA,CAAO,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAA,CAAA;AAE7C,MAAS,QAAA,CAAA,SAAA,CAAU,cAAgB,EAAA,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO,EAAE,CAAA,CAAA;AAC5C,MAAAA,0BAAA,CAAO,QAAS,CAAA,MAAA,CAAO,IAAM,EAAA,EAAA,EAAI,CAAO,GAAA,KAAA;AACtC,QAAA,IAAI,GAAK,EAAA;AACP,UAAA,MAAA,CAAO,MAAM,GAAG,CAAA,CAAA;AAChB,UAAA,QAAA,CAAS,WAAW,GAAG,CAAA,CAAA;AAAA,SACzB;AACA,QAAA,OAAA;AAAA,OACD,CAAA,CAAA;AACD,MAAA,EAAA,CAAG,KAAK,QAAQ,CAAA,CAAA;AAAA,KAClB;AAAA,GACF,CAAA;AACA,EAAO,MAAA,CAAA,GAAA,CAAIC,4BAAc,CAAA,CAAA;AACzB,EAAO,OAAA,MAAA,CAAA;AACT;;AClOO,MAAM,sBAAsBC,oCAAoB,CAAA;AAAA,EACrD,QAAU,EAAA,gBAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,QAAQC,6BAAa,CAAA,MAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA,UAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,QACxB,UAAUA,6BAAa,CAAA,QAAA;AAAA,QACvB,cAAcA,6BAAa,CAAA,YAAA;AAAA,QAC3B,YAAYA,6BAAa,CAAA,UAAA;AAAA,OAC3B;AAAA,MACA,MAAM,IAAK,CAAA;AAAA,QACT,MAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,OACC,EAAA;AACD,QAAW,UAAA,CAAA,GAAA;AAAA,UACT,MAAM,YAAa,CAAA;AAAA,YACjB,MAAA,EAAQC,oCAAsB,MAAM,CAAA;AAAA,YACpC,MAAA;AAAA,YACA,SAAA;AAAA,YACA,QAAA;AAAA,YACA,YAAA;AAAA,WACD,CAAA;AAAA,SACH,CAAA;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAC;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { Logger } from 'winston';
|
|
|
5
5
|
import { DiscoveryApi } from '@backstage/plugin-permission-common';
|
|
6
6
|
import { IdentityApi } from '@backstage/plugin-auth-node';
|
|
7
7
|
import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
|
|
8
|
+
import { Issue } from '@axis-backstage/plugin-jira-dashboard-common';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Constructs a jira dashboard router.
|
|
@@ -46,4 +47,33 @@ declare function createRouter(options: RouterOptions): Promise<express.Router>;
|
|
|
46
47
|
*/
|
|
47
48
|
declare const jiraDashboardPlugin: () => _backstage_backend_plugin_api.BackendFeature;
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Options available for the Jira JQL query.
|
|
52
|
+
*
|
|
53
|
+
* @public
|
|
54
|
+
*/
|
|
55
|
+
type SearchOptions = {
|
|
56
|
+
expand?: string[];
|
|
57
|
+
fields?: string[];
|
|
58
|
+
fieldsByKey?: boolean;
|
|
59
|
+
properties?: string[];
|
|
60
|
+
startAt?: number;
|
|
61
|
+
maxResults?: number;
|
|
62
|
+
validateQuery?: string;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Search for Jira issues using JQL.
|
|
66
|
+
*
|
|
67
|
+
* For more information about the available options see the API
|
|
68
|
+
* documentation at:
|
|
69
|
+
* https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issue-search/#api-rest-api-2-search-post
|
|
70
|
+
*
|
|
71
|
+
* @param config - A Backstage config
|
|
72
|
+
* @param jqlQuery - A string containing the jql query.
|
|
73
|
+
* @param options - Query options that will be passed on to the POST request.
|
|
74
|
+
*
|
|
75
|
+
* @public
|
|
76
|
+
*/
|
|
77
|
+
declare const searchJira: (config: Config, jqlQuery: string, options: SearchOptions) => Promise<Issue[]>;
|
|
78
|
+
|
|
79
|
+
export { RouterOptions, SearchOptions, createRouter, jiraDashboardPlugin as default, searchJira };
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axis-backstage/plugin-jira-dashboard-backend",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"main": "dist/index.cjs.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public",
|
|
9
9
|
"main": "dist/index.cjs.js",
|
|
10
|
-
"types": "dist/index.d.ts"
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"directory": "_release/package"
|
|
11
12
|
},
|
|
12
13
|
"backstage": {
|
|
13
14
|
"role": "backend-plugin"
|
|
@@ -47,5 +48,6 @@
|
|
|
47
48
|
"dist",
|
|
48
49
|
"config.d.ts"
|
|
49
50
|
],
|
|
50
|
-
"configSchema": "config.d.ts"
|
|
51
|
-
|
|
51
|
+
"configSchema": "config.d.ts",
|
|
52
|
+
"directory": "_release/package"
|
|
53
|
+
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# @axis-backstage/plugin-jira-dashboard-backend
|
|
2
|
-
|
|
3
|
-
## 0.7.1
|
|
4
|
-
|
|
5
|
-
### Patch Changes
|
|
6
|
-
|
|
7
|
-
- ae965c0: Fix broken workspace dependencies
|
|
8
|
-
|
|
9
|
-
## 0.7.0
|
|
10
|
-
|
|
11
|
-
### Minor Changes
|
|
12
|
-
|
|
13
|
-
- 135e3b2: Updated the resolveUserEmailSuffix function to utilize config.getOptionalString method, providing a more concise approach. This modification ensures that an empty string is returned if the Jira user email suffix configuration is missing, effectively preventing failures and enhancing error logging capabilities.
|
|
14
|
-
|
|
15
|
-
Modified the retrieval of project keys in the router module to handle multiple project keys specified in annotations for e.g., jira.com/project-key: abc,def,ghi
|
|
16
|
-
The updated logic now parses multiple project keys properly and supports comma-separated values. It's important to note that in cases where multiple project keys are present, only the first project key (projectKey[0]) is used for display on the project card i.e, in this case project-key "abc", assuming it represents the main project. However, the response table will include data from all project keys specified in the annotations.
|
|
17
|
-
|
|
18
|
-
## 0.6.0
|
|
19
|
-
|
|
20
|
-
### Minor Changes
|
|
21
|
-
|
|
22
|
-
- 33497c0: Dashboard and Avatar backend APIs adjusted to consume entityRef as /:kind/:namespace/:name. Fixes a 404 routing issue where a proxy like oauth2Proxy could decode the URI encoded path parameter /:entityRef known to contain the reserved path delimiter '/'.
|
|
23
|
-
|
|
24
|
-
### Patch Changes
|
|
25
|
-
|
|
26
|
-
- d45e6cb: The Jira Dashboard backend now also looks for the `/component`-annotation, in order to support Roadies annotation.
|
|
27
|
-
- 3adbfd1: Fix inaccuracy in config documentation in README.md
|
|
28
|
-
|
|
29
|
-
## 0.5.0
|
|
30
|
-
|
|
31
|
-
### Minor Changes
|
|
32
|
-
|
|
33
|
-
- 97f5bf4: Created optional ANNOTATION_PREFIX config in backend to make it possible to define custom annotations. The jira.com annotation is still used if no config value is provided. Also removed check for annotation in frontend and only return error message 'Could not fetch Jira Dashboard content for defined project key' if no Jira data is returned from backend.
|
|
34
|
-
|
|
35
|
-
### Patch Changes
|
|
36
|
-
|
|
37
|
-
- Updated dependencies [97f5bf4]
|
|
38
|
-
- @axis-backstage/plugin-jira-dashboard-common@0.4.0
|
|
39
|
-
|
|
40
|
-
## 0.4.0
|
|
41
|
-
|
|
42
|
-
### Minor Changes
|
|
43
|
-
|
|
44
|
-
- 864d983: Bumped Backstage version to v.1.22.0
|
|
45
|
-
|
|
46
|
-
### Patch Changes
|
|
47
|
-
|
|
48
|
-
- 1248d02: Removed the single quotes from documentation config strings
|
|
49
|
-
- Updated dependencies [864d983]
|
|
50
|
-
- @axis-backstage/plugin-jira-dashboard-common@0.3.0
|
|
51
|
-
|
|
52
|
-
## 0.3.0
|
|
53
|
-
|
|
54
|
-
### Minor Changes
|
|
55
|
-
|
|
56
|
-
- 23ff76a: Bumped Backstage version to v.1.21.0 in whole monorepo
|
|
57
|
-
|
|
58
|
-
### Patch Changes
|
|
59
|
-
|
|
60
|
-
- Updated dependencies [23ff76a]
|
|
61
|
-
- @axis-backstage/plugin-jira-dashboard-common@0.2.0
|
|
62
|
-
|
|
63
|
-
## 0.2.0
|
|
64
|
-
|
|
65
|
-
### Minor Changes
|
|
66
|
-
|
|
67
|
-
- a67c963: Bumped Backstage to version 1.20.3
|
|
68
|
-
|
|
69
|
-
### Patch Changes
|
|
70
|
-
|
|
71
|
-
- 1e7ee53: Added missing config.d.ts file to package.json
|
|
72
|
-
- Updated dependencies [9cf5ab1]
|
|
73
|
-
- @axis-backstage/plugin-jira-dashboard-common@0.1.1
|