@shipfox/client-integrations 13.0.0 → 14.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.
Files changed (86) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +18 -0
  3. package/dist/application/complete-integration-callback.d.ts +11 -0
  4. package/dist/application/complete-integration-callback.d.ts.map +1 -1
  5. package/dist/application/complete-integration-callback.js +38 -8
  6. package/dist/application/complete-integration-callback.js.map +1 -1
  7. package/dist/components/callback-status-shell.d.ts +1 -1
  8. package/dist/components/callback-status-shell.d.ts.map +1 -1
  9. package/dist/components/callback-status-shell.js.map +1 -1
  10. package/dist/core/models.d.ts +6 -0
  11. package/dist/core/models.d.ts.map +1 -1
  12. package/dist/core/models.js +12 -0
  13. package/dist/core/models.js.map +1 -1
  14. package/dist/feature.d.ts +8 -0
  15. package/dist/feature.d.ts.map +1 -1
  16. package/dist/feature.js +10 -0
  17. package/dist/feature.js.map +1 -1
  18. package/dist/hooks/api/integration-mapper.d.ts +3 -1
  19. package/dist/hooks/api/integration-mapper.d.ts.map +1 -1
  20. package/dist/hooks/api/integration-mapper.js +8 -0
  21. package/dist/hooks/api/integration-mapper.js.map +1 -1
  22. package/dist/hooks/api/integrations.d.ts +25 -1
  23. package/dist/hooks/api/integrations.d.ts.map +1 -1
  24. package/dist/hooks/api/integrations.js +44 -1
  25. package/dist/hooks/api/integrations.js.map +1 -1
  26. package/dist/index.d.ts +4 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +4 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/jira-callback-state.d.ts +9 -0
  31. package/dist/jira-callback-state.d.ts.map +1 -0
  32. package/dist/jira-callback-state.js +16 -0
  33. package/dist/jira-callback-state.js.map +1 -0
  34. package/dist/jira-callback.d.ts +11 -0
  35. package/dist/jira-callback.d.ts.map +1 -0
  36. package/dist/jira-callback.js +59 -0
  37. package/dist/jira-callback.js.map +1 -0
  38. package/dist/jira-form-errors.d.ts +8 -0
  39. package/dist/jira-form-errors.d.ts.map +1 -0
  40. package/dist/jira-form-errors.js +55 -0
  41. package/dist/jira-form-errors.js.map +1 -0
  42. package/dist/pages/jira-callback-page.d.ts +2 -0
  43. package/dist/pages/jira-callback-page.d.ts.map +1 -0
  44. package/dist/pages/jira-callback-page.js +341 -0
  45. package/dist/pages/jira-callback-page.js.map +1 -0
  46. package/dist/pages/jira-install-page.d.ts +2 -0
  47. package/dist/pages/jira-install-page.d.ts.map +1 -0
  48. package/dist/pages/jira-install-page.js +26 -0
  49. package/dist/pages/jira-install-page.js.map +1 -0
  50. package/dist/provider-catalog.d.ts +1 -1
  51. package/dist/provider-catalog.d.ts.map +1 -1
  52. package/dist/provider-catalog.js +5 -0
  53. package/dist/provider-catalog.js.map +1 -1
  54. package/dist/routes/jira-callback.d.ts +8 -0
  55. package/dist/routes/jira-callback.d.ts.map +1 -0
  56. package/dist/routes/jira-callback.js +9 -0
  57. package/dist/routes/jira-callback.js.map +1 -0
  58. package/dist/routes/jira.d.ts +6 -0
  59. package/dist/routes/jira.d.ts.map +1 -0
  60. package/dist/routes/jira.js +7 -0
  61. package/dist/routes/jira.js.map +1 -0
  62. package/dist/tsconfig.test.tsbuildinfo +1 -1
  63. package/package.json +9 -8
  64. package/src/application/complete-integration-callback.test.ts +44 -1
  65. package/src/application/complete-integration-callback.ts +61 -8
  66. package/src/components/callback-status-shell.tsx +4 -1
  67. package/src/components/integration-usage-events.test.ts +13 -0
  68. package/src/core/models.ts +18 -0
  69. package/src/feature.ts +10 -0
  70. package/src/hooks/api/integration-mapper.ts +6 -0
  71. package/src/hooks/api/integrations.test.ts +92 -0
  72. package/src/hooks/api/integrations.ts +71 -0
  73. package/src/index.ts +4 -0
  74. package/src/jira-callback-state.ts +19 -0
  75. package/src/jira-callback.test.ts +76 -0
  76. package/src/jira-callback.ts +67 -0
  77. package/src/jira-form-errors.test.ts +57 -0
  78. package/src/jira-form-errors.ts +94 -0
  79. package/src/pages/jira-callback-page.test.tsx +250 -0
  80. package/src/pages/jira-callback-page.tsx +366 -0
  81. package/src/pages/jira-install-page.tsx +28 -0
  82. package/src/provider-catalog.test.ts +6 -0
  83. package/src/provider-catalog.ts +7 -1
  84. package/src/routes/jira-callback.tsx +8 -0
  85. package/src/routes/jira.tsx +4 -0
  86. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,2 +1,2 @@
1
1
  $ shipfox-swc
2
- Successfully compiled: 52 files with swc (153.56ms)
2
+ Successfully compiled: 59 files with swc (445.33ms)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @shipfox/client-integrations
2
2
 
3
+ ## 14.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1267eb3: Adds Jira connection flows and provider icons to workspace integrations settings.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [baa7594]
12
+ - Updated dependencies [f8a98cb]
13
+ - Updated dependencies [1267eb3]
14
+ - Updated dependencies [b2d4550]
15
+ - @shipfox/react-ui@0.5.0
16
+ - @shipfox/client-ui@14.0.0
17
+ - @shipfox/integration-icons@0.3.0
18
+ - @shipfox/client-auth@14.0.0
19
+ - @shipfox/client-shell@14.0.0
20
+
3
21
  ## 13.0.0
4
22
 
5
23
  ### Major Changes
@@ -8,6 +8,17 @@ export interface CompleteIntegrationCallbackOptions<TInput> {
8
8
  complete: (input: TInput, accessToken: string) => Promise<IntegrationConnection>;
9
9
  queryClient: QueryClient;
10
10
  }
11
+ export interface CompleteIntegrationCallbackResultOptions<TInput, TResult> {
12
+ input: TInput;
13
+ refreshAuth: () => Promise<{
14
+ accessToken: string;
15
+ }>;
16
+ complete: (input: TInput, accessToken: string) => Promise<TResult>;
17
+ getConnection: (result: TResult) => IntegrationConnection | undefined;
18
+ queryClient: QueryClient;
19
+ }
11
20
  export declare function completeIntegrationCallback<TInput>({ input, refreshAuth, complete, queryClient, }: CompleteIntegrationCallbackOptions<TInput>): Promise<IntegrationConnection>;
21
+ export declare function completeIntegrationCallbackResult<TInput, TResult>({ input, refreshAuth, complete, getConnection, queryClient, }: CompleteIntegrationCallbackResultOptions<TInput, TResult>): Promise<TResult>;
12
22
  export declare function useCompleteIntegrationCallback(): <TInput>(options: Omit<CompleteIntegrationCallbackOptions<TInput>, "queryClient">) => Promise<IntegrationConnection>;
23
+ export declare function useCompleteIntegrationCallbackResult(): <TInput, TResult>(options: Omit<CompleteIntegrationCallbackResultOptions<TInput, TResult>, "queryClient">) => Promise<TResult>;
13
24
  //# sourceMappingURL=complete-integration-callback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"complete-integration-callback.d.ts","sourceRoot":"","sources":["../../src/application/complete-integration-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,WAAW,EAAiB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAG3D,MAAM,WAAW,kCAAkC,CAAC,MAAM;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjF,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,EACxD,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,GACZ,EAAE,kCAAkC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAW7E;AAED,wBAAgB,8BAA8B,KAGnC,MAAM,WACF,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,KACvE,OAAO,CAAC,qBAAqB,CAAC,CAGpC"}
