@shipfox/client-integrations 0.2.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 (243) hide show
  1. package/.storybook/main.ts +1 -0
  2. package/.storybook/preview.css +4 -0
  3. package/.storybook/preview.tsx +56 -0
  4. package/.turbo/turbo-build.log +2 -0
  5. package/.turbo/turbo-type$colon$emit.log +1 -0
  6. package/.turbo/turbo-type.log +1 -0
  7. package/CHANGELOG.md +207 -0
  8. package/LICENSE +21 -0
  9. package/dist/components/connection-picker.d.ts +7 -0
  10. package/dist/components/connection-picker.d.ts.map +1 -0
  11. package/dist/components/connection-picker.js +98 -0
  12. package/dist/components/connection-picker.js.map +1 -0
  13. package/dist/components/installed-integrations-section.d.ts +14 -0
  14. package/dist/components/installed-integrations-section.d.ts.map +1 -0
  15. package/dist/components/installed-integrations-section.js +203 -0
  16. package/dist/components/installed-integrations-section.js.map +1 -0
  17. package/dist/components/integration-delete-confirm-modal.d.ts +10 -0
  18. package/dist/components/integration-delete-confirm-modal.d.ts.map +1 -0
  19. package/dist/components/integration-delete-confirm-modal.js +61 -0
  20. package/dist/components/integration-delete-confirm-modal.js.map +1 -0
  21. package/dist/components/integration-gallery-for-workspace.d.ts +9 -0
  22. package/dist/components/integration-gallery-for-workspace.d.ts.map +1 -0
  23. package/dist/components/integration-gallery-for-workspace.js +169 -0
  24. package/dist/components/integration-gallery-for-workspace.js.map +1 -0
  25. package/dist/components/integration-gallery.d.ts +8 -0
  26. package/dist/components/integration-gallery.d.ts.map +1 -0
  27. package/dist/components/integration-gallery.js +26 -0
  28. package/dist/components/integration-gallery.js.map +1 -0
  29. package/dist/components/integration-gallery.stories.d.ts +26 -0
  30. package/dist/components/integration-gallery.stories.d.ts.map +1 -0
  31. package/dist/components/integration-gallery.stories.js +335 -0
  32. package/dist/components/integration-gallery.stories.js.map +1 -0
  33. package/dist/components/integration-usage-events.d.ts +4 -0
  34. package/dist/components/integration-usage-events.d.ts.map +1 -0
  35. package/dist/components/integration-usage-events.js +127 -0
  36. package/dist/components/integration-usage-events.js.map +1 -0
  37. package/dist/components/integration-usage-modal.d.ts +16 -0
  38. package/dist/components/integration-usage-modal.d.ts.map +1 -0
  39. package/dist/components/integration-usage-modal.js +184 -0
  40. package/dist/components/integration-usage-modal.js.map +1 -0
  41. package/dist/components/provider-grid.d.ts +14 -0
  42. package/dist/components/provider-grid.d.ts.map +1 -0
  43. package/dist/components/provider-grid.js +152 -0
  44. package/dist/components/provider-grid.js.map +1 -0
  45. package/dist/components/redirect-install-page.d.ts +19 -0
  46. package/dist/components/redirect-install-page.d.ts.map +1 -0
  47. package/dist/components/redirect-install-page.js +68 -0
  48. package/dist/components/redirect-install-page.js.map +1 -0
  49. package/dist/components/repository-picker.d.ts +15 -0
  50. package/dist/components/repository-picker.d.ts.map +1 -0
  51. package/dist/components/repository-picker.js +78 -0
  52. package/dist/components/repository-picker.js.map +1 -0
  53. package/dist/components/webhook/copyable-value.d.ts +10 -0
  54. package/dist/components/webhook/copyable-value.d.ts.map +1 -0
  55. package/dist/components/webhook/copyable-value.js +65 -0
  56. package/dist/components/webhook/copyable-value.js.map +1 -0
  57. package/dist/components/webhook/webhook-create-modal.d.ts +10 -0
  58. package/dist/components/webhook/webhook-create-modal.d.ts.map +1 -0
  59. package/dist/components/webhook/webhook-create-modal.js +233 -0
  60. package/dist/components/webhook/webhook-create-modal.js.map +1 -0
  61. package/dist/components/webhook/webhook-form-errors.d.ts +11 -0
  62. package/dist/components/webhook/webhook-form-errors.d.ts.map +1 -0
  63. package/dist/components/webhook/webhook-form-errors.js +27 -0
  64. package/dist/components/webhook/webhook-form-errors.js.map +1 -0
  65. package/dist/components/webhook/webhook-modals.stories.d.ts +25 -0
  66. package/dist/components/webhook/webhook-modals.stories.d.ts.map +1 -0
  67. package/dist/components/webhook/webhook-modals.stories.js +222 -0
  68. package/dist/components/webhook/webhook-modals.stories.js.map +1 -0
  69. package/dist/components/webhook/webhook-public-endpoint-alert.d.ts +2 -0
  70. package/dist/components/webhook/webhook-public-endpoint-alert.d.ts.map +1 -0
  71. package/dist/components/webhook/webhook-public-endpoint-alert.js +20 -0
  72. package/dist/components/webhook/webhook-public-endpoint-alert.js.map +1 -0
  73. package/dist/components/webhook/webhook-usage-details.d.ts +7 -0
  74. package/dist/components/webhook/webhook-usage-details.d.ts.map +1 -0
  75. package/dist/components/webhook/webhook-usage-details.js +49 -0
  76. package/dist/components/webhook/webhook-usage-details.js.map +1 -0
  77. package/dist/connection-status-badge.d.ts +12 -0
  78. package/dist/connection-status-badge.d.ts.map +1 -0
  79. package/dist/connection-status-badge.js +34 -0
  80. package/dist/connection-status-badge.js.map +1 -0
  81. package/dist/feature.d.ts +37 -0
  82. package/dist/feature.d.ts.map +1 -0
  83. package/dist/feature.js +48 -0
  84. package/dist/feature.js.map +1 -0
  85. package/dist/hooks/api/integrations.d.ts +265 -0
  86. package/dist/hooks/api/integrations.d.ts.map +1 -0
  87. package/dist/hooks/api/integrations.js +229 -0
  88. package/dist/hooks/api/integrations.js.map +1 -0
  89. package/dist/hooks/api/webhook-connections.d.ts +91 -0
  90. package/dist/hooks/api/webhook-connections.d.ts.map +1 -0
  91. package/dist/hooks/api/webhook-connections.js +97 -0
  92. package/dist/hooks/api/webhook-connections.js.map +1 -0
  93. package/dist/index.d.ts +17 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +18 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/integration-icon.d.ts +17 -0
  98. package/dist/integration-icon.d.ts.map +1 -0
  99. package/dist/integration-icon.js +22 -0
  100. package/dist/integration-icon.js.map +1 -0
  101. package/dist/linear-callback.d.ts +17 -0
  102. package/dist/linear-callback.d.ts.map +1 -0
  103. package/dist/linear-callback.js +113 -0
  104. package/dist/linear-callback.js.map +1 -0
  105. package/dist/pages/gitea-form-errors.d.ts +11 -0
  106. package/dist/pages/gitea-form-errors.d.ts.map +1 -0
  107. package/dist/pages/gitea-form-errors.js +35 -0
  108. package/dist/pages/gitea-form-errors.js.map +1 -0
  109. package/dist/pages/gitea-install-page.d.ts +2 -0
  110. package/dist/pages/gitea-install-page.d.ts.map +1 -0
  111. package/dist/pages/gitea-install-page.js +139 -0
  112. package/dist/pages/gitea-install-page.js.map +1 -0
  113. package/dist/pages/github-install-page.d.ts +2 -0
  114. package/dist/pages/github-install-page.d.ts.map +1 -0
  115. package/dist/pages/github-install-page.js +11 -0
  116. package/dist/pages/github-install-page.js.map +1 -0
  117. package/dist/pages/linear-callback-page.d.ts +2 -0
  118. package/dist/pages/linear-callback-page.d.ts.map +1 -0
  119. package/dist/pages/linear-callback-page.js +192 -0
  120. package/dist/pages/linear-callback-page.js.map +1 -0
  121. package/dist/pages/linear-install-page.d.ts +2 -0
  122. package/dist/pages/linear-install-page.d.ts.map +1 -0
  123. package/dist/pages/linear-install-page.js +24 -0
  124. package/dist/pages/linear-install-page.js.map +1 -0
  125. package/dist/pages/sentry-callback-page.d.ts +2 -0
  126. package/dist/pages/sentry-callback-page.d.ts.map +1 -0
  127. package/dist/pages/sentry-callback-page.js +256 -0
  128. package/dist/pages/sentry-callback-page.js.map +1 -0
  129. package/dist/pages/sentry-install-page.d.ts +2 -0
  130. package/dist/pages/sentry-install-page.d.ts.map +1 -0
  131. package/dist/pages/sentry-install-page.js +17 -0
  132. package/dist/pages/sentry-install-page.js.map +1 -0
  133. package/dist/pages/source-control-onboarding-page.d.ts +2 -0
  134. package/dist/pages/source-control-onboarding-page.d.ts.map +1 -0
  135. package/dist/pages/source-control-onboarding-page.js +37 -0
  136. package/dist/pages/source-control-onboarding-page.js.map +1 -0
  137. package/dist/provider-catalog.d.ts +15 -0
  138. package/dist/provider-catalog.d.ts.map +1 -0
  139. package/dist/provider-catalog.js +28 -0
  140. package/dist/provider-catalog.js.map +1 -0
  141. package/dist/routes/gitea.d.ts +6 -0
  142. package/dist/routes/gitea.d.ts.map +1 -0
  143. package/dist/routes/gitea.js +7 -0
  144. package/dist/routes/gitea.js.map +1 -0
  145. package/dist/routes/github-callback.d.ts +6 -0
  146. package/dist/routes/github-callback.d.ts.map +1 -0
  147. package/dist/routes/github-callback.js +129 -0
  148. package/dist/routes/github-callback.js.map +1 -0
  149. package/dist/routes/github.d.ts +6 -0
  150. package/dist/routes/github.d.ts.map +1 -0
  151. package/dist/routes/github.js +7 -0
  152. package/dist/routes/github.js.map +1 -0
  153. package/dist/routes/integrations.d.ts +6 -0
  154. package/dist/routes/integrations.d.ts.map +1 -0
  155. package/dist/routes/integrations.js +7 -0
  156. package/dist/routes/integrations.js.map +1 -0
  157. package/dist/routes/linear-callback.d.ts +6 -0
  158. package/dist/routes/linear-callback.d.ts.map +1 -0
  159. package/dist/routes/linear-callback.js +7 -0
  160. package/dist/routes/linear-callback.js.map +1 -0
  161. package/dist/routes/linear.d.ts +6 -0
  162. package/dist/routes/linear.d.ts.map +1 -0
  163. package/dist/routes/linear.js +7 -0
  164. package/dist/routes/linear.js.map +1 -0
  165. package/dist/routes/sentry-callback.d.ts +6 -0
  166. package/dist/routes/sentry-callback.d.ts.map +1 -0
  167. package/dist/routes/sentry-callback.js +7 -0
  168. package/dist/routes/sentry-callback.js.map +1 -0
  169. package/dist/routes/sentry.d.ts +6 -0
  170. package/dist/routes/sentry.d.ts.map +1 -0
  171. package/dist/routes/sentry.js +7 -0
  172. package/dist/routes/sentry.js.map +1 -0
  173. package/dist/sentry-callback.d.ts +35 -0
  174. package/dist/sentry-callback.d.ts.map +1 -0
  175. package/dist/sentry-callback.js +132 -0
  176. package/dist/sentry-callback.js.map +1 -0
  177. package/dist/tsconfig.test.tsbuildinfo +1 -0
  178. package/package.json +120 -0
  179. package/src/components/connection-picker.tsx +89 -0
  180. package/src/components/installed-integrations-section.tsx +198 -0
  181. package/src/components/integration-delete-confirm-modal.tsx +62 -0
  182. package/src/components/integration-gallery-for-workspace.tsx +193 -0
  183. package/src/components/integration-gallery.stories.tsx +302 -0
  184. package/src/components/integration-gallery.test.tsx +692 -0
  185. package/src/components/integration-gallery.tsx +49 -0
  186. package/src/components/integration-usage-events.test.ts +80 -0
  187. package/src/components/integration-usage-events.ts +116 -0
  188. package/src/components/integration-usage-modal.tsx +178 -0
  189. package/src/components/provider-grid.tsx +163 -0
  190. package/src/components/redirect-install-page.test.tsx +98 -0
  191. package/src/components/redirect-install-page.tsx +68 -0
  192. package/src/components/repository-picker.tsx +102 -0
  193. package/src/components/webhook/copyable-value.test.tsx +41 -0
  194. package/src/components/webhook/copyable-value.tsx +72 -0
  195. package/src/components/webhook/webhook-create-modal.tsx +247 -0
  196. package/src/components/webhook/webhook-form-errors.test.ts +45 -0
  197. package/src/components/webhook/webhook-form-errors.ts +32 -0
  198. package/src/components/webhook/webhook-modals.stories.tsx +225 -0
  199. package/src/components/webhook/webhook-public-endpoint-alert.tsx +15 -0
  200. package/src/components/webhook/webhook-usage-details.tsx +44 -0
  201. package/src/connection-status-badge.tsx +38 -0
  202. package/src/feature.ts +47 -0
  203. package/src/hooks/api/integrations.test.ts +105 -0
  204. package/src/hooks/api/integrations.ts +287 -0
  205. package/src/hooks/api/webhook-connections.ts +115 -0
  206. package/src/index.ts +16 -0
  207. package/src/integration-icon.react.test.tsx +40 -0
  208. package/src/integration-icon.test.ts +19 -0
  209. package/src/integration-icon.tsx +26 -0
  210. package/src/linear-callback.test.ts +227 -0
  211. package/src/linear-callback.ts +136 -0
  212. package/src/pages/gitea-form-errors.test.ts +55 -0
  213. package/src/pages/gitea-form-errors.ts +36 -0
  214. package/src/pages/gitea-install-page.tsx +108 -0
  215. package/src/pages/github-install-page.tsx +11 -0
  216. package/src/pages/linear-callback-page.test.tsx +157 -0
  217. package/src/pages/linear-callback-page.tsx +175 -0
  218. package/src/pages/linear-install-page.tsx +26 -0
  219. package/src/pages/sentry-callback-page.test.tsx +205 -0
  220. package/src/pages/sentry-callback-page.tsx +238 -0
  221. package/src/pages/sentry-install-page.tsx +17 -0
  222. package/src/pages/source-control-onboarding-page.test.tsx +46 -0
  223. package/src/pages/source-control-onboarding-page.tsx +26 -0
  224. package/src/provider-catalog.test.ts +42 -0
  225. package/src/provider-catalog.ts +49 -0
  226. package/src/routes/gitea.tsx +4 -0
  227. package/src/routes/github-callback.tsx +114 -0
  228. package/src/routes/github.tsx +4 -0
  229. package/src/routes/integrations.tsx +4 -0
  230. package/src/routes/linear-callback.tsx +4 -0
  231. package/src/routes/linear.tsx +4 -0
  232. package/src/routes/sentry-callback.tsx +4 -0
  233. package/src/routes/sentry.tsx +4 -0
  234. package/src/sentry-callback.test.ts +239 -0
  235. package/src/sentry-callback.ts +142 -0
  236. package/test/render.tsx +111 -0
  237. package/test/setup.ts +3 -0
  238. package/tsconfig.build.json +9 -0
  239. package/tsconfig.build.tsbuildinfo +1 -0
  240. package/tsconfig.json +3 -0
  241. package/tsconfig.test.json +8 -0
  242. package/vercel.json +8 -0
  243. package/vitest.config.ts +75 -0
