@arena-im/react-sdk-auth 1.15.0 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
- export declare function useUser(): import("../services/auth/types").UserProps | null;
1
+ export declare function useUser(): import("../server").UserProps | null;
2
2
  export declare function usePublicProfile(): import("../services/profile/types").PublicProfile | null;
3
3
  export declare function useRefreshedTokenLoaded(): boolean;
4
4
  export declare function useUserActions(): {
5
- setUser: (user: import("../services/auth/types").UserProps | null) => void;
5
+ setUser: (user: import("../server").UserProps | null) => void;
6
6
  setPublicProfile: (publicProfile: import("../services/profile/types").PublicProfile | null) => void;
7
7
  logout: () => void;
8
8
  refreshPublicTokens: (config: {
@@ -18,7 +18,7 @@ export declare function useUpdateProfile(): {
18
18
  updatePublicProfile: (params: Omit<import("../services/profile/types").PublicProfile, "metadata">) => Promise<void>;
19
19
  };
20
20
  export declare function useUserWithProfile(): {
21
- user: import("../services/auth/types").UserProps | null;
21
+ user: import("../server").UserProps | null;
22
22
  publicProfile: import("../services/profile/types").PublicProfile | null;
23
23
  refreshedTokenLoaded: boolean;
24
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-user.d.ts","sourceRoot":"","sources":["../../src/hooks/use-user.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,sDAEtB;AAED,wBAAgB,gBAAgB,6DAE/B;AAED,wBAAgB,uBAAuB,YAEtC;AAED,wBAAgB,cAAc;;;;;;;;;;;;EAmB7B;AAED,wBAAgB,gBAAgB;;EAK/B;AAED,wBAAgB,kBAAkB;;;;EAYjC"}
1
+ {"version":3,"file":"use-user.d.ts","sourceRoot":"","sources":["../../src/hooks/use-user.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,yCAEtB;AAED,wBAAgB,gBAAgB,6DAE/B;AAED,wBAAgB,uBAAuB,YAEtC;AAED,wBAAgB,cAAc;;;;;;;;;;;;EAmB7B;AAED,wBAAgB,gBAAgB;;EAK/B;AAED,wBAAgB,kBAAkB;;;;EAYjC"}
package/index.d.ts CHANGED
@@ -1,253 +1,8 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { QueryClient } from '@tanstack/react-query';
3
- import * as zustand from 'zustand';
4
-
5
- interface UserProps {
6
- uid: string;
7
- email: string;
8
- displayName: string;
9
- photoURL?: string;
10
- handle?: string;
11
- }
12
- interface SsoV2ExchangeResponse {
13
- token: string;
14
- }
15
-
16
- type Nullable<T> = T | null;
17
- declare enum AnalyticsWidgetType {
18
- AvatarProfile = "avatar-profile",
19
- AvatarChat = "avatar-chat",
20
- Comments = "comments",
21
- GlobalProfile = "global-profile",
22
- GroupChat = "group-chat",
23
- Polls = "polls",
24
- UniversalSnippet = "universal-snippet"
25
- }
26
- type TrackOptions = {
27
- widgetId: string | null;
28
- widgetType: AnalyticsWidgetType;
29
- siteId: string;
30
- rsWriteKey: string;
31
- rsDataPlaneUrl: string;
32
- trigger: string;
33
- };
34
- declare enum AnalyticsEvent {
35
- AuthenticationCompleted = "Authentication Completed",
36
- AuthenticationStarted = "Authentication Started",
37
- AuthenticationViewed = "Authentication Viewed"
38
- }
39
- type TrackProps = Nullable<Record<string, unknown>>;
40
- interface IdentityProps {
41
- anonymousId?: string;
42
- userId?: string;
43
- }
44
- interface RudderContext {
45
- channel: 'web';
46
- anonymousId?: string;
47
- locale?: string;
48
- userAgent?: string;
49
- timezone?: string;
50
- os?: {
51
- name: string;
52
- version?: string;
53
- };
54
- page?: {
55
- path?: string;
56
- referrer?: string;
57
- referring_domain?: string;
58
- search?: string;
59
- title?: string;
60
- url?: string;
61
- initial_referrer?: string;
62
- initial_referring_domain?: string;
63
- };
64
- screen?: {
65
- density?: number;
66
- height?: number;
67
- width?: number;
68
- innerHeight?: number;
69
- innerWidth?: number;
70
- };
71
- campaign?: Record<string, string>;
72
- }
73
-
74
- interface AuthDialogContextType {
75
- isOpen: boolean;
76
- appName: string | undefined;
77
- appDescription: string | undefined;
78
- language: string | undefined;
79
- trackOptions: TrackOptions | undefined;
80
- onAuthCompleted: ((user: UserProps) => void) | undefined;
81
- openDialog: (options: OpenDialogOptions) => void;
82
- closeDialog: () => void;
83
- onOpenChange: (open: boolean) => void;
84
- }
85
- type OpenDialogOptions = {
86
- trackOptions: TrackOptions;
87
- appName?: string;
88
- language?: string;
89
- appDescription?: string;
90
- onAuthCompleted?: () => (user: UserProps) => void;
91
- };
92
- declare const useAuthDialog: () => AuthDialogContextType;
93
-
94
- declare function AuthProvider({ children, queryClient, environment, }: {
95
- children: React.ReactNode;
96
- queryClient?: QueryClient;
97
- environment?: 'production' | 'development';
98
- }): react_jsx_runtime.JSX.Element;
99
-
100
- declare enum TokenType {
101
- ANONYMOUS = "anonymous",
102
- GUEST = "guest",
103
- PUBLIC = "public",
104
- CUSTOM = "custom"
105
- }
106
- interface TokenPair {
107
- idToken: string | null;
108
- refreshToken?: string | null;
109
- }
110
- type TokensMap = Record<TokenType, TokenPair>;
111
- declare enum AuthCookie {
112
- PUBLIC_ID_TOKEN = "arena-auth-public-id-token",
113
- PUBLIC_REFRESH_TOKEN = "arena-auth-public-refresh-token",
114
- ANONYMOUS_ID_TOKEN = "arena-auth-anonymous-id-token",
115
- GUEST_ID_TOKEN = "arena-auth-guest-id-token",
116
- CUSTOM_ID_TOKEN = "arena-auth-custom-id-token",
117
- CUSTOM_USER = "arena-auth-custom-user"
118
- }
119
-
120
- interface TokenStore {
121
- tokens: TokensMap;
122
- getToken: (type: TokenType) => string | null;
123
- getMostPrivilegedToken: (options?: Array<TokenType>) => {
124
- type: TokenType;
125
- idToken: string;
126
- } | null;
127
- getRefreshToken: (type: TokenType) => string | null;
128
- updatePublicTokens: (idToken: string, refreshToken: string, source?: string) => void;
129
- updateAnonymousToken: (idToken: string, source?: string) => void;
130
- updateGuestTokens: (idToken: string, source?: string) => void;
131
- updateCustomToken: (idToken: string, source?: string) => void;
132
- clearTokens: (source?: string) => void;
133
- clearPublicTokens: (source?: string) => void;
134
- clearAnonymousTokens: (source?: string) => void;
135
- clearGuestTokens: (source?: string) => void;
136
- clearCustomTokens: (source?: string) => void;
137
- silentUpdatePublicTokens: (idToken: string, refreshToken: string) => void;
138
- silentUpdateAnonymousToken: (idToken: string) => void;
139
- silentUpdateGuestTokens: (idToken: string) => void;
140
- silentUpdateCustomToken: (idToken: string) => void;
141
- silentClearPublicTokens: () => void;
142
- silentClearAnonymousTokens: () => void;
143
- silentClearGuestTokens: () => void;
144
- silentClearCustomTokens: () => void;
145
- }
146
- declare const useTokenStore: zustand.UseBoundStore<Omit<zustand.StoreApi<TokenStore>, "subscribe"> & {
147
- subscribe: {
148
- (listener: (selectedState: TokenStore, previousSelectedState: TokenStore) => void): () => void;
149
- <U>(selector: (state: TokenStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
150
- equalityFn?: ((a: U, b: U) => boolean) | undefined;
151
- fireImmediately?: boolean;
152
- } | undefined): () => void;
153
- };
154
- }>;
155
-
156
- interface PublicProfile {
157
- displayName?: string;
158
- handle?: string;
159
- bio?: string;
160
- metadata?: {
161
- commentCountBySite?: {
162
- [siteId: string]: number;
163
- };
164
- commentReactionCountBySite?: {
165
- [siteId: string]: number;
166
- };
167
- overallCommentCount?: number;
168
- overallCommentReactionCount?: number;
169
- };
170
- photoURL?: string;
171
- }
172
-
173
- type Environment = 'development' | 'production';
174
-
175
- interface UserStore {
176
- user: UserProps | null;
177
- publicProfile: PublicProfile | null;
178
- refreshedTokenLoaded: boolean;
179
- setUser: (user: UserProps | null) => void;
180
- setPublicProfile: (publicProfile: PublicProfile | null) => void;
181
- logout: () => void;
182
- refreshPublicTokens: (config: {
183
- refreshTokenApiKey: string;
184
- }) => Promise<void>;
185
- setUserByTokenId: (idToken: string) => void;
186
- loadStoredUser: (config?: {
187
- refreshTokenApiKey: string;
188
- }) => Promise<void>;
189
- ssoV2Exchange: (ssoSourceID: string, jwt: string, env?: Environment) => Promise<SsoV2ExchangeResponse>;
190
- }
191
- declare const useUserStore: zustand.UseBoundStore<Omit<zustand.StoreApi<UserStore>, "subscribe"> & {
192
- subscribe: {
193
- (listener: (selectedState: UserStore, previousSelectedState: UserStore) => void): () => void;
194
- <U>(selector: (state: UserStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
195
- equalityFn?: ((a: U, b: U) => boolean) | undefined;
196
- fireImmediately?: boolean;
197
- } | undefined): () => void;
198
- };
199
- }>;
200
-
201
- declare function useTokens(): {
202
- getToken: (type: TokenType) => string | null;
203
- getMostPrivilegedToken: (options?: Array<TokenType>) => {
204
- type: TokenType;
205
- idToken: string;
206
- } | null;
207
- getRefreshToken: (type: TokenType) => string | null;
208
- updatePublicTokens: (idToken: string, refreshToken: string) => void;
209
- updateAnonymousToken: (idToken: string) => void;
210
- updateGuestTokens: (idToken: string) => void;
211
- updateCustomToken: (idToken: string) => void;
212
- clearTokens: () => void;
213
- clearPublicTokens: () => void;
214
- clearCustomTokens: () => void;
215
- };
216
- declare function useToken(type: 'anonymous' | 'guest' | 'public' | 'custom'): TokenPair;
217
- declare function useTokenValue(type: 'anonymous' | 'guest' | 'public' | 'custom'): string | null;
218
- declare function useRefreshToken(type: 'anonymous' | 'guest' | 'public'): string | null | undefined;
219
-
220
- declare function useUser(): UserProps | null;
221
- declare function usePublicProfile(): PublicProfile | null;
222
- declare function useRefreshedTokenLoaded(): boolean;
223
- declare function useUserActions(): {
224
- setUser: (user: UserProps | null) => void;
225
- setPublicProfile: (publicProfile: PublicProfile | null) => void;
226
- logout: () => void;
227
- refreshPublicTokens: (config: {
228
- refreshTokenApiKey: string;
229
- }) => Promise<void>;
230
- setUserByTokenId: (idToken: string) => void;
231
- loadStoredUser: (config?: {
232
- refreshTokenApiKey: string;
233
- }) => Promise<void>;
234
- ssoV2Exchange: (ssoSourceID: string, jwt: string, env?: Environment) => Promise<SsoV2ExchangeResponse>;
235
- };
236
- declare function useUpdateProfile(): {
237
- updatePublicProfile: (params: Omit<PublicProfile, "metadata">) => Promise<void>;
238
- };
239
- declare function useUserWithProfile(): {
240
- user: UserProps | null;
241
- publicProfile: PublicProfile | null;
242
- refreshedTokenLoaded: boolean;
243
- };
244
-
245
- declare function useTokenEventListener(): {
246
- eventSource: string;
247
- };
248
-
249
- declare function authenticatedRequest(method: string, url: string, options?: RequestInit): Promise<unknown>;
250
-
251
- export { AnalyticsEvent, AnalyticsWidgetType, AuthCookie, AuthProvider, TokenType, authenticatedRequest, useAuthDialog, usePublicProfile, useRefreshToken, useRefreshedTokenLoaded, useToken, useTokenEventListener, useTokenStore, useTokenValue, useTokens, useUpdateProfile, useUser, useUserActions, useUserStore, useUserWithProfile };
252
- export type { IdentityProps, RudderContext, TokenPair, TokensMap, TrackOptions, TrackProps };
253
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiLCIuLi9zcmMvdHlwZXMvYW5hbHl0aWNzLnRzIiwiLi4vc3JjL2NvbnRleHQvYXV0aC1kaWFsb2ctcHJvdmlkZXIudHN4IiwiLi4vc3JjL2NvbnRleHQvaW5kZXgudHN4IiwiLi4vc3JjL3R5cGVzL3Rva2VuLnRzIiwiLi4vc3JjL3N0b3Jlcy90b2tlbi1zdG9yZS50cyIsIi4uL3NyYy9zZXJ2aWNlcy9wcm9maWxlL3R5cGVzLnRzIiwiLi4vc3JjL2NvbmZpZy9pbmRleC50cyIsIi4uL3NyYy9zdG9yZXMvdXNlci1zdG9yZS50cyIsIi4uL3NyYy9ob29rcy91c2UtdG9rZW5zLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS11c2VyLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS10b2tlbi1ldmVudC1saXN0ZW5lci50cyIsIi4uL3NyYy91dGlscy9hdXRoZW50aWNhdGVkLXJlcXVlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBFeGNoYW5nZVRva2Vuc1Jlc3BvbnNlIHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9wcyB7XG4gIHVpZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwaG90b1VSTD86IHN0cmluZztcbiAgaGFuZGxlPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBTc29Vc2VyUHJvcHMge1xuICBzdWI6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgcGhvdG9VUkw/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTc29WMkV4Y2hhbmdlUmVzcG9uc2Uge1xuICB0b2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JblJlc3BvbnNlIHtcbiAgZGF0YToge1xuICAgIHVzZXI6IFVzZXJQcm9wcztcbiAgICB0b2tlbjogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpcmViYXNlVXNlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgcGljdHVyZTogc3RyaW5nO1xuICBvcmlnaW5hbEVtYWlsOiBzdHJpbmc7XG4gIHNhZmVEaXNwbGF5TmFtZTogc3RyaW5nO1xuICBzYWZlUGhvdG9VUkw6IHN0cmluZztcbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIGxlZ2FjeUlEOiBzdHJpbmc7XG4gIGhhbmRsZTogc3RyaW5nO1xuICBpc3M6IHN0cmluZztcbiAgYXVkOiBzdHJpbmc7XG4gIGF1dGhfdGltZTogbnVtYmVyO1xuICB1c2VyX2lkOiBzdHJpbmc7XG4gIHN1Yjogc3RyaW5nO1xuICBpYXQ6IG51bWJlcjtcbiAgZXhwOiBudW1iZXI7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGVtYWlsX3ZlcmlmaWVkOiBib29sZWFuO1xuICBmaXJlYmFzZToge1xuICAgIGlkZW50aXRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgICBzaWduX2luX3Byb3ZpZGVyOiBzdHJpbmc7XG4gIH07XG59XG4iLCJ0eXBlIE51bGxhYmxlPFQ+ID0gVCB8IG51bGw7XG5cbmV4cG9ydCBlbnVtIEFuYWx5dGljc1dpZGdldFR5cGUge1xuICBBdmF0YXJQcm9maWxlID0gJ2F2YXRhci1wcm9maWxlJyxcbiAgQXZhdGFyQ2hhdCA9ICdhdmF0YXItY2hhdCcsXG4gIENvbW1lbnRzID0gJ2NvbW1lbnRzJyxcbiAgR2xvYmFsUHJvZmlsZSA9ICdnbG9iYWwtcHJvZmlsZScsXG4gIEdyb3VwQ2hhdCA9ICdncm91cC1jaGF0JyxcbiAgUG9sbHMgPSAncG9sbHMnLFxuICBVbml2ZXJzYWxTbmlwcGV0ID0gJ3VuaXZlcnNhbC1zbmlwcGV0Jyxcbn1cblxuZXhwb3J0IHR5cGUgVHJhY2tPcHRpb25zID0ge1xuICB3aWRnZXRJZDogc3RyaW5nIHwgbnVsbDtcbiAgd2lkZ2V0VHlwZTogQW5hbHl0aWNzV2lkZ2V0VHlwZTtcbiAgc2l0ZUlkOiBzdHJpbmc7XG4gIHJzV3JpdGVLZXk6IHN0cmluZztcbiAgcnNEYXRhUGxhbmVVcmw6IHN0cmluZztcbiAgdHJpZ2dlcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gQW5hbHl0aWNzRXZlbnQge1xuICBBdXRoZW50aWNhdGlvbkNvbXBsZXRlZCA9ICdBdXRoZW50aWNhdGlvbiBDb21wbGV0ZWQnLFxuICBBdXRoZW50aWNhdGlvblN0YXJ0ZWQgPSAnQXV0aGVudGljYXRpb24gU3RhcnRlZCcsXG4gIEF1dGhlbnRpY2F0aW9uVmlld2VkID0gJ0F1dGhlbnRpY2F0aW9uIFZpZXdlZCcsXG59XG5cbmV4cG9ydCB0eXBlIFRyYWNrUHJvcHMgPSBOdWxsYWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm9wcyB7XG4gIGFub255bW91c0lkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVkZGVyQ29udGV4dCB7XG4gIGNoYW5uZWw6ICd3ZWInO1xuICBhbm9ueW1vdXNJZD86IHN0cmluZztcbiAgbG9jYWxlPzogc3RyaW5nO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICBvcz86IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nIH07XG4gIHBhZ2U/OiB7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICByZWZlcnJlcj86IHN0cmluZztcbiAgICByZWZlcnJpbmdfZG9tYWluPzogc3RyaW5nO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgaW5pdGlhbF9yZWZlcnJlcj86IHN0cmluZztcbiAgICBpbml0aWFsX3JlZmVycmluZ19kb21haW4/OiBzdHJpbmc7XG4gIH07XG4gIHNjcmVlbj86IHtcbiAgICBkZW5zaXR5PzogbnVtYmVyO1xuICAgIGhlaWdodD86IG51bWJlcjtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBpbm5lckhlaWdodD86IG51bWJlcjtcbiAgICBpbm5lcldpZHRoPzogbnVtYmVyO1xuICB9O1xuICBjYW1wYWlnbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VTdGF0ZSwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVXNlclByb3BzIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBUcmFja09wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9hbmFseXRpY3MnO1xuXG5pbnRlcmZhY2UgQXV0aERpYWxvZ0NvbnRleHRUeXBlIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBhcHBOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGFwcERlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyYWNrT3B0aW9uczogVHJhY2tPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBvbkF1dGhDb21wbGV0ZWQ6ICgodXNlcjogVXNlclByb3BzKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgb3BlbkRpYWxvZzogKG9wdGlvbnM6IE9wZW5EaWFsb2dPcHRpb25zKSA9PiB2b2lkO1xuICBjbG9zZURpYWxvZzogKCkgPT4gdm9pZDtcbiAgb25PcGVuQ2hhbmdlOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuY29uc3QgQXV0aERpYWxvZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PEF1dGhEaWFsb2dDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oXG4gIHVuZGVmaW5lZFxuKTtcblxudHlwZSBPcGVuRGlhbG9nT3B0aW9ucyA9IHtcbiAgdHJhY2tPcHRpb25zOiBUcmFja09wdGlvbnM7XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICBhcHBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgb25BdXRoQ29tcGxldGVkPzogKCkgPT4gKHVzZXI6IFVzZXJQcm9wcykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBBdXRoRGlhbG9nUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXBwTmFtZSwgc2V0QXBwTmFtZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFthcHBEZXNjcmlwdGlvbiwgc2V0QXBwRGVzY3JpcHRpb25dID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3QgW29uQXV0aENvbXBsZXRlZCwgc2V0T25BdXRoQ29tcGxldGVkXSA9IHVzZVN0YXRlPFxuICAgICgodXNlcjogVXNlclByb3BzKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt0cmFja09wdGlvbnMsIHNldFRyYWNrT3B0aW9uc10gPSB1c2VTdGF0ZTxUcmFja09wdGlvbnMgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBbbGFuZ3VhZ2UsIHNldExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IG9wZW5EaWFsb2cgPSAoe1xuICAgIHRyYWNrT3B0aW9ucyxcbiAgICBhcHBOYW1lLFxuICAgIGxhbmd1YWdlLFxuICAgIGFwcERlc2NyaXB0aW9uLFxuICAgIG9uQXV0aENvbXBsZXRlZCxcbiAgfTogT3BlbkRpYWxvZ09wdGlvbnMpID0+IHtcbiAgICBzZXRJc09wZW4odHJ1ZSk7XG4gICAgc2V0VHJhY2tPcHRpb25zKHRyYWNrT3B0aW9ucyk7XG4gICAgc2V0QXBwTmFtZShhcHBOYW1lKTtcbiAgICBzZXRMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgc2V0QXBwRGVzY3JpcHRpb24oYXBwRGVzY3JpcHRpb24pO1xuICAgIHNldE9uQXV0aENvbXBsZXRlZChvbkF1dGhDb21wbGV0ZWQpO1xuICB9O1xuXG4gIGNvbnN0IGNsb3NlRGlhbG9nID0gKCkgPT4gc2V0SXNPcGVuKGZhbHNlKTtcbiAgY29uc3Qgb25PcGVuQ2hhbmdlID0gKG9wZW46IGJvb2xlYW4pID0+IHNldElzT3BlbihvcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRoRGlhbG9nQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgaXNPcGVuLFxuICAgICAgICBhcHBOYW1lLFxuICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgYXBwRGVzY3JpcHRpb24sXG4gICAgICAgIHRyYWNrT3B0aW9ucyxcbiAgICAgICAgb25BdXRoQ29tcGxldGVkLFxuICAgICAgICBvcGVuRGlhbG9nLFxuICAgICAgICBjbG9zZURpYWxvZyxcbiAgICAgICAgb25PcGVuQ2hhbmdlLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9BdXRoRGlhbG9nQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VBdXRoRGlhbG9nID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChBdXRoRGlhbG9nQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aERpYWxvZyBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIEF1dGhEaWFsb2dQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiIsImltcG9ydCB7IEF1dGhEaWFsb2dQcm92aWRlciB9IGZyb20gJy4vYXV0aC1kaWFsb2ctcHJvdmlkZXInO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgVXNlclByb3ZpZGVyIH0gZnJvbSAnLi91c2VyLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbmZpZ1Byb3ZpZGVyIH0gZnJvbSAnLi9jb25maWctcHJvdmlkZXInO1xuaW1wb3J0IEF1dGhEaWFsb2cgZnJvbSAnLi4vZGlhbG9nJztcbmltcG9ydCB7IEFub255bW91c1Rva2VuUHJvdmlkZXIgfSBmcm9tICcuL2Fub255bW91cy10b2tlbi1wcm92aWRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBBdXRoUHJvdmlkZXIoe1xuICBjaGlsZHJlbixcbiAgcXVlcnlDbGllbnQsXG4gIGVudmlyb25tZW50LFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBxdWVyeUNsaWVudD86IFF1ZXJ5Q2xpZW50O1xuICBlbnZpcm9ubWVudD86ICdwcm9kdWN0aW9uJyB8ICdkZXZlbG9wbWVudCc7XG59KSB7XG4gIHF1ZXJ5Q2xpZW50ID0gcXVlcnlDbGllbnQgfHwgbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIChcbiAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgIDxDb25maWdQcm92aWRlciBlbnZpcm9ubWVudD17ZW52aXJvbm1lbnR9PlxuICAgICAgICA8VXNlclByb3ZpZGVyPlxuICAgICAgICAgIDxBdXRoRGlhbG9nUHJvdmlkZXI+XG4gICAgICAgICAgICA8QW5vbnltb3VzVG9rZW5Qcm92aWRlcj5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8QXV0aERpYWxvZyAvPlxuICAgICAgICAgICAgPC9Bbm9ueW1vdXNUb2tlblByb3ZpZGVyPlxuICAgICAgICAgIDwvQXV0aERpYWxvZ1Byb3ZpZGVyPlxuICAgICAgICA8L1VzZXJQcm92aWRlcj5cbiAgICAgIDwvQ29uZmlnUHJvdmlkZXI+XG4gICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyB1c2VBdXRoRGlhbG9nIH0gZnJvbSAnLi9hdXRoLWRpYWxvZy1wcm92aWRlcic7XG4iLCJleHBvcnQgZW51bSBUb2tlblR5cGUge1xuICBBTk9OWU1PVVMgPSAnYW5vbnltb3VzJyxcbiAgR1VFU1QgPSAnZ3Vlc3QnLFxuICBQVUJMSUMgPSAncHVibGljJyxcbiAgQ1VTVE9NID0gJ2N1c3RvbScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5QYWlyIHtcbiAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgVG9rZW5zTWFwID0gUmVjb3JkPFRva2VuVHlwZSwgVG9rZW5QYWlyPjtcblxuZXhwb3J0IGVudW0gQXV0aENvb2tpZSB7XG4gIFBVQkxJQ19JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLXB1YmxpYy1pZC10b2tlbicsXG4gIFBVQkxJQ19SRUZSRVNIX1RPS0VOID0gJ2FyZW5hLWF1dGgtcHVibGljLXJlZnJlc2gtdG9rZW4nLFxuICBBTk9OWU1PVVNfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1hbm9ueW1vdXMtaWQtdG9rZW4nLFxuICBHVUVTVF9JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLWd1ZXN0LWlkLXRva2VuJyxcbiAgQ1VTVE9NX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtY3VzdG9tLWlkLXRva2VuJyxcbiAgQ1VTVE9NX1VTRVIgPSAnYXJlbmEtYXV0aC1jdXN0b20tdXNlcicsXG59XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tICd6dXN0YW5kJztcbmltcG9ydCB7IHN1YnNjcmliZVdpdGhTZWxlY3RvciB9IGZyb20gJ3p1c3RhbmQvbWlkZGxld2FyZSc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuaW1wb3J0IHsgQXV0aENvb2tpZSwgVG9rZW5zTWFwLCBUb2tlblR5cGUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZG9tLWV2ZW50cyc7XG5cbmludGVyZmFjZSBUb2tlblN0b3JlIHtcbiAgdG9rZW5zOiBUb2tlbnNNYXA7XG4gIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiBzdHJpbmcgfCBudWxsO1xuICBnZXRNb3N0UHJpdmlsZWdlZFRva2VuOiAoXG4gICAgb3B0aW9ucz86IEFycmF5PFRva2VuVHlwZT5cbiAgKSA9PiB7IHR5cGU6IFRva2VuVHlwZTsgaWRUb2tlbjogc3RyaW5nIH0gfCBudWxsO1xuICBnZXRSZWZyZXNoVG9rZW46ICh0eXBlOiBUb2tlblR5cGUpID0+IHN0cmluZyB8IG51bGw7XG4gIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgICBzb3VyY2U/OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xuICB1cGRhdGVBbm9ueW1vdXNUb2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVHdWVzdFRva2VuczogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhclRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckN1c3RvbVRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlUHVibGljVG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBzaWxlbnRVcGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50Q2xlYXJQdWJsaWNUb2tlbnM6ICgpID0+IHZvaWQ7XG4gIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckd1ZXN0VG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4gdm9pZDtcbn1cblxuY29uc3QgZGVmYXVsdFRva2VuczogVG9rZW5zTWFwID0ge1xuICBwdWJsaWM6IHtcbiAgICBpZFRva2VuOiBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTikgfHwgbnVsbCxcbiAgICByZWZyZXNoVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGFub255bW91czoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxuICBndWVzdDoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGN1c3RvbToge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHVzZVRva2VuU3RvcmUgPSBjcmVhdGU8VG9rZW5TdG9yZT4oKShcbiAgc3Vic2NyaWJlV2l0aFNlbGVjdG9yKChzZXQsIGdldCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5pZFRva2VuICYmXG4gICAgICAgIHJlZnJlc2hUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5yZWZyZXNoVG9rZW5cbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgcHVibGljOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBDb29raWVzLnNldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOLCByZWZyZXNoVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMzAsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hUb2tlblVwZGF0ZWRFdmVudChUb2tlblR5cGUuUFVCTElDLCB7XG4gICAgICAgICAgaWRUb2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgYW5vbnltb3VzOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLmd1ZXN0LmlkVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGd1ZXN0OiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4sIGlkVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMSAvIDI0LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkdVRVNULCB7IGlkVG9rZW4sIHNvdXJjZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgY3VzdG9tOiB7IGlkVG9rZW4gfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgQ29va2llcy5zZXQoQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4sIGlkVG9rZW4pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5DVVNUT00sIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjbGVhclB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTik7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBwdWJsaWM6IHsgaWRUb2tlbjogbnVsbCwgcmVmcmVzaFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLlBVQkxJQywgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBhbm9ueW1vdXM6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHtcbiAgICAgICAgICBpZFRva2VuOiBudWxsLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIgPSAoXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgQ29va2llcy5yZW1vdmUoQXV0aENvb2tpZS5HVUVTVF9JRF9UT0tFTik7XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgZ3Vlc3Q6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5HVUVTVCwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX1VTRVIpO1xuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGN1c3RvbTogeyBpZFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkNVU1RPTSwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGRlZmF1bHRUb2tlbnMsXG5cbiAgICAgIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQoKS50b2tlbnNbdHlwZV0/LmlkVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldE1vc3RQcml2aWxlZ2VkVG9rZW46IChcbiAgICAgICAgb3B0aW9ucyA9IFtUb2tlblR5cGUuUFVCTElDLCBUb2tlblR5cGUuR1VFU1QsIFRva2VuVHlwZS5BTk9OWU1PVVNdXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5DVVNUT00pKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5DVVNUT00sXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuY3VzdG9tLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5wdWJsaWMuaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5QVUJMSUMpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5QVUJMSUMsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMucHVibGljLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5ndWVzdC5pZFRva2VuICYmIG9wdGlvbnMuaW5jbHVkZXMoVG9rZW5UeXBlLkdVRVNUKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlblR5cGUuR1VFU1QsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuZ3Vlc3QuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZ2V0KCkudG9rZW5zLmFub255bW91cy5pZFRva2VuICYmXG4gICAgICAgICAgb3B0aW9ucy5pbmNsdWRlcyhUb2tlblR5cGUuQU5PTllNT1VTKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkFOT05ZTU9VUyxcbiAgICAgICAgICAgIGlkVG9rZW46IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldFJlZnJlc2hUb2tlbjogKHR5cGU6IFRva2VuVHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0KCkudG9rZW5zW3R5cGVdPy5yZWZyZXNoVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICAgICkgPT4ge1xuICAgICAgICB1cGRhdGVQdWJsaWNUb2tlbnNIZWxwZXIoaWRUb2tlbiwgcmVmcmVzaFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVDdXN0b21Ub2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlcihpZFRva2VuLCByZWZyZXNoVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUFub255bW91c1Rva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUFub255bW91c1Rva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUN1c3RvbVRva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyUHVibGljVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyUHVibGljVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyR3Vlc3RUb2tlbnM6ICgpID0+IHtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4ge1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0pXG4pO1xuIiwiZXhwb3J0IGludGVyZmFjZSBQdWJsaWNQcm9maWxlIHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbiAgYmlvPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IHtcbiAgICBjb21tZW50Q291bnRCeVNpdGU/OiB7XG4gICAgICBbc2l0ZUlkOiBzdHJpbmddOiBudW1iZXI7XG4gICAgfTtcbiAgICBjb21tZW50UmVhY3Rpb25Db3VudEJ5U2l0ZT86IHtcbiAgICAgIFtzaXRlSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgICB9O1xuICAgIG92ZXJhbGxDb21tZW50Q291bnQ/OiBudW1iZXI7XG4gICAgb3ZlcmFsbENvbW1lbnRSZWFjdGlvbkNvdW50PzogbnVtYmVyO1xuICB9O1xuICBwaG90b1VSTD86IHN0cmluZztcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgcHJvZmlsZVNlcnZpY2VVcmw6IHN0cmluZztcbiAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nO1xuICBhdXRoSWZyYW1lVXJsOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuICBkZWJ1ZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IENvbmZpZyA9PiB7XG4gIGNvbnN0IGlzRGV2ID0gZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlU2VydmljZVVybDogaXNEZXZcbiAgICAgID8gcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLWRldi5hcmVuYS5pbSdcbiAgICAgIDogcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9QUkQgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5JREVOVElUWV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vdG9rZW4tc2VydmljZS1kZXYuYXJlbmEuaW0nXG4gICAgICA6IHByb2Nlc3MuZW52LklERU5USVRZX1NFUlZJQ0VfVVJMX1BSRCB8fFxuICAgICAgICAnaHR0cHM6Ly90b2tlbi1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5GSVJFQkFTRV9QVUJMSUNfQVBJX0tFWV9ERVYgfHxcbiAgICAgICAgJ0FJemFTeUNKaFdGQ0szaWNzOWtKMmVTZ1FEN2tXSFVzT3NKeVBkaydcbiAgICAgIDogcHJvY2Vzcy5lbnYuRklSRUJBU0VfUFVCTElDX0FQSV9LRVlfUFJEIHx8XG4gICAgICAgICdBSXphU3lELTl0U3JRV243M1MwcW02QnFFSDUtMTJIcThMMGVUc1EnLFxuICAgIGF1dGhJZnJhbWVVcmw6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LkFVVEhfSUZSQU1FX1VSTF9ERVYgfHwgJ2h0dHBzOi8vYXV0aDIuZGV2LmFyZW5hLmltJ1xuICAgICAgOiBwcm9jZXNzLmVudi5BVVRIX0lGUkFNRV9VUkxfUFJEIHx8ICdodHRwczovL2F1dGgyLmFyZW5hLmltJyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBkZWJ1ZzogZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCcsXG4gIH07XG59O1xuXG5leHBvcnQge1xuICBzZXRSdW50aW1lRW52aXJvbm1lbnQsXG4gIGdldFJ1bnRpbWVFbnZpcm9ubWVudCxcbn0gZnJvbSAnLi9ydW50aW1lLWVudmlyb25tZW50JztcbiIsImltcG9ydCB7IGNyZWF0ZSB9IGZyb20gJ3p1c3RhbmQnO1xuaW1wb3J0IHsgc3Vic2NyaWJlV2l0aFNlbGVjdG9yIH0gZnJvbSAnenVzdGFuZC9taWRkbGV3YXJlJztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQge1xuICBVc2VyUHJvcHMsXG4gIEZpcmViYXNlVXNlcixcbiAgU3NvVXNlclByb3BzLFxuICBTc29WMkV4Y2hhbmdlUmVzcG9uc2UsXG59IGZyb20gJy4uL3NlcnZpY2VzL2F1dGgvdHlwZXMnO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyB0eXBlIFB1YmxpY1Byb2ZpbGUgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9maWxlL3R5cGVzJztcbmltcG9ydCB7IHVzZVRva2VuU3RvcmUgfSBmcm9tICcuL3Rva2VuLXN0b3JlJztcbmltcG9ydCB7IEF1dGhDb29raWUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnLi4vdXRpbHMvcmVxdWVzdCc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgZ2V0Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcblxuaW50ZXJmYWNlIFVzZXJTdG9yZSB7XG4gIHVzZXI6IFVzZXJQcm9wcyB8IG51bGw7XG4gIHB1YmxpY1Byb2ZpbGU6IFB1YmxpY1Byb2ZpbGUgfCBudWxsO1xuICByZWZyZXNoZWRUb2tlbkxvYWRlZDogYm9vbGVhbjtcbiAgc2V0VXNlcjogKHVzZXI6IFVzZXJQcm9wcyB8IG51bGwpID0+IHZvaWQ7XG4gIHNldFB1YmxpY1Byb2ZpbGU6IChwdWJsaWNQcm9maWxlOiBQdWJsaWNQcm9maWxlIHwgbnVsbCkgPT4gdm9pZDtcbiAgbG9nb3V0OiAoKSA9PiB2b2lkO1xuICByZWZyZXNoUHVibGljVG9rZW5zOiAoY29uZmlnOiB7XG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmc7XG4gIH0pID0+IFByb21pc2U8dm9pZD47XG4gIHNldFVzZXJCeVRva2VuSWQ6IChpZFRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGxvYWRTdG9yZWRVc2VyOiAoY29uZmlnPzogeyByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZyB9KSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzc29WMkV4Y2hhbmdlOiAoXG4gICAgc3NvU291cmNlSUQ6IHN0cmluZyxcbiAgICBqd3Q6IHN0cmluZyxcbiAgICBlbnY/OiBFbnZpcm9ubWVudFxuICApID0+IFByb21pc2U8U3NvVjJFeGNoYW5nZVJlc3BvbnNlPjtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVVzZXJTdG9yZSA9IGNyZWF0ZTxVc2VyU3RvcmU+KCkoXG4gIHN1YnNjcmliZVdpdGhTZWxlY3Rvcigoc2V0LCBnZXQpID0+ICh7XG4gICAgdXNlcjogbnVsbCxcbiAgICBwdWJsaWNQcm9maWxlOiBudWxsLFxuICAgIHJlZnJlc2hlZFRva2VuTG9hZGVkOiBmYWxzZSxcblxuICAgIHNldFVzZXI6ICh1c2VyOiBVc2VyUHJvcHMgfCBudWxsKSA9PiB7XG4gICAgICBzZXQoeyB1c2VyIH0pO1xuICAgIH0sXG5cbiAgICBzZXRQdWJsaWNQcm9maWxlOiAocHVibGljUHJvZmlsZTogUHVibGljUHJvZmlsZSB8IG51bGwpID0+IHtcbiAgICAgIHNldCh7IHB1YmxpY1Byb2ZpbGUgfSk7XG4gICAgfSxcblxuICAgIHNldFVzZXJCeVRva2VuSWQ6IChpZFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBqd3REZWNvZGU8RmlyZWJhc2VVc2VyPihpZFRva2VuKTtcbiAgICAgICAgY29uc3QgdXNlclByb3BzOiBVc2VyUHJvcHMgPSB7XG4gICAgICAgICAgdWlkOiB1c2VyLnVzZXJfaWQsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IHVzZXIuc2FmZURpc3BsYXlOYW1lLFxuICAgICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsLFxuICAgICAgICAgIHBob3RvVVJMOiB1c2VyLnNhZmVQaG90b1VSTCxcbiAgICAgICAgICBoYW5kbGU6IHVzZXIuaGFuZGxlLFxuICAgICAgICB9O1xuICAgICAgICBzZXQoeyB1c2VyOiB1c2VyUHJvcHMgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbG9nb3V0OiAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICB0b2tlblN0b3JlLmNsZWFyUHVibGljVG9rZW5zKCk7XG4gICAgICAgIHRva2VuU3RvcmUuY2xlYXJDdXN0b21Ub2tlbnMoKTtcbiAgICAgICAgc2V0KHsgdXNlcjogbnVsbCB9KTtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2FyZW5hLWNvbW1lbnRzLWxvZ291dCcpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZWZyZXNoUHVibGljVG9rZW5zOiBhc3luYyAoY29uZmlnOiB7IHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nIH0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pO1xuXG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWZyZXNoIHRva2VuIGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmVmaXggPSAnaHR0cHM6Ly9zZWN1cmV0b2tlbi5nb29nbGVhcGlzLmNvbS92MS90b2tlbj9rZXk9JztcbiAgICAgICAgY29uc3QgYXBpS2V5ID0gY29uZmlnLnJlZnJlc2hUb2tlbkFwaUtleTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7cHJlZml4fSR7YXBpS2V5fWA7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IHsgc2V0VXNlckJ5VG9rZW5JZCB9ID0gZ2V0KCk7XG4gICAgICAgIHNldFVzZXJCeVRva2VuSWQoZGF0YS5pZF90b2tlbik7XG5cbiAgICAgICAgY29uc3QgdG9rZW5TdG9yZSA9IHVzZVRva2VuU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgdG9rZW5TdG9yZS51cGRhdGVQdWJsaWNUb2tlbnMoZGF0YS5pZF90b2tlbiwgZGF0YS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICBjb25zdCB7IGxvZ291dCB9ID0gZ2V0KCk7XG4gICAgICAgIGxvZ291dCgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsb2FkU3RvcmVkVXNlcjogYXN5bmMgKGNvbmZpZz86IHsgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgcHVibGljSWRUb2tlbiA9IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOKTtcbiAgICAgIGNvbnN0IHB1YmxpY1JlZnJlc2hUb2tlbiA9IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pO1xuICAgICAgY29uc3QgY3VzdG9tSWRUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGNvbnN0IGN1c3RvbVVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShBdXRoQ29va2llLkNVU1RPTV9VU0VSKTtcblxuICAgICAgaWYgKCEhY3VzdG9tSWRUb2tlbiAmJiAhIWN1c3RvbVVzZXIpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVXNlciA9IEpTT04ucGFyc2UoY3VzdG9tVXNlcik7XG5cbiAgICAgICAgc2V0KHsgdXNlcjogcGFyc2VkVXNlciB9KTtcblxuICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICB0b2tlblN0b3JlLnVwZGF0ZUN1c3RvbVRva2VuKGN1c3RvbUlkVG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHB1YmxpY0lkVG9rZW4pIHtcbiAgICAgICAgICBjb25zdCB7IHNldFVzZXJCeVRva2VuSWQgfSA9IGdldCgpO1xuICAgICAgICAgIHNldFVzZXJCeVRva2VuSWQocHVibGljSWRUb2tlbik7XG4gICAgICAgIH0gZWxzZSBpZiAocHVibGljUmVmcmVzaFRva2VuICYmIGNvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHsgcmVmcmVzaFB1YmxpY1Rva2VucyB9ID0gZ2V0KCk7XG4gICAgICAgICAgYXdhaXQgcmVmcmVzaFB1YmxpY1Rva2Vucyhjb25maWcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldCh7IHJlZnJlc2hlZFRva2VuTG9hZGVkOiB0cnVlIH0pO1xuICAgIH0sXG5cbiAgICBzc29WMkV4Y2hhbmdlOiBhc3luYyAoXG4gICAgICBzc29Tb3VyY2VJRDogc3RyaW5nLFxuICAgICAgand0OiBzdHJpbmcsXG4gICAgICBlbnY/OiBFbnZpcm9ubWVudFxuICAgICkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKGVudiA/PyAncHJvZHVjdGlvbicpO1xuICAgICAgICBjb25zdCBwcm9maWxlVXJsID0gY29uZmlnLnByb2ZpbGVTZXJ2aWNlVXJsO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3Byb2ZpbGVVcmx9L3Nzby9zb3VyY2VzLyR7c3NvU291cmNlSUR9L3VzZXJgO1xuICAgICAgICBjb25zdCByZXNwb25zZTogU3NvVjJFeGNoYW5nZVJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCgnUE9TVCcsIHVybCwge1xuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2lnbmVkVXNlckRhdGE6IGp3dCB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZFVzZXIgPSBqd3REZWNvZGU8U3NvVXNlclByb3BzPihyZXNwb25zZS50b2tlbik7XG5cbiAgICAgICAgICBjb25zdCB7IHNldFVzZXIsIHNldFB1YmxpY1Byb2ZpbGUgfSA9IGdldCgpO1xuXG4gICAgICAgICAgc2V0VXNlcih7XG4gICAgICAgICAgICB1aWQ6IGRlY29kZWRVc2VyPy5zdWIsXG4gICAgICAgICAgICBlbWFpbDogZGVjb2RlZFVzZXI/LmVtYWlsLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGRlY29kZWRVc2VyPy5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHBob3RvVVJMOiBkZWNvZGVkVXNlcj8ucGhvdG9VUkwsXG4gICAgICAgICAgICBoYW5kbGU6IGRlY29kZWRVc2VyPy5oYW5kbGUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzZXRQdWJsaWNQcm9maWxlKHtcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBkZWNvZGVkVXNlcj8uZGlzcGxheU5hbWUsXG4gICAgICAgICAgICBwaG90b1VSTDogZGVjb2RlZFVzZXI/LnBob3RvVVJMLFxuICAgICAgICAgICAgaGFuZGxlOiBkZWNvZGVkVXNlcj8uaGFuZGxlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgdG9rZW5TdG9yZSA9IHVzZVRva2VuU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICB0b2tlblN0b3JlLnVwZGF0ZUN1c3RvbVRva2VuKHJlc3BvbnNlLnRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTTyBWMiBFeGNoYW5nZSBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICB9KSlcbik7XG4iLCJpbXBvcnQgeyB1c2VUb2tlblN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3Rva2VuLXN0b3JlJztcbmltcG9ydCB7IHVzZVRva2VuRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4vdXNlLXRva2VuLWV2ZW50LWxpc3RlbmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2VucygpIHtcbiAgY29uc3QgZ2V0VG9rZW4gPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmdldFRva2VuKTtcbiAgY29uc3QgZ2V0TW9zdFByaXZpbGVnZWRUb2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuZ2V0TW9zdFByaXZpbGVnZWRUb2tlblxuICApO1xuICBjb25zdCBnZXRSZWZyZXNoVG9rZW4gPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmdldFJlZnJlc2hUb2tlbik7XG4gIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudXBkYXRlUHVibGljVG9rZW5zKTtcbiAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW4gPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnVwZGF0ZUFub255bW91c1Rva2VuXG4gICk7XG4gIGNvbnN0IHVwZGF0ZUd1ZXN0VG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS51cGRhdGVHdWVzdFRva2Vucyk7XG4gIGNvbnN0IHVwZGF0ZUN1c3RvbVRva2VuID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS51cGRhdGVDdXN0b21Ub2tlbik7XG4gIGNvbnN0IGNsZWFyVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5jbGVhclRva2Vucyk7XG4gIGNvbnN0IGNsZWFyUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5jbGVhclB1YmxpY1Rva2Vucyk7XG4gIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5jbGVhckN1c3RvbVRva2Vucyk7XG5cbiAgY29uc3QgeyBldmVudFNvdXJjZSB9ID0gdXNlVG9rZW5FdmVudExpc3RlbmVyKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBnZXRUb2tlbixcbiAgICBnZXRNb3N0UHJpdmlsZWdlZFRva2VuLFxuICAgIGdldFJlZnJlc2hUb2tlbixcbiAgICB1cGRhdGVQdWJsaWNUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlUHVibGljVG9rZW5zKGlkVG9rZW4sIHJlZnJlc2hUb2tlbiwgZXZlbnRTb3VyY2UpLFxuICAgIHVwZGF0ZUFub255bW91c1Rva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW4oaWRUb2tlbiwgZXZlbnRTb3VyY2UpLFxuICAgIHVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlR3Vlc3RUb2tlbnMoaWRUb2tlbiwgZXZlbnRTb3VyY2UpLFxuICAgIHVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlQ3VzdG9tVG9rZW4oaWRUb2tlbiwgZXZlbnRTb3VyY2UpLFxuICAgIGNsZWFyVG9rZW5zOiAoKSA9PiBjbGVhclRva2VucyhldmVudFNvdXJjZSksXG4gICAgY2xlYXJQdWJsaWNUb2tlbnM6ICgpID0+IGNsZWFyUHVibGljVG9rZW5zKGV2ZW50U291cmNlKSxcbiAgICBjbGVhckN1c3RvbVRva2VuczogKCkgPT4gY2xlYXJDdXN0b21Ub2tlbnMoZXZlbnRTb3VyY2UpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW4odHlwZTogJ2Fub255bW91cycgfCAnZ3Vlc3QnIHwgJ3B1YmxpYycgfCAnY3VzdG9tJykge1xuICByZXR1cm4gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS50b2tlbnNbdHlwZV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5WYWx1ZShcbiAgdHlwZTogJ2Fub255bW91cycgfCAnZ3Vlc3QnIHwgJ3B1YmxpYycgfCAnY3VzdG9tJ1xuKSB7XG4gIHJldHVybiB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnRva2Vuc1t0eXBlXT8uaWRUb2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWZyZXNoVG9rZW4odHlwZTogJ2Fub255bW91cycgfCAnZ3Vlc3QnIHwgJ3B1YmxpYycpIHtcbiAgcmV0dXJuIHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudG9rZW5zW3R5cGVdPy5yZWZyZXNoVG9rZW4pO1xufVxuIiwiaW1wb3J0IHsgdXNlUHJvZmlsZVNlcnZpY2VzIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZmlsZS91c2UtcHJvZmlsZS1zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VVc2VyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvdXNlci1zdG9yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VVc2VyKCkge1xuICByZXR1cm4gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnVzZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHVibGljUHJvZmlsZSgpIHtcbiAgcmV0dXJuIHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5wdWJsaWNQcm9maWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZnJlc2hlZFRva2VuTG9hZGVkKCkge1xuICByZXR1cm4gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnJlZnJlc2hlZFRva2VuTG9hZGVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVzZXJBY3Rpb25zKCkge1xuICBjb25zdCBzZXRVc2VyID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNldFVzZXIpO1xuICBjb25zdCBzZXRQdWJsaWNQcm9maWxlID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNldFB1YmxpY1Byb2ZpbGUpO1xuICBjb25zdCBsb2dvdXQgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUubG9nb3V0KTtcbiAgY29uc3QgcmVmcmVzaFB1YmxpY1Rva2VucyA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5yZWZyZXNoUHVibGljVG9rZW5zKTtcbiAgY29uc3Qgc2V0VXNlckJ5VG9rZW5JZCA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRVc2VyQnlUb2tlbklkKTtcbiAgY29uc3QgbG9hZFN0b3JlZFVzZXIgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUubG9hZFN0b3JlZFVzZXIpO1xuICBjb25zdCBzc29WMkV4Y2hhbmdlID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNzb1YyRXhjaGFuZ2UpO1xuICBcblxuICByZXR1cm4ge1xuICAgIHNldFVzZXIsXG4gICAgc2V0UHVibGljUHJvZmlsZSxcbiAgICBsb2dvdXQsXG4gICAgcmVmcmVzaFB1YmxpY1Rva2VucyxcbiAgICBzZXRVc2VyQnlUb2tlbklkLFxuICAgIGxvYWRTdG9yZWRVc2VyLFxuICAgIHNzb1YyRXhjaGFuZ2UsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVQcm9maWxlKCkge1xuICBjb25zdCB7IHVwZGF0ZVB1YmxpY1Byb2ZpbGUgfSA9IHVzZVByb2ZpbGVTZXJ2aWNlcygpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZVB1YmxpY1Byb2ZpbGUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VVc2VyV2l0aFByb2ZpbGUoKSB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUudXNlcik7XG4gIGNvbnN0IHB1YmxpY1Byb2ZpbGUgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUucHVibGljUHJvZmlsZSk7XG4gIGNvbnN0IHJlZnJlc2hlZFRva2VuTG9hZGVkID0gdXNlVXNlclN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnJlZnJlc2hlZFRva2VuTG9hZGVkXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICB1c2VyLFxuICAgIHB1YmxpY1Byb2ZpbGUsXG4gICAgcmVmcmVzaGVkVG9rZW5Mb2FkZWQsXG4gIH07XG59XG5cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVG9rZW5UeXBlIH0gZnJvbSAnLi4vdHlwZXMvdG9rZW4nO1xuaW1wb3J0IHsgdXNlVG9rZW5TdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy90b2tlbi1zdG9yZSc7XG5pbXBvcnQgeyBUT0tFTl9VUERBVEVEX0VWRU5UIH0gZnJvbSAnLi4vdXRpbHMvZG9tLWV2ZW50cyc7XG5cbmludGVyZmFjZSBUb2tlblVwZGF0ZUV2ZW50IHtcbiAgZGV0YWlsOiB7XG4gICAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgICByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xuICAgIHR5cGU6IFRva2VuVHlwZTtcbiAgICBzb3VyY2U/OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbkV2ZW50TGlzdGVuZXIoKSB7XG4gIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2VucyA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50VXBkYXRlUHVibGljVG9rZW5zXG4gICk7XG4gIGNvbnN0IHVwZGF0ZUFub255bW91c1Rva2VuID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVBbm9ueW1vdXNUb2tlblxuICApO1xuICBjb25zdCB1cGRhdGVHdWVzdFRva2VucyA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50VXBkYXRlR3Vlc3RUb2tlbnNcbiAgKTtcbiAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW4gPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudFVwZGF0ZUN1c3RvbVRva2VuXG4gICk7XG4gIGNvbnN0IGNsZWFyVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5jbGVhclRva2Vucyk7XG4gIGNvbnN0IGNsZWFyUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhclB1YmxpY1Rva2Vuc1xuICApO1xuICBjb25zdCBjbGVhckFub255bW91c1Rva2VucyA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50Q2xlYXJBbm9ueW1vdXNUb2tlbnNcbiAgKTtcbiAgY29uc3QgY2xlYXJHdWVzdFRva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2lsZW50Q2xlYXJHdWVzdFRva2Vucyk7XG4gIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhckN1c3RvbVRva2Vuc1xuICApO1xuXG4gIGNvbnN0IGV2ZW50U291cmNlUmVmID0gdXNlUmVmPHN0cmluZz4oXG4gICAgYHdpZGdldC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVUb2tlblVwZGF0ZSA9IChcbiAgICAgIGV2ZW50OiBDdXN0b21FdmVudDxUb2tlblVwZGF0ZUV2ZW50WydkZXRhaWwnXT5cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgaWRUb2tlbiwgcmVmcmVzaFRva2VuLCB0eXBlLCBzb3VyY2UgfSA9IGV2ZW50LmRldGFpbDtcblxuICAgICAgaWYgKHNvdXJjZSA9PT0gZXZlbnRTb3VyY2VSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFRva2VuVHlwZS5QVUJMSUM6XG4gICAgICAgICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVmcmVzaCB0b2tlbiBpcyByZXF1aXJlZCBmb3IgcHVibGljIHRva2VucycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlUHVibGljVG9rZW5zKGlkVG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyUHVibGljVG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkFOT05ZTU9VUzpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW4oaWRUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkdVRVNUOlxuICAgICAgICAgIGlmIChpZFRva2VuKSB7XG4gICAgICAgICAgICB1cGRhdGVHdWVzdFRva2VucyhpZFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJHdWVzdFRva2VucygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRva2VuVHlwZS5DVVNUT006XG4gICAgICAgICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZUN1c3RvbVRva2VuKGlkVG9rZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhckN1c3RvbVRva2VucygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFRPS0VOX1VQREFURURfRVZFTlQsXG4gICAgICBoYW5kbGVUb2tlblVwZGF0ZSBhcyBFdmVudExpc3RlbmVyXG4gICAgKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICBUT0tFTl9VUERBVEVEX0VWRU5ULFxuICAgICAgICBoYW5kbGVUb2tlblVwZGF0ZSBhcyBFdmVudExpc3RlbmVyXG4gICAgICApO1xuICAgIH07XG4gIH0sIFtcbiAgICB1cGRhdGVQdWJsaWNUb2tlbnMsXG4gICAgdXBkYXRlQW5vbnltb3VzVG9rZW4sXG4gICAgdXBkYXRlR3Vlc3RUb2tlbnMsXG4gICAgdXBkYXRlQ3VzdG9tVG9rZW4sXG4gICAgY2xlYXJUb2tlbnMsXG4gICAgY2xlYXJQdWJsaWNUb2tlbnMsXG4gICAgY2xlYXJBbm9ueW1vdXNUb2tlbnMsXG4gICAgY2xlYXJHdWVzdFRva2VucyxcbiAgICBjbGVhckN1c3RvbVRva2VucyxcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBldmVudFNvdXJjZTogZXZlbnRTb3VyY2VSZWYuY3VycmVudCxcbiAgfTtcbn1cbiIsImltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgeyBBdXRoQ29va2llIH0gZnJvbSAnLi4vdHlwZXMvdG9rZW4nO1xuaW1wb3J0IHsgdXNlVXNlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzJztcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRSdW50aW1lRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jb25maWcvcnVudGltZS1lbnZpcm9ubWVudCc7XG5cbmZ1bmN0aW9uIGdldFJlZnJlc2hUb2tlbkFwaUtleSgpOiBzdHJpbmcge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGdldFJ1bnRpbWVFbnZpcm9ubWVudCgpO1xuICByZXR1cm4gZ2V0Q29uZmlnKGVudmlyb25tZW50KS5yZWZyZXNoVG9rZW5BcGlLZXk7XG59XG5cbmNvbnN0IGRlZmF1bHRIZWFkZXJzID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxufTtcblxubGV0IHJlZnJlc2hQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHJlZnJlc2hQcm9taXNlKSB7XG4gICAgcmV0dXJuIHJlZnJlc2hQcm9taXNlO1xuICB9XG5cbiAgY29uc3QgdXNlclN0b3JlID0gdXNlVXNlclN0b3JlLmdldFN0YXRlKCk7XG4gIHJlZnJlc2hQcm9taXNlID0gdXNlclN0b3JlXG4gICAgLnJlZnJlc2hQdWJsaWNUb2tlbnMoe1xuICAgICAgcmVmcmVzaFRva2VuQXBpS2V5OiBnZXRSZWZyZXNoVG9rZW5BcGlLZXkoKSxcbiAgICB9KVxuICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgIHJlZnJlc2hQcm9taXNlID0gbnVsbDtcbiAgICB9KTtcblxuICByZXR1cm4gcmVmcmVzaFByb21pc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZWRGZXRjaChcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHt9XG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IHRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4pO1xuXG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvdW5kJyk7XG4gIH1cblxuICBjb25zdCBoZWFkZXJzID0ge1xuICAgIC4uLmRlZmF1bHRIZWFkZXJzLFxuICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgfTtcblxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBtZXRob2QsXG4gICAgaGVhZGVycyxcbiAgfTtcblxuICByZXR1cm4gZmV0Y2godXJsLCBwYXJhbXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgaWYgKCFjb250ZW50VHlwZSB8fCAhY29udGVudFR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKHsgZXJyb3IgfSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04gcmVzcG9uc2UgZnJvbSBzZXJ2ZXInKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd09uRXJyb3JSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UsIHRleHQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICBlcnJvck1lc3NhZ2UgPSBwYXJzZWQ/LmVycm9ycz8uWzBdIHx8IHRleHQgfHwgJ0ludGVybmFsIHNlcnZlciBlcnJvcic7XG4gIH0gY2F0Y2gge1xuICAgIGVycm9yTWVzc2FnZSA9IHRleHQgfHwgJ0ludGVybmFsIHNlcnZlciBlcnJvcic7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZWRSZXF1ZXN0KFxuICBtZXRob2Q6IHN0cmluZyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge31cbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBhc3luYyBmdW5jdGlvbiBhdHRlbXB0KCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXV0aGVudGljYXRlZEZldGNoKG1ldGhvZCwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIHBhcnNlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3QgLSAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignVW5hdXRob3JpemVkJykgYXMgRXJyb3IgJiB7IHN0YXR1cz86IG51bWJlciB9O1xuICAgICAgZXJyLnN0YXR1cyA9IDQwMTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICB0aHJvd09uRXJyb3JSZXNwb25zZShyZXNwb25zZSwgdGV4dCk7XG4gIH1cblxuICBjb25zdCBoYXNUb2tlbiA9IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOKTtcblxuICBpZiAoIWhhc1Rva2VuKSB7XG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG4gICAgaWYgKHJlZnJlc2hUb2tlbikge1xuICAgICAgYXdhaXQgZW5zdXJlUmVmcmVzaFRva2VuKCk7XG4gICAgICByZXR1cm4gYXdhaXQgYXR0ZW1wdCgpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvdW5kJyk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBhdHRlbXB0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgaXM0MDEgPVxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgJ3N0YXR1cycgaW4gZXJyb3IgJiZcbiAgICAgIChlcnJvciBhcyBFcnJvciAmIHsgc3RhdHVzPzogbnVtYmVyIH0pLnN0YXR1cyA9PT0gNDAxO1xuXG4gICAgaWYgKCFpczQwMSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hdXRob3JpemVkJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgZW5zdXJlUmVmcmVzaFRva2VuKCk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGF0dGVtcHQoKTtcbiAgICB9IGNhdGNoIChyZXRyeUVycm9yKSB7XG4gICAgICBjb25zdCByZXRyeUlzNDAxID1cbiAgICAgICAgcmV0cnlFcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgICdzdGF0dXMnIGluIHJldHJ5RXJyb3IgJiZcbiAgICAgICAgKHJldHJ5RXJyb3IgYXMgRXJyb3IgJiB7IHN0YXR1cz86IG51bWJlciB9KS5zdGF0dXMgPT09IDQwMTtcblxuICAgICAgaWYgKHJldHJ5SXM0MDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgcmV0cnlFcnJvcjtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBSU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRTztBQUNQO0FBQ0E7O0FDcEJBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSU87O0FDdkJBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FDTE87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BPOztBQ0xQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUN2Qk87QUFDUDtBQUNBOztBQ0ZPOzs7In0=
1
+ export * from './context';
2
+ export { useTokenStore, useUserStore } from './stores';
3
+ export * from './hooks/use-tokens';
4
+ export * from './hooks/use-user';
5
+ export * from './types';
6
+ export * from './hooks/use-token-event-listener';
7
+ export { authenticatedRequest } from './utils/authenticated-request';
8
+ //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arena-im/react-sdk-auth",
3
- "version": "1.15.0",
3
+ "version": "1.16.0",
4
4
  "private": false,
5
5
  "description": "A React authentication package providing authentication context, dialogs, and user management",
6
6
  "keywords": [
@@ -22,6 +22,12 @@
22
22
  "require": "./index.umd.js",
23
23
  "default": "./index.umd.js"
24
24
  },
25
+ "./server": {
26
+ "types": "./server.d.ts",
27
+ "import": "./server.esm.js",
28
+ "require": "./server.cjs.js",
29
+ "default": "./server.cjs.js"
30
+ },
25
31
  "./package.json": "./package.json"
26
32
  },
27
33
  "scripts": {
@@ -0,0 +1,9 @@
1
+ import { type UserProps } from '../services/auth/types';
2
+ import { type Environment } from '../config';
3
+ export type CookieReader = (name: string) => string | undefined;
4
+ export interface GetUserOptions {
5
+ cookies: CookieReader;
6
+ environment?: Environment;
7
+ }
8
+ export declare function getUser(options: GetUserOptions): Promise<UserProps | null>;
9
+ //# sourceMappingURL=get-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-user.d.ts","sourceRoot":"","sources":["../../src/server/get-user.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,KAAK,WAAW,EAAa,MAAM,WAAW,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAyDD,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAe3B"}
package/server.cjs.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var e,t,r=require("jwt-decode");!function(e){e.ANONYMOUS="anonymous",e.GUEST="guest",e.PUBLIC="public",e.CUSTOM="custom"}(e||(e={})),exports.AuthCookie=void 0,(t=exports.AuthCookie||(exports.AuthCookie={})).PUBLIC_ID_TOKEN="arena-auth-public-id-token",t.PUBLIC_REFRESH_TOKEN="arena-auth-public-refresh-token",t.ANONYMOUS_ID_TOKEN="arena-auth-anonymous-id-token",t.GUEST_ID_TOKEN="arena-auth-guest-id-token",t.CUSTOM_ID_TOKEN="arena-auth-custom-id-token",t.CUSTOM_USER="arena-auth-custom-user";function o(e){try{const t=r.jwtDecode(e);return{uid:t.user_id,displayName:t.safeDisplayName,email:t.email,photoURL:t.safePhotoURL,handle:t.handle}}catch{return null}}exports.getUser=async function(e){const{cookies:t,environment:r="production"}=e,n=(e=>{const t="development"===e;return{profileServiceUrl:t?"https://profile-service-dev.arena.im":"https://profile-service-prd.arena.im",identityServiceUrl:t?"https://token-service-dev.arena.im":"https://token-service-prd.arena.im",refreshTokenApiKey:t?"AIzaSyCJhWFCK3ics9kJ2eSgQD7kWHUsOsJyPdk":"AIzaSyD_a4tNVdFVqgGbTfOGCaZ5pvUHErcE79c",authIframeUrl:t?"https://auth2.dev.arena.im":"https://auth2.arena.im",environment:e,debug:"development"===e}})(r),a=t(exports.AuthCookie.PUBLIC_ID_TOKEN);if(a)return o(a);const s=t(exports.AuthCookie.PUBLIC_REFRESH_TOKEN);return s?async function(e,t){const r=new AbortController,n=setTimeout(()=>r.abort(),5e3);try{const a=`https://securetoken.googleapis.com/v1/token?key=${t}`,s=await fetch(a,{method:"POST",body:new URLSearchParams({refresh_token:e,grant_type:"refresh_token"}),signal:r.signal});if(clearTimeout(n),!s.ok)throw new Error(`Token refresh failed: ${s.status} ${s.statusText}`);const i=await s.json();return i.id_token?o(i.id_token):null}catch{return clearTimeout(n),null}}(s,n.refreshTokenApiKey):null};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmNqcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzL3Rva2VuLnRzIiwiLi4vc3JjL3NlcnZlci9nZXQtdXNlci50cyIsIi4uL3NyYy9jb25maWcvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gVG9rZW5UeXBlIHtcbiAgQU5PTllNT1VTID0gJ2Fub255bW91cycsXG4gIEdVRVNUID0gJ2d1ZXN0JyxcbiAgUFVCTElDID0gJ3B1YmxpYycsXG4gIENVU1RPTSA9ICdjdXN0b20nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUGFpciB7XG4gIGlkVG9rZW46IHN0cmluZyB8IG51bGw7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFRva2Vuc01hcCA9IFJlY29yZDxUb2tlblR5cGUsIFRva2VuUGFpcj47XG5cbmV4cG9ydCBlbnVtIEF1dGhDb29raWUge1xuICBQVUJMSUNfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1wdWJsaWMtaWQtdG9rZW4nLFxuICBQVUJMSUNfUkVGUkVTSF9UT0tFTiA9ICdhcmVuYS1hdXRoLXB1YmxpYy1yZWZyZXNoLXRva2VuJyxcbiAgQU5PTllNT1VTX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtYW5vbnltb3VzLWlkLXRva2VuJyxcbiAgR1VFU1RfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1ndWVzdC1pZC10b2tlbicsXG4gIENVU1RPTV9JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLWN1c3RvbS1pZC10b2tlbicsXG4gIENVU1RPTV9VU0VSID0gJ2FyZW5hLWF1dGgtY3VzdG9tLXVzZXInLFxufVxuIiwiaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyBBdXRoQ29va2llIH0gZnJvbSAnLi4vdHlwZXMvdG9rZW4nO1xuaW1wb3J0IHsgdHlwZSBVc2VyUHJvcHMsIHR5cGUgRmlyZWJhc2VVc2VyIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyB0eXBlIEVudmlyb25tZW50LCBnZXRDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5leHBvcnQgdHlwZSBDb29raWVSZWFkZXIgPSAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VXNlck9wdGlvbnMge1xuICBjb29raWVzOiBDb29raWVSZWFkZXI7XG4gIGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVVzZXJGcm9tVG9rZW4oaWRUb2tlbjogc3RyaW5nKTogVXNlclByb3BzIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlciA9IGp3dERlY29kZTxGaXJlYmFzZVVzZXI+KGlkVG9rZW4pO1xuICAgIHJldHVybiB7XG4gICAgICB1aWQ6IHVzZXIudXNlcl9pZCxcbiAgICAgIGRpc3BsYXlOYW1lOiB1c2VyLnNhZmVEaXNwbGF5TmFtZSxcbiAgICAgIGVtYWlsOiB1c2VyLmVtYWlsLFxuICAgICAgcGhvdG9VUkw6IHVzZXIuc2FmZVBob3RvVVJMLFxuICAgICAgaGFuZGxlOiB1c2VyLmhhbmRsZSxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jb25zdCBSRUZSRVNIX1RJTUVPVVRfTVMgPSA1MDAwO1xuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoQW5kRGVjb2RlKFxuICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmdcbik6IFByb21pc2U8VXNlclByb3BzIHwgbnVsbD4ge1xuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgUkVGUkVTSF9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZWFwaXMuY29tL3YxL3Rva2VuP2tleT0ke2FwaUtleX1gO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgIH0pLFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRva2VuIHJlZnJlc2ggZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghZGF0YS5pZF90b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY29kZVVzZXJGcm9tVG9rZW4oZGF0YS5pZF90b2tlbik7XG4gIH0gY2F0Y2gge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVc2VyKFxuICBvcHRpb25zOiBHZXRVc2VyT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyUHJvcHMgfCBudWxsPiB7XG4gIGNvbnN0IHsgY29va2llcywgZW52aXJvbm1lbnQgPSAncHJvZHVjdGlvbicgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZyhlbnZpcm9ubWVudCk7XG5cbiAgY29uc3QgcHVibGljSWRUb2tlbiA9IGNvb2tpZXMoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4pO1xuICBpZiAocHVibGljSWRUb2tlbikge1xuICAgIHJldHVybiBkZWNvZGVVc2VyRnJvbVRva2VuKHB1YmxpY0lkVG9rZW4pO1xuICB9XG5cbiAgY29uc3QgcmVmcmVzaFRva2VuID0gY29va2llcyhBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcbiAgaWYgKHJlZnJlc2hUb2tlbikge1xuICAgIHJldHVybiByZWZyZXNoQW5kRGVjb2RlKHJlZnJlc2hUb2tlbiwgY29uZmlnLnJlZnJlc2hUb2tlbkFwaUtleSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgcHJvZmlsZVNlcnZpY2VVcmw6IHN0cmluZztcbiAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nO1xuICBhdXRoSWZyYW1lVXJsOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuICBkZWJ1ZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IENvbmZpZyA9PiB7XG4gIGNvbnN0IGlzRGV2ID0gZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlU2VydmljZVVybDogaXNEZXZcbiAgICAgID8gcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLWRldi5hcmVuYS5pbSdcbiAgICAgIDogcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9QUkQgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5JREVOVElUWV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vdG9rZW4tc2VydmljZS1kZXYuYXJlbmEuaW0nXG4gICAgICA6IHByb2Nlc3MuZW52LklERU5USVRZX1NFUlZJQ0VfVVJMX1BSRCB8fFxuICAgICAgICAnaHR0cHM6Ly90b2tlbi1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5GSVJFQkFTRV9QVUJMSUNfQVBJX0tFWV9ERVYgfHxcbiAgICAgICAgJ0FJemFTeUNKaFdGQ0szaWNzOWtKMmVTZ1FEN2tXSFVzT3NKeVBkaydcbiAgICAgIDogcHJvY2Vzcy5lbnYuRklSRUJBU0VfUFVCTElDX0FQSV9LRVlfUFJEIHx8XG4gICAgICAgICdBSXphU3lELTl0U3JRV243M1MwcW02QnFFSDUtMTJIcThMMGVUc1EnLFxuICAgIGF1dGhJZnJhbWVVcmw6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LkFVVEhfSUZSQU1FX1VSTF9ERVYgfHwgJ2h0dHBzOi8vYXV0aDIuZGV2LmFyZW5hLmltJ1xuICAgICAgOiBwcm9jZXNzLmVudi5BVVRIX0lGUkFNRV9VUkxfUFJEIHx8ICdodHRwczovL2F1dGgyLmFyZW5hLmltJyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBkZWJ1ZzogZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCcsXG4gIH07XG59O1xuXG5leHBvcnQge1xuICBzZXRSdW50aW1lRW52aXJvbm1lbnQsXG4gIGdldFJ1bnRpbWVFbnZpcm9ubWVudCxcbn0gZnJvbSAnLi9ydW50aW1lLWVudmlyb25tZW50JztcbiJdLCJuYW1lcyI6WyJUb2tlblR5cGUiLCJBdXRoQ29va2llIiwiZGVjb2RlVXNlckZyb21Ub2tlbiIsImlkVG9rZW4iLCJ1c2VyIiwiand0RGVjb2RlIiwidWlkIiwidXNlcl9pZCIsImRpc3BsYXlOYW1lIiwic2FmZURpc3BsYXlOYW1lIiwiZW1haWwiLCJwaG90b1VSTCIsInNhZmVQaG90b1VSTCIsImhhbmRsZSIsImFzeW5jIiwib3B0aW9ucyIsImNvb2tpZXMiLCJlbnZpcm9ubWVudCIsImNvbmZpZyIsImlzRGV2IiwicHJvZmlsZVNlcnZpY2VVcmwiLCJpZGVudGl0eVNlcnZpY2VVcmwiLCJyZWZyZXNoVG9rZW5BcGlLZXkiLCJhdXRoSWZyYW1lVXJsIiwiZGVidWciLCJnZXRDb25maWciLCJwdWJsaWNJZFRva2VuIiwiUFVCTElDX0lEX1RPS0VOIiwicmVmcmVzaFRva2VuIiwiUFVCTElDX1JFRlJFU0hfVE9LRU4iLCJhcGlLZXkiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImFib3J0IiwidXJsIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJVUkxTZWFyY2hQYXJhbXMiLCJyZWZyZXNoX3Rva2VuIiwiZ3JhbnRfdHlwZSIsInNpZ25hbCIsImNsZWFyVGltZW91dCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiZGF0YSIsImpzb24iLCJpZF90b2tlbiIsInJlZnJlc2hBbmREZWNvZGUiXSwibWFwcGluZ3MiOiJpQkFBWUEsRUFjQUMsMkJBZFosU0FBWUQsR0FDVkEsRUFBQSxVQUFBLFlBQ0FBLEVBQUEsTUFBQSxRQUNBQSxFQUFBLE9BQUEsU0FDQUEsRUFBQSxPQUFBLFFBQ0QsQ0FMRCxDQUFZQSxJQUFBQSxFQUFTLENBQUEsSUFjVEMsUUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLFFBQUFBLGFBQUFBLG1CQUFVLENBQUEsSUFDcEIsZ0JBQUEsNkJBQ0FBLEVBQUEscUJBQUEsa0NBQ0FBLEVBQUEsbUJBQUEsZ0NBQ0FBLEVBQUEsZUFBQSw0QkFDQUEsRUFBQSxnQkFBQSw2QkFDQUEsRUFBQSxZQUFBLHlCQ1JGLFNBQVNDLEVBQW9CQyxHQUMzQixJQUNFLE1BQU1DLEVBQU9DLEVBQUFBLFVBQXdCRixHQUNyQyxNQUFPLENBQ0xHLElBQUtGLEVBQUtHLFFBQ1ZDLFlBQWFKLEVBQUtLLGdCQUNsQkMsTUFBT04sRUFBS00sTUFDWkMsU0FBVVAsRUFBS1EsYUFDZkMsT0FBUVQsRUFBS1MsT0FFakIsQ0FBRSxNQUNBLE9BQU8sSUFDVCxDQUNGLGlCQTBDT0MsZUFDTEMsR0FFQSxNQUFNQyxRQUFFQSxFQUFPQyxZQUFFQSxFQUFjLGNBQWlCRixFQUMxQ0csRUM1RGlCLENBQUNELElBQ3hCLE1BQU1FLEVBQXdCLGdCQUFoQkYsRUFFZCxNQUFPLENBQ0xHLGtCQUFtQkQsRUFDZix1Q0FFQSx1Q0FFSkUsbUJBQW9CRixFQUNoQixxQ0FFQSxxQ0FFSkcsbUJBQW9CSCxFQUNoQiwwQ0FFQSwwQ0FFSkksY0FBZUosRUFDWCw2QkFDQSx5QkFDSkYsY0FDQU8sTUFBdUIsZ0JBQWhCUCxJRHFDTVEsQ0FBVVIsR0FFbkJTLEVBQWdCVixFQUFRZixRQUFBQSxXQUFXMEIsaUJBQ3pDLEdBQUlELEVBQ0YsT0FBT3hCLEVBQW9Cd0IsR0FHN0IsTUFBTUUsRUFBZVosRUFBUWYsUUFBQUEsV0FBVzRCLHNCQUN4QyxPQUFJRCxFQWxETmQsZUFDRWMsRUFDQUUsR0FFQSxNQUFNQyxFQUFhLElBQUlDLGdCQUNqQkMsRUFBWUMsV0FBVyxJQUFNSCxFQUFXSSxRQVByQixLQVN6QixJQUNFLE1BQU1DLEVBQU0sbURBQW1ETixJQUN6RE8sUUFBaUJDLE1BQU1GLEVBQUssQ0FDaENHLE9BQVEsT0FDUkMsS0FBTSxJQUFJQyxnQkFBZ0IsQ0FDeEJDLGNBQWVkLEVBQ2ZlLFdBQVksa0JBRWRDLE9BQVFiLEVBQVdhLFNBSXJCLEdBRkFDLGFBQWFaLElBRVJJLEVBQVNTLEdBQ1osTUFBTSxJQUFJQyxNQUNSLHlCQUF5QlYsRUFBU1csVUFBVVgsRUFBU1ksY0FJekQsTUFBTUMsUUFBYWIsRUFBU2MsT0FFNUIsT0FBS0QsRUFBS0UsU0FJSGxELEVBQW9CZ0QsRUFBS0UsVUFIdkIsSUFJWCxDQUFFLE1BRUEsT0FEQVAsYUFBYVosR0FDTixJQUNULENBQ0YsQ0FlV29CLENBQWlCekIsRUFBY1YsRUFBT0ksb0JBR3hDLElBQ1QifQ==
package/server.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ interface UserProps {
2
+ uid: string;
3
+ email: string;
4
+ displayName: string;
5
+ photoURL?: string;
6
+ handle?: string;
7
+ }
8
+
9
+ type Environment = 'development' | 'production';
10
+
11
+ type CookieReader = (name: string) => string | undefined;
12
+ interface GetUserOptions {
13
+ cookies: CookieReader;
14
+ environment?: Environment;
15
+ }
16
+ declare function getUser(options: GetUserOptions): Promise<UserProps | null>;
17
+
18
+ declare enum AuthCookie {
19
+ PUBLIC_ID_TOKEN = "arena-auth-public-id-token",
20
+ PUBLIC_REFRESH_TOKEN = "arena-auth-public-refresh-token",
21
+ ANONYMOUS_ID_TOKEN = "arena-auth-anonymous-id-token",
22
+ GUEST_ID_TOKEN = "arena-auth-guest-id-token",
23
+ CUSTOM_ID_TOKEN = "arena-auth-custom-id-token",
24
+ CUSTOM_USER = "arena-auth-custom-user"
25
+ }
26
+
27
+ export { AuthCookie, getUser };
28
+ export type { CookieReader, GetUserOptions, UserProps };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
package/server.esm.js ADDED
@@ -0,0 +1,2 @@
1
+ import{jwtDecode as e}from"jwt-decode";var t,n;!function(e){e.ANONYMOUS="anonymous",e.GUEST="guest",e.PUBLIC="public",e.CUSTOM="custom"}(t||(t={})),function(e){e.PUBLIC_ID_TOKEN="arena-auth-public-id-token",e.PUBLIC_REFRESH_TOKEN="arena-auth-public-refresh-token",e.ANONYMOUS_ID_TOKEN="arena-auth-anonymous-id-token",e.GUEST_ID_TOKEN="arena-auth-guest-id-token",e.CUSTOM_ID_TOKEN="arena-auth-custom-id-token",e.CUSTOM_USER="arena-auth-custom-user"}(n||(n={}));function r(t){try{const n=e(t);return{uid:n.user_id,displayName:n.safeDisplayName,email:n.email,photoURL:n.safePhotoURL,handle:n.handle}}catch{return null}}async function a(e){const{cookies:t,environment:a="production"}=e,o=(e=>{const t="development"===e;return{profileServiceUrl:t?"https://profile-service-dev.arena.im":"https://profile-service-prd.arena.im",identityServiceUrl:t?"https://token-service-dev.arena.im":"https://token-service-prd.arena.im",refreshTokenApiKey:t?"AIzaSyCJhWFCK3ics9kJ2eSgQD7kWHUsOsJyPdk":"AIzaSyD_a4tNVdFVqgGbTfOGCaZ5pvUHErcE79c",authIframeUrl:t?"https://auth2.dev.arena.im":"https://auth2.arena.im",environment:e,debug:"development"===e}})(a),i=t(n.PUBLIC_ID_TOKEN);if(i)return r(i);const s=t(n.PUBLIC_REFRESH_TOKEN);return s?async function(e,t){const n=new AbortController,a=setTimeout(()=>n.abort(),5e3);try{const o=`https://securetoken.googleapis.com/v1/token?key=${t}`,i=await fetch(o,{method:"POST",body:new URLSearchParams({refresh_token:e,grant_type:"refresh_token"}),signal:n.signal});if(clearTimeout(a),!i.ok)throw new Error(`Token refresh failed: ${i.status} ${i.statusText}`);const s=await i.json();return s.id_token?r(s.id_token):null}catch{return clearTimeout(a),null}}(s,o.refreshTokenApiKey):null}export{n as AuthCookie,a as getUser};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmVzbS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzL3Rva2VuLnRzIiwiLi4vc3JjL3NlcnZlci9nZXQtdXNlci50cyIsIi4uL3NyYy9jb25maWcvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gVG9rZW5UeXBlIHtcbiAgQU5PTllNT1VTID0gJ2Fub255bW91cycsXG4gIEdVRVNUID0gJ2d1ZXN0JyxcbiAgUFVCTElDID0gJ3B1YmxpYycsXG4gIENVU1RPTSA9ICdjdXN0b20nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUGFpciB7XG4gIGlkVG9rZW46IHN0cmluZyB8IG51bGw7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFRva2Vuc01hcCA9IFJlY29yZDxUb2tlblR5cGUsIFRva2VuUGFpcj47XG5cbmV4cG9ydCBlbnVtIEF1dGhDb29raWUge1xuICBQVUJMSUNfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1wdWJsaWMtaWQtdG9rZW4nLFxuICBQVUJMSUNfUkVGUkVTSF9UT0tFTiA9ICdhcmVuYS1hdXRoLXB1YmxpYy1yZWZyZXNoLXRva2VuJyxcbiAgQU5PTllNT1VTX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtYW5vbnltb3VzLWlkLXRva2VuJyxcbiAgR1VFU1RfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1ndWVzdC1pZC10b2tlbicsXG4gIENVU1RPTV9JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLWN1c3RvbS1pZC10b2tlbicsXG4gIENVU1RPTV9VU0VSID0gJ2FyZW5hLWF1dGgtY3VzdG9tLXVzZXInLFxufVxuIiwiaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyBBdXRoQ29va2llIH0gZnJvbSAnLi4vdHlwZXMvdG9rZW4nO1xuaW1wb3J0IHsgdHlwZSBVc2VyUHJvcHMsIHR5cGUgRmlyZWJhc2VVc2VyIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyB0eXBlIEVudmlyb25tZW50LCBnZXRDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5leHBvcnQgdHlwZSBDb29raWVSZWFkZXIgPSAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VXNlck9wdGlvbnMge1xuICBjb29raWVzOiBDb29raWVSZWFkZXI7XG4gIGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVVzZXJGcm9tVG9rZW4oaWRUb2tlbjogc3RyaW5nKTogVXNlclByb3BzIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlciA9IGp3dERlY29kZTxGaXJlYmFzZVVzZXI+KGlkVG9rZW4pO1xuICAgIHJldHVybiB7XG4gICAgICB1aWQ6IHVzZXIudXNlcl9pZCxcbiAgICAgIGRpc3BsYXlOYW1lOiB1c2VyLnNhZmVEaXNwbGF5TmFtZSxcbiAgICAgIGVtYWlsOiB1c2VyLmVtYWlsLFxuICAgICAgcGhvdG9VUkw6IHVzZXIuc2FmZVBob3RvVVJMLFxuICAgICAgaGFuZGxlOiB1c2VyLmhhbmRsZSxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jb25zdCBSRUZSRVNIX1RJTUVPVVRfTVMgPSA1MDAwO1xuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoQW5kRGVjb2RlKFxuICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmdcbik6IFByb21pc2U8VXNlclByb3BzIHwgbnVsbD4ge1xuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgUkVGUkVTSF9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZWFwaXMuY29tL3YxL3Rva2VuP2tleT0ke2FwaUtleX1gO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgIH0pLFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRva2VuIHJlZnJlc2ggZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghZGF0YS5pZF90b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY29kZVVzZXJGcm9tVG9rZW4oZGF0YS5pZF90b2tlbik7XG4gIH0gY2F0Y2gge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVc2VyKFxuICBvcHRpb25zOiBHZXRVc2VyT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyUHJvcHMgfCBudWxsPiB7XG4gIGNvbnN0IHsgY29va2llcywgZW52aXJvbm1lbnQgPSAncHJvZHVjdGlvbicgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZyhlbnZpcm9ubWVudCk7XG5cbiAgY29uc3QgcHVibGljSWRUb2tlbiA9IGNvb2tpZXMoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4pO1xuICBpZiAocHVibGljSWRUb2tlbikge1xuICAgIHJldHVybiBkZWNvZGVVc2VyRnJvbVRva2VuKHB1YmxpY0lkVG9rZW4pO1xuICB9XG5cbiAgY29uc3QgcmVmcmVzaFRva2VuID0gY29va2llcyhBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcbiAgaWYgKHJlZnJlc2hUb2tlbikge1xuICAgIHJldHVybiByZWZyZXNoQW5kRGVjb2RlKHJlZnJlc2hUb2tlbiwgY29uZmlnLnJlZnJlc2hUb2tlbkFwaUtleSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgcHJvZmlsZVNlcnZpY2VVcmw6IHN0cmluZztcbiAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nO1xuICBhdXRoSWZyYW1lVXJsOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuICBkZWJ1ZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IENvbmZpZyA9PiB7XG4gIGNvbnN0IGlzRGV2ID0gZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlU2VydmljZVVybDogaXNEZXZcbiAgICAgID8gcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLWRldi5hcmVuYS5pbSdcbiAgICAgIDogcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9QUkQgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5JREVOVElUWV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vdG9rZW4tc2VydmljZS1kZXYuYXJlbmEuaW0nXG4gICAgICA6IHByb2Nlc3MuZW52LklERU5USVRZX1NFUlZJQ0VfVVJMX1BSRCB8fFxuICAgICAgICAnaHR0cHM6Ly90b2tlbi1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5GSVJFQkFTRV9QVUJMSUNfQVBJX0tFWV9ERVYgfHxcbiAgICAgICAgJ0FJemFTeUNKaFdGQ0szaWNzOWtKMmVTZ1FEN2tXSFVzT3NKeVBkaydcbiAgICAgIDogcHJvY2Vzcy5lbnYuRklSRUJBU0VfUFVCTElDX0FQSV9LRVlfUFJEIHx8XG4gICAgICAgICdBSXphU3lELTl0U3JRV243M1MwcW02QnFFSDUtMTJIcThMMGVUc1EnLFxuICAgIGF1dGhJZnJhbWVVcmw6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LkFVVEhfSUZSQU1FX1VSTF9ERVYgfHwgJ2h0dHBzOi8vYXV0aDIuZGV2LmFyZW5hLmltJ1xuICAgICAgOiBwcm9jZXNzLmVudi5BVVRIX0lGUkFNRV9VUkxfUFJEIHx8ICdodHRwczovL2F1dGgyLmFyZW5hLmltJyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBkZWJ1ZzogZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCcsXG4gIH07XG59O1xuXG5leHBvcnQge1xuICBzZXRSdW50aW1lRW52aXJvbm1lbnQsXG4gIGdldFJ1bnRpbWVFbnZpcm9ubWVudCxcbn0gZnJvbSAnLi9ydW50aW1lLWVudmlyb25tZW50JztcbiJdLCJuYW1lcyI6WyJUb2tlblR5cGUiLCJBdXRoQ29va2llIiwiZGVjb2RlVXNlckZyb21Ub2tlbiIsImlkVG9rZW4iLCJ1c2VyIiwiand0RGVjb2RlIiwidWlkIiwidXNlcl9pZCIsImRpc3BsYXlOYW1lIiwic2FmZURpc3BsYXlOYW1lIiwiZW1haWwiLCJwaG90b1VSTCIsInNhZmVQaG90b1VSTCIsImhhbmRsZSIsImFzeW5jIiwiZ2V0VXNlciIsIm9wdGlvbnMiLCJjb29raWVzIiwiZW52aXJvbm1lbnQiLCJjb25maWciLCJpc0RldiIsInByb2ZpbGVTZXJ2aWNlVXJsIiwiaWRlbnRpdHlTZXJ2aWNlVXJsIiwicmVmcmVzaFRva2VuQXBpS2V5IiwiYXV0aElmcmFtZVVybCIsImRlYnVnIiwiZ2V0Q29uZmlnIiwicHVibGljSWRUb2tlbiIsIlBVQkxJQ19JRF9UT0tFTiIsInJlZnJlc2hUb2tlbiIsIlBVQkxJQ19SRUZSRVNIX1RPS0VOIiwiYXBpS2V5IiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJhYm9ydCIsInVybCIsInJlc3BvbnNlIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiVVJMU2VhcmNoUGFyYW1zIiwicmVmcmVzaF90b2tlbiIsImdyYW50X3R5cGUiLCJzaWduYWwiLCJjbGVhclRpbWVvdXQiLCJvayIsIkVycm9yIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsImRhdGEiLCJqc29uIiwiaWRfdG9rZW4iLCJyZWZyZXNoQW5kRGVjb2RlIl0sIm1hcHBpbmdzIjoidUNBQUEsSUFBWUEsRUFjQUMsR0FkWixTQUFZRCxHQUNWQSxFQUFBLFVBQUEsWUFDQUEsRUFBQSxNQUFBLFFBQ0FBLEVBQUEsT0FBQSxTQUNBQSxFQUFBLE9BQUEsUUFDRCxDQUxELENBQVlBLElBQUFBLEVBQVMsQ0FBQSxJQWNyQixTQUFZQyxHQUNWQSxFQUFBLGdCQUFBLDZCQUNBQSxFQUFBLHFCQUFBLGtDQUNBQSxFQUFBLG1CQUFBLGdDQUNBQSxFQUFBLGVBQUEsNEJBQ0FBLEVBQUEsZ0JBQUEsNkJBQ0FBLEVBQUEsWUFBQSx3QkFDRCxDQVBELENBQVlBLElBQUFBLEVBQVUsQ0FBQSxJQ0Z0QixTQUFTQyxFQUFvQkMsR0FDM0IsSUFDRSxNQUFNQyxFQUFPQyxFQUF3QkYsR0FDckMsTUFBTyxDQUNMRyxJQUFLRixFQUFLRyxRQUNWQyxZQUFhSixFQUFLSyxnQkFDbEJDLE1BQU9OLEVBQUtNLE1BQ1pDLFNBQVVQLEVBQUtRLGFBQ2ZDLE9BQVFULEVBQUtTLE9BRWpCLENBQUUsTUFDQSxPQUFPLElBQ1QsQ0FDRixDQTBDT0MsZUFBZUMsRUFDcEJDLEdBRUEsTUFBTUMsUUFBRUEsRUFBT0MsWUFBRUEsRUFBYyxjQUFpQkYsRUFDMUNHLEVDNURpQixDQUFDRCxJQUN4QixNQUFNRSxFQUF3QixnQkFBaEJGLEVBRWQsTUFBTyxDQUNMRyxrQkFBbUJELEVBQ2YsdUNBRUEsdUNBRUpFLG1CQUFvQkYsRUFDaEIscUNBRUEscUNBRUpHLG1CQUFvQkgsRUFDaEIsMENBRUEsMENBRUpJLGNBQWVKLEVBQ1gsNkJBQ0EseUJBQ0pGLGNBQ0FPLE1BQXVCLGdCQUFoQlAsSURxQ01RLENBQVVSLEdBRW5CUyxFQUFnQlYsRUFBUWhCLEVBQVcyQixpQkFDekMsR0FBSUQsRUFDRixPQUFPekIsRUFBb0J5QixHQUc3QixNQUFNRSxFQUFlWixFQUFRaEIsRUFBVzZCLHNCQUN4QyxPQUFJRCxFQWxETmYsZUFDRWUsRUFDQUUsR0FFQSxNQUFNQyxFQUFhLElBQUlDLGdCQUNqQkMsRUFBWUMsV0FBVyxJQUFNSCxFQUFXSSxRQVByQixLQVN6QixJQUNFLE1BQU1DLEVBQU0sbURBQW1ETixJQUN6RE8sUUFBaUJDLE1BQU1GLEVBQUssQ0FDaENHLE9BQVEsT0FDUkMsS0FBTSxJQUFJQyxnQkFBZ0IsQ0FDeEJDLGNBQWVkLEVBQ2ZlLFdBQVksa0JBRWRDLE9BQVFiLEVBQVdhLFNBSXJCLEdBRkFDLGFBQWFaLElBRVJJLEVBQVNTLEdBQ1osTUFBTSxJQUFJQyxNQUNSLHlCQUF5QlYsRUFBU1csVUFBVVgsRUFBU1ksY0FJekQsTUFBTUMsUUFBYWIsRUFBU2MsT0FFNUIsT0FBS0QsRUFBS0UsU0FJSG5ELEVBQW9CaUQsRUFBS0UsVUFIdkIsSUFJWCxDQUFFLE1BRUEsT0FEQVAsYUFBYVosR0FDTixJQUNULENBQ0YsQ0FlV29CLENBQWlCekIsRUFBY1YsRUFBT0ksb0JBR3hDLElBQ1QifQ==