@redhat-cloud-services/types 1.0.14-0 → 1.0.14
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/index.d.ts +239 -207
- package/package.json +23 -24
- package/tsconfig.json +18 -0
- package/index.js +0 -3
- package/index.js.map +0 -1
package/index.d.ts
CHANGED
|
@@ -4,247 +4,279 @@ import { Access } from '@redhat-cloud-services/rbac-client';
|
|
|
4
4
|
import { AnalyticsBrowser } from '@segment/analytics-next';
|
|
5
5
|
import { Method } from 'axios';
|
|
6
6
|
import type { AxiosRequestConfig } from 'axios';
|
|
7
|
+
|
|
7
8
|
export declare type HelpTopicLink = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
href: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
newTab?: boolean;
|
|
12
|
+
isExternal?: boolean;
|
|
12
13
|
};
|
|
14
|
+
|
|
13
15
|
export declare type HelpTopic = {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
name: string;
|
|
17
|
+
title: string;
|
|
18
|
+
tags: string[];
|
|
19
|
+
content: string;
|
|
20
|
+
links?: HelpTopicLink[];
|
|
19
21
|
};
|
|
22
|
+
|
|
20
23
|
export declare type PDFRequestPayload = {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
manifestLocation: string;
|
|
25
|
+
scope: string;
|
|
26
|
+
module: string;
|
|
27
|
+
importName?: string;
|
|
28
|
+
fetchDataParams?: Record<string, any>;
|
|
26
29
|
};
|
|
30
|
+
|
|
27
31
|
export declare type PDFRequestOptions = {
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
payload: PDFRequestPayload;
|
|
33
|
+
filename?: string;
|
|
30
34
|
};
|
|
35
|
+
|
|
31
36
|
type CreateAxiosRequest<T = any> = (service: string, config: AxiosRequestConfig) => Promise<T>;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
37
|
+
|
|
38
|
+
type FetchData = (createAsyncRequest: CreateAxiosRequest) => Promise<any>;
|
|
39
|
+
|
|
40
|
+
type AsyncState<T = any> = {
|
|
41
|
+
data: T;
|
|
35
42
|
};
|
|
43
|
+
|
|
36
44
|
declare type ChromeUser = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
};
|
|
45
|
+
entitlements: {
|
|
46
|
+
[key: string]: {
|
|
47
|
+
is_entitled: boolean;
|
|
48
|
+
is_trial: boolean;
|
|
42
49
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
50
|
+
};
|
|
51
|
+
identity: {
|
|
52
|
+
account_number?: string;
|
|
53
|
+
org_id: string;
|
|
54
|
+
internal?: {
|
|
55
|
+
org_id: string;
|
|
56
|
+
account_id: string;
|
|
57
|
+
};
|
|
58
|
+
type: string;
|
|
59
|
+
user?: {
|
|
60
|
+
username: string;
|
|
61
|
+
email: string;
|
|
62
|
+
first_name: string;
|
|
63
|
+
last_name: string;
|
|
64
|
+
is_active: boolean;
|
|
65
|
+
is_internal: boolean;
|
|
66
|
+
is_org_admin: boolean;
|
|
67
|
+
locale: string;
|
|
61
68
|
};
|
|
69
|
+
};
|
|
62
70
|
};
|
|
71
|
+
|
|
63
72
|
export declare type VisibilityFunctions = {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
featureFlag: (flagName: string, expectedValue: boolean) => boolean;
|
|
73
|
+
isOrgAdmin: () => Promise<boolean>;
|
|
74
|
+
isActive: () => Promise<boolean>;
|
|
75
|
+
isInternal: () => Promise<boolean>;
|
|
76
|
+
isEntitled: (appName?: string) => Promise<{ [key: string]: boolean }>;
|
|
77
|
+
isProd: () => boolean;
|
|
78
|
+
isBeta: () => boolean;
|
|
79
|
+
isHidden: () => true;
|
|
80
|
+
withEmail: (toHave: string) => Promise<boolean>;
|
|
81
|
+
loosePermissions: (permissions: string[]) => Promise<boolean>;
|
|
82
|
+
hasPermissions: (permissions: string[]) => Promise<boolean>;
|
|
83
|
+
hasLocalStorage: (key: string, value: any) => boolean;
|
|
84
|
+
hasCookie: (key: string, value: any) => boolean;
|
|
85
|
+
/** TODO: Extends FEC axios instance config */
|
|
86
|
+
apiRequest: (config: {
|
|
87
|
+
[key: string]: any;
|
|
88
|
+
url: string;
|
|
89
|
+
method?: Method;
|
|
90
|
+
accessor?: string;
|
|
91
|
+
matcher?: 'isEmpty' | 'isNotEmpty';
|
|
92
|
+
}) => Promise<boolean>;
|
|
93
|
+
featureFlag: (flagName: string, expectedValue: boolean) => boolean;
|
|
86
94
|
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* TODO: Once chrome is migrated to TS, sychronize with chrome typings
|
|
98
|
+
*/
|
|
87
99
|
export type NavDOMEvent = {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
100
|
+
href: string;
|
|
101
|
+
id: string;
|
|
102
|
+
navId: string;
|
|
103
|
+
type: string;
|
|
104
|
+
target?: HTMLAnchorElement | null;
|
|
93
105
|
};
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
domEvent: NavDOMEvent;
|
|
97
|
-
}) => void;
|
|
106
|
+
|
|
107
|
+
export type AppNavigationCB = (navEvent: { navId?: string; domEvent: NavDOMEvent }) => void;
|
|
98
108
|
export type GenericCB = (...args: unknown[]) => void;
|
|
109
|
+
|
|
99
110
|
export type OnEventCallbacks = {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
111
|
+
APP_NAVIGATION: AppNavigationCB;
|
|
112
|
+
NAVIGATION_TOGGLE: GenericCB;
|
|
113
|
+
GLOBAL_FILTER_UPDATE: GenericCB;
|
|
103
114
|
};
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
115
|
+
|
|
116
|
+
declare function OnChromeEvent<K extends 'APP_NAVIGATION' | 'NAVIGATION_TOGGLE' | 'GLOBAL_FILTER_UPDATE'>(
|
|
117
|
+
event: K,
|
|
118
|
+
callback: OnEventCallbacks[K]
|
|
119
|
+
): undefined | (() => void) | (() => undefined) | (() => boolean);
|
|
120
|
+
|
|
121
|
+
export type EnableTopicsArgs = [{ names: string[]; append?: boolean }] | string[];
|
|
122
|
+
|
|
109
123
|
export type ChromeWsEventTypes = 'com.redhat.console.notifications.drawer';
|
|
110
124
|
export type ChromeWsPayload<T> = {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
125
|
+
data: T;
|
|
126
|
+
type: ChromeWsEventTypes;
|
|
127
|
+
source: string;
|
|
128
|
+
datacontenttype: string;
|
|
129
|
+
specversion: string;
|
|
130
|
+
time: string;
|
|
117
131
|
};
|
|
118
132
|
export type ChromeWsEventListener<T> = (event: ChromeWsPayload<T>) => void;
|
|
119
133
|
export type UnSubscribeFromChromeWsEvent = () => void;
|
|
120
134
|
export type AddChromeWsEventListener = <T>(type: ChromeWsEventTypes, listener: ChromeWsEventListener<T>) => UnSubscribeFromChromeWsEvent;
|
|
135
|
+
|
|
121
136
|
export interface ChromeAPI {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
137
|
+
/** @deprecated will be removed from useChrome hook */
|
|
138
|
+
$internal: any;
|
|
139
|
+
addWsEventListener: AddChromeWsEventListener;
|
|
140
|
+
initialized: boolean;
|
|
141
|
+
experimentalApi: boolean;
|
|
142
|
+
/** Return true if current environment is fedramp */
|
|
143
|
+
isFedramp: boolean;
|
|
144
|
+
usePendoFeedback: () => void;
|
|
145
|
+
toggleFeedbackModal: (isOpen: boolean) => void;
|
|
146
|
+
toggleDebuggerModal: (isOpen: boolean) => void;
|
|
147
|
+
enableDebugging: () => void;
|
|
148
|
+
quickStarts: {
|
|
149
|
+
version: number;
|
|
150
|
+
set: (key: string, quickstarts: QuickStart[]) => void;
|
|
151
|
+
toggle: (quickstartId: string) => void;
|
|
152
|
+
Catalog: typeof QuickStartCatalogPage;
|
|
153
|
+
activateQuickstart: (name: string) => Promise<void>;
|
|
154
|
+
};
|
|
155
|
+
chromeHistory: History;
|
|
156
|
+
isProd: () => boolean;
|
|
157
|
+
appAction: (action: string) => void;
|
|
158
|
+
appNavClick: (payload: any) => void;
|
|
159
|
+
appObjectId: (objectId: string) => void;
|
|
160
|
+
auth: {
|
|
161
|
+
doOffline?: () => void;
|
|
162
|
+
getOfflineToken: () => Promise<any>;
|
|
163
|
+
getRefreshToken: () => Promise<string>;
|
|
164
|
+
getToken: () => Promise<string | undefined>;
|
|
165
|
+
getUser: () => Promise<ChromeUser | void>;
|
|
166
|
+
login: () => Promise<any>;
|
|
167
|
+
logout: () => void;
|
|
168
|
+
/** @deprecated will be removed from useChrome hook */
|
|
169
|
+
qe: any;
|
|
170
|
+
reAuthWithScopes: (...scopes: string[]) => Promise<void>;
|
|
171
|
+
};
|
|
172
|
+
createCase: (fields: Record<string, unknown>) => void;
|
|
173
|
+
enable: {
|
|
174
|
+
iqe: () => void;
|
|
175
|
+
remediationsDebug: () => void;
|
|
176
|
+
invTags: () => void;
|
|
177
|
+
shortSession: () => void;
|
|
178
|
+
jwtDebug: () => void;
|
|
179
|
+
reduxDebug: () => void;
|
|
180
|
+
forcePendo: () => void;
|
|
181
|
+
allDetails: () => void;
|
|
182
|
+
inventoryDrawer: () => void;
|
|
183
|
+
globalFilter: () => void;
|
|
184
|
+
appFilter: () => void;
|
|
185
|
+
contextSwitcher: () => void;
|
|
186
|
+
quickstartsDebug: () => void;
|
|
187
|
+
};
|
|
188
|
+
forceDemo: () => void;
|
|
189
|
+
getApp: () => string;
|
|
190
|
+
getBundle: () => string;
|
|
191
|
+
getBundleData: () => {
|
|
192
|
+
bundleId: string;
|
|
193
|
+
bundleTitle: string;
|
|
194
|
+
};
|
|
195
|
+
getEnvironment: () => string;
|
|
196
|
+
getEnvironmentDetails: () =>
|
|
197
|
+
| undefined
|
|
198
|
+
| {
|
|
179
199
|
url: string[];
|
|
180
200
|
sso: string;
|
|
181
201
|
portal: string;
|
|
202
|
+
};
|
|
203
|
+
getUserPermissions: (applicationName?: string, disableCache?: boolean) => Promise<Access[]>;
|
|
204
|
+
globalFilterScope: (scope: string) => {
|
|
205
|
+
type: string;
|
|
206
|
+
payload: string;
|
|
207
|
+
};
|
|
208
|
+
getAvailableBundles: () => { id: string; title: string }[];
|
|
209
|
+
helpTopics: {
|
|
210
|
+
addHelpTopics: (topics: HelpTopic[], enabled?: boolean) => void;
|
|
211
|
+
enableTopics: (...topicsNames: EnableTopicsArgs) => Promise<HelpTopic[]>;
|
|
212
|
+
disableTopics: (...topicsNames: string[]) => void;
|
|
213
|
+
setActiveTopic: (name: string) => Promise<void>;
|
|
214
|
+
closeHelpTopic: () => void;
|
|
215
|
+
};
|
|
216
|
+
hideGlobalFilter: (isHidden: boolean) => void;
|
|
217
|
+
/** @deprecated This function server no purpse. For document title update use "updateDocumentTitle" function instead. */
|
|
218
|
+
identifyApp: (data: any, appTitle?: string, noSuffix?: boolean) => Promise<any>;
|
|
219
|
+
/** @deprecated this function has no effect */
|
|
220
|
+
init: () => void;
|
|
221
|
+
isBeta: () => boolean;
|
|
222
|
+
isChrome2: boolean;
|
|
223
|
+
isDemo: () => boolean;
|
|
224
|
+
isPenTest: () => boolean;
|
|
225
|
+
/** TODO: create function typings */
|
|
226
|
+
mapGlobalFilter: (...args: any[]) => any;
|
|
227
|
+
/** @deprecated this function has no effect. */
|
|
228
|
+
navigation: () => void;
|
|
229
|
+
/**
|
|
230
|
+
* Example usage
|
|
231
|
+
* on<'APP_NAVIGATION'>('APP_NAVIGATION', (navEvent) => {
|
|
232
|
+
* navEvent.domEvent.href;
|
|
233
|
+
* navEvent.navId;
|
|
234
|
+
* });
|
|
235
|
+
*/
|
|
236
|
+
on: typeof OnChromeEvent;
|
|
237
|
+
registerModule: (module: string, manifest: string) => void;
|
|
238
|
+
/** @duplicate of "hideGlobalFilter" TODO: deprecate this function */
|
|
239
|
+
removeGlobalFilter: (isHidden: boolean) => {
|
|
240
|
+
type: string;
|
|
241
|
+
payload: {
|
|
242
|
+
isHidden: boolean;
|
|
182
243
|
};
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
closeHelpTopic: () => void;
|
|
198
|
-
};
|
|
199
|
-
hideGlobalFilter: (isHidden: boolean) => void;
|
|
200
|
-
identifyApp: (data: any, appTitle?: string, noSuffix?: boolean) => Promise<any>;
|
|
201
|
-
init: () => void;
|
|
202
|
-
isBeta: () => boolean;
|
|
203
|
-
isChrome2: boolean;
|
|
204
|
-
isDemo: () => boolean;
|
|
205
|
-
isPenTest: () => boolean;
|
|
206
|
-
mapGlobalFilter: (...args: any[]) => any;
|
|
207
|
-
navigation: () => void;
|
|
208
|
-
on: typeof OnChromeEvent;
|
|
209
|
-
registerModule: (module: string, manifest: string) => void;
|
|
210
|
-
removeGlobalFilter: (isHidden: boolean) => {
|
|
211
|
-
type: string;
|
|
212
|
-
payload: {
|
|
213
|
-
isHidden: boolean;
|
|
214
|
-
};
|
|
215
|
-
};
|
|
216
|
-
updateDocumentTitle: (title: string, noSuffix?: boolean) => void;
|
|
217
|
-
visibilityFunctions: VisibilityFunctions;
|
|
218
|
-
isAnsibleTrialFlagActive: () => boolean | undefined;
|
|
219
|
-
setAnsibleTrialFlag: () => void;
|
|
220
|
-
clearAnsibleTrialFlag: () => void;
|
|
221
|
-
segment: {
|
|
222
|
-
setPageMetadata: (pageOptions?: Record<string, unknown>) => void;
|
|
223
|
-
};
|
|
224
|
-
analytics: AnalyticsBrowser;
|
|
225
|
-
useGlobalFilter: <T = undefined>(callback: (selectedTags?: {
|
|
244
|
+
};
|
|
245
|
+
updateDocumentTitle: (title: string, noSuffix?: boolean) => void;
|
|
246
|
+
visibilityFunctions: VisibilityFunctions;
|
|
247
|
+
isAnsibleTrialFlagActive: () => boolean | undefined;
|
|
248
|
+
setAnsibleTrialFlag: () => void;
|
|
249
|
+
clearAnsibleTrialFlag: () => void;
|
|
250
|
+
// segment API
|
|
251
|
+
segment: {
|
|
252
|
+
setPageMetadata: (pageOptions?: Record<string, unknown>) => void;
|
|
253
|
+
};
|
|
254
|
+
analytics: AnalyticsBrowser;
|
|
255
|
+
useGlobalFilter: <T = undefined>(
|
|
256
|
+
callback: (selectedTags?: {
|
|
257
|
+
[key: string]: {
|
|
226
258
|
[key: string]: {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
};
|
|
237
|
-
};
|
|
259
|
+
isSelected?: boolean;
|
|
260
|
+
value: string;
|
|
261
|
+
item?: {
|
|
262
|
+
tagKey?: string;
|
|
263
|
+
tagValue?: string;
|
|
264
|
+
};
|
|
265
|
+
group?: {
|
|
266
|
+
items?: unknown;
|
|
267
|
+
};
|
|
238
268
|
};
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
269
|
+
};
|
|
270
|
+
}) => T
|
|
271
|
+
) => T;
|
|
272
|
+
enablePackagesDebug: () => void;
|
|
273
|
+
requestPdf: (options: PDFRequestOptions) => Promise<void>;
|
|
242
274
|
}
|
|
275
|
+
|
|
243
276
|
declare global {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
277
|
+
interface Window {
|
|
278
|
+
insights: {
|
|
279
|
+
chrome: ChromeAPI;
|
|
280
|
+
};
|
|
281
|
+
}
|
|
249
282
|
}
|
|
250
|
-
export {};
|
package/package.json
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"type": "commonjs"
|
|
2
|
+
"name": "@redhat-cloud-services/types",
|
|
3
|
+
"description": "TypeScript definitions for @redhat-cloud-services common typings",
|
|
4
|
+
"version": "1.0.14",
|
|
5
|
+
"main": "",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/RedHatInsights/frontend-components.git",
|
|
13
|
+
"directory": "packages/types"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@patternfly/quickstarts": "^5.0.0",
|
|
18
|
+
"@redhat-cloud-services/rbac-client": "^1.0.111 || 2.x",
|
|
19
|
+
"history": "^4.10.1",
|
|
20
|
+
"glob": "10.3.3",
|
|
21
|
+
"@segment/analytics-next": "^1.43.2"
|
|
22
|
+
},
|
|
23
|
+
"author": "",
|
|
24
|
+
"license": "Apache-2.0"
|
|
26
25
|
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"module": "commonjs",
|
|
4
|
+
"lib": [
|
|
5
|
+
"es6"
|
|
6
|
+
],
|
|
7
|
+
"noImplicitAny": false,
|
|
8
|
+
"noImplicitThis": true,
|
|
9
|
+
"strictNullChecks": true,
|
|
10
|
+
"strictFunctionTypes": true,
|
|
11
|
+
"types": [],
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"forceConsistentCasingInFileNames": true
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"index.d.ts",
|
|
17
|
+
]
|
|
18
|
+
}
|
package/index.js
DELETED
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/types/index.ts"],"names":[],"mappings":""}
|