@valiantys/atlassian-app-frontend 1.0.0 → 2.0.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.
@@ -13,6 +13,8 @@ import { FlagOptions } from '@forge/bridge/out/flag/flag';
13
13
  import { FullContext } from '@forge/bridge/out/types';
14
14
  import { HeadingSize } from '@atlaskit/heading/dist/types/heading.partial';
15
15
  import { History as History_2 } from 'history';
16
+ import { IconButtonAppearance } from '@atlaskit/button/new';
17
+ import { IconProp } from '@atlaskit/button/new';
16
18
  import { JSX as JSX_2 } from 'react/jsx-runtime';
17
19
  import { PropsWithChildren } from 'react';
18
20
  import { ReactElement } from 'react';
@@ -74,23 +76,32 @@ export interface AtlassianAppConfig {
74
76
  invokeRemoteImpl?: InvokeRemoteSignature;
75
77
  useAtlasKitFlags?: boolean;
76
78
  };
77
- standaloneConfig?: {
78
- oauthConfig?: OAuthProviderProps & {
79
- doCheckResource?: boolean;
80
- };
81
- initialMockViewContext?: Partial<FullContext>;
82
- backendUrl?: string;
83
- remoteUrl?: string;
84
- modalOpenerConfig?: {
85
- resourceMap?: Record<string, string>;
86
- defaultUrl: string;
87
- };
88
- modalContextConfig?: {
89
- openerOrigin: string;
90
- };
79
+ standaloneConfig?: AtlassianAppStandaloneConfig;
80
+ }
81
+
82
+ // @public (undocumented)
83
+ export function AtlassianAppStandalone({ initialMockViewContext, backendUrl, remoteUrl, doCheckWorkspace, appName, doCheckResource, modalOpenerConfig, modalContextConfig, children, }: PropsWithChildren<JiraStandaloneAppWrapperProps>): JSX_2.Element;
84
+
85
+ // @public (undocumented)
86
+ export interface AtlassianAppStandaloneConfig {
87
+ backendUrl?: string;
88
+ initialMockViewContext?: Partial<FullContext>;
89
+ modalContextConfig?: {
90
+ openerOrigin: string;
91
+ };
92
+ modalOpenerConfig?: {
93
+ resourceMap?: Record<string, string>;
94
+ defaultUrl: string;
91
95
  };
96
+ oauthConfig?: AtlassianAppStandaloneOauthConfig;
97
+ remoteUrl?: string;
92
98
  }
93
99
 
100
+ // @public (undocumented)
101
+ export type AtlassianAppStandaloneOauthConfig = OAuthProviderProps & {
102
+ doCheckResource?: boolean;
103
+ };
104
+
94
105
  // @public (undocumented)
95
106
  export function AtlassianAppTest({ mockContext, invoke, invokeRemote, jiraFetchService, confluenceFetchService, bitbucketFetchService, hostRouter, children, }: PropsWithChildren<AtlassianAppTestProps>): JSX_2.Element;
96
107
 
@@ -125,18 +136,18 @@ export function atlassianOAuthJiraFetch(authToken: string, cloudId: string): Atl
125
136
  export function atlassianOAuthRawFetch<P extends Product>(authToken: string, domain: string, productType: P): AtlassianProductFetchService<P>;
126
137
 
127
138
  // @public (undocumented)
128
- export type AtlassianOAuthScopes = 'read:me' | 'read:jira-user' | 'read:jira-work' | 'read:servicedesk-request' | 'write:servicedesk-request' | 'read:cmdb-schema:jira' | 'write:cmdb-schema:jira' | 'read:cmdb-type:jira' | 'write:cmdb-type:jira' | 'read:cmdb-object:jira' | 'write:cmdb-object:jira' | 'delete:cmdb-object:jira' | 'read:cmdb-attribute:jira' | 'write:cmdb-attribute:jira' | 'read:cmdb-icon:jira';
139
+ export type AtlassianOAuthScopes = 'read:me' | 'read:jira-user' | 'read:jira-work' | 'write:jira-work' | 'read:servicedesk-request' | 'write:servicedesk-request' | 'read:cmdb-schema:jira' | 'write:cmdb-schema:jira' | 'read:cmdb-type:jira' | 'write:cmdb-type:jira' | 'read:cmdb-object:jira' | 'write:cmdb-object:jira' | 'delete:cmdb-object:jira' | 'read:cmdb-attribute:jira' | 'write:cmdb-attribute:jira' | 'read:cmdb-icon:jira';
129
140
 
130
141
  // @public (undocumented)
131
142
  export interface AtlassianProductFetchService<P extends Product> {
132
143
  // (undocumented)
133
- fetch: <T>(request: FetchRequest, body?: Record<string, any>) => Promise<T>;
144
+ fetch: FetchSignature;
134
145
  // (undocumented)
135
146
  fullUrl: (path: string) => string;
136
147
  // (undocumented)
137
148
  productType: P;
138
149
  // (undocumented)
139
- rawFetch: (url: FetchRoute, init: RequestInit) => Promise<APIResponse>;
150
+ rawFetch: RequestProductMethod;
140
151
  // (undocumented)
141
152
  route: (template: TemplateStringsArray, ...parameters: (string | number | URLSearchParams | FetchRoute)[]) => FetchRoute;
142
153
  }
@@ -262,6 +273,9 @@ export type FetchRoute = {
262
273
  readonly value: string;
263
274
  };
264
275
 
276
+ // @public (undocumented)
277
+ export type FetchSignature = <T>(request: FetchRequest, body?: Record<string, any>) => Promise<T>;
278
+
265
279
  // @public (undocumented)