1
+ {"version":3,"file":"complete-integration-callback.d.ts","sourceRoot":"","sources":["../../src/application/complete-integration-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,WAAW,EAAiB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAG3D,MAAM,WAAW,kCAAkC,CAAC,MAAM;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjF,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,wCAAwC,CAAC,MAAM,EAAE,OAAO;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,qBAAqB,GAAG,SAAS,CAAC;IACtE,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,EACxD,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,GACZ,EAAE,kCAAkC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAQ7E;AAED,wBAAsB,iCAAiC,CAAC,MAAM,EAAE,OAAO,EAAE,EACvE,KAAK,EACL,WAAW,EACX,QAAQ,EACR,aAAa,EACb,WAAW,GACZ,EAAE,wCAAwC,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9E;AAwBD,wBAAgB,8BAA8B,KAGnC,MAAM,WACF,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,KACvE,OAAO,CAAC,qBAAqB,CAAC,CAGpC;AAED,wBAAgB,oCAAoC,KAGzC,MAAM,EAAE,OAAO,WACX,IAAI,CAAC,wCAAwC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,KACtF,OAAO,CAAC,OAAO,CAAC,CAGtB"}
@@ -2,16 +2,37 @@ import { useQueryClient } from '@tanstack/react-query';
2
2
  import { useCallback } from 'react';
3
3
  import { integrationsQueryKeys } from '#hooks/api/integrations.js';
4
4
  export async function completeIntegrationCallback({ input, refreshAuth, complete, queryClient }) {
5
+ return await completeIntegrationCallbackResultInternal({
6
+ input,
7
+ refreshAuth,
8
+ complete,
9
+ getConnection: (result)=>result,
10
+ queryClient
11
+ });
12
+ }
13
+ export async function completeIntegrationCallbackResult({ input, refreshAuth, complete, getConnection, queryClient }) {
14
+ return await completeIntegrationCallbackResultInternal({
15
+ input,
16
+ refreshAuth,
17
+ complete,
18
+ getConnection,
19
+ queryClient
20
+ });
21
+ }
22
+ async function completeIntegrationCallbackResultInternal({ input, refreshAuth, complete, getConnection, queryClient }) {
5
23
  const session = await refreshAuth();
6
- const connection = await complete(input, session.accessToken);
7
- try {
8
- await queryClient.invalidateQueries({
9
- queryKey: integrationsQueryKeys.connectionsByWorkspace(connection.workspaceId)
10
- });
11
- } catch {
12
- // Cache refresh is best effort: the successful callback is already committed server-side.
24
+ const result = await complete(input, session.accessToken);
25
+ const connection = getConnection(result);
26
+ if (connection) {
27
+ try {
28
+ await queryClient.invalidateQueries({
29
+ queryKey: integrationsQueryKeys.connectionsByWorkspace(connection.workspaceId)
30
+ });
31
+ } catch {
32
+ // Cache refresh is best effort: the callback is already committed server-side.
33
+ }
13
34
  }
14
- return connection;
35
+ return result;
15
36
  }
16
37
  export function useCompleteIntegrationCallback() {
17
38
  const queryClient = useQueryClient();
@@ -22,5 +43,14 @@ export function useCompleteIntegrationCallback() {
22
43
  queryClient
23
44
  ]);
24
45
  }
46
+ export function useCompleteIntegrationCallbackResult() {
47
+ const queryClient = useQueryClient();
48
+ return useCallback(async (options)=>completeIntegrationCallbackResult({
49
+ ...options,
50
+ queryClient
51
+ }), [
52
+ queryClient
53
+ ]);
54
+ }
25
55
 
26
56
  //# sourceMappingURL=complete-integration-callback.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/application/complete-integration-callback.ts"],"sourcesContent":["import {type QueryClient, useQueryClient} from '@tanstack/react-query';\nimport {useCallback} from 'react';\nimport type {IntegrationConnection} from '#core/models.js';\nimport {integrationsQueryKeys} from '#hooks/api/integrations.js';\n\nexport interface CompleteIntegrationCallbackOptions<TInput> {\n input: TInput;\n refreshAuth: () => Promise<{accessToken: string}>;\n complete: (input: TInput, accessToken: string) => Promise<IntegrationConnection>;\n queryClient: QueryClient;\n}\n\nexport async function completeIntegrationCallback<TInput>({\n input,\n refreshAuth,\n complete,\n queryClient,\n}: CompleteIntegrationCallbackOptions<TInput>): Promise<IntegrationConnection> {\n const session = await refreshAuth();\n const connection = await complete(input, session.accessToken);\n try {\n await queryClient.invalidateQueries({\n queryKey: integrationsQueryKeys.connectionsByWorkspace(connection.workspaceId),\n });\n } catch {\n // Cache refresh is best effort: the successful callback is already committed server-side.\n }\n return connection;\n}\n\nexport function useCompleteIntegrationCallback() {\n const queryClient = useQueryClient();\n return useCallback(\n async <TInput>(\n options: Omit<CompleteIntegrationCallbackOptions<TInput>, 'queryClient'>,\n ): Promise<IntegrationConnection> => completeIntegrationCallback({...options, queryClient}),\n [queryClient],\n );\n}\n"],"names":["useQueryClient","useCallback","integrationsQueryKeys","completeIntegrationCallback","input","refreshAuth","complete","queryClient","session","connection","accessToken","invalidateQueries","queryKey","connectionsByWorkspace","workspaceId","useCompleteIntegrationCallback","options"],"mappings":"AAAA,SAA0BA,cAAc,QAAO,wBAAwB;AACvE,SAAQC,WAAW,QAAO,QAAQ;AAElC,SAAQC,qBAAqB,QAAO,6BAA6B;AASjE,OAAO,eAAeC,4BAAoC,EACxDC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRC,WAAW,EACgC;IAC3C,MAAMC,UAAU,MAAMH;IACtB,MAAMI,aAAa,MAAMH,SAASF,OAAOI,QAAQE,WAAW;IAC5D,IAAI;QACF,MAAMH,YAAYI,iBAAiB,CAAC;YAClCC,UAAUV,sBAAsBW,sBAAsB,CAACJ,WAAWK,WAAW;QAC/E;IACF,EAAE,OAAM;IACN,0FAA0F;IAC5F;IACA,OAAOL;AACT;AAEA,OAAO,SAASM;IACd,MAAMR,cAAcP;IACpB,OAAOC,YACL,OACEe,UACmCb,4BAA4B;YAAC,GAAGa,OAAO;YAAET;QAAW,IACzF;QAACA;KAAY;AAEjB"}
1
+ {"version":3,"sources":["../../src/application/complete-integration-callback.ts"],"sourcesContent":["import {type QueryClient, useQueryClient} from '@tanstack/react-query';\nimport {useCallback} from 'react';\nimport type {IntegrationConnection} from '#core/models.js';\nimport {integrationsQueryKeys} from '#hooks/api/integrations.js';\n\nexport interface CompleteIntegrationCallbackOptions<TInput> {\n input: TInput;\n refreshAuth: () => Promise<{accessToken: string}>;\n complete: (input: TInput, accessToken: string) => Promise<IntegrationConnection>;\n queryClient: QueryClient;\n}\n\nexport interface CompleteIntegrationCallbackResultOptions<TInput, TResult> {\n input: TInput;\n refreshAuth: () => Promise<{accessToken: string}>;\n complete: (input: TInput, accessToken: string) => Promise<TResult>;\n getConnection: (result: TResult) => IntegrationConnection | undefined;\n queryClient: QueryClient;\n}\n\nexport async function completeIntegrationCallback<TInput>({\n input,\n refreshAuth,\n complete,\n queryClient,\n}: CompleteIntegrationCallbackOptions<TInput>): Promise<IntegrationConnection> {\n return await completeIntegrationCallbackResultInternal({\n input,\n refreshAuth,\n complete,\n getConnection: (result) => result,\n queryClient,\n });\n}\n\nexport async function completeIntegrationCallbackResult<TInput, TResult>({\n input,\n refreshAuth,\n complete,\n getConnection,\n queryClient,\n}: CompleteIntegrationCallbackResultOptions<TInput, TResult>): Promise<TResult> {\n return await completeIntegrationCallbackResultInternal({\n input,\n refreshAuth,\n complete,\n getConnection,\n queryClient,\n });\n}\n\nasync function completeIntegrationCallbackResultInternal<TInput, TResult>({\n input,\n refreshAuth,\n complete,\n getConnection,\n queryClient,\n}: CompleteIntegrationCallbackResultOptions<TInput, TResult>): Promise<TResult> {\n const session = await refreshAuth();\n const result = await complete(input, session.accessToken);\n const connection = getConnection(result);\n if (connection) {\n try {\n await queryClient.invalidateQueries({\n queryKey: integrationsQueryKeys.connectionsByWorkspace(connection.workspaceId),\n });\n } catch {\n // Cache refresh is best effort: the callback is already committed server-side.\n }\n }\n return result;\n}\n\nexport function useCompleteIntegrationCallback() {\n const queryClient = useQueryClient();\n return useCallback(\n async <TInput>(\n options: Omit<CompleteIntegrationCallbackOptions<TInput>, 'queryClient'>,\n ): Promise<IntegrationConnection> => completeIntegrationCallback({...options, queryClient}),\n [queryClient],\n );\n}\n\nexport function useCompleteIntegrationCallbackResult() {\n const queryClient = useQueryClient();\n return useCallback(\n async <TInput, TResult>(\n options: Omit<CompleteIntegrationCallbackResultOptions<TInput, TResult>, 'queryClient'>,\n ): Promise<TResult> => completeIntegrationCallbackResult({...options, queryClient}),\n [queryClient],\n );\n}\n"],"names":["useQueryClient","useCallback","integrationsQueryKeys","completeIntegrationCallback","input","refreshAuth","complete","queryClient","completeIntegrationCallbackResultInternal","getConnection","result","completeIntegrationCallbackResult","session","accessToken","connection","invalidateQueries","queryKey","connectionsByWorkspace","workspaceId","useCompleteIntegrationCallback","options","useCompleteIntegrationCallbackResult"],"mappings":"AAAA,SAA0BA,cAAc,QAAO,wBAAwB;AACvE,SAAQC,WAAW,QAAO,QAAQ;AAElC,SAAQC,qBAAqB,QAAO,6BAA6B;AAiBjE,OAAO,eAAeC,4BAAoC,EACxDC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRC,WAAW,EACgC;IAC3C,OAAO,MAAMC,0CAA0C;QACrDJ;QACAC;QACAC;QACAG,eAAe,CAACC,SAAWA;QAC3BH;IACF;AACF;AAEA,OAAO,eAAeI,kCAAmD,EACvEP,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRG,aAAa,EACbF,WAAW,EAC+C;IAC1D,OAAO,MAAMC,0CAA0C;QACrDJ;QACAC;QACAC;QACAG;QACAF;IACF;AACF;AAEA,eAAeC,0CAA2D,EACxEJ,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRG,aAAa,EACbF,WAAW,EAC+C;IAC1D,MAAMK,UAAU,MAAMP;IACtB,MAAMK,SAAS,MAAMJ,SAASF,OAAOQ,QAAQC,WAAW;IACxD,MAAMC,aAAaL,cAAcC;IACjC,IAAII,YAAY;QACd,IAAI;YACF,MAAMP,YAAYQ,iBAAiB,CAAC;gBAClCC,UAAUd,sBAAsBe,sBAAsB,CAACH,WAAWI,WAAW;YAC/E;QACF,EAAE,OAAM;QACN,+EAA+E;QACjF;IACF;IACA,OAAOR;AACT;AAEA,OAAO,SAASS;IACd,MAAMZ,cAAcP;IACpB,OAAOC,YACL,OACEmB,UACmCjB,4BAA4B;YAAC,GAAGiB,OAAO;YAAEb;QAAW,IACzF;QAACA;KAAY;AAEjB;AAEA,OAAO,SAASc;IACd,MAAMd,cAAcP;IACpB,OAAOC,YACL,OACEmB,UACqBT,kCAAkC;YAAC,GAAGS,OAAO;YAAEb;QAAW,IACjF;QAACA;KAAY;AAEjB"}
@@ -5,6 +5,6 @@ export declare function CallbackStatusShell({ title, message, status, startOver,
5
5
  startOver?: boolean;
6
6
  switchAccount?: boolean;
7
7
  workspaceSlug?: string | undefined;
8
- installPath: '/w/$workspaceSlug/integrations/linear' | '/w/$workspaceSlug/integrations/slack';
8
+ installPath: '/w/$workspaceSlug/integrations/linear' | '/w/$workspaceSlug/integrations/slack' | '/w/$workspaceSlug/integrations/jira';
9
9
  }): import("react").JSX.Element;
10
10
  //# sourceMappingURL=callback-status-shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"callback-status-shell.d.ts","sourceRoot":"","sources":["../../src/components/callback-status-shell.tsx"],"names":[],"mappings":"AAMA,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,OAAO,EACP,MAAgB,EAChB,SAAS,EACT,aAAa,EACb,aAAa,EACb,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,uCAAuC,GAAG,sCAAsC,CAAC;CAC/F,+BAmDA"}
1
+ {"version":3,"file":"callback-status-shell.d.ts","sourceRoot":"","sources":["../../src/components/callback-status-shell.tsx"],"names":[],"mappings":"AAMA,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,OAAO,EACP,MAAgB,EAChB,SAAS,EACT,aAAa,EACb,aAAa,EACb,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,EACP,uCAAuC,GACvC,sCAAsC,GACtC,qCAAqC,CAAC;CAC3C,+BAmDA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/callback-status-shell.tsx"],"sourcesContent":["import {ButtonLink} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {Text} from '@shipfox/react-ui/typography';\nimport {Link} from '@tanstack/react-router';\nimport {useEffect, useRef} from 'react';\n\nexport function CallbackStatusShell({\n title,\n message,\n status = 'error',\n startOver,\n switchAccount,\n workspaceSlug,\n installPath,\n}: {\n title: string;\n message: string;\n status?: 'error' | 'success';\n startOver?: boolean;\n switchAccount?: boolean;\n workspaceSlug?: string | undefined;\n installPath: '/w/$workspaceSlug/integrations/linear' | '/w/$workspaceSlug/integrations/slack';\n}) {\n const headingRef = useRef<HTMLHeadingElement>(null);\n useEffect(() => headingRef.current?.focus(), []);\n const recoveryVariant = startOver || switchAccount ? 'muted' : 'base';\n const settings = workspaceSlug ? (\n <ButtonLink asChild variant={recoveryVariant} className=\"min-h-44 w-full sm:w-fit\">\n <Link to=\"/w/$workspaceSlug/settings/integrations\" params={{workspaceSlug}}>\n Back to integrations\n </Link>\n </ButtonLink>\n ) : (\n <ButtonLink asChild variant={recoveryVariant} className=\"min-h-44 w-full sm:w-fit\">\n <Link to=\"/\">Back to Shipfox</Link>\n </ButtonLink>\n );\n const logoutRedirect = workspaceSlug\n ? installPath.replace('$workspaceSlug', workspaceSlug)\n : undefined;\n\n return (\n <main className=\"flex min-h-screen bg-background-subtle-base px-16 py-32\">\n <div className=\"mx-auto flex w-full max-w-[480px] flex-col justify-center gap-20\">\n <h2 ref={headingRef} tabIndex={-1} className=\"text-24 font-semibold outline-none\">\n {title}\n </h2>\n <Callout role={status === 'error' ? 'alert' : 'status'} type={status}>\n <Text size=\"sm\">{message}</Text>\n </Callout>\n <div className=\"flex flex-col gap-8 sm:flex-row sm:items-center\">\n {switchAccount ? (\n <ButtonLink asChild className=\"min-h-44 w-full sm:w-fit\">\n <Link\n to=\"/auth/logout\"\n search={logoutRedirect ? {redirect: logoutRedirect} : undefined}\n >\n Switch account\n </Link>\n </ButtonLink>\n ) : null}\n {startOver && workspaceSlug ? (\n <ButtonLink asChild className=\"min-h-44 w-full sm:w-fit\">\n <Link to={installPath} params={{workspaceSlug}}>\n Start over\n </Link>\n </ButtonLink>\n ) : null}\n {settings}\n </div>\n </div>\n </main>\n );\n}\n"],"names":["ButtonLink","Callout","Text","Link","useEffect","useRef","CallbackStatusShell","title","message","status","startOver","switchAccount","workspaceSlug","installPath","headingRef","current","focus","recoveryVariant","settings","asChild","variant","className","to","params","logoutRedirect","replace","undefined","main","div","h2","ref","tabIndex","role","type","size","search","redirect"],"mappings":";AAAA,SAAQA,UAAU,QAAO,2BAA2B;AACpD,SAAQC,OAAO,QAAO,4BAA4B;AAClD,SAAQC,IAAI,QAAO,+BAA+B;AAClD,SAAQC,IAAI,QAAO,yBAAyB;AAC5C,SAAQC,SAAS,EAAEC,MAAM,QAAO,QAAQ;AAExC,OAAO,SAASC,oBAAoB,EAClCC,KAAK,EACLC,OAAO,EACPC,SAAS,OAAO,EAChBC,SAAS,EACTC,aAAa,EACbC,aAAa,EACbC,WAAW,EASZ;IACC,MAAMC,aAAaT,OAA2B;IAC9CD,UAAU,IAAMU,WAAWC,OAAO,EAAEC,SAAS,EAAE;IAC/C,MAAMC,kBAAkBP,aAAaC,gBAAgB,UAAU;IAC/D,MAAMO,WAAWN,8BACf,KAACZ;QAAWmB,OAAO;QAACC,SAASH;QAAiBI,WAAU;kBACtD,cAAA,KAAClB;YAAKmB,IAAG;YAA0CC,QAAQ;gBAACX;YAAa;sBAAG;;uBAK9E,KAACZ;QAAWmB,OAAO;QAACC,SAASH;QAAiBI,WAAU;kBACtD,cAAA,KAAClB;YAAKmB,IAAG;sBAAI;;;IAGjB,MAAME,iBAAiBZ,gBACnBC,YAAYY,OAAO,CAAC,kBAAkBb,iBACtCc;IAEJ,qBACE,KAACC;QAAKN,WAAU;kBACd,cAAA,MAACO;YAAIP,WAAU;;8BACb,KAACQ;oBAAGC,KAAKhB;oBAAYiB,UAAU,CAAC;oBAAGV,WAAU;8BAC1Cd;;8BAEH,KAACN;oBAAQ+B,MAAMvB,WAAW,UAAU,UAAU;oBAAUwB,MAAMxB;8BAC5D,cAAA,KAACP;wBAAKgC,MAAK;kCAAM1B;;;8BAEnB,MAACoB;oBAAIP,WAAU;;wBACZV,8BACC,KAACX;4BAAWmB,OAAO;4BAACE,WAAU;sCAC5B,cAAA,KAAClB;gCACCmB,IAAG;gCACHa,QAAQX,iBAAiB;oCAACY,UAAUZ;gCAAc,IAAIE;0CACvD;;6BAID;wBACHhB,aAAaE,8BACZ,KAACZ;4BAAWmB,OAAO;4BAACE,WAAU;sCAC5B,cAAA,KAAClB;gCAAKmB,IAAIT;gCAAaU,QAAQ;oCAACX;gCAAa;0CAAG;;6BAIhD;wBACHM;;;;;;AAKX"}
1
+ {"version":3,"sources":["../../src/components/callback-status-shell.tsx"],"sourcesContent":["import {ButtonLink} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {Text} from '@shipfox/react-ui/typography';\nimport {Link} from '@tanstack/react-router';\nimport {useEffect, useRef} from 'react';\n\nexport function CallbackStatusShell({\n title,\n message,\n status = 'error',\n startOver,\n switchAccount,\n workspaceSlug,\n installPath,\n}: {\n title: string;\n message: string;\n status?: 'error' | 'success';\n startOver?: boolean;\n switchAccount?: boolean;\n workspaceSlug?: string | undefined;\n installPath:\n | '/w/$workspaceSlug/integrations/linear'\n | '/w/$workspaceSlug/integrations/slack'\n | '/w/$workspaceSlug/integrations/jira';\n}) {\n const headingRef = useRef<HTMLHeadingElement>(null);\n useEffect(() => headingRef.current?.focus(), []);\n const recoveryVariant = startOver || switchAccount ? 'muted' : 'base';\n const settings = workspaceSlug ? (\n <ButtonLink asChild variant={recoveryVariant} className=\"min-h-44 w-full sm:w-fit\">\n <Link to=\"/w/$workspaceSlug/settings/integrations\" params={{workspaceSlug}}>\n Back to integrations\n </Link>\n </ButtonLink>\n ) : (\n <ButtonLink asChild variant={recoveryVariant} className=\"min-h-44 w-full sm:w-fit\">\n <Link to=\"/\">Back to Shipfox</Link>\n </ButtonLink>\n );\n const logoutRedirect = workspaceSlug\n ? installPath.replace('$workspaceSlug', workspaceSlug)\n : undefined;\n\n return (\n <main className=\"flex min-h-screen bg-background-subtle-base px-16 py-32\">\n <div className=\"mx-auto flex w-full max-w-[480px] flex-col justify-center gap-20\">\n <h2 ref={headingRef} tabIndex={-1} className=\"text-24 font-semibold outline-none\">\n {title}\n </h2>\n <Callout role={status === 'error' ? 'alert' : 'status'} type={status}>\n <Text size=\"sm\">{message}</Text>\n </Callout>\n <div className=\"flex flex-col gap-8 sm:flex-row sm:items-center\">\n {switchAccount ? (\n <ButtonLink asChild className=\"min-h-44 w-full sm:w-fit\">\n <Link\n to=\"/auth/logout\"\n search={logoutRedirect ? {redirect: logoutRedirect} : undefined}\n >\n Switch account\n </Link>\n </ButtonLink>\n ) : null}\n {startOver && workspaceSlug ? (\n <ButtonLink asChild className=\"min-h-44 w-full sm:w-fit\">\n <Link to={installPath} params={{workspaceSlug}}>\n Start over\n </Link>\n </ButtonLink>\n ) : null}\n {settings}\n </div>\n </div>\n </main>\n );\n}\n"],"names":["ButtonLink","Callout","Text","Link","useEffect","useRef","CallbackStatusShell","title","message","status","startOver","switchAccount","workspaceSlug","installPath","headingRef","current","focus","recoveryVariant","settings","asChild","variant","className","to","params","logoutRedirect","replace","undefined","main","div","h2","ref","tabIndex","role","type","size","search","redirect"],"mappings":";AAAA,SAAQA,UAAU,QAAO,2BAA2B;AACpD,SAAQC,OAAO,QAAO,4BAA4B;AAClD,SAAQC,IAAI,QAAO,+BAA+B;AAClD,SAAQC,IAAI,QAAO,yBAAyB;AAC5C,SAAQC,SAAS,EAAEC,MAAM,QAAO,QAAQ;AAExC,OAAO,SAASC,oBAAoB,EAClCC,KAAK,EACLC,OAAO,EACPC,SAAS,OAAO,EAChBC,SAAS,EACTC,aAAa,EACbC,aAAa,EACbC,WAAW,EAYZ;IACC,MAAMC,aAAaT,OAA2B;IAC9CD,UAAU,IAAMU,WAAWC,OAAO,EAAEC,SAAS,EAAE;IAC/C,MAAMC,kBAAkBP,aAAaC,gBAAgB,UAAU;IAC/D,MAAMO,WAAWN,8BACf,KAACZ;QAAWmB,OAAO;QAACC,SAASH;QAAiBI,WAAU;kBACtD,cAAA,KAAClB;YAAKmB,IAAG;YAA0CC,QAAQ;gBAACX;YAAa;sBAAG;;uBAK9E,KAACZ;QAAWmB,OAAO;QAACC,SAASH;QAAiBI,WAAU;kBACtD,cAAA,KAAClB;YAAKmB,IAAG;sBAAI;;;IAGjB,MAAME,iBAAiBZ,gBACnBC,YAAYY,OAAO,CAAC,kBAAkBb,iBACtCc;IAEJ,qBACE,KAACC;QAAKN,WAAU;kBACd,cAAA,MAACO;YAAIP,WAAU;;8BACb,KAACQ;oBAAGC,KAAKhB;oBAAYiB,UAAU,CAAC;oBAAGV,WAAU;8BAC1Cd;;8BAEH,KAACN;oBAAQ+B,MAAMvB,WAAW,UAAU,UAAU;oBAAUwB,MAAMxB;8BAC5D,cAAA,KAACP;wBAAKgC,MAAK;kCAAM1B;;;8BAEnB,MAACoB;oBAAIP,WAAU;;wBACZV,8BACC,KAACX;4BAAWmB,OAAO;4BAACE,WAAU;sCAC5B,cAAA,KAAClB;gCACCmB,IAAG;gCACHa,QAAQX,iBAAiB;oCAACY,UAAUZ;gCAAc,IAAIE;0CACvD;;6BAID;wBACHhB,aAAaE,8BACZ,KAACZ;4BAAWmB,OAAO;4BAACE,WAAU;sCAC5B,cAAA,KAAClB;gCAAKmB,IAAIT;gCAAaU,QAAQ;oCAACX;gCAAa;0CAAG;;6BAIhD;wBACHM;;;;;;AAKX"}
@@ -5,6 +5,12 @@ export interface IntegrationProvider {
5
5
  displayName: string;
6
6
  capabilities: IntegrationCapability[];
7
7
  }