@@ -0,0 +1,265 @@
1
+ import type { IntegrationCapabilityDto, UpdateIntegrationConnectionBodyDto } from '@shipfox/api-integration-core-dto';
2
+ import type { CreateGiteaConnectionBodyDto } from '@shipfox/api-integration-gitea-dto';
3
+ import type { CreateGithubInstallBodyDto } from '@shipfox/api-integration-github-dto';
4
+ import type { CreateLinearInstallBodyDto, LinearCallbackQueryDto } from '@shipfox/api-integration-linear-dto';
5
+ import type { CreateSentryInstallBodyDto, SentryConnectBodyDto } from '@shipfox/api-integration-sentry-dto';
6
+ export declare const integrationsQueryKeys: {
7
+ all: readonly ["integrations"];
8
+ providers: (capability: IntegrationCapabilityDto | "all") => readonly ["integrations", "providers", "source_control" | "agent_tools" | "all"];
9
+ connections: (workspaceId: string, capability: IntegrationCapabilityDto | "all") => readonly ["integrations", "connections", string, "source_control" | "agent_tools" | "all"];
10
+ connectionsByWorkspace: (workspaceId: string) => readonly ["integrations", "connections", string];
11
+ sourceConnections: (workspaceId: string) => readonly ["integrations", "connections", string, "source_control" | "agent_tools" | "all"];
12
+ repositories: (connectionId: string, search: string) => readonly ["integrations", "repositories", string, string];
13
+ };
14
+ export declare function listIntegrationProviders({ capability, signal, }: {
15
+ capability?: IntegrationCapabilityDto;
16
+ signal?: AbortSignal;
17
+ }): Promise<{
18
+ providers: {
19
+ provider: string;
20
+ display_name: string;
21
+ capabilities: ("source_control" | "agent_tools")[];
22
+ }[];
23
+ }>;
24
+ export declare function listIntegrationConnections({ workspaceId, capability, signal, }: {
25
+ workspaceId: string;
26
+ capability?: IntegrationCapabilityDto | undefined;
27
+ signal?: AbortSignal | undefined;
28
+ }): Promise<{
29
+ connections: {
30
+ id: string;
31
+ workspace_id: string;
32
+ provider: string;
33
+ external_account_id: string;
34
+ slug: string;
35
+ display_name: string;
36
+ lifecycle_status: "error" | "active" | "disabled";
37
+ capabilities: ("source_control" | "agent_tools")[];
38
+ created_at: string;
39
+ updated_at: string;
40
+ external_url?: string | undefined;
41
+ }[];
42
+ }>;
43
+ export declare function listSourceConnections({ workspaceId, signal, }: {
44
+ workspaceId: string;
45
+ signal?: AbortSignal;
46
+ }): Promise<{
47
+ connections: {
48
+ id: string;
49
+ workspace_id: string;
50
+ provider: string;
51
+ external_account_id: string;
52
+ slug: string;
53
+ display_name: string;
54
+ lifecycle_status: "error" | "active" | "disabled";
55
+ capabilities: ("source_control" | "agent_tools")[];
56
+ created_at: string;
57
+ updated_at: string;
58
+ external_url?: string | undefined;
59
+ }[];
60
+ }>;
61
+ export declare function createGiteaConnection(body: CreateGiteaConnectionBodyDto): Promise<{
62
+ id: string;
63
+ workspace_id: string;
64
+ provider: string;
65
+ external_account_id: string;
66
+ slug: string;
67
+ display_name: string;
68
+ lifecycle_status: "error" | "active" | "disabled";
69
+ capabilities: ("source_control" | "agent_tools")[];
70
+ created_at: string;
71
+ updated_at: string;
72
+ external_url?: string | undefined;
73
+ }>;
74
+ export declare function createGithubInstall(body: CreateGithubInstallBodyDto): Promise<{
75
+ install_url: string;
76
+ }>;
77
+ export declare function createSentryInstall(body: CreateSentryInstallBodyDto): Promise<{
78
+ install_url: string;
79
+ }>;
80
+ export declare function createLinearInstall(body: CreateLinearInstallBodyDto): Promise<{
81
+ install_url: string;
82
+ }>;
83
+ export declare function completeLinearCallback({ query, token, }: {
84
+ query: LinearCallbackQueryDto;
85
+ token: string;
86
+ }): Promise<{
87
+ id: string;
88
+ workspace_id: string;
89
+ provider: string;
90
+ external_account_id: string;
91
+ slug: string;
92
+ display_name: string;
93
+ lifecycle_status: "error" | "active" | "disabled";
94
+ capabilities: ("source_control" | "agent_tools")[];
95
+ created_at: string;
96
+ updated_at: string;
97
+ external_url?: string | undefined;
98
+ }>;
99
+ export declare function connectSentry({ body, token }: {
100
+ body: SentryConnectBodyDto;
101
+ token: string;
102
+ }): Promise<{
103
+ id: string;
104
+ workspace_id: string;
105
+ provider: string;
106
+ external_account_id: string;
107
+ slug: string;
108
+ display_name: string;
109
+ lifecycle_status: "error" | "active" | "disabled";
110
+ capabilities: ("source_control" | "agent_tools")[];
111
+ created_at: string;
112
+ updated_at: string;
113
+ external_url?: string | undefined;
114
+ }>;
115
+ export declare function listRepositories({ connectionId, cursor, search, signal, }: {
116
+ connectionId: string;
117
+ cursor?: string;
118
+ search?: string;
119
+ signal?: AbortSignal;
120
+ }): Promise<{
121
+ repositories: {
122
+ connection_id: string;
123
+ external_repository_id: string;
124
+ owner: string;
125
+ name: string;
126
+ full_name: string;
127
+ default_branch: string;
128
+ visibility: "unknown" | "public" | "private" | "internal";
129
+ clone_url: string;
130
+ html_url: string;
131
+ }[];
132
+ next_cursor: string | null;
133
+ }>;
134
+ export declare function updateIntegrationConnection({ connectionId, body, }: {
135
+ connectionId: string;
136
+ body: UpdateIntegrationConnectionBodyDto;
137
+ }): Promise<{
138
+ id: string;
139
+ workspace_id: string;
140
+ provider: string;
141
+ external_account_id: string;
142
+ slug: string;
143
+ display_name: string;
144
+ lifecycle_status: "error" | "active" | "disabled";
145
+ capabilities: ("source_control" | "agent_tools")[];
146
+ created_at: string;
147
+ updated_at: string;
148
+ external_url?: string | undefined;
149
+ }>;
150
+ export declare function deleteIntegrationConnection({ connectionId }: {
151
+ connectionId: string;
152
+ }): Promise<void>;
153
+ export declare function useIntegrationProvidersQuery(params?: {
154
+ capability?: IntegrationCapabilityDto;
155
+ }): import("@tanstack/react-query").UseQueryResult<NoInfer<{
156
+ providers: {
157
+ provider: string;
158
+ display_name: string;
159
+ capabilities: ("source_control" | "agent_tools")[];
160
+ }[];
161
+ }>, Error>;
162
+ export declare function useSourceConnectionsQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
163
+ connections: {
164
+ id: string;
165
+ workspace_id: string;
166
+ provider: string;
167
+ external_account_id: string;
168
+ slug: string;
169
+ display_name: string;
170
+ lifecycle_status: "error" | "active" | "disabled";
171
+ capabilities: ("source_control" | "agent_tools")[];
172
+ created_at: string;
173
+ updated_at: string;
174
+ external_url?: string | undefined;
175
+ }[];
176
+ }>, Error>;
177
+ export declare function useIntegrationConnectionsQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
178
+ connections: {
179
+ id: string;
180
+ workspace_id: string;
181
+ provider: string;
182
+ external_account_id: string;
183
+ slug: string;
184
+ display_name: string;
185
+ lifecycle_status: "error" | "active" | "disabled";
186
+ capabilities: ("source_control" | "agent_tools")[];
187
+ created_at: string;
188
+ updated_at: string;
189
+ external_url?: string | undefined;
190
+ }[];
191
+ }>, Error>;
192
+ export declare function useRepositoriesInfiniteQuery(connectionId: string | undefined, options?: {
193
+ search?: string;
194
+ }): import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<{
195
+ repositories: {
196
+ connection_id: string;
197
+ external_repository_id: string;
198
+ owner: string;
199
+ name: string;
200
+ full_name: string;
201
+ default_branch: string;
202
+ visibility: "unknown" | "public" | "private" | "internal";
203
+ clone_url: string;
204
+ html_url: string;
205
+ }[];
206
+ next_cursor: string | null;
207
+ }, unknown>, Error>;
208
+ export declare function useCreateGiteaConnectionMutation(): import("@tanstack/react-query").UseMutationResult<{
209
+ id: string;
210
+ workspace_id: string;
211
+ provider: string;
212
+ external_account_id: string;
213
+ slug: string;
214
+ display_name: string;
215
+ lifecycle_status: "error" | "active" | "disabled";
216
+ capabilities: ("source_control" | "agent_tools")[];
217
+ created_at: string;
218
+ updated_at: string;
219
+ external_url?: string | undefined;
220
+ }, Error, {
221
+ workspace_id: string;
222
+ org: string;
223
+ }, unknown>;
224
+ export declare function useCreateLinearInstallMutation(): import("@tanstack/react-query").UseMutationResult<{
225
+ install_url: string;
226
+ }, Error, {
227
+ workspace_id: string;
228
+ }, unknown>;
229
+ export declare function useCompleteLinearCallbackMutation(): import("@tanstack/react-query").UseMutationResult<{
230
+ id: string;
231
+ workspace_id: string;
232
+ provider: string;
233
+ external_account_id: string;
234
+ slug: string;
235
+ display_name: string;
236
+ lifecycle_status: "error" | "active" | "disabled";
237
+ capabilities: ("source_control" | "agent_tools")[];
238
+ created_at: string;
239
+ updated_at: string;
240
+ external_url?: string | undefined;
241
+ }, Error, {
242
+ query: LinearCallbackQueryDto;
243
+ token: string;
244
+ }, unknown>;
245
+ export declare function useUpdateIntegrationConnectionMutation(): import("@tanstack/react-query").UseMutationResult<{
246
+ id: string;
247
+ workspace_id: string;
248
+ provider: string;
249
+ external_account_id: string;
250
+ slug: string;
251
+ display_name: string;
252
+ lifecycle_status: "error" | "active" | "disabled";
253
+ capabilities: ("source_control" | "agent_tools")[];
254
+ created_at: string;
255
+ updated_at: string;
256
+ external_url?: string | undefined;
257
+ }, Error, {
258
+ connectionId: string;
259
+ body: UpdateIntegrationConnectionBodyDto;
260
+ }, unknown>;
261
+ export declare function useDeleteIntegrationConnectionMutation(): import("@tanstack/react-query").UseMutationResult<void, Error, {
262
+ workspaceId: string;
263
+ connectionId: string;
264
+ }, unknown>;
265
+ //# sourceMappingURL=integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ import { apiRequest } from '@shipfox/client-api';
2
+ import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
3
+ import { serializeLinearCallbackQuery } from '#linear-callback.js';
4
+ export const integrationsQueryKeys = {
5
+ all: [
6
+ 'integrations'
7
+ ],
8
+ providers: (capability)=>[
9
+ ...integrationsQueryKeys.all,
10
+ 'providers',
11
+ capability
12
+ ],
13
+ connections: (workspaceId, capability)=>[
14
+ ...integrationsQueryKeys.all,
15
+ 'connections',
16
+ workspaceId,
17
+ capability
18
+ ],
19
+ // Prefix matching every per-capability connections query for a workspace, so
20
+ // a mutation can refresh all connection views without touching providers or
21
+ // repositories.
22
+ connectionsByWorkspace: (workspaceId)=>[
23
+ ...integrationsQueryKeys.all,
24
+ 'connections',
25
+ workspaceId
26
+ ],
27
+ sourceConnections: (workspaceId)=>integrationsQueryKeys.connections(workspaceId, 'source_control'),
28
+ repositories: (connectionId, search)=>[
29
+ ...integrationsQueryKeys.all,
30
+ 'repositories',
31
+ connectionId,
32
+ search
33
+ ]
34
+ };
35
+ export async function listIntegrationProviders({ capability, signal }) {
36
+ const search = new URLSearchParams();
37
+ if (capability) search.set('capability', capability);
38
+ const query = search.toString();
39
+ const path = query ? `/integration-providers?${query}` : '/integration-providers';
40
+ return await apiRequest(path, {
41
+ signal
42
+ });
43
+ }
44
+ export async function listIntegrationConnections({ workspaceId, capability, signal }) {
45
+ const search = new URLSearchParams({
46
+ workspace_id: workspaceId
47
+ });
48
+ if (capability) search.set('capability', capability);
49
+ return await apiRequest(`/integration-connections?${search.toString()}`, {
50
+ signal
51
+ });
52
+ }
53
+ export async function listSourceConnections({ workspaceId, signal }) {
54
+ const result = await listIntegrationConnections({
55
+ workspaceId,
56
+ capability: 'source_control',
57
+ signal
58
+ });
59
+ // The endpoint returns every lifecycle status (the settings hub needs that),
60
+ // but source-control consumers (onboarding redirect, project creation) only
61
+ // act on usable connections — a disabled/error one must read as "not there".
62
+ return {
63
+ ...result,
64
+ connections: result.connections.filter((connection)=>connection.lifecycle_status === 'active')
65
+ };
66
+ }
67
+ export async function createGiteaConnection(body) {
68
+ return await apiRequest('/integrations/gitea/connections', {
69
+ method: 'POST',
70
+ body
71
+ });
72
+ }
73
+ export async function createGithubInstall(body) {
74
+ return await apiRequest('/integrations/github/install', {
75
+ method: 'POST',
76
+ body
77
+ });
78
+ }
79
+ export async function createSentryInstall(body) {
80
+ return await apiRequest('/integrations/sentry/install', {
81
+ method: 'POST',
82
+ body
83
+ });
84
+ }
85
+ export async function createLinearInstall(body) {
86
+ return await apiRequest('/integrations/linear/install', {
87
+ method: 'POST',
88
+ body
89
+ });
90
+ }
91
+ export async function completeLinearCallback({ query, token }) {
92
+ return await apiRequest(`/integrations/linear/callback/api?${serializeLinearCallbackQuery(query)}`, {
93
+ headers: {
94
+ authorization: `Bearer ${token}`
95
+ }
96
+ });
97
+ }
98
+ // Called from the callback route with an explicit bearer (same as the GitHub
99
+ // callback): the route refreshes auth itself before forwarding the grant code.
100
+ export async function connectSentry({ body, token }) {
101
+ return await apiRequest('/integrations/sentry/connect', {
102
+ method: 'POST',
103
+ body,
104
+ headers: {
105
+ authorization: `Bearer ${token}`
106
+ }
107
+ });
108
+ }
109
+ export async function listRepositories({ connectionId, cursor, search, signal }) {
110
+ const params = new URLSearchParams();
111
+ if (cursor) params.set('cursor', cursor);
112
+ if (search) params.set('search', search);
113
+ const query = params.toString();
114
+ const path = query ? `/integration-connections/${connectionId}/repositories?${query}` : `/integration-connections/${connectionId}/repositories`;
115
+ return await apiRequest(path, {
116
+ signal
117
+ });
118
+ }
119
+ export async function updateIntegrationConnection({ connectionId, body }) {
120
+ return await apiRequest(`/integration-connections/${encodeURIComponent(connectionId)}`, {
121
+ method: 'PATCH',
122
+ body
123
+ });
124
+ }
125
+ export async function deleteIntegrationConnection({ connectionId }) {
126
+ await apiRequest(`/integration-connections/${encodeURIComponent(connectionId)}`, {
127
+ method: 'DELETE'
128
+ });
129
+ }
130
+ export function useIntegrationProvidersQuery(params) {
131
+ const capability = params?.capability;
132
+ return useQuery({
133
+ queryKey: integrationsQueryKeys.providers(capability ?? 'all'),
134
+ queryFn: ({ signal })=>listIntegrationProviders(capability ? {
135
+ capability,
136
+ signal
137
+ } : {
138
+ signal
139
+ })
140
+ });
141
+ }
142
+ export function useSourceConnectionsQuery(workspaceId) {
143
+ return useQuery({
144
+ queryKey: workspaceId ? integrationsQueryKeys.sourceConnections(workspaceId) : [
145
+ ...integrationsQueryKeys.all,
146
+ 'source-connections'
147
+ ],
148
+ enabled: Boolean(workspaceId),
149
+ queryFn: ({ signal })=>listSourceConnections({
150
+ workspaceId: workspaceId ?? '',
151
+ signal
152
+ })
153
+ });
154
+ }
155
+ export function useIntegrationConnectionsQuery(workspaceId) {
156
+ return useQuery({
157
+ queryKey: workspaceId ? integrationsQueryKeys.connections(workspaceId, 'all') : [
158
+ ...integrationsQueryKeys.all,
159
+ 'connections'
160
+ ],
161
+ enabled: Boolean(workspaceId),
162
+ queryFn: ({ signal })=>listIntegrationConnections({
163
+ workspaceId: workspaceId ?? '',
164
+ signal
165
+ })
166
+ });
167
+ }
168
+ export function useRepositoriesInfiniteQuery(connectionId, options) {
169
+ const trimmedSearch = options?.search?.trim() ?? '';
170
+ return useInfiniteQuery({
171
+ queryKey: connectionId ? integrationsQueryKeys.repositories(connectionId, trimmedSearch) : [
172
+ ...integrationsQueryKeys.all,
173
+ 'repositories'
174
+ ],
175
+ enabled: Boolean(connectionId),
176
+ initialPageParam: undefined,
177
+ queryFn: ({ pageParam, signal })=>{
178
+ const args = {
179
+ connectionId: connectionId ?? '',
180
+ signal
181
+ };
182
+ if (pageParam) args.cursor = pageParam;
183
+ if (trimmedSearch) args.search = trimmedSearch;
184
+ return listRepositories(args);
185
+ },
186
+ getNextPageParam: (lastPage)=>lastPage.next_cursor ?? undefined
187
+ });
188
+ }
189
+ export function useCreateGiteaConnectionMutation() {
190
+ return useMutation({
191
+ mutationFn: createGiteaConnection
192
+ });
193
+ }
194
+ export function useCreateLinearInstallMutation() {
195
+ return useMutation({
196
+ mutationFn: createLinearInstall
197
+ });
198
+ }
199
+ export function useCompleteLinearCallbackMutation() {
200
+ return useMutation({
201
+ mutationFn: completeLinearCallback
202
+ });
203
+ }
204
+ export function useUpdateIntegrationConnectionMutation() {
205
+ const queryClient = useQueryClient();
206
+ return useMutation({
207
+ mutationFn: updateIntegrationConnection,
208
+ onSuccess: async (connection)=>{
209
+ await queryClient.invalidateQueries({
210
+ queryKey: integrationsQueryKeys.connectionsByWorkspace(connection.workspace_id)
211
+ });
212
+ }
213
+ });
214
+ }
215
+ export function useDeleteIntegrationConnectionMutation() {
216
+ const queryClient = useQueryClient();
217
+ return useMutation({
218
+ mutationFn: ({ workspaceId: _workspaceId, connectionId })=>deleteIntegrationConnection({
219
+ connectionId
220
+ }),
221
+ onSuccess: async (_result, variables)=>{
222
+ await queryClient.invalidateQueries({
223
+ queryKey: integrationsQueryKeys.connectionsByWorkspace(variables.workspaceId)
224
+ });
225
+ }
226
+ });
227
+ }
228
+
229
+ //# sourceMappingURL=integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/api/integrations.ts"],"sourcesContent":["import type {\n IntegrationCapabilityDto,\n IntegrationConnectionDto,\n ListIntegrationConnectionsResponseDto,\n ListIntegrationProvidersResponseDto,\n ListRepositoriesResponseDto,\n UpdateIntegrationConnectionBodyDto,\n} from '@shipfox/api-integration-core-dto';\nimport type {\n CreateGiteaConnectionBodyDto,\n CreateGiteaConnectionResponseDto,\n} from '@shipfox/api-integration-gitea-dto';\nimport type {\n CreateGithubInstallBodyDto,\n CreateGithubInstallResponseDto,\n} from '@shipfox/api-integration-github-dto';\nimport type {\n CreateLinearInstallBodyDto,\n CreateLinearInstallResponseDto,\n LinearCallbackQueryDto,\n LinearCallbackResponseDto,\n} from '@shipfox/api-integration-linear-dto';\nimport type {\n CreateSentryInstallBodyDto,\n CreateSentryInstallResponseDto,\n SentryConnectBodyDto,\n SentryConnectResponseDto,\n} from '@shipfox/api-integration-sentry-dto';\nimport {apiRequest} from '@shipfox/client-api';\nimport {useInfiniteQuery, useMutation, useQuery, useQueryClient} from '@tanstack/react-query';\nimport {serializeLinearCallbackQuery} from '#linear-callback.js';\n\nexport const integrationsQueryKeys = {\n all: ['integrations'] as const,\n providers: (capability: IntegrationCapabilityDto | 'all') =>\n [...integrationsQueryKeys.all, 'providers', capability] as const,\n connections: (workspaceId: string, capability: IntegrationCapabilityDto | 'all') =>\n [...integrationsQueryKeys.all, 'connections', workspaceId, capability] as const,\n // Prefix matching every per-capability connections query for a workspace, so\n // a mutation can refresh all connection views without touching providers or\n // repositories.\n connectionsByWorkspace: (workspaceId: string) =>\n [...integrationsQueryKeys.all, 'connections', workspaceId] as const,\n sourceConnections: (workspaceId: string) =>\n integrationsQueryKeys.connections(workspaceId, 'source_control'),\n repositories: (connectionId: string, search: string) =>\n [...integrationsQueryKeys.all, 'repositories', connectionId, search] as const,\n};\n\nexport async function listIntegrationProviders({\n capability,\n signal,\n}: {\n capability?: IntegrationCapabilityDto;\n signal?: AbortSignal;\n}) {\n const search = new URLSearchParams();\n if (capability) search.set('capability', capability);\n const query = search.toString();\n const path = query ? `/integration-providers?${query}` : '/integration-providers';\n return await apiRequest<ListIntegrationProvidersResponseDto>(path, {signal});\n}\n\nexport async function listIntegrationConnections({\n workspaceId,\n capability,\n signal,\n}: {\n workspaceId: string;\n capability?: IntegrationCapabilityDto | undefined;\n signal?: AbortSignal | undefined;\n}) {\n const search = new URLSearchParams({workspace_id: workspaceId});\n if (capability) search.set('capability', capability);\n return await apiRequest<ListIntegrationConnectionsResponseDto>(\n `/integration-connections?${search.toString()}`,\n {signal},\n );\n}\n\nexport async function listSourceConnections({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}) {\n const result = await listIntegrationConnections({\n workspaceId,\n capability: 'source_control',\n signal,\n });\n // The endpoint returns every lifecycle status (the settings hub needs that),\n // but source-control consumers (onboarding redirect, project creation) only\n // act on usable connections — a disabled/error one must read as \"not there\".\n return {\n ...result,\n connections: result.connections.filter(\n (connection) => connection.lifecycle_status === 'active',\n ),\n };\n}\n\nexport async function createGiteaConnection(body: CreateGiteaConnectionBodyDto) {\n return await apiRequest<CreateGiteaConnectionResponseDto>('/integrations/gitea/connections', {\n method: 'POST',\n body,\n });\n}\n\nexport async function createGithubInstall(body: CreateGithubInstallBodyDto) {\n return await apiRequest<CreateGithubInstallResponseDto>('/integrations/github/install', {\n method: 'POST',\n body,\n });\n}\n\nexport async function createSentryInstall(body: CreateSentryInstallBodyDto) {\n return await apiRequest<CreateSentryInstallResponseDto>('/integrations/sentry/install', {\n method: 'POST',\n body,\n });\n}\n\nexport async function createLinearInstall(body: CreateLinearInstallBodyDto) {\n return await apiRequest<CreateLinearInstallResponseDto>('/integrations/linear/install', {\n method: 'POST',\n body,\n });\n}\n\nexport async function completeLinearCallback({\n query,\n token,\n}: {\n query: LinearCallbackQueryDto;\n token: string;\n}) {\n return await apiRequest<LinearCallbackResponseDto>(\n `/integrations/linear/callback/api?${serializeLinearCallbackQuery(query)}`,\n {headers: {authorization: `Bearer ${token}`}},\n );\n}\n\n// Called from the callback route with an explicit bearer (same as the GitHub\n// callback): the route refreshes auth itself before forwarding the grant code.\nexport async function connectSentry({body, token}: {body: SentryConnectBodyDto; token: string}) {\n return await apiRequest<SentryConnectResponseDto>('/integrations/sentry/connect', {\n method: 'POST',\n body,\n headers: {authorization: `Bearer ${token}`},\n });\n}\n\nexport async function listRepositories({\n connectionId,\n cursor,\n search,\n signal,\n}: {\n connectionId: string;\n cursor?: string;\n search?: string;\n signal?: AbortSignal;\n}) {\n const params = new URLSearchParams();\n if (cursor) params.set('cursor', cursor);\n if (search) params.set('search', search);\n const query = params.toString();\n const path = query\n ? `/integration-connections/${connectionId}/repositories?${query}`\n : `/integration-connections/${connectionId}/repositories`;\n return await apiRequest<ListRepositoriesResponseDto>(path, {signal});\n}\n\nexport async function updateIntegrationConnection({\n connectionId,\n body,\n}: {\n connectionId: string;\n body: UpdateIntegrationConnectionBodyDto;\n}) {\n return await apiRequest<IntegrationConnectionDto>(\n `/integration-connections/${encodeURIComponent(connectionId)}`,\n {method: 'PATCH', body},\n );\n}\n\nexport async function deleteIntegrationConnection({connectionId}: {connectionId: string}) {\n await apiRequest<void>(`/integration-connections/${encodeURIComponent(connectionId)}`, {\n method: 'DELETE',\n });\n}\n\nexport function useIntegrationProvidersQuery(params?: {capability?: IntegrationCapabilityDto}) {\n const capability = params?.capability;\n return useQuery({\n queryKey: integrationsQueryKeys.providers(capability ?? 'all'),\n queryFn: ({signal}) => listIntegrationProviders(capability ? {capability, signal} : {signal}),\n });\n}\n\nexport function useSourceConnectionsQuery(workspaceId: string | undefined) {\n return useQuery({\n queryKey: workspaceId\n ? integrationsQueryKeys.sourceConnections(workspaceId)\n : [...integrationsQueryKeys.all, 'source-connections'],\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listSourceConnections({workspaceId: workspaceId ?? '', signal}),\n });\n}\n\nexport function useIntegrationConnectionsQuery(workspaceId: string | undefined) {\n return useQuery({\n queryKey: workspaceId\n ? integrationsQueryKeys.connections(workspaceId, 'all')\n : [...integrationsQueryKeys.all, 'connections'],\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listIntegrationConnections({workspaceId: workspaceId ?? '', signal}),\n });\n}\n\nexport function useRepositoriesInfiniteQuery(\n connectionId: string | undefined,\n options?: {search?: string},\n) {\n const trimmedSearch = options?.search?.trim() ?? '';\n return useInfiniteQuery({\n queryKey: connectionId\n ? integrationsQueryKeys.repositories(connectionId, trimmedSearch)\n : [...integrationsQueryKeys.all, 'repositories'],\n enabled: Boolean(connectionId),\n initialPageParam: undefined as string | undefined,\n queryFn: ({pageParam, signal}) => {\n const args: {connectionId: string; cursor?: string; search?: string; signal: AbortSignal} = {\n connectionId: connectionId ?? '',\n signal,\n };\n if (pageParam) args.cursor = pageParam;\n if (trimmedSearch) args.search = trimmedSearch;\n return listRepositories(args);\n },\n getNextPageParam: (lastPage) => lastPage.next_cursor ?? undefined,\n });\n}\n\nexport function useCreateGiteaConnectionMutation() {\n return useMutation({mutationFn: createGiteaConnection});\n}\n\nexport function useCreateLinearInstallMutation() {\n return useMutation({mutationFn: createLinearInstall});\n}\n\nexport function useCompleteLinearCallbackMutation() {\n return useMutation({mutationFn: completeLinearCallback});\n}\n\nexport function useUpdateIntegrationConnectionMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: updateIntegrationConnection,\n onSuccess: async (connection) => {\n await queryClient.invalidateQueries({\n queryKey: integrationsQueryKeys.connectionsByWorkspace(connection.workspace_id),\n });\n },\n });\n}\n\nexport function useDeleteIntegrationConnectionMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n workspaceId: _workspaceId,\n connectionId,\n }: {\n workspaceId: string;\n connectionId: string;\n }) => deleteIntegrationConnection({connectionId}),\n onSuccess: async (_result, variables) => {\n await queryClient.invalidateQueries({\n queryKey: integrationsQueryKeys.connectionsByWorkspace(variables.workspaceId),\n });\n },\n });\n}\n"],"names":["apiRequest","useInfiniteQuery","useMutation","useQuery","useQueryClient","serializeLinearCallbackQuery","integrationsQueryKeys","all","providers","capability","connections","workspaceId","connectionsByWorkspace","sourceConnections","repositories","connectionId","search","listIntegrationProviders","signal","URLSearchParams","set","query","toString","path","listIntegrationConnections","workspace_id","listSourceConnections","result","filter","connection","lifecycle_status","createGiteaConnection","body","method","createGithubInstall","createSentryInstall","createLinearInstall","completeLinearCallback","token","headers","authorization","connectSentry","listRepositories","cursor","params","updateIntegrationConnection","encodeURIComponent","deleteIntegrationConnection","useIntegrationProvidersQuery","queryKey","queryFn","useSourceConnectionsQuery","enabled","Boolean","useIntegrationConnectionsQuery","useRepositoriesInfiniteQuery","options","trimmedSearch","trim","initialPageParam","undefined","pageParam","args","getNextPageParam","lastPage","next_cursor","useCreateGiteaConnectionMutation","mutationFn","useCreateLinearInstallMutation","useCompleteLinearCallbackMutation","useUpdateIntegrationConnectionMutation","queryClient","onSuccess","invalidateQueries","useDeleteIntegrationConnectionMutation","_workspaceId","_result","variables"],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { CreateWebhookConnectionBodyDto, UpdateWebhookConnectionBodyDto } from '@shipfox/api-integration-webhook-dto';
2
+ export declare const webhookConnectionsQueryKeys: {
3
+ all: readonly ["webhook-connections"];
4
+ list: (workspaceId: string) => readonly ["webhook-connections", "list", string];
5
+ };
6
+ export declare function listWebhookConnections({ workspaceId, signal, }: {
7
+ workspaceId: string;
8
+ signal?: AbortSignal;
9
+ }): Promise<{
10
+ connections: {
11
+ id: string;
12
+ workspace_id: string;
13
+ name: string;
14
+ slug: string;
15
+ lifecycle_status: "error" | "active" | "disabled";
16
+ inbound_url: string;
17
+ created_at: string;
18
+ updated_at: string;
19
+ }[];
20
+ }>;
21
+ export declare function createWebhookConnection(body: CreateWebhookConnectionBodyDto): Promise<{
22
+ id: string;
23
+ workspace_id: string;
24
+ name: string;
25
+ slug: string;
26
+ lifecycle_status: "error" | "active" | "disabled";
27
+ inbound_url: string;
28
+ created_at: string;
29
+ updated_at: string;
30
+ }>;
31
+ export declare function updateWebhookConnection({ connectionId, body, }: {
32
+ connectionId: string;
33
+ body: UpdateWebhookConnectionBodyDto;
34
+ }): Promise<{
35
+ id: string;
36
+ workspace_id: string;
37
+ name: string;
38
+ slug: string;
39
+ lifecycle_status: "error" | "active" | "disabled";
40
+ inbound_url: string;
41
+ created_at: string;
42
+ updated_at: string;
43
+ }>;
44
+ export declare function deleteWebhookConnection({ connectionId }: {
45
+ connectionId: string;
46
+ }): Promise<void>;
47
+ export declare function useWebhookConnectionsQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
48
+ connections: {
49
+ id: string;
50
+ workspace_id: string;
51
+ name: string;
52
+ slug: string;
53
+ lifecycle_status: "error" | "active" | "disabled";
54
+ inbound_url: string;
55
+ created_at: string;
56
+ updated_at: string;
57
+ }[];
58
+ }>, Error>;
59
+ export declare function useCreateWebhookConnectionMutation(): import("@tanstack/react-query").UseMutationResult<{
60
+ id: string;
61
+ workspace_id: string;
62
+ name: string;
63
+ slug: string;
64
+ lifecycle_status: "error" | "active" | "disabled";
65
+ inbound_url: string;
66
+ created_at: string;
67
+ updated_at: string;
68
+ }, Error, {
69
+ workspace_id: string;
70
+ name: string;
71
+ slug: string;
72
+ }, unknown>;
73
+ export declare function useUpdateWebhookConnectionMutation(): import("@tanstack/react-query").UseMutationResult<{
74
+ id: string;
75
+ workspace_id: string;
76
+ name: string;
77
+ slug: string;
78
+ lifecycle_status: "error" | "active" | "disabled";
79
+ inbound_url: string;
80
+ created_at: string;
81
+ updated_at: string;
82
+ }, Error, {
83
+ workspaceId: string;
84
+ connectionId: string;
85
+ body: UpdateWebhookConnectionBodyDto;
86
+ }, unknown>;
87
+ export declare function useDeleteWebhookConnectionMutation(): import("@tanstack/react-query").UseMutationResult<void, Error, {
88
+ workspaceId: string;
89
+ connectionId: string;
90
+ }, unknown>;
91
+ //# sourceMappingURL=webhook-connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-connections.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/webhook-connections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAE9B,8BAA8B,EAE/B,MAAM,sCAAsC,CAAC;AAK9C,eAAO,MAAM,2BAA2B;;wBAElB,MAAM;CAC3B,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;;;;;;;;;;;GAMA;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,8BAA8B;;;;;;;;;GAKjF;AAED,wBAAsB,uBAAuB,CAAC,EAC5C,YAAY,EACZ,IAAI,GACL,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,8BAA8B,CAAC;CACtC;;;;;;;;;GAKA;AAED,wBAAsB,uBAAuB,CAAC,EAAC,YAAY,EAAC,EAAE;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,iBAInF;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;;;;;;;;;;;WAQzE;AAED,wBAAgB,kCAAkC;;;;;;;;;;;;;YAQjD;AAED,wBAAgB,kCAAkC;;;;;;;;;;iBAO/B,MAAM;kBACL,MAAM;UACd,8BAA8B;YAMzC;AAED,wBAAgB,kCAAkC;iBAGH,MAAM;kBAAgB,MAAM;YAM1E"}