@valiantys/atlassian-app-frontend 3.0.0-alpha-22 → 3.0.0-alpha-25

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.
Files changed (24) hide show
  1. package/atlassian/jira/shared/data-access-project/src/lib/jira-project-service/index.cjs.js +1 -1
  2. package/atlassian/jira/shared/data-access-project/src/lib/jira-project-service/index.es.js +18 -5
  3. package/atlassian/shared/frontend-ui-iframe/src/lib/iframe-wrapper/index.cjs.js +1 -1
  4. package/atlassian/shared/frontend-ui-iframe/src/lib/iframe-wrapper/index.es.js +15 -14
  5. package/atlassian/shared/frontend-ui-remote-adapter/src/lib/oauth-fetch-invoke-remote/index.cjs.js +1 -1
  6. package/atlassian/shared/frontend-ui-remote-adapter/src/lib/oauth-fetch-invoke-remote/index.es.js +7 -15
  7. package/atlassian-app/index.d.ts +2 -8
  8. package/atlassian-app-custom-ui/index.d.ts +2 -8
  9. package/atlassian-app-test/index.d.ts +2 -8
  10. package/data-access-project/atlassian-app-frontend-data-access-project.api.json +63 -1
  11. package/data-access-project/atlassian-app-frontend.api.md +3 -1
  12. package/data-access-project/index.d.ts +4 -0
  13. package/package.json +2 -2
  14. package/shared/util-fetch/src/lib/shared-util-fetch/index.cjs.js +2 -2
  15. package/shared/util-fetch/src/lib/shared-util-fetch/index.es.js +34 -27
  16. package/ui-iframe/atlassian-app-frontend-ui-iframe.api.json +1 -1
  17. package/ui-iframe/atlassian-app-frontend.api.md +0 -1
  18. package/ui-iframe/index.d.ts +1 -0
  19. package/ui-remote-adapter/atlassian-app-frontend-ui-remote-adapter.api.json +4 -121
  20. package/ui-remote-adapter/atlassian-app-frontend.api.md +2 -12
  21. package/ui-remote-adapter/index.d.ts +2 -8
  22. package/util-atlassian-product-fetch/atlassian-app-frontend-util-atlassian-product-fetch.api.json +87 -5
  23. package/util-atlassian-product-fetch/atlassian-app-frontend.api.md +9 -1
  24. package/util-atlassian-product-fetch/index.d.ts +6 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../../../../../shared/util-fetch/src/lib/shared-util-fetch/index.cjs.js"),s=class s{constructor(t){this.fetchSvc=t}getVersions(t){return this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project/${t}/versions`})}getProject(t){return this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project/${t}`})}async getAllProjects(){return await this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project`})||[]}async projectSearchByIds(t){var e;if(t.length>50)throw new Error("Too many project ids, max allowed is 50.");const r=this.fetchSvc.route`/rest/api/3/project/search?${t.map(h=>"id="+h).join("&")}`;return(e=await this.fetchSvc.fetch({method:"GET",url:r}))==null?void 0:e.values}async getProjectIssueTypes(t){return await this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/issuetype/project?projectId=${t}`})||[]}getProjectStatuses(t){return this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project/${t}/statuses`})}async getProjectProperty(t,r){try{return(await this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project/${t}/properties/${r}`})).value}catch(e){if(e instanceof o.FetchError&&e.statusCode===404)return;throw e}}setProjectProperty(t,r,e){return this.fetchSvc.fetch({method:"PUT",url:this.fetchSvc.route`/rest/api/3/project/${t}/properties/${r}`},e)}};s.projectUrl="/rest/api/3/project";let c=s;exports.JiraProjectService=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../../../../../shared/util-fetch/src/lib/shared-util-fetch/index.cjs.js"),h=class h{constructor(t){this.fetchSvc=t}getVersions(t){return this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project/${t}/versions`})}getProject(t){return this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project/${t}`})}async getAllProjects(){return await this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project`})||[]}async projectSearchByIds(t){var e;if(t.length>50)throw new Error("Too many project ids, max allowed is 50.");const r=this.fetchSvc.route`/rest/api/3/project/search?${t.map(c=>"id="+c).join("&")}`;return(e=await this.fetchSvc.fetch({method:"GET",url:r}))==null?void 0:e.values}async projectSearchByKeys(t){var e;if(t.length>50)throw new Error("Too many project keys, max allowed is 50.");const r=this.fetchSvc.route`/rest/api/3/project/search?${t.map(c=>"key="+c).join("&")}`;return(e=await this.fetchSvc.fetch({method:"GET",url:r}))==null?void 0:e.values}async getProjectIssueTypes(t){return await this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/issuetype/project?projectId=${t}`})||[]}getProjectStatuses(t){return this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project/${t}/statuses`})}async getProjectProperty(t,r){try{return(await this.fetchSvc.fetch({method:"GET",url:this.fetchSvc.route`/rest/api/3/project/${t}/properties/${r}`})).value}catch(e){if(e instanceof o.FetchError&&e.statusCode===404)return;throw e}}setProjectProperty(t,r,e){return this.fetchSvc.fetch({method:"PUT",url:this.fetchSvc.route`/rest/api/3/project/${t}/properties/${r}`},e)}};h.projectUrl="/rest/api/3/project";let s=h;exports.JiraProjectService=s;
@@ -1,5 +1,5 @@
1
1
  import { FetchError as o } from "../../../../../../../shared/util-fetch/src/lib/shared-util-fetch/index.es.js";
2
- const c = class c {
2
+ const s = class s {
3
3
  constructor(t) {
4
4
  this.fetchSvc = t;
5
5
  }
@@ -15,6 +15,9 @@ const c = class c {
15
15
  url: this.fetchSvc.route`/rest/api/3/project/${t}`
16
16
  });
17
17
  }
18
+ /**
19
+ * @deprecated Use projectSearchByIds instead.
20
+ */
18
21
  async getAllProjects() {
19
22
  return await this.fetchSvc.fetch({
20
23
  method: "GET",
@@ -25,7 +28,17 @@ const c = class c {
25
28
  var e;
26
29
  if (t.length > 50)
27
30
  throw new Error("Too many project ids, max allowed is 50.");
28
- const r = this.fetchSvc.route`/rest/api/3/project/search?${t.map((h) => "id=" + h).join("&")}`;
31
+ const r = this.fetchSvc.route`/rest/api/3/project/search?${t.map((c) => "id=" + c).join("&")}`;
32
+ return (e = await this.fetchSvc.fetch({
33
+ method: "GET",
34
+ url: r
35
+ })) == null ? void 0 : e.values;
36
+ }
37
+ async projectSearchByKeys(t) {
38
+ var e;
39
+ if (t.length > 50)
40
+ throw new Error("Too many project keys, max allowed is 50.");
41
+ const r = this.fetchSvc.route`/rest/api/3/project/search?${t.map((c) => "key=" + c).join("&")}`;
29
42
  return (e = await this.fetchSvc.fetch({
30
43
  method: "GET",
31
44
  url: r
@@ -65,8 +78,8 @@ const c = class c {
65
78
  );
66
79
  }
67
80
  };
68
- c.projectUrl = "/rest/api/3/project";
69
- let s = c;
81
+ s.projectUrl = "/rest/api/3/project";
82
+ let h = s;
70
83
  export {
71
- s as JiraProjectService
84
+ h as JiraProjectService
72
85
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),n=require("react"),g=require("../../../../../../shared/frontend-ui-window-listener-hook/src/lib/window-listener-hook/index.cjs.js"),f=require("../iframe-wrapper.module.scss/index.cjs.js"),R=n.forwardRef(({iframeProps:e,messageCallback:o,onMouseOut:i},l)=>{const[h,w]=n.useState(),d=n.useRef(!1),r=n.useRef(!1),u=n.useRef(null);n.useImperativeHandle(l,()=>({reloadContentWindow:()=>{var t,c;return(c=(t=u.current)==null?void 0:t.contentWindow)==null?void 0:c.location.reload()},focusContentWindow:()=>{var t,c;return(c=(t=u.current)==null?void 0:t.contentWindow)==null?void 0:c.focus()}}));const W=n.useCallback(t=>{var c;t.source===((c=u.current)==null?void 0:c.contentWindow)&&o&&o(t.data)},[o]);return g.useWindowListener("message",W),n.useEffect(()=>{(async()=>e!=null&&e.height&&(console.log("IframeWrapper: Setting height to",e.height),w(e.height)))()},[e]),n.useEffect(()=>{(async()=>{var t;!r.current&&((t=u.current)!=null&&t.contentWindow)&&(u.current.contentWindow.focus(),r.current=!0)})()}),s.jsx("div",{className:f["iframe-wrapper"],children:s.jsx("iframe",{title:e==null?void 0:e.title,ref:u,width:e==null?void 0:e.width,height:h,src:e==null?void 0:e.link,onMouseEnter:()=>d.current=!0,onMouseOut:()=>{d.current&&i&&i()}})})});exports.IframeWrapper=R;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),n=require("react"),g=require("../../../../../../shared/frontend-ui-window-listener-hook/src/lib/window-listener-hook/index.cjs.js"),f=require("../iframe-wrapper.module.scss/index.cjs.js"),l=n.forwardRef(({iframeProps:e,messageCallback:o,onMouseOut:i},h)=>{const[w,W]=n.useState(),d=n.useRef(!1),r=n.useRef(!1),u=n.useRef(null);n.useImperativeHandle(h,()=>({reloadContentWindow:()=>{var t,c;return(c=(t=u.current)==null?void 0:t.contentWindow)==null?void 0:c.location.reload()},focusContentWindow:()=>{var t,c;return(c=(t=u.current)==null?void 0:t.contentWindow)==null?void 0:c.focus()}}));const a=n.useCallback(t=>{var c;t.source===((c=u.current)==null?void 0:c.contentWindow)&&o&&o(t.data)},[o]);return g.useWindowListener("message",a),n.useEffect(()=>{(async()=>e!=null&&e.height&&(console.log("IframeWrapper: Setting height to",e.height),W(e.height)))()},[e]),n.useEffect(()=>{(async()=>{var t;!r.current&&((t=u.current)!=null&&t.contentWindow)&&(u.current.contentWindow.focus(),r.current=!0)})()}),s.jsx("div",{className:f["iframe-wrapper"],children:s.jsx("iframe",{title:e==null?void 0:e.title,ref:u,width:e==null?void 0:e.width,height:w,src:e==null?void 0:e.link,onMouseEnter:()=>d.current=!0,onMouseOut:()=>{d.current&&i&&i()}})})});l.displayName="IframeWrapper";exports.IframeWrapper=l;
@@ -1,11 +1,11 @@
1
- import { jsx as l } from "react/jsx-runtime";
2
- import { forwardRef as f, useState as I, useRef as o, useImperativeHandle as R, useCallback as y, useEffect as w } from "react";
3
- import { useWindowListener as x } from "../../../../../../shared/frontend-ui-window-listener-hook/src/lib/window-listener-hook/index.es.js";
4
- import E from "../iframe-wrapper.module.scss/index.es.js";
5
- const v = f(
1
+ import { jsx as h } from "react/jsx-runtime";
2
+ import { forwardRef as f, useState as I, useRef as o, useImperativeHandle as y, useCallback as R, useEffect as r } from "react";
3
+ import { useWindowListener as a } from "../../../../../../shared/frontend-ui-window-listener-hook/src/lib/window-listener-hook/index.es.js";
4
+ import x from "../iframe-wrapper.module.scss/index.es.js";
5
+ const E = f(
6
6
  ({ iframeProps: t, messageCallback: u, onMouseOut: d }, s) => {
7
- const [r, W] = I(), i = o(!1), h = o(!1), c = o(null);
8
- R(
7
+ const [w, W] = I(), i = o(!1), l = o(!1), c = o(null);
8
+ y(
9
9
  s,
10
10
  () => ({
11
11
  reloadContentWindow: () => {
@@ -18,27 +18,27 @@ const v = f(
18
18
  }
19
19
  })
20
20
  );
21
- const g = y(
21
+ const g = R(
22
22
  (n) => {
23
23
  var e;
24
24
  n.source === ((e = c.current) == null ? void 0 : e.contentWindow) && u && u(n.data);
25
25
  },
26
26
  [u]
27
27
  );
28
- return x("message", g), w(() => {
28
+ return a("message", g), r(() => {
29
29
  (async () => t != null && t.height && (console.log("IframeWrapper: Setting height to", t.height), W(t.height)))();
30
- }, [t]), w(() => {
30
+ }, [t]), r(() => {
31
31
  (async () => {
32
32
  var n;
33
- !h.current && ((n = c.current) != null && n.contentWindow) && (c.current.contentWindow.focus(), h.current = !0);
33
+ !l.current && ((n = c.current) != null && n.contentWindow) && (c.current.contentWindow.focus(), l.current = !0);
34
34
  })();
35
- }), /* @__PURE__ */ l("div", { className: E["iframe-wrapper"], children: /* @__PURE__ */ l(
35
+ }), /* @__PURE__ */ h("div", { className: x["iframe-wrapper"], children: /* @__PURE__ */ h(
36
36
  "iframe",
37
37
  {
38
38
  title: t == null ? void 0 : t.title,
39
39
  ref: c,
40
40
  width: t == null ? void 0 : t.width,
41
- height: r,
41
+ height: w,
42
42
  src: t == null ? void 0 : t.link,
43
43
  onMouseEnter: () => i.current = !0,
44
44
  onMouseOut: () => {
@@ -48,6 +48,7 @@ const v = f(
48
48
  ) });
49
49
  }
50
50
  );
51
+ E.displayName = "IframeWrapper";
51
52
  export {
52
- v as IframeWrapper
53
+ E as IframeWrapper
53
54
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../../../../../../shared/util-fetch/src/lib/shared-util-fetch/index.cjs.js");function n(r,s){return async e=>{const a=`${r}${e.path}`,o=await fetch(a,{method:e.method,headers:s?c.addAuthHeader(s,e.headers||{}):e.headers,body:e.body?JSON.stringify(e.body):void 0}),t={};return o.headers.forEach((d,h)=>{t[h]=d}),{body:await o.json(),headers:t,status:o.status}}}exports.oauthFetchInvokeRemote=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../../../../../shared/util-fetch/src/lib/shared-util-fetch/index.cjs.js");function h(o,t){return async e=>{const a=`${o}${e.path}`,d=t?r.addAuthHeader(t,e.headers||{}):e.headers;return r.jsonFetch(a,e.method,d,e.body,"json",{returnMetadata:!0})}}exports.oauthFetchInvokeRemote=h;
@@ -1,20 +1,12 @@
1
- import { addAuthHeader as n } from "../../../../../../shared/util-fetch/src/lib/shared-util-fetch/index.es.js";
2
- function f(d, s) {
1
+ import { jsonFetch as d, addAuthHeader as h } from "../../../../../../shared/util-fetch/src/lib/shared-util-fetch/index.es.js";
2
+ function c(t, r) {
3
3
  return async (e) => {
4
- const t = `${d}${e.path}`, o = await fetch(t, {
5
- method: e.method,
6
- headers: s ? n(s, e.headers || {}) : e.headers,
7
- body: e.body ? JSON.stringify(e.body) : void 0
8
- }), r = {};
9
- return o.headers.forEach((a, h) => {
10
- r[h] = a;
11
- }), {
12
- body: await o.json(),
13
- headers: r,
14
- status: o.status
15
- };
4
+ const o = `${t}${e.path}`, a = r ? h(r, e.headers || {}) : e.headers;
5
+ return d(o, e.method, a, e.body, "json", {
6
+ returnMetadata: !0
7
+ });
16
8
  };
17
9
  }
18
10
  export {
19
- f as oauthFetchInvokeRemote
11
+ c as oauthFetchInvokeRemote
20
12
  };
@@ -86,18 +86,12 @@ export declare type AtlassianAppStandaloneOauthConfig = OAuthProviderProps & {
86
86
 
87
87
  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';
88
88
 
89
- declare interface InvokeRemoteResponse<T> {
90
- body?: T;
91
- headers?: Record<string, string>;
92
- status: number;
93
- }
94
-
95
- declare type InvokeRemoteSignature = <T, U>(input: {
89
+ declare type InvokeRemoteSignature = <U>(input: {
96
90
  path: string;
97
91
  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
98
92
  headers?: Record<string, string>;
99
93
  body?: U;
100
- }) => Promise<InvokeRemoteResponse<T>>;
94
+ }) => Promise<Record<string, unknown> | void>;
101
95
 
102
96
  export declare const IS_STANDALONE: boolean;
103
97
 
@@ -10,17 +10,11 @@ declare interface AtlassianAppForgeProps {
10
10
  useAtlasKitFlags?: boolean;
11
11
  }
12
12
 
13
- declare interface InvokeRemoteResponse<T> {
14
- body?: T;
15
- headers?: Record<string, string>;
16
- status: number;
17
- }
18
-
19
- declare type InvokeRemoteSignature = <T, U>(input: {
13
+ declare type InvokeRemoteSignature = <U>(input: {
20
14
  path: string;
21
15
  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
22
16
  headers?: Record<string, string>;
23
17
  body?: U;
24
- }) => Promise<InvokeRemoteResponse<T>>;
18
+ }) => Promise<Record<string, unknown> | void>;
25
19
 
26
20
  export { }
@@ -51,18 +51,12 @@ declare type InvokePayload = {
51
51
  [key in number | string]: unknown;
52
52
  };
53
53
 
54
- declare interface InvokeRemoteResponse<T> {
55
- body?: T;
56
- headers?: Record<string, string>;
57
- status: number;
58
- }
59
-
60
- declare type InvokeRemoteSignature = <T, U>(input: {
54
+ declare type InvokeRemoteSignature = <U>(input: {
61
55
  path: string;
62
56
  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
63
57
  headers?: Record<string, string>;
64
58
  body?: U;
65
- }) => Promise<InvokeRemoteResponse<T>>;
59
+ }) => Promise<Record<string, unknown> | void>;
66
60
 
67
61
  declare type InvokeSignature = <T = unknown, U = InvokePayload, A extends string = string>(action: A, data?: U) => Promise<T>;
68
62
 
@@ -228,7 +228,7 @@
228
228
  {
229
229
  "kind": "Method",
230
230
  "canonicalReference": "@valiantys/atlassian-app-frontend!JiraProjectService#getAllProjects:member(1)",
231
- "docComment": "",
231
+ "docComment": "/**\n * @deprecated\n *\n * Use projectSearchByIds instead.\n */\n",
232
232
  "excerptTokens": [
233
233
  {
234
234
  "kind": "Content",
@@ -653,6 +653,68 @@
653
653
  "isAbstract": false,
654
654
  "name": "projectSearchByIds"
655
655
  },
656
+ {
657
+ "kind": "Method",
658
+ "canonicalReference": "@valiantys/atlassian-app-frontend!JiraProjectService#projectSearchByKeys:member(1)",
659
+ "docComment": "",
660
+ "excerptTokens": [
661
+ {
662
+ "kind": "Content",
663
+ "text": "projectSearchByKeys(projectKeys: "
664
+ },
665
+ {
666
+ "kind": "Content",
667
+ "text": "string[]"
668
+ },
669
+ {
670
+ "kind": "Content",
671
+ "text": "): "
672
+ },
673
+ {
674
+ "kind": "Reference",
675
+ "text": "Promise",
676
+ "canonicalReference": "!Promise:interface"
677
+ },
678
+ {
679
+ "kind": "Content",
680
+ "text": "<"
681
+ },
682
+ {
683
+ "kind": "Reference",
684
+ "text": "Project",
685
+ "canonicalReference": "@valiantys/atlassian-app-frontend!~Project:interface"
686
+ },
687
+ {
688
+ "kind": "Content",
689
+ "text": "[]>"
690
+ },
691
+ {
692
+ "kind": "Content",
693
+ "text": ";"
694
+ }
695
+ ],
696
+ "isStatic": false,
697
+ "returnTypeTokenRange": {
698
+ "startIndex": 3,
699
+ "endIndex": 7
700
+ },
701
+ "releaseTag": "Public",
702
+ "isProtected": false,
703
+ "overloadIndex": 1,
704
+ "parameters": [
705
+ {
706
+ "parameterName": "projectKeys",
707
+ "parameterTypeTokenRange": {
708
+ "startIndex": 1,
709
+ "endIndex": 2
710
+ },
711
+ "isOptional": false
712
+ }
713
+ ],
714
+ "isOptional": false,
715
+ "isAbstract": false,
716
+ "name": "projectSearchByKeys"
717
+ },
656
718
  {
657
719
  "kind": "Property",
658
720
  "canonicalReference": "@valiantys/atlassian-app-frontend!JiraProjectService.projectUrl:member",
@@ -8,7 +8,7 @@
8
8
  export class JiraProjectService {
9
9
  // Warning: (ae-forgotten-export) The symbol "AtlassianProductFetchService" needs to be exported by the entry point data-access-project.d.ts
10
10
  constructor(fetchSvc: AtlassianProductFetchService<'jira'>);
11
- // (undocumented)
11
+ // @deprecated (undocumented)
12
12
  getAllProjects(): Promise<Project[]>;
13
13
  // Warning: (ae-forgotten-export) The symbol "Project" needs to be exported by the entry point data-access-project.d.ts
14
14
  //
@@ -29,6 +29,8 @@ export class JiraProjectService {
29
29
  // (undocumented)
30
30
  projectSearchByIds(projectIds: string[]): Promise<Project[]>;
31
31
  // (undocumented)
32
+ projectSearchByKeys(projectKeys: string[]): Promise<Project[]>;
33
+ // (undocumented)
32
34
  static readonly projectUrl = "/rest/api/3/project";
33
35
  // (undocumented)
34
36
  setProjectProperty<T>(projectIdOrKey: string, propertyKey: string, value: T): Promise<T>;
@@ -47,8 +47,12 @@ export declare class JiraProjectService {
47
47
  constructor(fetchSvc: AtlassianProductFetchService<'jira'>);
48
48
  getVersions(projectIdOrKey: string): Promise<ProjectVersion[]>;
49
49
  getProject(projectIdOrKey: string): Promise<Project>;
50
+ /**
51
+ * @deprecated Use projectSearchByIds instead.
52
+ */
50
53
  getAllProjects(): Promise<Project[]>;
51
54
  projectSearchByIds(projectIds: string[]): Promise<Project[]>;
55
+ projectSearchByKeys(projectKeys: string[]): Promise<Project[]>;
52
56
  getProjectIssueTypes(projectId: string): Promise<IssueTypeDetails[]>;
53
57
  getProjectStatuses(projectIdOrKey: string): Promise<unknown>;
54
58
  getProjectProperty<T>(projectIdOrKey: string, propertyKey: string): Promise<T | undefined>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valiantys/atlassian-app-frontend",
3
- "version": "3.0.0-alpha-22",
3
+ "version": "3.0.0-alpha-25",
4
4
  "description": "This library provides an Atlassian Forge Custom UI wrapper component that handles all the setup necessary to support an app that can run deployed or in standalone mode",
5
5
  "exports": {
6
6
  "./atlassian-app": {
@@ -183,7 +183,7 @@
183
183
  "@atlaskit/select": "^20.6.0",
184
184
  "@atlaskit/spinner": "^18.0.4",
185
185
  "@atlaskit/tokens": "^4.9.0",
186
- "@forge/bridge": "^4.5.2",
186
+ "@forge/bridge": "^5.7.0",
187
187
  "react": "^18.3.1",
188
188
  "react-dom": "^18.3.1",
189
189
  "react-router-dom": "^6.26.2"
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class h extends Error{constructor(t,e,a=t){super(a),this.statusText=t,this.statusCode=e,this.statusCode=e,this.statusText=t}toJSON(){return{statusCode:this.statusCode,statusText:this.statusText}}}function c(r,t){const e={Authorization:r.startsWith("Bearer ")?r:`Bearer ${r}`};return t?{...t,...e}:e}async function j(r,t,e){const a=c(r,e.headers||{});return fetch(t,{...e,headers:a})}async function x(r,t,e,a,n="json",o={}){return d(t,e,c(r,o),a,n)}async function d(r,t,e,a,n="json",o){const f={...e??{},Accept:n==="json"?"application/json":"text/html","Content-Type":n==="json"?"application/json":"text/html"},l=a?JSON.stringify(a):void 0,s=await fetch(r,{method:t,headers:f,body:l,credentials:o});if(s.ok)return t==="DELETE"||s.status===204?void 0:n==="text"?await s.text():await s.json();{let u="";try{u=await s.text()}catch{}const i=`${s.status} ${s.statusText} - ${t} ${r}
2
- ${u}`;throw console.error(i),new h(s.statusText,s.status,i)}}exports.FetchError=h;exports.addAuthHeader=c;exports.bearerAuthFetch=x;exports.bearerAuthFetchRaw=j;exports.jsonFetch=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class l extends Error{constructor(t,e,a=t){super(a),this.statusText=t,this.statusCode=e,this.statusCode=e,this.statusText=t}toJSON(){return{statusCode:this.statusCode,statusText:this.statusText}}}function u(s,t){const e={Authorization:s.startsWith("Bearer ")?s:`Bearer ${s}`};return t?{...t,...e}:e}async function w(s,t,e){const a=u(s,e.headers||{});return fetch(t,{...e,headers:a})}async function A(s,t,e,a,n="json",o={}){return f(t,e,u(s,o),a,n)}async function f(s,t,e,a,n="json",o){const d=typeof o=="string"?{includeCredentials:o}:o??{},j={...e,Accept:n==="json"?"application/json":"text/html","Content-Type":n==="json"?"application/json":"text/html"},x=a?JSON.stringify(a):void 0,r=await fetch(s,{method:t,headers:j,body:x,credentials:d.includeCredentials});let c;if(r.ok){if(t==="DELETE"||r.status===204?c=void 0:n==="text"?c=await r.text():c=await r.json(),d.returnMetadata){const i={};return r.headers.forEach((h,y)=>{i[y]=h}),{body:c,headers:i}}return c}else{let i="";try{i=await r.text()}catch{}const h=`${r.status} ${r.statusText} - ${t} ${s}
2
+ ${i}`;throw console.error(h),new l(r.statusText,r.status,h)}}exports.FetchError=l;exports.addAuthHeader=u;exports.bearerAuthFetch=A;exports.bearerAuthFetchRaw=w;exports.jsonFetch=f;
@@ -1,4 +1,4 @@
1
- class f extends Error {
1
+ class j extends Error {
2
2
  constructor(t, e, a = t) {
3
3
  super(a), this.statusText = t, this.statusCode = e, this.statusCode = e, this.statusText = t;
4
4
  }
@@ -9,56 +9,63 @@ class f extends Error {
9
9
  };
10
10
  }
11
11
  }
12
- function u(s, t) {
12
+ function d(s, t) {
13
13
  const e = {
14
14
  Authorization: s.startsWith("Bearer ") ? s : `Bearer ${s}`
15
15
  };
16
16
  return t ? { ...t, ...e } : e;
17
17
  }
18
- async function l(s, t, e) {
19
- const a = u(
18
+ async function p(s, t, e) {
19
+ const a = d(
20
20
  s,
21
21
  e.headers || {}
22
22
  );
23
23
  return fetch(t, { ...e, headers: a });
24
24
  }
25
- async function j(s, t, e, a, n = "json", o = {}) {
26
- return x(
25
+ async function w(s, t, e, a, n = "json", o = {}) {
26
+ return y(
27
27
  t,
28
28
  e,
29
- u(s, o),
29
+ d(s, o),
30
30
  a,
31
31
  n
32
32
  );
33
33
  }
34
- async function x(s, t, e, a, n = "json", o) {
35
- const h = {
36
- ...e ?? {},
34
+ async function y(s, t, e, a, n = "json", o) {
35
+ const h = typeof o == "string" ? { includeCredentials: o } : o ?? {}, f = {
36
+ ...e,
37
37
  Accept: n === "json" ? "application/json" : "text/html",
38
38
  "Content-Type": n === "json" ? "application/json" : "text/html"
39
- }, d = a ? JSON.stringify(a) : void 0, r = await fetch(s, {
39
+ }, l = a ? JSON.stringify(a) : void 0, r = await fetch(s, {
40
40
  method: t,
41
- headers: h,
42
- body: d,
43
- credentials: o
41
+ headers: f,
42
+ body: l,
43
+ credentials: h.includeCredentials
44
44
  });
45
- if (r.ok)
46
- return t === "DELETE" || r.status === 204 ? void 0 : n === "text" ? await r.text() : await r.json();
47
- {
48
- let c = "";
45
+ let c;
46
+ if (r.ok) {
47
+ if (t === "DELETE" || r.status === 204 ? c = void 0 : n === "text" ? c = await r.text() : c = await r.json(), h.returnMetadata) {
48
+ const i = {};
49
+ return r.headers.forEach((u, x) => {
50
+ i[x] = u;
51
+ }), { body: c, headers: i };
52
+ }
53
+ return c;
54
+ } else {
55
+ let i = "";
49
56
  try {
50
- c = await r.text();
57
+ i = await r.text();
51
58
  } catch {
52
59
  }
53
- const i = `${r.status} ${r.statusText} - ${t} ${s}
54
- ${c}`;
55
- throw console.error(i), new f(r.statusText, r.status, i);
60
+ const u = `${r.status} ${r.statusText} - ${t} ${s}
61
+ ${i}`;
62
+ throw console.error(u), new j(r.statusText, r.status, u);
56
63
  }
57
64
  }
58
65
  export {
59
- f as FetchError,
60
- u as addAuthHeader,
61
- j as bearerAuthFetch,
62
- l as bearerAuthFetchRaw,
63
- x as jsonFetch
66
+ j as FetchError,
67
+ d as addAuthHeader,
68
+ w as bearerAuthFetch,
69
+ p as bearerAuthFetchRaw,
70
+ y as jsonFetch
64
71
  };
@@ -498,7 +498,7 @@
498
498
  {
499
499
  "kind": "PropertySignature",
500
500
  "canonicalReference": "@valiantys/atlassian-app-frontend!IframeWrapperRef#reloadContentWindow:member",
501
- "docComment": "",
501
+ "docComment": "/**\n * reload will only work in a same-origin frame *\n */\n",
502
502
  "excerptTokens": [
503
503
  {
504
504
  "kind": "Content",
@@ -35,7 +35,6 @@ export interface IframeWrapperProps {
35
35
  export interface IframeWrapperRef {
36
36
  // (undocumented)
37
37
  focusContentWindow: () => void;
38
- // (undocumented)
39
38
  reloadContentWindow: () => void;
40
39
  }
41
40
 
@@ -16,6 +16,7 @@ export declare interface IframeWrapperProps {
16
16
  }
17
17
 
18
18
  export declare interface IframeWrapperRef {
19
+ /** reload will only work in a same-origin frame **/
19
20
  reloadContentWindow: () => void;
20
21
  focusContentWindow: () => void;
21
22
  }
@@ -172,123 +172,6 @@
172
172
  "name": "",
173
173
  "preserveMemberOrder": false,
174
174
  "members": [
175
- {
176
- "kind": "Interface",
177
- "canonicalReference": "@valiantys/atlassian-app-frontend!InvokeRemoteResponse:interface",
178
- "docComment": "",
179
- "excerptTokens": [
180
- {
181
- "kind": "Content",
182
- "text": "export interface InvokeRemoteResponse<T> "
183
- }
184
- ],
185
- "fileUrlPath": "../../shared/frontend-ui-remote-adapter/src/lib/remote-adapter.d.ts",
186
- "releaseTag": "Public",
187
- "typeParameters": [
188
- {
189
- "typeParameterName": "T",
190
- "constraintTokenRange": {
191
- "startIndex": 0,
192
- "endIndex": 0
193
- },
194
- "defaultTypeTokenRange": {
195
- "startIndex": 0,
196
- "endIndex": 0
197
- }
198
- }
199
- ],
200
- "name": "InvokeRemoteResponse",
201
- "preserveMemberOrder": false,
202
- "members": [
203
- {
204
- "kind": "PropertySignature",
205
- "canonicalReference": "@valiantys/atlassian-app-frontend!InvokeRemoteResponse#body:member",
206
- "docComment": "",
207
- "excerptTokens": [
208
- {
209
- "kind": "Content",
210
- "text": "body?: "
211
- },
212
- {
213
- "kind": "Content",
214
- "text": "T"
215
- },
216
- {
217
- "kind": "Content",
218
- "text": ";"
219
- }
220
- ],
221
- "isReadonly": false,
222
- "isOptional": true,
223
- "releaseTag": "Public",
224
- "name": "body",
225
- "propertyTypeTokenRange": {
226
- "startIndex": 1,
227
- "endIndex": 2
228
- }
229
- },
230
- {
231
- "kind": "PropertySignature",
232
- "canonicalReference": "@valiantys/atlassian-app-frontend!InvokeRemoteResponse#headers:member",
233
- "docComment": "",
234
- "excerptTokens": [
235
- {
236
- "kind": "Content",
237
- "text": "headers?: "
238
- },
239
- {
240
- "kind": "Reference",
241
- "text": "Record",
242
- "canonicalReference": "!Record:type"
243
- },
244
- {
245
- "kind": "Content",
246
- "text": "<string, string>"
247
- },
248
- {
249
- "kind": "Content",
250
- "text": ";"
251
- }
252
- ],
253
- "isReadonly": false,
254
- "isOptional": true,
255
- "releaseTag": "Public",
256
- "name": "headers",
257
- "propertyTypeTokenRange": {
258
- "startIndex": 1,
259
- "endIndex": 3
260
- }
261
- },
262
- {
263
- "kind": "PropertySignature",
264
- "canonicalReference": "@valiantys/atlassian-app-frontend!InvokeRemoteResponse#status:member",
265
- "docComment": "",
266
- "excerptTokens": [
267
- {
268
- "kind": "Content",
269
- "text": "status: "
270
- },
271
- {
272
- "kind": "Content",
273
- "text": "number"
274
- },
275
- {
276
- "kind": "Content",
277
- "text": ";"
278
- }
279
- ],
280
- "isReadonly": false,
281
- "isOptional": false,
282
- "releaseTag": "Public",
283
- "name": "status",
284
- "propertyTypeTokenRange": {
285
- "startIndex": 1,
286
- "endIndex": 2
287
- }
288
- }
289
- ],
290
- "extendsTokenRanges": []
291
- },
292
175
  {
293
176
  "kind": "TypeAlias",
294
177
  "canonicalReference": "@valiantys/atlassian-app-frontend!InvokeRemoteSignature:type",
@@ -300,7 +183,7 @@
300
183
  },
301
184
  {
302
185
  "kind": "Content",
303
- "text": "<T, U>(input: {\n path: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n headers?: "
186
+ "text": "<U>(input: {\n path: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n headers?: "
304
187
  },
305
188
  {
306
189
  "kind": "Reference",
@@ -322,12 +205,12 @@
322
205
  },
323
206
  {
324
207
  "kind": "Reference",
325
- "text": "InvokeRemoteResponse",
326
- "canonicalReference": "@valiantys/atlassian-app-frontend!InvokeRemoteResponse:interface"
208
+ "text": "Record",
209
+ "canonicalReference": "!Record:type"
327
210
  },
328
211
  {
329
212
  "kind": "Content",
330
- "text": "<T>>"
213
+ "text": "<string, unknown> | void>"
331
214
  },
332
215
  {
333
216
  "kind": "Content",
@@ -8,22 +8,12 @@ import { JSX as JSX_2 } from 'react/jsx-runtime';
8
8
  import { ReactNode } from 'react';
9
9
 
10
10
  // @public (undocumented)
11
- export interface InvokeRemoteResponse<T> {
12
- // (undocumented)
13
- body?: T;
14
- // (undocumented)
15
- headers?: Record<string, string>;
16
- // (undocumented)
17
- status: number;
18
- }
19
-
20
- // @public (undocumented)
21
- export type InvokeRemoteSignature = <T, U>(input: {
11
+ export type InvokeRemoteSignature = <U>(input: {
22
12
  path: string;
23
13
  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
24
14
  headers?: Record<string, string>;
25
15
  body?: U;
26
- }) => Promise<InvokeRemoteResponse<T>>;
16
+ }) => Promise<Record<string, unknown> | void>;
27
17
 
28
18
  // @public (undocumented)
29
19
  export function oauthFetchInvokeRemote(baseUrl: string, authToken?: string): InvokeRemoteSignature;
@@ -1,18 +1,12 @@
1
1
  import { JSX as JSX_2 } from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
 
4
- export declare interface InvokeRemoteResponse<T> {
5
- body?: T;
6
- headers?: Record<string, string>;
7
- status: number;
8
- }
9
-
10
- export declare type InvokeRemoteSignature = <T, U>(input: {
4
+ export declare type InvokeRemoteSignature = <U>(input: {
11
5
  path: string;
12
6
  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
13
7
  headers?: Record<string, string>;
14
8
  body?: U;
15
- }) => Promise<InvokeRemoteResponse<T>>;
9
+ }) => Promise<Record<string, unknown> | void>;
16
10
 
17
11
  export declare function oauthFetchInvokeRemote(baseUrl: string, authToken?: string): InvokeRemoteSignature;
18
12
 
@@ -1284,13 +1284,22 @@
1284
1284
  },
1285
1285
  {
1286
1286
  "kind": "Content",
1287
- "text": ", includeCredentials?: "
1287
+ "text": ", options?: "
1288
1288
  },
1289
1289
  {
1290
1290
  "kind": "Reference",
1291
1291
  "text": "RequestCredentials",
1292
1292
  "canonicalReference": "!RequestCredentials:type"
1293
1293
  },
1294
+ {
1295
+ "kind": "Content",
1296
+ "text": " | "
1297
+ },
1298
+ {
1299
+ "kind": "Reference",
1300
+ "text": "JsonFetchOptions",
1301
+ "canonicalReference": "@valiantys/atlassian-app-frontend!JsonFetchOptions:interface"
1302
+ },
1294
1303
  {
1295
1304
  "kind": "Content",
1296
1305
  "text": "): "
@@ -1311,8 +1320,8 @@
1311
1320
  ],
1312
1321
  "fileUrlPath": "../../../shared/util-fetch/src/lib/shared-util-fetch.d.ts",
1313
1322
  "returnTypeTokenRange": {
1314
- "startIndex": 17,
1315
- "endIndex": 19
1323
+ "startIndex": 19,
1324
+ "endIndex": 21
1316
1325
  },
1317
1326
  "releaseTag": "Public",
1318
1327
  "overloadIndex": 1,
@@ -1358,10 +1367,10 @@
1358
1367
  "isOptional": true
1359
1368
  },
1360
1369
  {
1361
- "parameterName": "includeCredentials",
1370
+ "parameterName": "options",
1362
1371
  "parameterTypeTokenRange": {
1363
1372
  "startIndex": 15,
1364
- "endIndex": 16
1373
+ "endIndex": 18
1365
1374
  },
1366
1375
  "isOptional": true
1367
1376
  }
@@ -1392,6 +1401,79 @@
1392
1401
  ],
1393
1402
  "name": "jsonFetch"
1394
1403
  },
1404
+ {
1405
+ "kind": "Interface",
1406
+ "canonicalReference": "@valiantys/atlassian-app-frontend!JsonFetchOptions:interface",
1407
+ "docComment": "",
1408
+ "excerptTokens": [
1409
+ {
1410
+ "kind": "Content",
1411
+ "text": "export interface JsonFetchOptions "
1412
+ }
1413
+ ],
1414
+ "fileUrlPath": "../../../shared/util-fetch/src/lib/shared-util-fetch.d.ts",
1415
+ "releaseTag": "Public",
1416
+ "name": "JsonFetchOptions",
1417
+ "preserveMemberOrder": false,
1418
+ "members": [
1419
+ {
1420
+ "kind": "PropertySignature",
1421
+ "canonicalReference": "@valiantys/atlassian-app-frontend!JsonFetchOptions#includeCredentials:member",
1422
+ "docComment": "",
1423
+ "excerptTokens": [
1424
+ {
1425
+ "kind": "Content",
1426
+ "text": "includeCredentials?: "
1427
+ },
1428
+ {
1429
+ "kind": "Reference",
1430
+ "text": "RequestCredentials",
1431
+ "canonicalReference": "!RequestCredentials:type"
1432
+ },
1433
+ {
1434
+ "kind": "Content",
1435
+ "text": ";"
1436
+ }
1437
+ ],
1438
+ "isReadonly": false,
1439
+ "isOptional": true,
1440
+ "releaseTag": "Public",
1441
+ "name": "includeCredentials",
1442
+ "propertyTypeTokenRange": {
1443
+ "startIndex": 1,
1444
+ "endIndex": 2
1445
+ }
1446
+ },
1447
+ {
1448
+ "kind": "PropertySignature",
1449
+ "canonicalReference": "@valiantys/atlassian-app-frontend!JsonFetchOptions#returnMetadata:member",
1450
+ "docComment": "",
1451
+ "excerptTokens": [
1452
+ {
1453
+ "kind": "Content",
1454
+ "text": "returnMetadata?: "
1455
+ },
1456
+ {
1457
+ "kind": "Content",
1458
+ "text": "boolean"
1459
+ },
1460
+ {
1461
+ "kind": "Content",
1462
+ "text": ";"
1463
+ }
1464
+ ],
1465
+ "isReadonly": false,
1466
+ "isOptional": true,
1467
+ "releaseTag": "Public",
1468
+ "name": "returnMetadata",
1469
+ "propertyTypeTokenRange": {
1470
+ "startIndex": 1,
1471
+ "endIndex": 2
1472
+ }
1473
+ }
1474
+ ],
1475
+ "extendsTokenRanges": []
1476
+ },
1395
1477
  {
1396
1478
  "kind": "Interface",
1397
1479
  "canonicalReference": "@valiantys/atlassian-app-frontend!PagedResponseValues:interface",
@@ -78,7 +78,15 @@ export type FetchRoute = {
78
78
  export type FetchSignature = <T>(request: FetchRequest, body?: any) => Promise<T>;
79
79
 
80
80
  // @public (undocumented)
81
- export function jsonFetch<T, U = Record<string, unknown>>(url: string, method: FetchMethod, headers?: Record<string, string>, body?: U, responseType?: 'json' | 'text', includeCredentials?: RequestCredentials): Promise<T>;
81
+ export function jsonFetch<T, U = Record<string, unknown>>(url: string, method: FetchMethod, headers?: Record<string, string>, body?: U, responseType?: 'json' | 'text', options?: RequestCredentials | JsonFetchOptions): Promise<T>;
82
+
83
+ // @public (undocumented)
84
+ export interface JsonFetchOptions {
85
+ // (undocumented)
86
+ includeCredentials?: RequestCredentials;
87
+ // (undocumented)
88
+ returnMetadata?: boolean;
89
+ }
82
90
 
83
91
  // @public (undocumented)
84
92
  export interface PagedResponseValues<T> {
@@ -46,7 +46,12 @@ export declare type FetchRoute = {
46
46
 
47
47
  export declare type FetchSignature = <T>(request: FetchRequest, body?: any) => Promise<T>;
48
48
 
49
- export declare function jsonFetch<T, U = Record<string, unknown>>(url: string, method: FetchMethod, headers?: Record<string, string>, body?: U, responseType?: 'json' | 'text', includeCredentials?: RequestCredentials): Promise<T>;
49
+ export declare function jsonFetch<T, U = Record<string, unknown>>(url: string, method: FetchMethod, headers?: Record<string, string>, body?: U, responseType?: 'json' | 'text', options?: RequestCredentials | JsonFetchOptions): Promise<T>;
50
+
51
+ export declare interface JsonFetchOptions {
52
+ includeCredentials?: RequestCredentials;
53
+ returnMetadata?: boolean;
54
+ }
50
55
 
51
56
  export declare interface PagedResponseValues<T> {
52
57
  startAt: number;