8
+ export interface JiraSite {
9
+ cloudId: string;
10
+ name: string;
11
+ url: string;
12
+ scopes: string[];
13
+ }
8
14
  export interface IntegrationConnection {
9
15
  id: string;
10
16
  workspaceId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,aAAa,CAAC;AACrE,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,yBAAyB,CAAC;IAC3C,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,yBAAyB,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,+BAA+B,GACvC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAC,GAChB;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,CAAC;AAsGpC,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,GAAG,cAAc,CAAC,GACnE,qBAAqB,EAAE,CAazB;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,yBAAyB,GAChC,+BAA+B,CAIjC;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,qBAAqB,EACjC,UAAU,EAAE,qBAAqB,WAGlC;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,qBAAqB,WAEnE"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,aAAa,CAAC;AACrE,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,yBAAyB,CAAC;IAC3C,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,yBAAyB,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,+BAA+B,GACvC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAC,GAChB;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,CAAC;AA+GpC,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,GAAG,cAAc,CAAC,GACnE,qBAAqB,EAAE,CAezB;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,yBAAyB,GAChC,+BAA+B,CAIjC;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,qBAAqB,EACjC,UAAU,EAAE,qBAAqB,WAGlC;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,qBAAqB,WAEnE"}
@@ -101,6 +101,14 @@ const sentryIssueActions = [
101
101
  'archived',
102
102
  'unresolved'
103
103
  ];