266
280
  export interface ForgeRequest<T, U extends AccountContext = AccountContext> {
267
281
  // (undocumented)
@@ -315,21 +329,37 @@ export interface HostRouter {
315
329
  reload(): Promise<void>;
316
330
  }
317
331
 
332
+ // @public (undocumented)
333
+ export function HostRouterLink({ url, action, label, linkStyle, buttonIcon, buttonAppearance, }: HostRouterLinkProps): JSX_2.Element;
334
+
335
+ // @public (undocumented)
336
+ export interface HostRouterLinkProps {
337
+ // (undocumented)
338
+ action: 'navigate' | 'open';
339
+ // (undocumented)
340
+ buttonAppearance?: IconButtonAppearance;
341
+ // (undocumented)
342
+ buttonIcon?: IconProp;
343
+ label: string;
344
+ // (undocumented)
345
+ linkStyle: 'link' | 'button';
346
+ // (undocumented)
347
+ url: string;
348
+ }
349
+
318
350
  // Warning: (ae-forgotten-export) The symbol "HostRouterProviderProps" needs to be exported by the entry point index.d.ts
319
351
  //
320
352
  // @public (undocumented)
321
353
  export function HostRouterProvider({ children, hostRouter, }: HostRouterProviderProps): JSX_2.Element;
322
354
 
323
355
  // @public (undocumented)
324
- export interface IframeProps {
325
- // (undocumented)
326
- height?: string;
327
- // (undocumented)
328
- link: string;
356
+ export interface IframeModalContextData {
357
+ // Warning: (ae-forgotten-export) The symbol "IframeProps" needs to be exported by the entry point index.d.ts
358
+ //
329
359
  // (undocumented)
330
- title?: string;
360
+ iframeProps: IframeProps;
331
361
  // (undocumented)
332
- width?: string;
362
+ modalHeader?: string;
333
363
  }
334
364
 
335
365
  // @public (undocumented)
@@ -356,7 +386,7 @@ export type InvokeRemoteSignature = <T, U>(input: {
356
386
  }) => Promise<InvokeRemoteResponse<T>>;
357
387
 
358
388
  // @public (undocumented)
359
- export type InvokeSignature = <T = unknown, U = InvokePayload>(action: string, data?: U) => Promise<T>;
389
+ export type InvokeSignature = <T = unknown, U = InvokePayload, A extends string = string>(action: A, data?: U) => Promise<T>;
360
390
 
361
391
  // @public (undocumented)
362
392
  export const IS_STANDALONE: boolean;
@@ -390,6 +420,30 @@ export interface JiraIssueExtensionData {
390
420
  type: string;
391
421
  }
392
422
 
423
+ // @public (undocumented)
424
+ export interface JiraStandaloneAppWrapperProps {
425
+ // (undocumented)
426
+ appName: string;
427
+ // (undocumented)
428
+ backendUrl?: string;
429
+ // (undocumented)
430
+ doCheckResource?: boolean;
431
+ doCheckWorkspace?: boolean;
432
+ // (undocumented)
433
+ initialMockViewContext?: Partial<FullContext>;
434
+ // (undocumented)
435
+ modalContextConfig?: {
436
+ openerOrigin: string;
437
+ };
438
+ // (undocumented)
439
+ modalOpenerConfig?: {
440
+ resourceMap?: Record<string, string>;
441
+ defaultUrl: string;
442
+ };
443
+ // (undocumented)
444
+ remoteUrl?: string;
445
+ }
446
+
393
447
  // @public (undocumented)
394
448
  export function JiraWorkspaceProvider({ children, workspaceId, }: PropsWithChildren<{
395
449
  workspaceId?: string;
@@ -420,7 +474,7 @@ export class MockViewContext implements ViewContext {
420
474
  }
421
475
 
422
476
  // @public (undocumented)
423
- export function ModalContent<T>({ children }: PropsWithChildren): JSX_2.Element;
477
+ export function ModalContent({ children }: PropsWithChildren): JSX_2.Element;
424
478
 
425
479
  // @public (undocumented)
426
480
  export function ModalContentIframe<T>({ messageCallback, closeOnMouseOut, }: {
@@ -431,11 +485,11 @@ export function ModalContentIframe<T>({ messageCallback, closeOnMouseOut, }: {
431
485
  }): JSX_2.Element;
432
486
 
433
487
  // @public (undocumented)
434
- export interface ModalContentService<T> {
488
+ export interface ModalContentService<C, P> {
435
489
  // (undocumented)
436
- close: (payload?: unknown) => void;
490
+ close: (payload?: P) => void;
437
491
  // (undocumented)
438
- modalContextData?: T;
492
+ modalContextData?: C;
439
493
  }
440
494
 
441
495
  // @public
@@ -444,9 +498,9 @@ export function ModalDialogLayout({ title, buttonGroup, children, }: PropsWithCh
444
498
  // @public (undocumented)
445
499
  export interface ModalDialogLayoutProps {
446
500
  // (undocumented)
447
- buttonGroup: default_2.ReactNode;
501
+ buttonGroup?: default_2.ReactNode;
448
502
  // (undocumented)
449
- title: string;
503
+ title?: string;
450
504
  }
451
505
 
452
506
  // @public (undocumented)
@@ -606,6 +660,9 @@ export type RequestPayload = {
606
660
  [key in number | string]: unknown;
607
661
  };
608
662
 
663
+ // @public (undocumented)
664
+ export type RequestProductMethod = (url: FetchRoute, init: RequestInit) => Promise<APIResponse>;
665
+
609
666
  // Warning: (ae-forgotten-export) The symbol "Response_2" needs to be exported by the entry point index.d.ts
610
667
  //
611
668
  // @public (undocumented)
@@ -660,7 +717,7 @@ export function useLoadDataEffect<T>(requestFunc: () => Promise<T>, errorHandler
660
717
  };
661
718
 
662
719
  // @public (undocumented)
663
- export function useModalContentService<T>(): ModalContentService<T>;
720
+ export function useModalContentService<C = unknown, P = unknown>(): ModalContentService<C, P>;
664
721
 
665
722
  // @public (undocumented)
666
723
  export const useModalService: () => ModalService;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index.js");require("react/jsx-runtime");require("@atlaskit/button");require("@atlaskit/button/new");require("@atlaskit/form");require("@atlaskit/primitives");require("@atlaskit/section-message");require("@atlaskit/select");require("react");require("@atlaskit/heading");require("@atlaskit/spinner");require("@atlaskit/app-provider");require("react-router-dom");require("@atlaskit/flag");require("@atlaskit/icon/glyph/check-circle");require("@atlaskit/icon/glyph/error");require("@atlaskit/icon/glyph/info");require("@atlaskit/icon/glyph/warning");require("@atlaskit/tokens");exports.FeatureChosenResourceCheck=e.FeatureChosenResourceCheck;exports.default=e.FeatureChosenResourceCheck;
@@ -9,6 +9,7 @@ import "@atlaskit/select";
9
9
  import "react";
10
10
  import "@atlaskit/heading";
11
11
  import "@atlaskit/spinner";
12
+ import "@atlaskit/app-provider";
12
13
  import "react-router-dom";
13
14
  import "@atlaskit/flag";
14
15
  import "@atlaskit/icon/glyph/check-circle";
package/index.d.ts CHANGED
@@ -7,6 +7,8 @@ import { FlagOptions } from '@forge/bridge/out/flag/flag';
7
7
  import { FullContext } from '@forge/bridge/out/types';
8
8
  import { HeadingSize } from '@atlaskit/heading/dist/types/heading.partial';
9
9
  import { History as History_2 } from 'history';
10
+ import { IconButtonAppearance } from '@atlaskit/button/new';
11
+ import { IconProp } from '@atlaskit/button/new';
10
12
  import { JSX as JSX_2 } from 'react/jsx-runtime';
11
13
  import { PropsWithChildren } from 'react';
12
14
  import { ReactElement } from 'react';
@@ -80,51 +82,57 @@ export declare interface AtlassianAppConfig {
80
82
  /**
81
83
  * Configuration needed when app is running in standalone mode, outside of jira.
82
84
  */
83
- standaloneConfig?: {
84
- /**
85
- * OAuth configuration for authenticating users against Jira.
86
- */
87
- oauthConfig?: OAuthProviderProps & {
88
- doCheckResource?: boolean;
89
- };
90
- /**
91
- * Mock data for the context normally returned by @forge/bridge View.getContext()
92
- */
93
- initialMockViewContext?: Partial<FullContext>;
94
- /**
95
- * Url for invoking backend functions
96
- */
97
- backendUrl?: string;
85
+ standaloneConfig?: AtlassianAppStandaloneConfig;
86
+ }
87
+
88
+ export declare function AtlassianAppStandalone({ initialMockViewContext, backendUrl, remoteUrl, doCheckWorkspace, appName, doCheckResource, modalOpenerConfig, modalContextConfig, children, }: PropsWithChildren<JiraStandaloneAppWrapperProps>): JSX_2.Element;
89
+
90
+ export declare interface AtlassianAppStandaloneConfig {
91
+ /**
92
+ * OAuth configuration for authenticating users against Jira.
93
+ */
94
+ oauthConfig?: AtlassianAppStandaloneOauthConfig;
95
+ /**
96
+ * Mock data for the context normally returned by @forge/bridge View.getContext()
97
+ */
98
+ initialMockViewContext?: Partial<FullContext>;
99
+ /**
100
+ * Url for invoking backend functions
101
+ */
102
+ backendUrl?: string;
103
+ /**
104
+ * Url for invoking remote APIs
105
+ */
106
+ remoteUrl?: string;
107
+ /**
108
+ * config for an app that opens @forge/bridge Modals
109
+ */
110
+ modalOpenerConfig?: {
98
111
  /**
99
- * Url for invoking remote APIs
112
+ * If the app opens multiple Forge resources in Jira Modals,
113
+ * then supply a map of resource names to local URLs.
100
114
  */
101
- remoteUrl?: string;
115
+ resourceMap?: Record<string, string>;
102
116
  /**
103
- * config for an app that opens @forge/bridge Modals
117
+ * default URL to open in the modal (ex. http://localhost:4201)
104
118
  */
105
- modalOpenerConfig?: {
106
- /**
107
- * If the app opens multiple Forge resources in Jira Modals,
108
- * then supply a map of resource names to local URLs.
109
- */
110
- resourceMap?: Record<string, string>;
111
- /**
112
- * default URL to open in the modal (ex. http://localhost:4201)
113
- */
114
- defaultUrl: string;
115
- };
119
+ defaultUrl: string;
120
+ };
121
+ /**
122
+ * config for an app that is opened in a @forge/bridge Modal
123
+ */
124
+ modalContextConfig?: {
116
125
  /**
117
- * config for an app that is opened in a @forge/bridge Modal
126
+ * Standalone URL of the app that opened the modal. (ex. http://localhost:4200)
118
127
  */
119
- modalContextConfig?: {
120
- /**
121
- * Standalone URL of the app that opened the modal. (ex. http://localhost:4200)
122
- */
123
- openerOrigin: string;
124
- };
128
+ openerOrigin: string;
125
129
  };
126
130
  }
127
131
 
132
+ export declare type AtlassianAppStandaloneOauthConfig = OAuthProviderProps & {
133
+ doCheckResource?: boolean;
134
+ };
135
+
128
136
  export declare function AtlassianAppTest({ mockContext, invoke, invokeRemote, jiraFetchService, confluenceFetchService, bitbucketFetchService, hostRouter, children, }: PropsWithChildren<AtlassianAppTestProps>): JSX_2.Element;
129
137
 
130
138
  export declare interface AtlassianAppTestProps {
@@ -145,13 +153,13 @@ export declare function atlassianOAuthJiraFetch(authToken: string, cloudId: stri
145
153
 
146
154
  export declare function atlassianOAuthRawFetch<P extends Product>(authToken: string, domain: string, productType: P): AtlassianProductFetchService<P>;
147
155
 
148
- export declare type AtlassianOAuthScopes = 'read:me' | 'read:jira-user' | 'read:jira-work' | 'read:servicedesk-request' | 'write:servicedesk-request' | 'read:cmdb-schema:jira' | 'write:cmdb-schema:jira' | 'read:cmdb-type:jira' | 'write:cmdb-type:jira' | 'read:cmdb-object:jira' | 'write:cmdb-object:jira' | 'delete:cmdb-object:jira' | 'read:cmdb-attribute:jira' | 'write:cmdb-attribute:jira' | 'read:cmdb-icon:jira';
156
+ export declare type AtlassianOAuthScopes = 'read:me' | 'read:jira-user' | 'read:jira-work' | 'write:jira-work' | 'read:servicedesk-request' | 'write:servicedesk-request' | 'read:cmdb-schema:jira' | 'write:cmdb-schema:jira' | 'read:cmdb-type:jira' | 'write:cmdb-type:jira' | 'read:cmdb-object:jira' | 'write:cmdb-object:jira' | 'delete:cmdb-object:jira' | 'read:cmdb-attribute:jira' | 'write:cmdb-attribute:jira' | 'read:cmdb-icon:jira';
149
157
 
150
158
  export declare interface AtlassianProductFetchService<P extends Product> {
151
159
  productType: P;
152
- fetch: <T>(request: FetchRequest, body?: Record<string, any>) => Promise<T>;
160
+ fetch: FetchSignature;
153
161
  route: (template: TemplateStringsArray, ...parameters: (string | number | URLSearchParams | FetchRoute)[]) => FetchRoute;
154
- rawFetch: (url: FetchRoute, init: RequestInit) => Promise<APIResponse>;
162
+ rawFetch: RequestProductMethod;
155
163
  fullUrl: (path: string) => string;
156
164
  }
157
165
 
@@ -253,6 +261,8 @@ export declare type FetchRoute = {
253
261
  readonly value: string;
254
262
  };
255
263
 
264
+ export declare type FetchSignature = <T>(request: FetchRequest, body?: Record<string, any>) => Promise<T>;
265
+
256
266
  export declare interface ForgeRequest<T, U extends AccountContext = AccountContext> {
257
267
  payload: T;
258
268
  context: U;
@@ -286,6 +296,18 @@ export declare interface HostRouter {
286
296
  reload(): Promise<void>;
287
297
  }
288
298
 
299
+ export declare function HostRouterLink({ url, action, label, linkStyle, buttonIcon, buttonAppearance, }: HostRouterLinkProps): JSX_2.Element;
300
+
301
+ export declare interface HostRouterLinkProps {
302
+ url: string;
303
+ action: 'navigate' | 'open';
304
+ /** anchor text or button label **/
305
+ label: string;
306
+ linkStyle: 'link' | 'button';
307
+ buttonIcon?: IconProp;
308
+ buttonAppearance?: IconButtonAppearance;
309
+ }
310
+
289
311
  export declare function HostRouterProvider({ children, hostRouter, }: HostRouterProviderProps): JSX_2.Element;
290
312
 
291
313
  declare interface HostRouterProviderProps {
@@ -293,7 +315,12 @@ declare interface HostRouterProviderProps {
293
315
  hostRouter: HostRouter;
294
316
  }
295
317
 
296
- export declare interface IframeProps {
318
+ export declare interface IframeModalContextData {
319
+ iframeProps: IframeProps;
320
+ modalHeader?: string;
321
+ }
322
+
323
+ declare interface IframeProps {
297
324
  link: string;
298
325
  title?: string;
299
326
  width?: string;
@@ -330,7 +357,7 @@ export declare type InvokeRemoteSignature = <T, U>(input: {
330
357
  body?: U;
331
358
  }) => Promise<InvokeRemoteResponse<T>>;
332
359
 
333
- export declare type InvokeSignature = <T = unknown, U = InvokePayload>(action: string, data?: U) => Promise<T>;
360
+ export declare type InvokeSignature = <T = unknown, U = InvokePayload, A extends string = string>(action: A, data?: U) => Promise<T>;
334
361
 
335
362
  export declare const IS_STANDALONE: boolean;
336
363
 
@@ -357,6 +384,25 @@ export declare interface JiraIssueExtensionData {
357
384
  type: string;
358
385
  }
359
386
 
387
+ export declare interface JiraStandaloneAppWrapperProps {
388
+ initialMockViewContext?: Partial<FullContext>;
389
+ backendUrl?: string;
390
+ remoteUrl?: string;
391
+ doCheckResource?: boolean;
392
+ /**
393
+ * Select workspace when calling JSM Assets APIs
394
+ */
395
+ doCheckWorkspace?: boolean;
396
+ modalOpenerConfig?: {
397
+ resourceMap?: Record<string, string>;
398
+ defaultUrl: string;
399
+ };
400
+ modalContextConfig?: {
401
+ openerOrigin: string;
402
+ };
403
+ appName: string;
404
+ }
405
+
360
406
  export declare function JiraWorkspaceProvider({ children, workspaceId, }: PropsWithChildren<{
361
407
  workspaceId?: string;
362
408
  }>): JSX_2.Element;
@@ -376,7 +422,7 @@ export declare class MockViewContext implements ViewContext {
376
422
  refresh(): Promise<void>;
377
423
  }
378
424
 
379
- export declare function ModalContent<T>({ children }: PropsWithChildren): JSX_2.Element;
425
+ export declare function ModalContent({ children }: PropsWithChildren): JSX_2.Element;
380
426
 
381
427
  export declare function ModalContentIframe<T>({ messageCallback, closeOnMouseOut, }: {
382
428
  messageCallback?: (eventData: T, iframeProps?: IframeProps) => {
@@ -385,9 +431,9 @@ export declare function ModalContentIframe<T>({ messageCallback, closeOnMouseOut
385
431
  closeOnMouseOut?: boolean;
386
432
  }): JSX_2.Element;
387
433
 
388
- export declare interface ModalContentService<T> {
389
- modalContextData?: T;
390
- close: (payload?: unknown) => void;
434
+ export declare interface ModalContentService<C, P> {
435
+ modalContextData?: C;
436
+ close: (payload?: P) => void;
391
437
  }
392
438
 
393
439
  /**
@@ -400,8 +446,8 @@ export declare interface ModalContentService<T> {
400
446
  export declare function ModalDialogLayout({ title, buttonGroup, children, }: PropsWithChildren<ModalDialogLayoutProps>): JSX_2.Element;
401
447
 
402
448
  export declare interface ModalDialogLayoutProps {
403
- title: string;
404
- buttonGroup: default_2.ReactNode;
449
+ title?: string;
450
+ buttonGroup?: default_2.ReactNode;
405
451
  }
406
452
 
407
453
  export declare interface ModalOptions<C, P> {
@@ -531,6 +577,8 @@ export declare type RequestPayload = {
531
577
  [key in number | string]: unknown;
532
578
  };
533
579
 
580
+ export declare type RequestProductMethod = (url: FetchRoute, init: RequestInit) => Promise<APIResponse>;
581
+
534
582
  export declare type ResolverFunction = (request: RequestObject) => Promise<Response_2> | Response_2;
535
583
 
536
584
  export declare interface Resource {
@@ -585,7 +633,7 @@ export declare function useLoadDataEffect<T>(requestFunc: () => Promise<T>, erro
585
633
  manualTrigger: () => Promise<T | undefined>;
586
634
  };
587
635
 
588
- export declare function useModalContentService<T>(): ModalContentService<T>;
636
+ export declare function useModalContentService<C = unknown, P = unknown>(): ModalContentService<C, P>;
589
637
 
590
638
  export declare const useModalService: () => ModalService;
591
639
 
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),L=require("@atlaskit/button"),D=require("@atlaskit/button/new"),x=require("@atlaskit/form"),h=require("@atlaskit/primitives"),F=require("@atlaskit/section-message"),H=require("@atlaskit/select"),i=require("react"),_=require("@atlaskit/heading"),Re=require("@atlaskit/spinner"),g=require("react-router-dom"),P=require("@atlaskit/flag"),Se=require("@atlaskit/icon/glyph/check-circle"),ye=require("@atlaskit/icon/glyph/error"),Pe=require("@atlaskit/icon/glyph/info"),Ee=require("@atlaskit/icon/glyph/warning"),A=require("@atlaskit/tokens"),B=class B{};B.getOauthToken="get-token";let b=B;class J{constructor(t){this.message=t}}function S(e,t){const r={Authorization:e.startsWith("Bearer ")?e:`Bearer ${e}`};return t?{...t,...r}:r}async function N(e,t,r){const c=S(e,r.headers||{});return fetch(t,{...r,headers:c})}async function C(e,t,r,c,o="json",n={}){return I(t,r,S(e,n),c,o)}async function I(e,t,r,c,o="json"){const n={...r||{},Accept:o==="json"?"application/json":"text/html","Content-Type":o==="json"?"application/json":"text/html"},u=c?JSON.stringify(c):void 0,a=await fetch(e,{method:t,headers:n,body:u});if(a.ok)return t==="DELETE"?void 0:o==="text"?await a.text():await a.json();{let l="";try{l=await a.text()}catch{}const p=`${a.status} ${a.statusText} - ${t} ${e}
2
- ${l}`;throw console.error(p),new J(p)}}class V{constructor(t){this.value_=t}set value(t){throw new Error("modification of a Route is not allowed")}get value(){return this.value_}}function W(e){return e instanceof V}const be=["..",".%2e","%2e.","%2e%2e",".%2E","%2E.","%2E%2e"],Fe=["/","\\"],z=["?","#"];function R(e,t){return e.some(r=>t.includes(r))}function Ie(e,t){switch(t){case"path":if(W(e))return e.value;if(e=String(e),R(be,e)||R(z,e)||R(Fe,e))throw new Error("Disallowing path manipulation attempt. For more information see: https://go.atlassian.com/product-fetch-api-route");return e;case"query":return W(e)?encodeURIComponent(e.value):e instanceof URLSearchParams?e.toString():encodeURIComponent(e)}}function G(e,...t){let r="path",c="";for(let o=0;o<e.length;o++){const n=e[o];if(R(z,n)&&(r="query"),c+=n,o>=t.length)break;c+=Ie(t[o],r)}return new V(c)}function E(e,t){if(t){const r=e.startsWith("/")?e.slice(1):e;return`${t}/${r}`}else return e}function y(e,t,r){return{productType:r,fetch:({url:c,method:o,responseType:n="json",allowExperimental:u=!1},a)=>C(e,E(c.value,t),o,a,n,{"X-ExperimentalApi":u?"opt-in":""}),route:G,rawFetch:(c,o)=>N(e,E(c.value,t),o),fullUrl:c=>E(c,t)}}function qe(e,t){return y(e,`https://api.atlassian.com/ex/jira/${t}`,"jira")}function Oe(e,t){return y(e,`https://api.atlassian.com/ex/confluence/${t}`,"confluence")}function Ue(e){return y(e,"https://api.bitbucket.org","bitbucket")}async function Be(e){return C(e,"https://api.atlassian.com/me","GET")}async function We(e,t,r,c,o){return I("https://auth.atlassian.com/oauth/token","POST",void 0,{grant_type:e,client_id:t,client_secret:r,code:c,redirect_uri:o})}class K extends Error{constructor(t){super(t)}}class $e{constructor(){this.userResourcesUrl="https://api.atlassian.com/oauth/token/accessible-resources"}async getAtlassianUserResources(t){return await C(t,this.userResourcesUrl,"GET")}async checkUserChosenResource(t,r){const o=(await this.getAtlassianUserResources(t)).filter((n,u,a)=>a.findIndex(l=>l.id===n.id)===u).map(n=>({name:n.name,id:n.id}));if(o.length>1){if(r){const n=o.find(u=>u.id===r);if(n)return{hasChosen:!0,resource:n}}return{hasChosen:!1,resources:o}}else{if(o.length===1)return{hasChosen:!0,resource:o[0]};throw new K("Provided token does not have permissions for any resources")}}}class X{constructor(t){this.fetchSvc=t,this.workspaceApiUrl="/rest/servicedeskapi/assets/workspace"}async getAllUserWorkspaces(){const t=[];let r=!0;const c=50;let o=0;for(;r;){const n=await this.fetchSvc.fetch({url:this.fetchSvc.route`/rest/servicedeskapi/assets/workspace?start=${o}&limit=${c}`,method:"GET"});t.push(...n.values),o+=c,n.isLastPage&&(r=!1)}return t}async checkUserChosenWorkspace(t){const r=await this.getAllUserWorkspaces();if(r.length>1){if(t){const c=r.find(o=>o.workspaceId===t);if(c)return{hasChosen:!0,workspace:c.workspaceId}}return{hasChosen:!1,workspaces:r}}else{if(r.length===1)return{hasChosen:!0,workspace:r[0].workspaceId};throw new K("Provided token does not have permissions for any workspaces")}}}const Y=i.createContext(null),Me=()=>{const e=i.useContext(Y);if(!e)throw new Error("useRequestBitbucket must be used within a RequestBitbucketProvider");return e};function Q({children:e,requestBitbucketImplementation:t}){return s.jsx(Y.Provider,{value:t,children:e})}const Z=i.createContext(null),Te=()=>{const e=i.useContext(Z);if(!e)throw new Error("useRequestConfluence must be used within a RequestConfluenceProvider");return e};function ee({children:e,requestConfluenceImplementation:t}){return s.jsx(Z.Provider,{value:t,children:e})}const te=i.createContext(null),re=()=>{const e=i.useContext(te);if(!e)throw new Error("useRequestJira must be used within a RequestJiraProvider");return e};function se({children:e,requestJiraImplementation:t}){return s.jsx(te.Provider,{value:t,children:e})}function j({label:e,loadingError:t,labelSize:r}){return s.jsxs(h.Flex,{direction:"column",children:[s.jsx(_,{size:r||"large",children:e}),t?s.jsx(F,{appearance:"error",children:t}):s.jsx(Re,{interactionName:"load"})]})}const oe=i.createContext(void 0),Le=()=>i.useContext(oe);function q({children:e,workspaceId:t}){return s.jsx(oe.Provider,{value:t,children:e})}const $=h.xcss({maxWidth:"max-content",paddingBlockStart:"space.1000"});function De({appName:e,children:t}){const[r,c]=i.useState(!1),[o,n]=i.useState(null),[u,a]=i.useState(""),[l,p]=i.useState(),f=re(),d=i.useCallback(async m=>{try{a("");const w=m??(e&&localStorage.getItem(`${e}-user-workspace-id`))??"",k=await new X(f).checkUserChosenWorkspace(w);k.hasChosen?(e&&localStorage.setItem(`${e}-user-workspace-id`,k.workspace),c(!0),p(k.workspace)):n(k.workspaces)}catch(w){w instanceof Error?a(`Error Occurred: ${w.message}`):a("Uncaught error occurred!")}},[e,f]);i.useEffect(()=>{d()},[d]);async function v({selectedWorkspace:m}){return d(m.value)}if(r)return s.jsx(q,{workspaceId:l,children:t});if(o){const m=o.map(w=>({label:w.workspaceId,value:w.workspaceId}));return s.jsx(h.Flex,{justifyContent:"center",children:s.jsx(h.Box,{xcss:$,children:s.jsx(x,{onSubmit:v,children:({formProps:w,submitting:k})=>s.jsxs("form",{...w,children:[s.jsx(x.FormHeader,{title:"Choose Workspace",children:u?s.jsx(F,{appearance:"error",children:u}):null}),s.jsx(x.FormSection,{children:s.jsx(x.Field,{"aria-required":!0,name:"selectedWorkspace",label:"Workspace",isRequired:!0,children:({fieldProps:Ae})=>s.jsx("div",{"data-testid":"workspace-select-component",children:s.jsx(H,{...Ae,options:m})})})}),s.jsx(x.FormFooter,{align:"start",children:s.jsx(L.ButtonGroup,{label:"Form submit options",children:s.jsx(D,{type:"submit",appearance:"primary",isLoading:k,children:"Submit"})})})]})})})})}else return s.jsx(h.Flex,{justifyContent:"center",xcss:$,children:s.jsx(j,{label:"",loadingError:u})})}const ne=i.createContext(null),He=()=>{const e=i.useContext(ne);if(!e)throw new Error("useBackendAdapter must be used within a BackendAdapterProvider");return e};function ce({children:e,invokeImplementation:t}){return s.jsx(ne.Provider,{value:{invoke:t},children:e})}function _e(e,t,r){return async(c,o)=>C(t,e+c,"POST",{...o},"json",{"resource-id":r})}class Je{navigate(t){return window.location.href=t,Promise.resolve()}open(t){return window.open(t,"_blank"),Promise.resolve()}reload(){return window.location.reload(),Promise.resolve()}}const ie=i.createContext(null),Ne=()=>{const e=i.useContext(ie);if(!e)throw new Error("useHostRouter must be used within a HostRouterProvider");return e};function ae({children:e,hostRouter:t}){return s.jsx(ie.Provider,{value:t,children:e})}const ue=i.createContext(null),Ve=()=>{const e=i.useContext(ue);if(!e)throw new Error("useRemoteAdapter must be used within a RemoteAdapterProvider");return e};function le({children:e,invokeRemoteImplementation:t}){return s.jsx(ue.Provider,{value:{invokeRemote:t},children:e})}function ze(e,t){return async r=>{const c=`${e}${r.path}`,o=await fetch(c,{method:r.method,headers:t?S(t,r.headers||{}):r.headers,body:r.body?JSON.stringify(r.body):void 0}),n={};return o.headers.forEach((a,l)=>{n[l]=a}),{body:await o.json(),headers:n,status:o.status}}}const de=i.createContext(null),he=()=>{const e=i.useContext(de);if(!e)throw new Error("useViewContext must be used within a ViewContextProvider");return e};function pe({children:e,viewContext:t}){return s.jsx(de.Provider,{value:t,children:e})}class O{constructor(t){this.context=t,this.theme={enable(){return Promise.resolve()}}}close(t){return Promise.resolve()}submit(t){return Promise.resolve()}getContext(){return Promise.resolve(this.context)}createHistory(){throw new Error("Method not implemented.")}refresh(){return Promise.resolve()}}function Ge({mockContext:e,invoke:t,invokeRemote:r,jiraFetchService:c,confluenceFetchService:o,bitbucketFetchService:n,hostRouter:u,children:a}){let l=s.jsx(q,{workspaceId:"test-workspace",children:s.jsx(ce,{invokeImplementation:t,children:s.jsx(le,{invokeRemoteImplementation:r,children:s.jsx(ae,{hostRouter:u,children:s.jsx(pe,{viewContext:new O(e),children:a})})})})});return c&&(l=s.jsx(se,{requestJiraImplementation:c,children:l})),o&&(l=s.jsx(ee,{requestConfluenceImplementation:o,children:l})),n&&(l=s.jsx(Q,{requestBitbucketImplementation:n,children:l})),l}function Ke(e){return{mockContext:{accountId:"testAccount",cloudId:"testSite",workspaceId:"testWorkspace",siteUrl:"https://expiumdev.atlassian.net",extension:{type:"jira:globalPage"},timezone:"America/Chicago",locale:"en-US",localId:"devId",moduleKey:"TestApp",environmentId:"TEST",environmentType:"DEVELOPMENT"},invoke:e(),invokeRemote:e(),hostRouter:{navigate:e(),open:e(),reload:e()}}}function Xe(e){const r=new URLSearchParams(window.location.search).get("code");return i.useEffect(()=>{r&&(async()=>{const c=await fetch(e.codeTokenExchangeUrl,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({code:r,redirect_uri:e.redirectUri})});if(c.ok){const o=await c.json(),n=Date.now()+o.expires_in*1e3;e.setAuth({token:o.access_token,expiresAt:n})}})()}),s.jsx(j,{label:"Fetching auth token with provided code"})}function fe(e,t,r){const c=new URLSearchParams({audience:"api.atlassian.com",client_id:e,scope:r.join(" "),redirect_uri:t,state:Ye(),response_type:"code",prompt:"consent"}).toString();window.location.href=`https://auth.atlassian.com/authorize?${c}`}function Ye(){return Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}function Qe(e){return fe(e.clientId,e.redirectUri,e.oAuthScopes),s.jsx(j,{label:"Redirecting to Atlassian Authentication System"})}const Ze=h.xcss({paddingBlockStart:"space.1000"}),xe=i.createContext(null),et=()=>{const e=i.useContext(xe);return e||(console.warn("No OAuth provider"),{getAuthToken:()=>""})};function we({children:e,...t}){const[r,c]=i.useState(localStorage.getItem(`${t.appName}-auth-token`)),o=localStorage.getItem(`${t.appName}-auth-expires-at`),[n,u]=i.useState(o?Number(o):null),a=window.location.protocol+"//"+window.location.hostname+(window.location.port?`:${window.location.port}`:""),l=a+"/callback";function p(){return n&&r&&!M(n)?r:(fe(t.clientId,l,t.oAuthScopes),"")}function f(d){c(d.token),localStorage.setItem(`${t.appName}-auth-token`,d.token),u(d.expiresAt),localStorage.setItem(`${t.appName}-auth-expires-at`,d.expiresAt.toString()),localStorage.removeItem(`${t.appName}-user-resource-id`),localStorage.removeItem(`${t.appName}-user-workspace-id`),window.location.href=a}return!r||!n||M(n)?s.jsx(h.Flex,{justifyContent:"center",xcss:Ze,children:s.jsx(g.BrowserRouter,{children:s.jsxs(g.Routes,{children:[s.jsx(g.Route,{path:"/",element:s.jsx(Qe,{clientId:t.clientId,redirectUri:l,oAuthScopes:t.oAuthScopes})}),s.jsx(g.Route,{path:"/callback",element:s.jsx(Xe,{setAuth:f,redirectUri:l,codeTokenExchangeUrl:t.codeTokenExchangeUrl})}),s.jsx(g.Route,{path:"/*",element:s.jsx(g.Navigate,{to:"/",replace:!0})})]})})}):s.jsx(xe.Provider,{value:{getAuthToken:p},children:e})}function M(e){return e<Date.now()}const tt=i.lazy(()=>Promise.resolve().then(()=>require("./atlassian-app-forge-CTaVjJLt.js"))),rt=i.lazy(()=>Promise.resolve().then(()=>require("./atlassian-app-standalone-DJOVbfp6.js"))),me=window.self===window.top;function st({children:e,appName:t,doCheckWorkspace:r,embeddedConfig:c,standaloneConfig:o}){var n;if(me)if(o){const u=s.jsx(rt,{appName:t,backendUrl:o.backendUrl,remoteUrl:o.remoteUrl,initialMockViewContext:o.initialMockViewContext,modalOpenerConfig:o.modalOpenerConfig,modalContextConfig:o.modalContextConfig,doCheckWorkspace:o.oauthConfig&&r,doCheckResource:((n=o.oauthConfig)==null?void 0:n.doCheckResource)!==!1,children:e});return o.oauthConfig?s.jsx(we,{clientId:o.oauthConfig.clientId,codeTokenExchangeUrl:o.oauthConfig.codeTokenExchangeUrl,appName:t,oAuthScopes:o.oauthConfig.oAuthScopes,children:u}):u}else return s.jsx("div",{children:"Not configured for standalone mode."});else return s.jsx(tt,{appName:t,doCheckWorkspace:r,invokeRemoteImpl:c==null?void 0:c.invokeRemoteImpl,children:e})}const T=h.xcss({maxWidth:"max-content",paddingBlockStart:"space.1000"});function ot({checkResource:e,children:t}){const[r,c]=i.useState(!1),[o,n]=i.useState(null),[u,a]=i.useState(""),l=i.useCallback(async f=>{try{a("");const d=await e(f);d.hasChosen?c(!0):n(d.resources)}catch(d){d instanceof Error?a(`Error Occurred: ${d.message}`):a("Uncaught error occurred!")}},[e]);i.useEffect(()=>{l()},[l]);function p({selectedResource:f}){return l(f.value)}if(r)return t;if(o){const f=o.map(d=>({label:d.name,value:d.id}));return s.jsx(h.Flex,{justifyContent:"center",children:s.jsx(h.Box,{xcss:T,children:s.jsx(x,{onSubmit:p,children:({formProps:d,submitting:v})=>s.jsxs("form",{...d,children:[s.jsx(x.FormHeader,{title:"Choose Resource",children:u?s.jsx(F,{appearance:"error",children:u}):null}),s.jsx(x.FormSection,{children:s.jsx(x.Field,{"aria-required":!0,name:"selectedResource",label:"Resource",isRequired:!0,children:({fieldProps:m})=>s.jsx(H,{...m,options:f})})}),s.jsx(x.FormFooter,{align:"start",children:s.jsx(L.ButtonGroup,{label:"Form submit options",children:s.jsx(D,{type:"submit",appearance:"primary",isLoading:v,children:"Submit"})})})]})})})})}else return s.jsx(h.Flex,{justifyContent:"center",xcss:T,children:s.jsx(j,{label:"",loadingError:u})})}const U=i.createContext(void 0);function ve(){return i.useContext(U)}function nt(){const e=ve();function t(o){e({type:"add",id:o.id,props:o})}function r(o){e({type:"remove",id:o})}function c(o,n,u,a){t({id:o,isAutoDismiss:!1,type:"error",title:n,description:u instanceof Error?u.message:typeof u=="string"?u:"Uncaught error occurred!",actions:a})}return{addFlag:t,removeFlag:r,addErrorFlag:c}}function ct({children:e}){const[t,r]=i.useReducer(at,[]);function c(n){r({type:"remove",id:n})}function o(n){switch(n){case"info":return s.jsx(Pe,{label:"Info",primaryColor:A.token("color.icon.information"),size:"large"});case"warning":return s.jsx(Ee,{label:"Warning",primaryColor:A.token("color.icon.warning"),size:"large"});case"error":return s.jsx(ye,{label:"Error",primaryColor:A.token("color.icon.danger"),size:"large"});case"success":return s.jsx(Se,{primaryColor:A.token("color.icon.success"),label:"Success",size:"large"})}}return s.jsxs(U.Provider,{value:r,children:[e,s.jsx(P.FlagGroup,{onDismissed:c,children:t.map(n=>n.isAutoDismiss?s.jsx(P.AutoDismissFlag,{id:n.id,icon:o(n.type||"success"),title:n.title},n.id):s.jsx(P,{appearance:n.appearance||"normal",icon:o(n.type||"success"),id:n.id,title:n.title,description:n.description,actions:it(n.actions)},n.id))})]})}function it(e){return e==null?void 0:e.map(t=>({...t,content:t.text}))}function at(e,t){switch(t.type){case"add":if(t.props){const r=e.filter(c=>c.id!==t.id);return r.push(t.props),r}else return console.error("invalid flag action: ",JSON.stringify(t)),e;case"remove":return e.filter(r=>r.id!==t.id);default:throw Error("Unknown action: "+t.type)}}function ke(e,t,r){i.useEffect(()=>(window.addEventListener(e,t,r),()=>{window.removeEventListener(e,t,r)}),[e,t,r])}const ge=i.createContext({close:()=>{}});function Ce(){return i.useContext(ge)}function ut({children:e}){const[t,r]=i.useState(),c=he(),o=i.useCallback(()=>{c.close()},[c]);return ke("unload",o),i.useEffect(()=>{(async()=>{const n=await c.getContext();r(n.extension.modal)})()},[c]),s.jsx(ge.Provider,{value:{modalContextData:t,close:c.close},children:e})}const lt={"modal-content-iframe-wrapper":"_modal-content-iframe-wrapper_9wuab_1"};function dt({messageCallback:e,closeOnMouseOut:t}){const[r,c]=i.useState(),o=i.useRef(!1),n=i.useRef(!1),u=i.useRef(null),{modalContextData:a,close:l}=Ce(),p=i.useCallback(f=>{var d;if(f.source===((d=u.current)==null?void 0:d.contentWindow)&&e){const v=e(f.data,a);v.newHeight&&c(v.newHeight)}},[e,a]);return ke("message",p),i.useEffect(()=>{(async()=>a!=null&&a.height&&c(a.height))()},[a]),i.useEffect(()=>{(async()=>{var f;!n.current&&((f=u.current)!=null&&f.contentWindow)&&(u.current.contentWindow.focus(),n.current=!0)})()}),s.jsx("div",{className:lt["modal-content-iframe-wrapper"],children:s.jsx("iframe",{title:a==null?void 0:a.title,ref:u,width:a==null?void 0:a.width,height:r,src:a==null?void 0:a.link,onMouseEnter:()=>o.current=!0,onMouseOut:()=>{o.current&&t&&(l==null||l())}})})}class ht{constructor(t,r={}){this.defaultUrl=t,this.resourceMap=r}open(t){const r=t.resource&&this.resourceMap[t.resource]||this.defaultUrl,c=this.features(t.size||"small"),o=window.open(r,"_blank",c),n=u=>{var a,l;if(u.source===o&&(a=u.data)!=null&&a.closing){const p=u.data;window.removeEventListener("message",n),(l=t.onClose)==null||l.call(t,p.payload)}};return window.addEventListener("message",n),Promise.resolve()}features(t){switch(t){case"small":return"popup,width=400,height=320";case"medium":return"popup,width=600,height=520";case"large":return"popup,width=800,height=720";case"xlarge":return"popup,width=968,height=900";case"max":return""}}}const je=i.createContext(null),pt=()=>{const e=i.useContext(je);if(!e)throw new Error("useModalService must be used within a ModalServiceProvider");return e};function ft({children:e,modalService:t}){return s.jsx(je.Provider,{value:t,children:e})}class xt extends O{constructor(t,r="http://localhost:4200"){super(t),this.context=t,this.openerOrigin=r,this.close=c=>{var n;const o={closing:!0,payload:c};return(n=window.opener)==null||n.postMessage(o,this.openerOrigin),window.close(),Promise.resolve()}}}function wt({title:e,buttonGroup:t,children:r}){return s.jsxs(h.Flex,{direction:"column",xcss:h.xcss({height:"100%",padding:"space.300"}),children:[s.jsx(h.Box,{children:s.jsx(_,{size:"medium",children:e})}),s.jsx(h.Box,{paddingBlockStart:"space.200",xcss:h.xcss({flexGrow:2}),children:r}),s.jsx(h.Box,{paddingBlockStart:"space.200",children:s.jsx(h.Flex,{justifyContent:"end",alignItems:"center",children:t})})]})}function mt(e){return console.error(e),`Error Occurred: ${e.message||e}`}function vt(e,t=mt){const[r,c]=i.useState(),[o,n]=i.useState(!0),[u,a]=i.useState(),l=i.useCallback(async()=>{n(!0);try{const p=await e();return c(p),p}catch(p){a(t(p))}finally{n(!1)}},[e,t]);return i.useEffect(()=>{l()},[l]),{data:r,loading:o,error:u,setData:c,setLoading:n,setError:a,manualTrigger:()=>l()}}exports.AppFlagsDispatchContext=U;exports.AppFlagsProviderAtlasKit=ct;exports.AtlassianApp=st;exports.AtlassianAppTest=Ge;exports.AtlassianUserResourceService=$e;exports.AtlassianUserWorkspaceService=X;exports.BackendAdapterProvider=ce;exports.CommonResolverPaths=b;exports.FeatureChosenResourceCheck=ot;exports.FeatureChosenWorkspaceCheck=De;exports.FetchError=J;exports.HostRouterProvider=ae;exports.IS_STANDALONE=me;exports.JiraWorkspaceProvider=q;exports.MockViewContext=O;exports.ModalContent=ut;exports.ModalContentIframe=dt;exports.ModalDialogLayout=wt;exports.ModalServiceProvider=ft;exports.ModalViewContext=xt;exports.OAuthProvider=we;exports.PageLoadingView=j;exports.RemoteAdapterProvider=le;exports.RequestBitbucketProvider=Q;exports.RequestConfluenceProvider=ee;exports.RequestJiraProvider=se;exports.ViewContextProvider=pe;exports.WindowHostRouter=Je;exports.WindowModalService=ht;exports.addAuthHeader=S;exports.atlassianOAuthBitbucketFetch=Ue;exports.atlassianOAuthConfluenceFetch=Oe;exports.atlassianOAuthJiraFetch=qe;exports.atlassianOAuthRawFetch=y;exports.bearerAuthFetch=C;exports.bearerAuthFetchRaw=N;exports.defaultProps=Ke;exports.getAtlassianOAuthToken=We;exports.getAtlassianUserDetails=Be;exports.getOauthFetchInvokeImpl=_e;exports.jsonFetch=I;exports.oauthFetchInvokeRemote=ze;exports.route=G;exports.useAppFlagsDispatch=ve;exports.useAppFlagsDispatchMethods=nt;exports.useBackendAdapter=He;exports.useHostRouter=Ne;exports.useLoadDataEffect=vt;exports.useModalContentService=Ce;exports.useModalService=pt;exports.useOAuth=et;exports.useRemoteAdapter=Ve;exports.useRequestBitbucket=Me;exports.useRequestConfluence=Te;exports.useRequestJira=re;exports.useViewContext=he;exports.useWorkspaceId=Le;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),re=require("@atlaskit/button"),E=require("@atlaskit/button/new"),v=require("@atlaskit/form"),p=require("@atlaskit/primitives"),T=require("@atlaskit/section-message"),se=require("@atlaskit/select"),i=require("react"),L=require("@atlaskit/heading"),Ne=require("@atlaskit/spinner"),Ve=require("@atlaskit/app-provider"),g=require("react-router-dom"),B=require("@atlaskit/flag"),Ge=require("@atlaskit/icon/glyph/check-circle"),Ke=require("@atlaskit/icon/glyph/error"),Xe=require("@atlaskit/icon/glyph/info"),Ye=require("@atlaskit/icon/glyph/warning"),y=require("@atlaskit/tokens"),X=class X{};X.getOauthToken="get-token";let W=X;class ne{constructor(t){this.message=t}}function b(e,t){const r={Authorization:e.startsWith("Bearer ")?e:`Bearer ${e}`};return t?{...t,...r}:r}async function oe(e,t,r){const c=b(e,r.headers||{});return fetch(t,{...r,headers:c})}async function C(e,t,r,c,n="json",o={}){return D(t,r,b(e,o),c,n)}async function D(e,t,r,c,n="json"){const o={...r||{},Accept:n==="json"?"application/json":"text/html","Content-Type":n==="json"?"application/json":"text/html"},a=c?JSON.stringify(c):void 0,u=await fetch(e,{method:t,headers:o,body:a});if(u.ok)return t==="DELETE"||u.status===204?void 0:n==="text"?await u.text():await u.json();{let d="";try{d=await u.text()}catch{}const x=`${u.status} ${u.statusText} - ${t} ${e}
2
+ ${d}`;throw console.error(x),new ne(x)}}class ce{constructor(t){this.value_=t}set value(t){throw new Error("modification of a Route is not allowed")}get value(){return this.value_}}function Q(e){return e instanceof ce}const Qe=["..",".%2e","%2e.","%2e%2e",".%2E","%2E.","%2E%2e"],Ze=["/","\\"],ie=["?","#"];function I(e,t){return e.some(r=>t.includes(r))}function et(e,t){switch(t){case"path":if(Q(e))return e.value;if(e=String(e),I(Qe,e)||I(ie,e)||I(Ze,e))throw new Error("Disallowing path manipulation attempt. For more information see: https://go.atlassian.com/product-fetch-api-route");return e;case"query":return Q(e)?encodeURIComponent(e.value):e instanceof URLSearchParams?e.toString():encodeURIComponent(e)}}function ae(e,...t){let r="path",c="";for(let n=0;n<e.length;n++){const o=e[n];if(I(ie,o)&&(r="query"),c+=o,n>=t.length)break;c+=et(t[n],r)}return new ce(c)}function U(e,t){if(t){const r=e.startsWith("/")?e.slice(1):e;return`${t}/${r}`}else return e}function F(e,t,r){return{productType:r,fetch:({url:c,method:n,responseType:o="json",allowExperimental:a=!1},l)=>C(e,U(c.value,t),n,l,o,{"X-ExperimentalApi":a?"opt-in":""}),route:ae,rawFetch:(c,n)=>oe(e,U(c.value,t),n),fullUrl:c=>U(c,t)}}function ue(e,t){return F(e,`https://api.atlassian.com/ex/jira/${t}`,"jira")}function le(e,t){return F(e,`https://api.atlassian.com/ex/confluence/${t}`,"confluence")}function de(e){return F(e,"https://api.bitbucket.org","bitbucket")}async function tt(e){return C(e,"https://api.atlassian.com/me","GET")}async function rt(e,t,r,c,n){return D("https://auth.atlassian.com/oauth/token","POST",void 0,{grant_type:e,client_id:t,client_secret:r,code:c,redirect_uri:n})}class he extends Error{constructor(t){super(t)}}class pe{constructor(){this.userResourcesUrl="https://api.atlassian.com/oauth/token/accessible-resources"}async getAtlassianUserResources(t){return await C(t,this.userResourcesUrl,"GET")}async checkUserChosenResource(t,r){const n=(await this.getAtlassianUserResources(t)).filter((o,a,l)=>l.findIndex(u=>u.id===o.id)===a).map(o=>({name:o.name,id:o.id}));if(n.length>1){if(r){const o=n.find(a=>a.id===r);if(o)return{hasChosen:!0,resource:o}}return{hasChosen:!1,resources:n}}else{if(n.length===1)return{hasChosen:!0,resource:n[0]};throw new he("Provided token does not have permissions for any resources")}}}class xe{constructor(t){this.fetchSvc=t,this.workspaceApiUrl="/rest/servicedeskapi/assets/workspace"}async getAllUserWorkspaces(){const t=[];let r=!0;const c=50;let n=0;for(;r;){const o=await this.fetchSvc.fetch({url:this.fetchSvc.route`/rest/servicedeskapi/assets/workspace?start=${n}&limit=${c}`,method:"GET"});t.push(...o.values),n+=c,o.isLastPage&&(r=!1)}return t}async checkUserChosenWorkspace(t){const r=await this.getAllUserWorkspaces();if(r.length>1){if(t){const c=r.find(n=>n.workspaceId===t);if(c)return{hasChosen:!0,workspace:c.workspaceId}}return{hasChosen:!1,workspaces:r}}else{if(r.length===1)return{hasChosen:!0,workspace:r[0].workspaceId};throw new he("Provided token does not have permissions for any workspaces")}}}const fe=i.createContext(null),st=()=>{const e=i.useContext(fe);if(!e)throw new Error("useRequestBitbucket must be used within a RequestBitbucketProvider");return e};function M({children:e,requestBitbucketImplementation:t}){return s.jsx(fe.Provider,{value:t,children:e})}const we=i.createContext(null),nt=()=>{const e=i.useContext(we);if(!e)throw new Error("useRequestConfluence must be used within a RequestConfluenceProvider");return e};function H({children:e,requestConfluenceImplementation:t}){return s.jsx(we.Provider,{value:t,children:e})}const me=i.createContext(null),ve=()=>{const e=i.useContext(me);if(!e)throw new Error("useRequestJira must be used within a RequestJiraProvider");return e};function _({children:e,requestJiraImplementation:t}){return s.jsx(me.Provider,{value:t,children:e})}function A({label:e,loadingError:t,labelSize:r}){return s.jsxs(p.Flex,{direction:"column",children:[s.jsx(L,{size:r||"large",children:e}),t?s.jsx(T,{appearance:"error",children:t}):s.jsx(Ne,{interactionName:"load"})]})}const ke=i.createContext(void 0),ot=()=>i.useContext(ke);function J({children:e,workspaceId:t}){return s.jsx(ke.Provider,{value:t,children:e})}const Z=p.xcss({maxWidth:"max-content",paddingBlockStart:"space.1000"});function ge({appName:e,children:t}){const[r,c]=i.useState(!1),[n,o]=i.useState(null),[a,l]=i.useState(""),[u,d]=i.useState(),x=ve(),h=i.useCallback(async f=>{try{l("");const m=f??(e&&localStorage.getItem(`${e}-user-workspace-id`))??"",k=await new xe(x).checkUserChosenWorkspace(m);k.hasChosen?(e&&localStorage.setItem(`${e}-user-workspace-id`,k.workspace),c(!0),d(k.workspace)):o(k.workspaces)}catch(m){m instanceof Error?l(`Error Occurred: ${m.message}`):l("Uncaught error occurred!")}},[e,x]);i.useEffect(()=>{h()},[h]);async function j({selectedWorkspace:f}){return h(f.value)}if(r)return s.jsx(J,{workspaceId:u,children:t});if(n){const f=n.map(m=>({label:m.workspaceId,value:m.workspaceId}));return s.jsx(p.Flex,{justifyContent:"center",children:s.jsx(p.Box,{xcss:Z,children:s.jsx(v,{onSubmit:j,children:({formProps:m,submitting:k})=>s.jsxs("form",{...m,children:[s.jsx(v.FormHeader,{title:"Choose Workspace",children:a?s.jsx(T,{appearance:"error",children:a}):null}),s.jsx(v.FormSection,{children:s.jsx(v.Field,{"aria-required":!0,name:"selectedWorkspace",label:"Workspace",isRequired:!0,children:({fieldProps:q})=>s.jsx("div",{"data-testid":"workspace-select-component",children:s.jsx(se,{...q,options:f})})})}),s.jsx(v.FormFooter,{align:"start",children:s.jsx(re.ButtonGroup,{label:"Form submit options",children:s.jsx(E,{type:"submit",appearance:"primary",isLoading:k,children:"Submit"})})})]})})})})}else return s.jsx(p.Flex,{justifyContent:"center",xcss:Z,children:s.jsx(A,{label:"",loadingError:a})})}const je=i.createContext(null),ct=()=>{const e=i.useContext(je);if(!e)throw new Error("useBackendAdapter must be used within a BackendAdapterProvider");return e};function z({children:e,invokeImplementation:t}){return s.jsx(je.Provider,{value:{invoke:t},children:e})}function Ce(e,t,r){return async(c,n)=>C(t,e+c,"POST",{...n},"json",{"resource-id":r})}class Ae{navigate(t){return window.location.href=t,Promise.resolve()}open(t){return window.open(t,"_blank"),Promise.resolve()}reload(){return window.location.reload(),Promise.resolve()}}const Re=i.createContext(null),Se=()=>{const e=i.useContext(Re);if(!e)throw new Error("useHostRouter must be used within a HostRouterProvider");return e};function N({children:e,hostRouter:t}){return s.jsx(Re.Provider,{value:t,children:e})}function it({url:e,action:t,label:r,linkStyle:c,buttonIcon:n,buttonAppearance:o}){const a=Se(),l=i.useCallback(u=>{u.preventDefault(),t==="open"?a.open(e):a.navigate(e)},[t,a,e]);return c==="link"?s.jsx("a",{href:e,target:"_blank",rel:"noreferrer",onClick:l,children:r}):n?s.jsx(E.IconButton,{icon:n,label:r,appearance:o||"subtle",onClick:l}):s.jsx(E,{appearance:o||"subtle",onClick:l,children:r})}const ye=i.createContext(null),at=()=>{const e=i.useContext(ye);if(!e)throw new Error("useRemoteAdapter must be used within a RemoteAdapterProvider");return e};function V({children:e,invokeRemoteImplementation:t}){return s.jsx(ye.Provider,{value:{invokeRemote:t},children:e})}function Ie(e,t){return async r=>{const c=`${e}${r.path}`,n=await fetch(c,{method:r.method,headers:t?b(t,r.headers||{}):r.headers,body:r.body?JSON.stringify(r.body):void 0}),o={};return n.headers.forEach((l,u)=>{o[u]=l}),{body:await n.json(),headers:o,status:n.status}}}const Ee=i.createContext(null),be=()=>{const e=i.useContext(Ee);if(!e)throw new Error("useViewContext must be used within a ViewContextProvider");return e};function G({children:e,viewContext:t}){return s.jsx(Ee.Provider,{value:t,children:e})}class P{constructor(t){this.context=t,this.theme={enable(){return Promise.resolve()}}}close(t){return Promise.resolve()}submit(t){return Promise.resolve()}getContext(){return Promise.resolve(this.context)}createHistory(){throw new Error("Method not implemented.")}refresh(){return Promise.resolve()}}function ut({mockContext:e,invoke:t,invokeRemote:r,jiraFetchService:c,confluenceFetchService:n,bitbucketFetchService:o,hostRouter:a,children:l}){let u=s.jsx(J,{workspaceId:"test-workspace",children:s.jsx(z,{invokeImplementation:t,children:s.jsx(V,{invokeRemoteImplementation:r,children:s.jsx(N,{hostRouter:a,children:s.jsx(G,{viewContext:new P(e),children:l})})})})});return c&&(u=s.jsx(_,{requestJiraImplementation:c,children:u})),n&&(u=s.jsx(H,{requestConfluenceImplementation:n,children:u})),o&&(u=s.jsx(M,{requestBitbucketImplementation:o,children:u})),u}function lt(e){return{mockContext:{accountId:"testAccount",cloudId:"testSite",workspaceId:"testWorkspace",siteUrl:"https://expiumdev.atlassian.net",extension:{type:"jira:globalPage"},timezone:"America/Chicago",locale:"en-US",localId:"devId",moduleKey:"TestApp",environmentId:"TEST",environmentType:"DEVELOPMENT"},invoke:e(),invokeRemote:e(),hostRouter:{navigate:e(),open:e(),reload:e()}}}function dt(e){const r=new URLSearchParams(window.location.search).get("code");return i.useEffect(()=>{r&&(async()=>{const c=await fetch(e.codeTokenExchangeUrl,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({code:r,redirect_uri:e.redirectUri})});if(c.ok){const n=await c.json(),o=Date.now()+n.expires_in*1e3;e.setAuth({token:n.access_token,expiresAt:o})}})()}),s.jsx(A,{label:"Fetching auth token with provided code"})}function Fe(e,t,r){const c=new URLSearchParams({audience:"api.atlassian.com",client_id:e,scope:r.join(" "),redirect_uri:t,state:ht(),response_type:"code",prompt:"consent"}).toString();window.location.href=`https://auth.atlassian.com/authorize?${c}`}function ht(){return Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}function pt(e){return Fe(e.clientId,e.redirectUri,e.oAuthScopes),s.jsx(A,{label:"Redirecting to Atlassian Authentication System"})}const xt=p.xcss({paddingBlockStart:"space.1000"}),Pe=i.createContext(null),qe=()=>{const e=i.useContext(Pe);return e||(console.warn("No OAuth provider"),{getAuthToken:()=>""})};function Oe({children:e,...t}){const[r,c]=i.useState(localStorage.getItem(`${t.appName}-auth-token`)),n=localStorage.getItem(`${t.appName}-auth-expires-at`),[o,a]=i.useState(n?Number(n):null),l=window.location.protocol+"//"+window.location.hostname+(window.location.port?`:${window.location.port}`:""),u=l+"/callback";function d(){return o&&r&&!ee(o)?r:(Fe(t.clientId,u,t.oAuthScopes),"")}function x(h){c(h.token),localStorage.setItem(`${t.appName}-auth-token`,h.token),a(h.expiresAt),localStorage.setItem(`${t.appName}-auth-expires-at`,h.expiresAt.toString()),localStorage.removeItem(`${t.appName}-user-resource-id`),localStorage.removeItem(`${t.appName}-user-workspace-id`),window.location.href=l}return!r||!o||ee(o)?s.jsx(p.Flex,{justifyContent:"center",xcss:xt,children:s.jsx(g.BrowserRouter,{children:s.jsxs(g.Routes,{children:[s.jsx(g.Route,{path:"/",element:s.jsx(pt,{clientId:t.clientId,redirectUri:u,oAuthScopes:t.oAuthScopes})}),s.jsx(g.Route,{path:"/callback",element:s.jsx(dt,{setAuth:x,redirectUri:u,codeTokenExchangeUrl:t.codeTokenExchangeUrl})}),s.jsx(g.Route,{path:"/*",element:s.jsx(g.Navigate,{to:"/",replace:!0})})]})})}):s.jsx(Pe.Provider,{value:{getAuthToken:d},children:e})}function ee(e){return e<Date.now()}const K=i.createContext(void 0);function Be(){return i.useContext(K)}function ft(){const e=Be();function t(n){e({type:"add",id:n.id,props:n})}function r(n){e({type:"remove",id:n})}function c(n,o,a,l){t({id:n,isAutoDismiss:!1,type:"error",title:o,description:a instanceof Error?a.message:typeof a=="string"?a:"Uncaught error occurred!",actions:l})}return{addFlag:t,removeFlag:r,addErrorFlag:c}}function Ue({children:e}){const[t,r]=i.useReducer(mt,[]);function c(o){r({type:"remove",id:o})}function n(o){switch(o){case"info":return s.jsx(Xe,{label:"Info",primaryColor:y.token("color.icon.information"),size:"large"});case"warning":return s.jsx(Ye,{label:"Warning",primaryColor:y.token("color.icon.warning"),size:"large"});case"error":return s.jsx(Ke,{label:"Error",primaryColor:y.token("color.icon.danger"),size:"large"});case"success":return s.jsx(Ge,{primaryColor:y.token("color.icon.success"),label:"Success",size:"large"})}}return s.jsxs(K.Provider,{value:r,children:[e,s.jsx(B.FlagGroup,{onDismissed:c,children:t.map(o=>o.isAutoDismiss?s.jsx(B.AutoDismissFlag,{id:o.id,icon:n(o.type||"success"),title:o.title},o.id):s.jsx(B,{appearance:o.appearance||"normal",icon:n(o.type||"success"),id:o.id,title:o.title,description:o.description,actions:wt(o.actions)},o.id))})]})}function wt(e){return e==null?void 0:e.map(t=>({...t,content:t.text}))}function mt(e,t){switch(t.type){case"add":if(t.props){const r=e.filter(c=>c.id!==t.id);return r.push(t.props),r}else return console.error("invalid flag action: ",JSON.stringify(t)),e;case"remove":return e.filter(r=>r.id!==t.id);default:throw Error("Unknown action: "+t.type)}}function We(e,t,r){i.useEffect(()=>(window.addEventListener(e,t,r),()=>{window.removeEventListener(e,t,r)}),[e,t,r])}const $e=i.createContext({close:()=>{}});function Te(){return i.useContext($e)}function vt({children:e}){const[t,r]=i.useState(),c=be(),n=i.useCallback(()=>{c.close()},[c]);return We("unload",n),i.useEffect(()=>{(async()=>{const o=await c.getContext();r(o.extension.modal)})()},[c]),s.jsx($e.Provider,{value:{modalContextData:t,close:c.close},children:e})}const kt={"iframe-wrapper":"_iframe-wrapper_c8hdk_1"};function gt({iframeProps:e,messageCallback:t,onMouseOut:r}){const[c,n]=i.useState(),o=i.useRef(!1),a=i.useRef(!1),l=i.useRef(null),u=i.useCallback(d=>{var x;d.source===((x=l.current)==null?void 0:x.contentWindow)&&t&&t(d.data)},[t]);return We("message",u),i.useEffect(()=>{(async()=>e!=null&&e.height&&n(e.height))()},[e]),i.useEffect(()=>{(async()=>{var d;!a.current&&((d=l.current)!=null&&d.contentWindow)&&(l.current.contentWindow.focus(),a.current=!0)})()}),s.jsx("div",{className:kt["iframe-wrapper"],children:s.jsx("iframe",{title:e==null?void 0:e.title,ref:l,width:e==null?void 0:e.width,height:c,src:e==null?void 0:e.link,onMouseEnter:()=>o.current=!0,onMouseOut:()=>{o.current&&r&&r()}})})}function jt({messageCallback:e,closeOnMouseOut:t}){const{modalContextData:r,close:c}=Te(),[n,o]=i.useState();i.useEffect(()=>{r&&o({...r.iframeProps})},[r]);const a=i.useCallback(u=>{if(e&&n){const d=e(u.data,r==null?void 0:r.iframeProps);d.newHeight&&o({...n,height:d.newHeight})}},[n,e,r]);if(!n)return s.jsx("div",{});const l=s.jsx(gt,{messageCallback:a,iframeProps:n,onMouseOut:()=>{t&&(c==null||c())}});return r!=null&&r.modalHeader?s.jsxs(p.Flex,{gap:"space.200",direction:"column",children:[s.jsx(p.Box,{paddingInline:"space.200",children:s.jsx(L,{size:"medium",children:r.modalHeader})}),l]}):l}class Le{constructor(t,r={}){this.defaultUrl=t,this.resourceMap=r}open(t){const r=t.resource&&this.resourceMap[t.resource]||this.defaultUrl,c=this.features(t.size||"small"),n=window.open(r,"_blank",c),o=a=>{var l,u;if(a.source===n&&(l=a.data)!=null&&l.closing){const d=a.data;window.removeEventListener("message",o),(u=t.onClose)==null||u.call(t,d.payload)}};return window.addEventListener("message",o),Promise.resolve()}features(t){switch(t){case"small":return"popup,width=400,height=320";case"medium":return"popup,width=600,height=520";case"large":return"popup,width=800,height=720";case"xlarge":return"popup,width=968,height=900";case"max":return""}}}const De=i.createContext(null),Ct=()=>{const e=i.useContext(De);if(!e)throw new Error("useModalService must be used within a ModalServiceProvider");return e};function Me({children:e,modalService:t}){return s.jsx(De.Provider,{value:t,children:e})}class He extends P{constructor(t,r="http://localhost:4200"){super(t),this.context=t,this.openerOrigin=r,this.close=c=>{var o;const n={closing:!0,payload:c};return(o=window.opener)==null||o.postMessage(n,this.openerOrigin),window.close(),Promise.resolve()}}}function At({title:e,buttonGroup:t,children:r}){return s.jsxs(p.Flex,{direction:"column",xcss:p.xcss({height:"100%",padding:"space.300"}),children:[e&&s.jsx(p.Box,{paddingBlockEnd:"space.200",children:s.jsx(L,{size:"medium",children:e})}),s.jsx(p.Box,{xcss:p.xcss({flexGrow:2}),children:r}),t&&s.jsx(p.Box,{paddingBlockStart:"space.200",children:s.jsx(p.Flex,{justifyContent:"end",alignItems:"center",children:t})})]})}const Rt=i.lazy(()=>Promise.resolve().then(()=>require("./index-BePJjrLy.js")));function $({initialMockViewContext:e,backendUrl:t,remoteUrl:r,doCheckWorkspace:c,appName:n,doCheckResource:o,modalOpenerConfig:a,modalContextConfig:l,children:u}){const[d,x]=i.useState(),[h,j]=i.useState(),{getAuthToken:f}=qe(),m=i.useCallback(()=>ue(f(),d??""),[f,d]),k=i.useCallback(()=>le(f(),d??""),[f,d]),q=i.useCallback(()=>de(f()),[f]),Je=i.useCallback(async R=>{if(t&&o){const O=R??localStorage.getItem(`${n}-user-resource-id`)??"",S=await new pe().checkUserChosenResource(f(),O);return S.hasChosen&&(localStorage.setItem(`${n}-user-resource-id`,S.resource.id),x(S.resource.id)),S}else return{hasChosen:!0}},[t,f,n,o]);i.useEffect(()=>{const R=d??(e==null?void 0:e.cloudId)??"";if(!h||h.cloudId!==R){const O={...h||e,cloudId:R};j(O)}},[e,d,h]);const ze=i.useCallback(()=>t?Ce(t,f(),d??""):void 0,[d,f,t]);let w=u;c&&(w=s.jsx(ge,{appName:n,children:w})),a&&(w=s.jsx(Me,{modalService:new Le(a.defaultUrl,a.resourceMap),children:w})),h&&(w=s.jsx(G,{viewContext:l?new He(h,l.openerOrigin):new P(h),children:w})),w=s.jsx(N,{hostRouter:new Ae,children:s.jsx(M,{requestBitbucketImplementation:q(),children:s.jsx(H,{requestConfluenceImplementation:k(),children:s.jsx(_,{requestJiraImplementation:m(),children:w})})})});const Y=ze();return Y&&(w=s.jsx(z,{invokeImplementation:Y,children:w})),r&&(w=s.jsx(V,{invokeRemoteImplementation:Ie(r),children:w})),o&&(w=s.jsx(Rt,{checkResource:Je,children:w})),s.jsx(Ve,{children:s.jsx(Ue,{children:w})})}const St=Object.freeze(Object.defineProperty({__proto__:null,AtlassianAppStandalone:$,default:$},Symbol.toStringTag,{value:"Module"})),yt=i.lazy(()=>Promise.resolve().then(()=>require("./atlassian-app-forge-BwFXF-6M.js"))),It=i.lazy(()=>Promise.resolve().then(()=>St)),_e=window.self===window.top;function Et({children:e,appName:t,doCheckWorkspace:r,embeddedConfig:c,standaloneConfig:n}){var o;if(_e)if(n){const a=s.jsx(It,{appName:t,backendUrl:n.backendUrl,remoteUrl:n.remoteUrl,initialMockViewContext:n.initialMockViewContext,modalOpenerConfig:n.modalOpenerConfig,modalContextConfig:n.modalContextConfig,doCheckWorkspace:n.oauthConfig&&r,doCheckResource:((o=n.oauthConfig)==null?void 0:o.doCheckResource)!==!1,children:e});return n.oauthConfig?s.jsx(Oe,{clientId:n.oauthConfig.clientId,codeTokenExchangeUrl:n.oauthConfig.codeTokenExchangeUrl,appName:t,oAuthScopes:n.oauthConfig.oAuthScopes,children:a}):a}else return s.jsx("div",{children:"Not configured for standalone mode."});else return s.jsx(yt,{appName:t,doCheckWorkspace:r,invokeRemoteImpl:c==null?void 0:c.invokeRemoteImpl,children:e})}const te=p.xcss({maxWidth:"max-content",paddingBlockStart:"space.1000"});function bt({checkResource:e,children:t}){const[r,c]=i.useState(!1),[n,o]=i.useState(null),[a,l]=i.useState(""),u=i.useCallback(async x=>{try{l("");const h=await e(x);h.hasChosen?c(!0):o(h.resources)}catch(h){h instanceof Error?l(`Error Occurred: ${h.message}`):l("Uncaught error occurred!")}},[e]);i.useEffect(()=>{u()},[u]);function d({selectedResource:x}){return u(x.value)}if(r)return t;if(n){const x=n.map(h=>({label:h.name,value:h.id}));return s.jsx(p.Flex,{justifyContent:"center",children:s.jsx(p.Box,{xcss:te,children:s.jsx(v,{onSubmit:d,children:({formProps:h,submitting:j})=>s.jsxs("form",{...h,children:[s.jsx(v.FormHeader,{title:"Choose Resource",children:a?s.jsx(T,{appearance:"error",children:a}):null}),s.jsx(v.FormSection,{children:s.jsx(v.Field,{"aria-required":!0,name:"selectedResource",label:"Resource",isRequired:!0,children:({fieldProps:f})=>s.jsx(se,{...f,options:x})})}),s.jsx(v.FormFooter,{align:"start",children:s.jsx(re.ButtonGroup,{label:"Form submit options",children:s.jsx(E,{type:"submit",appearance:"primary",isLoading:j,children:"Submit"})})})]})})})})}else return s.jsx(p.Flex,{justifyContent:"center",xcss:te,children:s.jsx(A,{label:"",loadingError:a})})}function Ft(e){return console.error(e),`Error Occurred: ${e.message||e}`}function Pt(e,t=Ft){const[r,c]=i.useState(),[n,o]=i.useState(!0),[a,l]=i.useState(),u=i.useCallback(async()=>{o(!0);try{const d=await e();return c(d),d}catch(d){l(t(d))}finally{o(!1)}},[e,t]);return i.useEffect(()=>{u()},[u]),{data:r,loading:n,error:a,setData:c,setLoading:o,setError:l,manualTrigger:()=>u()}}exports.AppFlagsDispatchContext=K;exports.AppFlagsProviderAtlasKit=Ue;exports.AtlassianApp=Et;exports.AtlassianAppStandalone=$;exports.AtlassianAppTest=ut;exports.AtlassianUserResourceService=pe;exports.AtlassianUserWorkspaceService=xe;exports.BackendAdapterProvider=z;exports.CommonResolverPaths=W;exports.FeatureChosenResourceCheck=bt;exports.FeatureChosenWorkspaceCheck=ge;exports.FetchError=ne;exports.HostRouterLink=it;exports.HostRouterProvider=N;exports.IS_STANDALONE=_e;exports.JiraWorkspaceProvider=J;exports.MockViewContext=P;exports.ModalContent=vt;exports.ModalContentIframe=jt;exports.ModalDialogLayout=At;exports.ModalServiceProvider=Me;exports.ModalViewContext=He;exports.OAuthProvider=Oe;exports.PageLoadingView=A;exports.RemoteAdapterProvider=V;exports.RequestBitbucketProvider=M;exports.RequestConfluenceProvider=H;exports.RequestJiraProvider=_;exports.ViewContextProvider=G;exports.WindowHostRouter=Ae;exports.WindowModalService=Le;exports.addAuthHeader=b;exports.atlassianOAuthBitbucketFetch=de;exports.atlassianOAuthConfluenceFetch=le;exports.atlassianOAuthJiraFetch=ue;exports.atlassianOAuthRawFetch=F;exports.bearerAuthFetch=C;exports.bearerAuthFetchRaw=oe;exports.defaultProps=lt;exports.getAtlassianOAuthToken=rt;exports.getAtlassianUserDetails=tt;exports.getOauthFetchInvokeImpl=Ce;exports.jsonFetch=D;exports.oauthFetchInvokeRemote=Ie;exports.route=ae;exports.useAppFlagsDispatch=Be;exports.useAppFlagsDispatchMethods=ft;exports.useBackendAdapter=ct;exports.useHostRouter=Se;exports.useLoadDataEffect=Pt;exports.useModalContentService=Te;exports.useModalService=Ct;exports.useOAuth=qe;exports.useRemoteAdapter=at;exports.useRequestBitbucket=st;exports.useRequestConfluence=nt;exports.useRequestJira=ve;exports.useViewContext=be;exports.useWorkspaceId=ot;