@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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +18 -0
- package/dist/application/complete-integration-callback.d.ts +11 -0
- package/dist/application/complete-integration-callback.d.ts.map +1 -1
- package/dist/application/complete-integration-callback.js +38 -8
- package/dist/application/complete-integration-callback.js.map +1 -1
- package/dist/components/callback-status-shell.d.ts +1 -1
- package/dist/components/callback-status-shell.d.ts.map +1 -1
- package/dist/components/callback-status-shell.js.map +1 -1
- package/dist/core/models.d.ts +6 -0
- package/dist/core/models.d.ts.map +1 -1
- package/dist/core/models.js +12 -0
- package/dist/core/models.js.map +1 -1
- package/dist/feature.d.ts +8 -0
- package/dist/feature.d.ts.map +1 -1
- package/dist/feature.js +10 -0
- package/dist/feature.js.map +1 -1
- package/dist/hooks/api/integration-mapper.d.ts +3 -1
- package/dist/hooks/api/integration-mapper.d.ts.map +1 -1
- package/dist/hooks/api/integration-mapper.js +8 -0
- package/dist/hooks/api/integration-mapper.js.map +1 -1
- package/dist/hooks/api/integrations.d.ts +25 -1
- package/dist/hooks/api/integrations.d.ts.map +1 -1
- package/dist/hooks/api/integrations.js +44 -1
- package/dist/hooks/api/integrations.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/jira-callback-state.d.ts +9 -0
- package/dist/jira-callback-state.d.ts.map +1 -0
- package/dist/jira-callback-state.js +16 -0
- package/dist/jira-callback-state.js.map +1 -0
- package/dist/jira-callback.d.ts +11 -0
- package/dist/jira-callback.d.ts.map +1 -0
- package/dist/jira-callback.js +59 -0
- package/dist/jira-callback.js.map +1 -0
- package/dist/jira-form-errors.d.ts +8 -0
- package/dist/jira-form-errors.d.ts.map +1 -0
- package/dist/jira-form-errors.js +55 -0
- package/dist/jira-form-errors.js.map +1 -0
- package/dist/pages/jira-callback-page.d.ts +2 -0
- package/dist/pages/jira-callback-page.d.ts.map +1 -0
- package/dist/pages/jira-callback-page.js +341 -0
- package/dist/pages/jira-callback-page.js.map +1 -0
- package/dist/pages/jira-install-page.d.ts +2 -0
- package/dist/pages/jira-install-page.d.ts.map +1 -0
- package/dist/pages/jira-install-page.js +26 -0
- package/dist/pages/jira-install-page.js.map +1 -0
- package/dist/provider-catalog.d.ts +1 -1
- package/dist/provider-catalog.d.ts.map +1 -1
- package/dist/provider-catalog.js +5 -0
- package/dist/provider-catalog.js.map +1 -1
- package/dist/routes/jira-callback.d.ts +8 -0
- package/dist/routes/jira-callback.d.ts.map +1 -0
- package/dist/routes/jira-callback.js +9 -0
- package/dist/routes/jira-callback.js.map +1 -0
- package/dist/routes/jira.d.ts +6 -0
- package/dist/routes/jira.d.ts.map +1 -0
- package/dist/routes/jira.js +7 -0
- package/dist/routes/jira.js.map +1 -0
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +9 -8
- package/src/application/complete-integration-callback.test.ts +44 -1
- package/src/application/complete-integration-callback.ts +61 -8
- package/src/components/callback-status-shell.tsx +4 -1
- package/src/components/integration-usage-events.test.ts +13 -0
- package/src/core/models.ts +18 -0
- package/src/feature.ts +10 -0
- package/src/hooks/api/integration-mapper.ts +6 -0
- package/src/hooks/api/integrations.test.ts +92 -0
- package/src/hooks/api/integrations.ts +71 -0
- package/src/index.ts +4 -0
- package/src/jira-callback-state.ts +19 -0
- package/src/jira-callback.test.ts +76 -0
- package/src/jira-callback.ts +67 -0
- package/src/jira-form-errors.test.ts +57 -0
- package/src/jira-form-errors.ts +94 -0
- package/src/pages/jira-callback-page.test.tsx +250 -0
- package/src/pages/jira-callback-page.tsx +366 -0
- package/src/pages/jira-install-page.tsx +28 -0
- package/src/provider-catalog.test.ts +6 -0
- package/src/provider-catalog.ts +7 -1
- package/src/routes/jira-callback.tsx +8 -0
- package/src/routes/jira.tsx +4 -0
- package/tsconfig.build.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
$ shipfox-swc
|
|
2
|
-
Successfully compiled:
|
|
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,
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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"}
|
package/dist/core/models.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/core/models.js
CHANGED
|
@@ -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
|
package/dist/core/models.js.map
CHANGED
|
@@ -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":"
|
|
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";
|
package/dist/feature.d.ts.map
CHANGED
|
@@ -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
|
|
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',
|
package/dist/feature.js.map
CHANGED
|
@@ -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","
|
|
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":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kCAAkC,EACnC,MAAM,mCAAmC,CAAC;AAO3C,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,oCAAoC,CAAC;AAErF,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,qCAAqC,CAAC;AAKpF,OAAO,KAAK,EACV,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,qCAAqC,CAAC;AAK7C,OAAO,KAAK,EACV,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,qCAAqC,CAAC;AAK7C,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAGjB,KAAK,uBAAuB,EAK7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAExB,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;
|
|
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({
|