104
+ const jiraUsageEvents = [
105
+ 'jira:issue_created',
106
+ 'jira:issue_updated',
107
+ 'jira:issue_deleted',
108
+ 'comment_created',
109
+ 'comment_updated',
110
+ 'comment_deleted'
111
+ ];
104
112
  export function usageEventsForConnection(connection) {
105
113
  if (connection.provider === 'webhook') return [
106
114
  {
@@ -116,6 +124,10 @@ export function usageEventsForConnection(connection) {
116
124
  value: `issue.${action}`,
117
125
  label: `issue.${action}`
118
126
  }));
127
+ if (connection.provider === 'jira') return jiraUsageEvents.map((value)=>({
128
+ value,
129
+ label: value
130
+ }));
119
131
  if (connection.provider === 'linear') return linearUsageEvents.map((value)=>({
120
132
  value,
121
133
  label: value
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/models.ts"],"sourcesContent":["export type IntegrationCapability = 'source_control' | 'agent_tools';\nexport type ConnectionLifecycleStatus = 'active' | 'disabled' | 'error';\n\nexport interface IntegrationProvider {\n provider: string;\n displayName: string;\n capabilities: IntegrationCapability[];\n}\n\nexport interface IntegrationConnection {\n id: string;\n workspaceId: string;\n provider: string;\n externalAccountId: string;\n slug: string;\n displayName: string;\n lifecycleStatus: ConnectionLifecycleStatus;\n capabilities: IntegrationCapability[];\n externalUrl?: string | undefined;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface Repository {\n connectionId: string;\n externalRepositoryId: string;\n owner: string;\n name: string;\n fullName: string;\n defaultBranch: string;\n visibility: 'public' | 'private' | 'internal' | 'unknown';\n cloneUrl: string;\n htmlUrl: string;\n}\n\nexport interface RepositoryPage {\n repositories: Repository[];\n nextCursor?: string;\n}\n\nexport interface WebhookConnection {\n id: string;\n workspaceId: string;\n name: string;\n slug: string;\n lifecycleStatus: ConnectionLifecycleStatus;\n inboundUrl: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface InstallRedirect {\n installUrl: string;\n}\n\nexport type IntegrationUsageEvent = {\n value: string;\n label: string;\n};\n\nexport type ConnectionLifecyclePresentation =\n | {kind: 'active'}\n | {kind: 'disabled'; label: 'Disabled'}\n | {kind: 'error'; label: 'Error'};\n\nconst githubUsageEvents = [\n 'push',\n 'branch_protection_configuration',\n 'branch_protection_rule',\n 'check_run',\n 'check_suite',\n 'code_scanning_alert',\n 'commit_comment',\n 'create',\n 'custom_property',\n 'custom_property_values',\n 'delete',\n 'dependabot_alert',\n 'deploy_key',\n 'deployment',\n 'deployment_protection_rule',\n 'deployment_review',\n 'deployment_status',\n 'discussion',\n 'discussion_comment',\n 'fork',\n 'github_app_authorization',\n 'gollum',\n 'installation',\n 'installation_repositories',\n 'installation_target',\n 'issue_comment',\n 'issue_dependencies',\n 'issues',\n 'label',\n 'marketplace_purchase',\n 'member',\n 'membership',\n 'merge_group',\n 'meta',\n 'milestone',\n 'org_block',\n 'organization',\n 'package',\n 'page_build',\n 'personal_access_token_request',\n 'ping',\n 'project',\n 'project_card',\n 'project_column',\n 'projects_v2',\n 'projects_v2_item',\n 'projects_v2_status_update',\n 'public',\n 'pull_request',\n 'pull_request_review',\n 'pull_request_review_comment',\n 'pull_request_review_thread',\n 'registry_package',\n 'release',\n 'repository',\n 'repository_advisory',\n 'repository_dispatch',\n 'repository_import',\n 'repository_ruleset',\n 'repository_vulnerability_alert',\n 'secret_scanning_alert',\n 'secret_scanning_alert_location',\n 'secret_scanning_scan',\n 'security_advisory',\n 'security_and_analysis',\n 'sponsorship',\n 'star',\n 'status',\n 'sub_issues',\n 'team',\n 'team_add',\n 'watch',\n 'workflow_dispatch',\n 'workflow_job',\n 'workflow_run',\n] as const;\n\nconst linearUsageEvents = [\n 'Issue.create',\n 'Issue.update',\n 'Issue.remove',\n 'Comment.create',\n 'Comment.update',\n 'Comment.remove',\n 'IssueLabel.create',\n 'IssueLabel.update',\n 'IssueLabel.remove',\n 'Project.create',\n 'Project.update',\n 'Project.remove',\n 'Cycle.create',\n 'Cycle.update',\n 'Cycle.remove',\n 'agentSession.created',\n 'agentSession.prompted',\n] as const;\n\nconst sentryIssueActions = ['created', 'resolved', 'assigned', 'archived', 'unresolved'] as const;\n\nexport function usageEventsForConnection(\n connection: Pick<IntegrationConnection, 'provider' | 'capabilities'>,\n): IntegrationUsageEvent[] {\n if (connection.provider === 'webhook') return [{value: 'received', label: 'received'}];\n if (connection.provider === 'github')\n return githubUsageEvents.map((value) => ({value, label: value}));\n if (connection.provider === 'sentry')\n return sentryIssueActions.map((action) => ({\n value: `issue.${action}`,\n label: `issue.${action}`,\n }));\n if (connection.provider === 'linear')\n return linearUsageEvents.map((value) => ({value, label: value}));\n if (connection.capabilities.includes('source_control')) return [{value: 'push', label: 'push'}];\n return [{value: 'received', label: 'received'}];\n}\n\nexport function connectionLifecyclePresentation(\n status: ConnectionLifecycleStatus,\n): ConnectionLifecyclePresentation {\n if (status === 'disabled') return {kind: 'disabled', label: 'Disabled'};\n if (status === 'error') return {kind: 'error', label: 'Error'};\n return {kind: 'active'};\n}\n\nexport function hasCapability(\n connection: IntegrationConnection,\n capability: IntegrationCapability,\n) {\n return connection.capabilities.includes(capability);\n}\n\nexport function isUsableConnection(connection: IntegrationConnection) {\n return connection.lifecycleStatus === 'active';\n}\n"],"names":["githubUsageEvents","linearUsageEvents","sentryIssueActions","usageEventsForConnection","connection","provider","value","label","map","action","capabilities","includes","connectionLifecyclePresentation","status","kind","hasCapability","capability","isUsableConnection","lifecycleStatus"],"mappings":"AAiEA,MAAMA,oBAAoB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,oBAAoB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,qBAAqB;IAAC;IAAW;IAAY;IAAY;IAAY;CAAa;AAExF,OAAO,SAASC,yBACdC,UAAoE;IAEpE,IAAIA,WAAWC,QAAQ,KAAK,WAAW,OAAO;QAAC;YAACC,OAAO;YAAYC,OAAO;QAAU;KAAE;IACtF,IAAIH,WAAWC,QAAQ,KAAK,UAC1B,OAAOL,kBAAkBQ,GAAG,CAAC,CAACF,QAAW,CAAA;YAACA;YAAOC,OAAOD;QAAK,CAAA;IAC/D,IAAIF,WAAWC,QAAQ,KAAK,UAC1B,OAAOH,mBAAmBM,GAAG,CAAC,CAACC,SAAY,CAAA;YACzCH,OAAO,CAAC,MAAM,EAAEG,QAAQ;YACxBF,OAAO,CAAC,MAAM,EAAEE,QAAQ;QAC1B,CAAA;IACF,IAAIL,WAAWC,QAAQ,KAAK,UAC1B,OAAOJ,kBAAkBO,GAAG,CAAC,CAACF,QAAW,CAAA;YAACA;YAAOC,OAAOD;QAAK,CAAA;IAC/D,IAAIF,WAAWM,YAAY,CAACC,QAAQ,CAAC,mBAAmB,OAAO;QAAC;YAACL,OAAO;YAAQC,OAAO;QAAM;KAAE;IAC/F,OAAO;QAAC;YAACD,OAAO;YAAYC,OAAO;QAAU;KAAE;AACjD;AAEA,OAAO,SAASK,gCACdC,MAAiC;IAEjC,IAAIA,WAAW,YAAY,OAAO;QAACC,MAAM;QAAYP,OAAO;IAAU;IACtE,IAAIM,WAAW,SAAS,OAAO;QAACC,MAAM;QAASP,OAAO;IAAO;IAC7D,OAAO;QAACO,MAAM;IAAQ;AACxB;AAEA,OAAO,SAASC,cACdX,UAAiC,EACjCY,UAAiC;IAEjC,OAAOZ,WAAWM,YAAY,CAACC,QAAQ,CAACK;AAC1C;AAEA,OAAO,SAASC,mBAAmBb,UAAiC;IAClE,OAAOA,WAAWc,eAAe,KAAK;AACxC"}
1
+ {"version":3,"sources":["../../src/core/models.ts"],"sourcesContent":["export type IntegrationCapability = 'source_control' | 'agent_tools';\nexport type ConnectionLifecycleStatus = 'active' | 'disabled' | 'error';\n\nexport interface IntegrationProvider {\n provider: string;\n displayName: string;\n capabilities: IntegrationCapability[];\n}\n\nexport interface JiraSite {\n cloudId: string;\n name: string;\n url: string;\n scopes: string[];\n}\n\nexport interface IntegrationConnection {\n id: string;\n workspaceId: string;\n provider: string;\n externalAccountId: string;\n slug: string;\n displayName: string;\n lifecycleStatus: ConnectionLifecycleStatus;\n capabilities: IntegrationCapability[];\n externalUrl?: string | undefined;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface Repository {\n connectionId: string;\n externalRepositoryId: string;\n owner: string;\n name: string;\n fullName: string;\n defaultBranch: string;\n visibility: 'public' | 'private' | 'internal' | 'unknown';\n cloneUrl: string;\n htmlUrl: string;\n}\n\nexport interface RepositoryPage {\n repositories: Repository[];\n nextCursor?: string;\n}\n\nexport interface WebhookConnection {\n id: string;\n workspaceId: string;\n name: string;\n slug: string;\n lifecycleStatus: ConnectionLifecycleStatus;\n inboundUrl: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface InstallRedirect {\n installUrl: string;\n}\n\nexport type IntegrationUsageEvent = {\n value: string;\n label: string;\n};\n\nexport type ConnectionLifecyclePresentation =\n | {kind: 'active'}\n | {kind: 'disabled'; label: 'Disabled'}\n | {kind: 'error'; label: 'Error'};\n\nconst githubUsageEvents = [\n 'push',\n 'branch_protection_configuration',\n 'branch_protection_rule',\n 'check_run',\n 'check_suite',\n 'code_scanning_alert',\n 'commit_comment',\n 'create',\n 'custom_property',\n 'custom_property_values',\n 'delete',\n 'dependabot_alert',\n 'deploy_key',\n 'deployment',\n 'deployment_protection_rule',\n 'deployment_review',\n 'deployment_status',\n 'discussion',\n 'discussion_comment',\n 'fork',\n 'github_app_authorization',\n 'gollum',\n 'installation',\n 'installation_repositories',\n 'installation_target',\n 'issue_comment',\n 'issue_dependencies',\n 'issues',\n 'label',\n 'marketplace_purchase',\n 'member',\n 'membership',\n 'merge_group',\n 'meta',\n 'milestone',\n 'org_block',\n 'organization',\n 'package',\n 'page_build',\n 'personal_access_token_request',\n 'ping',\n 'project',\n 'project_card',\n 'project_column',\n 'projects_v2',\n 'projects_v2_item',\n 'projects_v2_status_update',\n 'public',\n 'pull_request',\n 'pull_request_review',\n 'pull_request_review_comment',\n 'pull_request_review_thread',\n 'registry_package',\n 'release',\n 'repository',\n 'repository_advisory',\n 'repository_dispatch',\n 'repository_import',\n 'repository_ruleset',\n 'repository_vulnerability_alert',\n 'secret_scanning_alert',\n 'secret_scanning_alert_location',\n 'secret_scanning_scan',\n 'security_advisory',\n 'security_and_analysis',\n 'sponsorship',\n 'star',\n 'status',\n 'sub_issues',\n 'team',\n 'team_add',\n 'watch',\n 'workflow_dispatch',\n 'workflow_job',\n 'workflow_run',\n] as const;\n\nconst linearUsageEvents = [\n 'Issue.create',\n 'Issue.update',\n 'Issue.remove',\n 'Comment.create',\n 'Comment.update',\n 'Comment.remove',\n 'IssueLabel.create',\n 'IssueLabel.update',\n 'IssueLabel.remove',\n 'Project.create',\n 'Project.update',\n 'Project.remove',\n 'Cycle.create',\n 'Cycle.update',\n 'Cycle.remove',\n 'agentSession.created',\n 'agentSession.prompted',\n] as const;\n\nconst sentryIssueActions = ['created', 'resolved', 'assigned', 'archived', 'unresolved'] as const;\n\nconst jiraUsageEvents = [\n 'jira:issue_created',\n 'jira:issue_updated',\n 'jira:issue_deleted',\n 'comment_created',\n 'comment_updated',\n 'comment_deleted',\n] as const;\n\nexport function usageEventsForConnection(\n connection: Pick<IntegrationConnection, 'provider' | 'capabilities'>,\n): IntegrationUsageEvent[] {\n if (connection.provider === 'webhook') return [{value: 'received', label: 'received'}];\n if (connection.provider === 'github')\n return githubUsageEvents.map((value) => ({value, label: value}));\n if (connection.provider === 'sentry')\n return sentryIssueActions.map((action) => ({\n value: `issue.${action}`,\n label: `issue.${action}`,\n }));\n if (connection.provider === 'jira')\n return jiraUsageEvents.map((value) => ({value, label: value}));\n if (connection.provider === 'linear')\n return linearUsageEvents.map((value) => ({value, label: value}));\n if (connection.capabilities.includes('source_control')) return [{value: 'push', label: 'push'}];\n return [{value: 'received', label: 'received'}];\n}\n\nexport function connectionLifecyclePresentation(\n status: ConnectionLifecycleStatus,\n): ConnectionLifecyclePresentation {\n if (status === 'disabled') return {kind: 'disabled', label: 'Disabled'};\n if (status === 'error') return {kind: 'error', label: 'Error'};\n return {kind: 'active'};\n}\n\nexport function hasCapability(\n connection: IntegrationConnection,\n capability: IntegrationCapability,\n) {\n return connection.capabilities.includes(capability);\n}\n\nexport function isUsableConnection(connection: IntegrationConnection) {\n return connection.lifecycleStatus === 'active';\n}\n"],"names":["githubUsageEvents","linearUsageEvents","sentryIssueActions","jiraUsageEvents","usageEventsForConnection","connection","provider","value","label","map","action","capabilities","includes","connectionLifecyclePresentation","status","kind","hasCapability","capability","isUsableConnection","lifecycleStatus"],"mappings":"AAwEA,MAAMA,oBAAoB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,oBAAoB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,qBAAqB;IAAC;IAAW;IAAY;IAAY;IAAY;CAAa;AAExF,MAAMC,kBAAkB;IACtB;IACA;IACA;IACA;IACA;IACA;CACD;AAED,OAAO,SAASC,yBACdC,UAAoE;IAEpE,IAAIA,WAAWC,QAAQ,KAAK,WAAW,OAAO;QAAC;YAACC,OAAO;YAAYC,OAAO;QAAU;KAAE;IACtF,IAAIH,WAAWC,QAAQ,KAAK,UAC1B,OAAON,kBAAkBS,GAAG,CAAC,CAACF,QAAW,CAAA;YAACA;YAAOC,OAAOD;QAAK,CAAA;IAC/D,IAAIF,WAAWC,QAAQ,KAAK,UAC1B,OAAOJ,mBAAmBO,GAAG,CAAC,CAACC,SAAY,CAAA;YACzCH,OAAO,CAAC,MAAM,EAAEG,QAAQ;YACxBF,OAAO,CAAC,MAAM,EAAEE,QAAQ;QAC1B,CAAA;IACF,IAAIL,WAAWC,QAAQ,KAAK,QAC1B,OAAOH,gBAAgBM,GAAG,CAAC,CAACF,QAAW,CAAA;YAACA;YAAOC,OAAOD;QAAK,CAAA;IAC7D,IAAIF,WAAWC,QAAQ,KAAK,UAC1B,OAAOL,kBAAkBQ,GAAG,CAAC,CAACF,QAAW,CAAA;YAACA;YAAOC,OAAOD;QAAK,CAAA;IAC/D,IAAIF,WAAWM,YAAY,CAACC,QAAQ,CAAC,mBAAmB,OAAO;QAAC;YAACL,OAAO;YAAQC,OAAO;QAAM;KAAE;IAC/F,OAAO;QAAC;YAACD,OAAO;YAAYC,OAAO;QAAU;KAAE;AACjD;AAEA,OAAO,SAASK,gCACdC,MAAiC;IAEjC,IAAIA,WAAW,YAAY,OAAO;QAACC,MAAM;QAAYP,OAAO;IAAU;IACtE,IAAIM,WAAW,SAAS,OAAO;QAACC,MAAM;QAASP,OAAO;IAAO;IAC7D,OAAO;QAACO,MAAM;IAAQ;AACxB;AAEA,OAAO,SAASC,cACdX,UAAiC,EACjCY,UAAiC;IAEjC,OAAOZ,WAAWM,YAAY,CAACC,QAAQ,CAACK;AAC1C;AAEA,OAAO,SAASC,mBAAmBb,UAAiC;IAClE,OAAOA,WAAWc,eAAe,KAAK;AACxC"}
package/dist/feature.d.ts CHANGED
@@ -15,6 +15,10 @@ export declare const integrationsFeature: {
15
15
  readonly path: "/integrations/linear/callback";
16
16
  readonly parent: "root";
17
17
  readonly impl: "@shipfox/client-integrations/routes/linear-callback";
18
+ }, {
19
+ readonly path: "/integrations/jira/callback";
20
+ readonly parent: "root";
21
+ readonly impl: "@shipfox/client-integrations/routes/jira-callback";
18
22
  }, {
19
23
  readonly path: "/integrations/sentry/callback";
20
24
  readonly parent: "root";
@@ -39,6 +43,10 @@ export declare const integrationsFeature: {
39
43
  readonly path: "/w/$workspaceSlug/integrations/linear";
40
44
  readonly parent: "workspaceLayout";
41
45
  readonly impl: "@shipfox/client-integrations/routes/linear";
46
+ }, {
47
+ readonly path: "/w/$workspaceSlug/integrations/jira";
48
+ readonly parent: "workspaceLayout";
49
+ readonly impl: "@shipfox/client-integrations/routes/jira";
42
50
  }, {
43
51
  readonly path: "/w/$workspaceSlug/integrations/sentry";
44
52
  readonly parent: "workspaceLayout";
@@ -1 +1 @@
1
- {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../src/feature.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4BAA4B;;;;;;EAQW,CAAC;AAErD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D9B,CAAC"}
1
+ {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../src/feature.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4BAA4B;;;;;;EAQW,CAAC;AAErD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsE9B,CAAC"}
package/dist/feature.js CHANGED
@@ -21,6 +21,11 @@ export const integrationsFeature = defineClientFeature({
21
21
  parent: 'root',
22
22
  impl: '@shipfox/client-integrations/routes/linear-callback'
23
23
  },
24
+ {
25
+ path: '/integrations/jira/callback',
26
+ parent: 'root',
27
+ impl: '@shipfox/client-integrations/routes/jira-callback'
28
+ },
24
29
  {
25
30
  path: '/integrations/sentry/callback',
26
31
  parent: 'root',
@@ -51,6 +56,11 @@ export const integrationsFeature = defineClientFeature({
51
56
  parent: 'workspaceLayout',
52
57
  impl: '@shipfox/client-integrations/routes/linear'
53
58
  },
59
+ {
60
+ path: '/w/$workspaceSlug/integrations/jira',
61
+ parent: 'workspaceLayout',
62
+ impl: '@shipfox/client-integrations/routes/jira'
63
+ },
54
64
  {
55
65
  path: '/w/$workspaceSlug/integrations/sentry',
56
66
  parent: 'workspaceLayout',
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/feature.ts"],"sourcesContent":["import {defineClientFeature, type SettingsSectionEntry} from '@shipfox/client-shell';\n\nexport const integrationsSettingsSections = [\n {\n id: 'settings.integrations',\n pathSegment: 'integrations',\n label: 'Integrations',\n icon: 'plugLine',\n order: 700,\n },\n] as const satisfies readonly SettingsSectionEntry[];\n\nexport const integrationsFeature = defineClientFeature({\n id: 'shipfox.integrations',\n routes: [\n {\n path: '/integrations/github/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/github-callback',\n },\n {\n path: '/integrations/linear/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/linear-callback',\n },\n {\n path: '/integrations/sentry/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/sentry-callback',\n },\n {\n path: '/integrations/slack/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/slack-callback',\n },\n {\n path: '/w/$workspaceSlug/integrations',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/integrations',\n },\n {\n path: '/w/$workspaceSlug/integrations/gitea',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/gitea',\n },\n {\n path: '/w/$workspaceSlug/integrations/github',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/github',\n },\n {\n path: '/w/$workspaceSlug/integrations/linear',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/linear',\n },\n {\n path: '/w/$workspaceSlug/integrations/sentry',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/sentry',\n },\n {\n path: '/w/$workspaceSlug/integrations/slack',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/slack',\n },\n {\n path: '/w/$workspaceSlug/settings/integrations',\n parent: 'workspaceSettings',\n impl: '@shipfox/client-integrations/routes/integrations-settings',\n },\n ],\n settingsSections: integrationsSettingsSections,\n});\n"],"names":["defineClientFeature","integrationsSettingsSections","id","pathSegment","label","icon","order","integrationsFeature","routes","path","parent","impl","settingsSections"],"mappings":"AAAA,SAAQA,mBAAmB,QAAkC,wBAAwB;AAErF,OAAO,MAAMC,+BAA+B;IAC1C;QACEC,IAAI;QACJC,aAAa;QACbC,OAAO;QACPC,MAAM;QACNC,OAAO;IACT;CACD,CAAoD;AAErD,OAAO,MAAMC,sBAAsBP,oBAAoB;IACrDE,IAAI;IACJM,QAAQ;QACN;YACEC,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;KACD;IACDC,kBAAkBX;AACpB,GAAG"}
1
+ {"version":3,"sources":["../src/feature.ts"],"sourcesContent":["import {defineClientFeature, type SettingsSectionEntry} from '@shipfox/client-shell';\n\nexport const integrationsSettingsSections = [\n {\n id: 'settings.integrations',\n pathSegment: 'integrations',\n label: 'Integrations',\n icon: 'plugLine',\n order: 700,\n },\n] as const satisfies readonly SettingsSectionEntry[];\n\nexport const integrationsFeature = defineClientFeature({\n id: 'shipfox.integrations',\n routes: [\n {\n path: '/integrations/github/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/github-callback',\n },\n {\n path: '/integrations/linear/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/linear-callback',\n },\n {\n path: '/integrations/jira/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/jira-callback',\n },\n {\n path: '/integrations/sentry/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/sentry-callback',\n },\n {\n path: '/integrations/slack/callback',\n parent: 'root',\n impl: '@shipfox/client-integrations/routes/slack-callback',\n },\n {\n path: '/w/$workspaceSlug/integrations',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/integrations',\n },\n {\n path: '/w/$workspaceSlug/integrations/gitea',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/gitea',\n },\n {\n path: '/w/$workspaceSlug/integrations/github',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/github',\n },\n {\n path: '/w/$workspaceSlug/integrations/linear',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/linear',\n },\n {\n path: '/w/$workspaceSlug/integrations/jira',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/jira',\n },\n {\n path: '/w/$workspaceSlug/integrations/sentry',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/sentry',\n },\n {\n path: '/w/$workspaceSlug/integrations/slack',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-integrations/routes/slack',\n },\n {\n path: '/w/$workspaceSlug/settings/integrations',\n parent: 'workspaceSettings',\n impl: '@shipfox/client-integrations/routes/integrations-settings',\n },\n ],\n settingsSections: integrationsSettingsSections,\n});\n"],"names":["defineClientFeature","integrationsSettingsSections","id","pathSegment","label","icon","order","integrationsFeature","routes","path","parent","impl","settingsSections"],"mappings":"AAAA,SAAQA,mBAAmB,QAAkC,wBAAwB;AAErF,OAAO,MAAMC,+BAA+B;IAC1C;QACEC,IAAI;QACJC,aAAa;QACbC,OAAO;QACPC,MAAM;QACNC,OAAO;IACT;CACD,CAAoD;AAErD,OAAO,MAAMC,sBAAsBP,oBAAoB;IACrDE,IAAI;IACJM,QAAQ;QACN;YACEC,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;KACD;IACDC,kBAAkBX;AACpB,GAAG"}
@@ -1,10 +1,12 @@
1
1
  import type { IntegrationConnectionDto, IntegrationProviderDto, RepositoryDto } from '@shipfox/api-integration-core-dto';
2
+ import type { JiraAccessibleResourceDto } from '@shipfox/api-integration-jira-dto';
2
3
  import type { WebhookConnectionDto } from '@shipfox/api-integration-webhook-dto';
3
- import type { InstallRedirect, IntegrationConnection, IntegrationProvider, Repository, WebhookConnection } from '#core/models.js';
4
+ import type { InstallRedirect, IntegrationConnection, IntegrationProvider, JiraSite, Repository, WebhookConnection } from '#core/models.js';
4
5
  export declare function toIntegrationProvider(dto: IntegrationProviderDto): IntegrationProvider;
5
6
  export declare function toInstallRedirect(dto: {
6
7
  install_url: string;
7
8
  }): InstallRedirect;
9
+ export declare function toJiraSite(dto: JiraAccessibleResourceDto): JiraSite;
8
10
  export declare function toIntegrationConnection(dto: IntegrationConnectionDto): IntegrationConnection;
9
11
  export declare function toRepository(dto: RepositoryDto): Repository;
10
12
  export declare function toWebhookConnection(dto: WebhookConnectionDto): WebhookConnection;
@@ -1 +1 @@
1
- {"version":3,"file":"integration-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integration-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC/E,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,GAAG,mBAAmB,CAEtF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GAAG,eAAe,CAE7E;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,wBAAwB,GAAG,qBAAqB,CAc5F;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAY3D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,iBAAiB,CAWhF"}
1
+ {"version":3,"file":"integration-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integration-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC/E,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,GAAG,mBAAmB,CAEtF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GAAG,eAAe,CAE7E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,yBAAyB,GAAG,QAAQ,CAEnE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,wBAAwB,GAAG,qBAAqB,CAc5F;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAY3D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,iBAAiB,CAWhF"}
@@ -10,6 +10,14 @@ export function toInstallRedirect(dto) {
10
10
  installUrl: dto.install_url
11
11
  };
12
12
  }
13
+ export function toJiraSite(dto) {
14
+ return {
15
+ cloudId: dto.cloud_id,
16
+ name: dto.name,
17
+ url: dto.url,
18
+ scopes: dto.scopes
19
+ };
20
+ }
13
21
  export function toIntegrationConnection(dto) {
14
22
  return {
15
23
  id: dto.id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/integration-mapper.ts"],"sourcesContent":["import type {\n IntegrationConnectionDto,\n IntegrationProviderDto,\n RepositoryDto,\n} from '@shipfox/api-integration-core-dto';\nimport type {WebhookConnectionDto} from '@shipfox/api-integration-webhook-dto';\nimport type {\n InstallRedirect,\n IntegrationConnection,\n IntegrationProvider,\n Repository,\n WebhookConnection,\n} from '#core/models.js';\n\nexport function toIntegrationProvider(dto: IntegrationProviderDto): IntegrationProvider {\n return {provider: dto.provider, displayName: dto.display_name, capabilities: dto.capabilities};\n}\n\nexport function toInstallRedirect(dto: {install_url: string}): InstallRedirect {\n return {installUrl: dto.install_url};\n}\n\nexport function toIntegrationConnection(dto: IntegrationConnectionDto): IntegrationConnection {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n provider: dto.provider,\n externalAccountId: dto.external_account_id,\n slug: dto.slug,\n displayName: dto.display_name,\n lifecycleStatus: dto.lifecycle_status,\n capabilities: dto.capabilities,\n externalUrl: dto.external_url,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toRepository(dto: RepositoryDto): Repository {\n return {\n connectionId: dto.connection_id,\n externalRepositoryId: dto.external_repository_id,\n owner: dto.owner,\n name: dto.name,\n fullName: dto.full_name,\n defaultBranch: dto.default_branch,\n visibility: dto.visibility,\n cloneUrl: dto.clone_url,\n htmlUrl: dto.html_url,\n };\n}\n\nexport function toWebhookConnection(dto: WebhookConnectionDto): WebhookConnection {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n name: dto.name,\n slug: dto.slug,\n lifecycleStatus: dto.lifecycle_status,\n inboundUrl: dto.inbound_url,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n"],"names":["toIntegrationProvider","dto","provider","displayName","display_name","capabilities","toInstallRedirect","installUrl","install_url","toIntegrationConnection","id","workspaceId","workspace_id","externalAccountId","external_account_id","slug","lifecycleStatus","lifecycle_status","externalUrl","external_url","createdAt","created_at","updatedAt","updated_at","toRepository","connectionId","connection_id","externalRepositoryId","external_repository_id","owner","name","fullName","full_name","defaultBranch","default_branch","visibility","cloneUrl","clone_url","htmlUrl","html_url","toWebhookConnection","inboundUrl","inbound_url"],"mappings":"AAcA,OAAO,SAASA,sBAAsBC,GAA2B;IAC/D,OAAO;QAACC,UAAUD,IAAIC,QAAQ;QAAEC,aAAaF,IAAIG,YAAY;QAAEC,cAAcJ,IAAII,YAAY;IAAA;AAC/F;AAEA,OAAO,SAASC,kBAAkBL,GAA0B;IAC1D,OAAO;QAACM,YAAYN,IAAIO,WAAW;IAAA;AACrC;AAEA,OAAO,SAASC,wBAAwBR,GAA6B;IACnE,OAAO;QACLS,IAAIT,IAAIS,EAAE;QACVC,aAAaV,IAAIW,YAAY;QAC7BV,UAAUD,IAAIC,QAAQ;QACtBW,mBAAmBZ,IAAIa,mBAAmB;QAC1CC,MAAMd,IAAIc,IAAI;QACdZ,aAAaF,IAAIG,YAAY;QAC7BY,iBAAiBf,IAAIgB,gBAAgB;QACrCZ,cAAcJ,IAAII,YAAY;QAC9Ba,aAAajB,IAAIkB,YAAY;QAC7BC,WAAWnB,IAAIoB,UAAU;QACzBC,WAAWrB,IAAIsB,UAAU;IAC3B;AACF;AAEA,OAAO,SAASC,aAAavB,GAAkB;IAC7C,OAAO;QACLwB,cAAcxB,IAAIyB,aAAa;QAC/BC,sBAAsB1B,IAAI2B,sBAAsB;QAChDC,OAAO5B,IAAI4B,KAAK;QAChBC,MAAM7B,IAAI6B,IAAI;QACdC,UAAU9B,IAAI+B,SAAS;QACvBC,eAAehC,IAAIiC,cAAc;QACjCC,YAAYlC,IAAIkC,UAAU;QAC1BC,UAAUnC,IAAIoC,SAAS;QACvBC,SAASrC,IAAIsC,QAAQ;IACvB;AACF;AAEA,OAAO,SAASC,oBAAoBvC,GAAyB;IAC3D,OAAO;QACLS,IAAIT,IAAIS,EAAE;QACVC,aAAaV,IAAIW,YAAY;QAC7BkB,MAAM7B,IAAI6B,IAAI;QACdf,MAAMd,IAAIc,IAAI;QACdC,iBAAiBf,IAAIgB,gBAAgB;QACrCwB,YAAYxC,IAAIyC,WAAW;QAC3BtB,WAAWnB,IAAIoB,UAAU;QACzBC,WAAWrB,IAAIsB,UAAU;IAC3B;AACF"}
1
+ {"version":3,"sources":["../../../src/hooks/api/integration-mapper.ts"],"sourcesContent":["import type {\n IntegrationConnectionDto,\n IntegrationProviderDto,\n RepositoryDto,\n} from '@shipfox/api-integration-core-dto';\nimport type {JiraAccessibleResourceDto} from '@shipfox/api-integration-jira-dto';\nimport type {WebhookConnectionDto} from '@shipfox/api-integration-webhook-dto';\nimport type {\n InstallRedirect,\n IntegrationConnection,\n IntegrationProvider,\n JiraSite,\n Repository,\n WebhookConnection,\n} from '#core/models.js';\n\nexport function toIntegrationProvider(dto: IntegrationProviderDto): IntegrationProvider {\n return {provider: dto.provider, displayName: dto.display_name, capabilities: dto.capabilities};\n}\n\nexport function toInstallRedirect(dto: {install_url: string}): InstallRedirect {\n return {installUrl: dto.install_url};\n}\n\nexport function toJiraSite(dto: JiraAccessibleResourceDto): JiraSite {\n return {cloudId: dto.cloud_id, name: dto.name, url: dto.url, scopes: dto.scopes};\n}\n\nexport function toIntegrationConnection(dto: IntegrationConnectionDto): IntegrationConnection {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n provider: dto.provider,\n externalAccountId: dto.external_account_id,\n slug: dto.slug,\n displayName: dto.display_name,\n lifecycleStatus: dto.lifecycle_status,\n capabilities: dto.capabilities,\n externalUrl: dto.external_url,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toRepository(dto: RepositoryDto): Repository {\n return {\n connectionId: dto.connection_id,\n externalRepositoryId: dto.external_repository_id,\n owner: dto.owner,\n name: dto.name,\n fullName: dto.full_name,\n defaultBranch: dto.default_branch,\n visibility: dto.visibility,\n cloneUrl: dto.clone_url,\n htmlUrl: dto.html_url,\n };\n}\n\nexport function toWebhookConnection(dto: WebhookConnectionDto): WebhookConnection {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n name: dto.name,\n slug: dto.slug,\n lifecycleStatus: dto.lifecycle_status,\n inboundUrl: dto.inbound_url,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n"],"names":["toIntegrationProvider","dto","provider","displayName","display_name","capabilities","toInstallRedirect","installUrl","install_url","toJiraSite","cloudId","cloud_id","name","url","scopes","toIntegrationConnection","id","workspaceId","workspace_id","externalAccountId","external_account_id","slug","lifecycleStatus","lifecycle_status","externalUrl","external_url","createdAt","created_at","updatedAt","updated_at","toRepository","connectionId","connection_id","externalRepositoryId","external_repository_id","owner","fullName","full_name","defaultBranch","default_branch","visibility","cloneUrl","clone_url","htmlUrl","html_url","toWebhookConnection","inboundUrl","inbound_url"],"mappings":"AAgBA,OAAO,SAASA,sBAAsBC,GAA2B;IAC/D,OAAO;QAACC,UAAUD,IAAIC,QAAQ;QAAEC,aAAaF,IAAIG,YAAY;QAAEC,cAAcJ,IAAII,YAAY;IAAA;AAC/F;AAEA,OAAO,SAASC,kBAAkBL,GAA0B;IAC1D,OAAO;QAACM,YAAYN,IAAIO,WAAW;IAAA;AACrC;AAEA,OAAO,SAASC,WAAWR,GAA8B;IACvD,OAAO;QAACS,SAAST,IAAIU,QAAQ;QAAEC,MAAMX,IAAIW,IAAI;QAAEC,KAAKZ,IAAIY,GAAG;QAAEC,QAAQb,IAAIa,MAAM;IAAA;AACjF;AAEA,OAAO,SAASC,wBAAwBd,GAA6B;IACnE,OAAO;QACLe,IAAIf,IAAIe,EAAE;QACVC,aAAahB,IAAIiB,YAAY;QAC7BhB,UAAUD,IAAIC,QAAQ;QACtBiB,mBAAmBlB,IAAImB,mBAAmB;QAC1CC,MAAMpB,IAAIoB,IAAI;QACdlB,aAAaF,IAAIG,YAAY;QAC7BkB,iBAAiBrB,IAAIsB,gBAAgB;QACrClB,cAAcJ,IAAII,YAAY;QAC9BmB,aAAavB,IAAIwB,YAAY;QAC7BC,WAAWzB,IAAI0B,UAAU;QACzBC,WAAW3B,IAAI4B,UAAU;IAC3B;AACF;AAEA,OAAO,SAASC,aAAa7B,GAAkB;IAC7C,OAAO;QACL8B,cAAc9B,IAAI+B,aAAa;QAC/BC,sBAAsBhC,IAAIiC,sBAAsB;QAChDC,OAAOlC,IAAIkC,KAAK;QAChBvB,MAAMX,IAAIW,IAAI;QACdwB,UAAUnC,IAAIoC,SAAS;QACvBC,eAAerC,IAAIsC,cAAc;QACjCC,YAAYvC,IAAIuC,UAAU;QAC1BC,UAAUxC,IAAIyC,SAAS;QACvBC,SAAS1C,IAAI2C,QAAQ;IACvB;AACF;AAEA,OAAO,SAASC,oBAAoB5C,GAAyB;IAC3D,OAAO;QACLe,IAAIf,IAAIe,EAAE;QACVC,aAAahB,IAAIiB,YAAY;QAC7BN,MAAMX,IAAIW,IAAI;QACdS,MAAMpB,IAAIoB,IAAI;QACdC,iBAAiBrB,IAAIsB,gBAAgB;QACrCuB,YAAY7C,IAAI8C,WAAW;QAC3BrB,WAAWzB,IAAI0B,UAAU;QACzBC,WAAW3B,IAAI4B,UAAU;IAC3B;AACF"}
@@ -1,11 +1,12 @@
1
1
  import type { IntegrationCapabilityDto, UpdateIntegrationConnectionBodyDto } from '@shipfox/api-integration-core-dto';
2
2
  import type { CreateGiteaConnectionBodyDto } from '@shipfox/api-integration-gitea-dto';
3
3
  import type { CreateGithubInstallBodyDto } from '@shipfox/api-integration-github-dto';
4
+ import type { CompleteJiraSiteSelectionBodyDto, CreateJiraInstallBodyDto, JiraCallbackQueryDto } from '@shipfox/api-integration-jira-dto';
4
5
  import type { CreateLinearInstallBodyDto, LinearCallbackQueryDto } from '@shipfox/api-integration-linear-dto';
5
6
  import type { CreateSentryInstallBodyDto, SentryConnectBodyDto } from '@shipfox/api-integration-sentry-dto';
6
7
  import type { CreateSlackInstallBodyDto, SlackCallbackQueryDto } from '@shipfox/api-integration-slack-dto';
7
8
  import { type FetchQueryOptions, type InfiniteData, type UseInfiniteQueryOptions } from '@tanstack/react-query';
8
- import { type InstallRedirect, type IntegrationConnection, type IntegrationProvider, type RepositoryPage } from '#core/models.js';
9
+ import { type InstallRedirect, type IntegrationConnection, type IntegrationProvider, type JiraSite, type RepositoryPage } from '#core/models.js';
9
10
  export declare const integrationsQueryKeys: {
10
11
  all: readonly ["integrations"];
11
12
  providers: (capability: IntegrationCapabilityDto | "all") => readonly ["integrations", "providers", "source_control" | "agent_tools" | "all"];
@@ -47,6 +48,7 @@ export declare function completeGithubCallback({ code, installationId, state, se
47
48
  }): Promise<IntegrationConnection>;
48
49
  export declare function createSentryInstall(body: CreateSentryInstallBodyDto): Promise<InstallRedirect>;
49
50
  export declare function createLinearInstall(body: CreateLinearInstallBodyDto): Promise<InstallRedirect>;
51
+ export declare function createJiraInstall(body: CreateJiraInstallBodyDto): Promise<InstallRedirect>;
50
52
  export declare function createSlackInstall(body: CreateSlackInstallBodyDto): Promise<InstallRedirect>;
51
53
  export declare function completeLinearCallback({ query, token, }: {
52
54
  query: LinearCallbackQueryDto;
@@ -56,6 +58,17 @@ export declare function completeSlackCallback({ query, token, }: {
56
58
  query: SlackCallbackQueryDto;
57
59
  token: string;
58
60
  }): Promise<IntegrationConnection>;
61
+ export type JiraCallbackResult = IntegrationConnection | {
62
+ sites: JiraSite[];
63
+ };
64
+ export declare function completeJiraCallback({ query, token, }: {
65
+ query: JiraCallbackQueryDto;
66
+ token: string;
67
+ }): Promise<JiraCallbackResult>;
68
+ export declare function completeJiraSiteSelection({ body, token, }: {
69
+ body: CompleteJiraSiteSelectionBodyDto;
70
+ token: string;
71
+ }): Promise<IntegrationConnection>;
59
72
  export declare function connectSentry({ body, token }: {
60
73
  body: SentryConnectBodyDto;
61
74
  token: string;
@@ -96,6 +109,9 @@ export declare function useCreateLinearInstallMutation(): import("@tanstack/reac
96
109
  export declare function useCreateSlackInstallMutation(): import("@tanstack/react-query").UseMutationResult<InstallRedirect, Error, {
97
110
  workspace_id: string;
98
111
  }, unknown>;
112
+ export declare function useCreateJiraInstallMutation(): import("@tanstack/react-query").UseMutationResult<InstallRedirect, Error, {
113
+ workspace_id: string;
114
+ }, unknown>;
99
115
  export declare function useCompleteLinearCallbackMutation(): import("@tanstack/react-query").UseMutationResult<IntegrationConnection, Error, {
100
116
  query: LinearCallbackQueryDto;
101
117
  token: string;
@@ -104,6 +120,14 @@ export declare function useCompleteSlackCallbackMutation(): import("@tanstack/re
104
120
  query: SlackCallbackQueryDto;
105
121
  token: string;
106
122
  }, unknown>;
123
+ export declare function useCompleteJiraCallbackMutation(): import("@tanstack/react-query").UseMutationResult<JiraCallbackResult, Error, {
124
+ query: JiraCallbackQueryDto;
125
+ token: string;
126
+ }, unknown>;
127
+ export declare function useCompleteJiraSiteSelectionMutation(): import("@tanstack/react-query").UseMutationResult<IntegrationConnection, Error, {
128
+ body: CompleteJiraSiteSelectionBodyDto;
129
+ token: string;
130
+ }, unknown>;
107
131
  export declare function useUpdateIntegrationConnectionMutation(): import("@tanstack/react-query").UseMutationResult<IntegrationConnection, Error, {
108
132
  connectionId: string;
109
133
  body: UpdateIntegrationConnectionBodyDto;
@@ -1 +1 @@
1
- {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integrations.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,17 @@
1
1
  import { integrationConnectionDtoSchema, listIntegrationConnectionsResponseSchema, listIntegrationProvidersResponseSchema, listRepositoriesResponseSchema } from '@shipfox/api-integration-core-dto';
2
2
  import { createGiteaConnectionResponseSchema } from '@shipfox/api-integration-gitea-dto';
3
3
  import { createGithubInstallResponseSchema, githubCallbackResponseSchema } from '@shipfox/api-integration-github-dto';
4
+ import { createJiraInstallResponseSchema, jiraCallbackResponseSchema } from '@shipfox/api-integration-jira-dto';
4
5
  import { createLinearInstallResponseSchema, linearCallbackResponseSchema } from '@shipfox/api-integration-linear-dto';
5
6
  import { createSentryInstallResponseSchema, sentryConnectResponseSchema } from '@shipfox/api-integration-sentry-dto';
6
7
  import { createSlackInstallResponseSchema, slackCallbackResponseSchema } from '@shipfox/api-integration-slack-dto';
7
8
  import { checkedApiRequest, emptyResponseSchema } from '@shipfox/client-api';
8
9
  import { infiniteQueryOptions, queryOptions, useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
9
10
  import { isUsableConnection } from '#core/models.js';
11
+ import { serializeJiraCallbackQuery } from '#jira-callback.js';
10
12
  import { serializeLinearCallbackQuery } from '#linear-callback.js';
11
13
  import { serializeSlackCallbackQuery } from '#slack-callback.js';
12
- import { toInstallRedirect, toIntegrationConnection, toIntegrationProvider, toRepository } from './integration-mapper.js';
14
+ import { toInstallRedirect, toIntegrationConnection, toIntegrationProvider, toJiraSite, toRepository } from './integration-mapper.js';
13
15
  export const integrationsQueryKeys = {
14
16
  all: [
15
17
  'integrations'
@@ -124,6 +126,12 @@ export async function createLinearInstall(body) {
124
126
  body
125
127
  }));
126
128
  }
129
+ export async function createJiraInstall(body) {
130
+ return toInstallRedirect(await checkedApiRequest(createJiraInstallResponseSchema, '/integrations/jira/install', {
131
+ method: 'POST',
132
+ body
133
+ }));
134
+ }
127
135
  export async function createSlackInstall(body) {
128
136
  return toInstallRedirect(await checkedApiRequest(createSlackInstallResponseSchema, '/integrations/slack/install', {
129
137
  method: 'POST',
@@ -146,6 +154,26 @@ export async function completeSlackCallback({ query, token }) {
146
154
  });
147
155
  return toIntegrationConnection(response);
148
156
  }
157
+ export async function completeJiraCallback({ query, token }) {
158
+ const response = await checkedApiRequest(jiraCallbackResponseSchema, `/integrations/jira/callback/api?${serializeJiraCallbackQuery(query)}`, {
159
+ headers: {
160
+ authorization: `Bearer ${token}`
161
+ }
162
+ });
163
+ return 'sites' in response ? {
164
+ sites: response.sites.map(toJiraSite)
165
+ } : toIntegrationConnection(response);
166
+ }
167
+ export async function completeJiraSiteSelection({ body, token }) {
168
+ const response = await checkedApiRequest(integrationConnectionDtoSchema, '/integrations/jira/callback/site', {
169
+ method: 'POST',
170
+ body,
171
+ headers: {
172
+ authorization: `Bearer ${token}`
173
+ }
174
+ });
175
+ return toIntegrationConnection(response);
176
+ }
149
177
  // Called from the callback route with an explicit bearer (same as the GitHub
150
178
  // callback): the route refreshes auth itself before forwarding the grant code.
151
179
  export async function connectSentry({ body, token }) {
@@ -265,6 +293,11 @@ export function useCreateSlackInstallMutation() {
265
293
  mutationFn: createSlackInstall
266
294
  });
267
295
  }
296
+ export function useCreateJiraInstallMutation() {
297
+ return useMutation({
298
+ mutationFn: createJiraInstall
299
+ });
300
+ }
268
301
  export function useCompleteLinearCallbackMutation() {
269
302
  return useMutation({
270
303
  mutationFn: completeLinearCallback
@@ -275,6 +308,16 @@ export function useCompleteSlackCallbackMutation() {
275
308
  mutationFn: completeSlackCallback
276
309
  });
277
310
  }
311
+ export function useCompleteJiraCallbackMutation() {
312
+ return useMutation({
313
+ mutationFn: completeJiraCallback
314
+ });
315
+ }
316
+ export function useCompleteJiraSiteSelectionMutation() {
317
+ return useMutation({
318
+ mutationFn: completeJiraSiteSelection
319
+ });
320
+ }
278
321
  export function useUpdateIntegrationConnectionMutation() {
279
322
  const queryClient = useQueryClient();
280
323
  return useMutation({