@shipfox/client-integrations 12.0.2 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +52 -0
  3. package/dist/application/complete-integration-callback.d.ts +11 -0
  4. package/dist/application/complete-integration-callback.d.ts.map +1 -1
  5. package/dist/application/complete-integration-callback.js +38 -8
  6. package/dist/application/complete-integration-callback.js.map +1 -1
  7. package/dist/components/callback-status-shell.d.ts +4 -3
  8. package/dist/components/callback-status-shell.d.ts.map +1 -1
  9. package/dist/components/callback-status-shell.js +11 -11
  10. package/dist/components/callback-status-shell.js.map +1 -1
  11. package/dist/components/installed-integrations-section.d.ts +2 -1
  12. package/dist/components/installed-integrations-section.d.ts.map +1 -1
  13. package/dist/components/installed-integrations-section.js +7 -6
  14. package/dist/components/installed-integrations-section.js.map +1 -1
  15. package/dist/components/integration-gallery-for-workspace.d.ts.map +1 -1
  16. package/dist/components/integration-gallery-for-workspace.js +11 -2
  17. package/dist/components/integration-gallery-for-workspace.js.map +1 -1
  18. package/dist/components/integration-gallery.stories.js +10 -9
  19. package/dist/components/integration-gallery.stories.js.map +1 -1
  20. package/dist/components/provider-grid.d.ts +2 -2
  21. package/dist/components/provider-grid.d.ts.map +1 -1
  22. package/dist/components/provider-grid.js +4 -4
  23. package/dist/components/provider-grid.js.map +1 -1
  24. package/dist/components/redirect-install-page.d.ts +1 -1
  25. package/dist/components/redirect-install-page.js +2 -2
  26. package/dist/components/redirect-install-page.js.map +1 -1
  27. package/dist/components/webhook/webhook-modals.stories.js +2 -2
  28. package/dist/components/webhook/webhook-modals.stories.js.map +1 -1
  29. package/dist/core/models.d.ts +6 -0
  30. package/dist/core/models.d.ts.map +1 -1
  31. package/dist/core/models.js +12 -0
  32. package/dist/core/models.js.map +1 -1
  33. package/dist/feature.d.ts +15 -7
  34. package/dist/feature.d.ts.map +1 -1
  35. package/dist/feature.js +17 -7
  36. package/dist/feature.js.map +1 -1
  37. package/dist/hooks/api/integration-mapper.d.ts +3 -1
  38. package/dist/hooks/api/integration-mapper.d.ts.map +1 -1
  39. package/dist/hooks/api/integration-mapper.js +8 -0
  40. package/dist/hooks/api/integration-mapper.js.map +1 -1
  41. package/dist/hooks/api/integrations.d.ts +25 -1
  42. package/dist/hooks/api/integrations.d.ts.map +1 -1
  43. package/dist/hooks/api/integrations.js +45 -2
  44. package/dist/hooks/api/integrations.js.map +1 -1
  45. package/dist/index.d.ts +4 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +4 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/jira-callback-state.d.ts +9 -0
  50. package/dist/jira-callback-state.d.ts.map +1 -0
  51. package/dist/jira-callback-state.js +16 -0
  52. package/dist/jira-callback-state.js.map +1 -0
  53. package/dist/jira-callback.d.ts +11 -0
  54. package/dist/jira-callback.d.ts.map +1 -0
  55. package/dist/jira-callback.js +59 -0
  56. package/dist/jira-callback.js.map +1 -0
  57. package/dist/jira-form-errors.d.ts +8 -0
  58. package/dist/jira-form-errors.d.ts.map +1 -0
  59. package/dist/jira-form-errors.js +55 -0
  60. package/dist/jira-form-errors.js.map +1 -0
  61. package/dist/pages/gitea-install-page.js +4 -4
  62. package/dist/pages/gitea-install-page.js.map +1 -1
  63. package/dist/pages/jira-callback-page.d.ts +2 -0
  64. package/dist/pages/jira-callback-page.d.ts.map +1 -0
  65. package/dist/pages/jira-callback-page.js +341 -0
  66. package/dist/pages/jira-callback-page.js.map +1 -0
  67. package/dist/pages/jira-install-page.d.ts +2 -0
  68. package/dist/pages/jira-install-page.d.ts.map +1 -0
  69. package/dist/pages/jira-install-page.js +26 -0
  70. package/dist/pages/jira-install-page.js.map +1 -0
  71. package/dist/pages/linear-callback-page.d.ts.map +1 -1
  72. package/dist/pages/linear-callback-page.js +58 -12
  73. package/dist/pages/linear-callback-page.js.map +1 -1
  74. package/dist/pages/sentry-callback-page.d.ts.map +1 -1
  75. package/dist/pages/sentry-callback-page.js +22 -9
  76. package/dist/pages/sentry-callback-page.js.map +1 -1
  77. package/dist/pages/slack-callback-page.d.ts.map +1 -1
  78. package/dist/pages/slack-callback-page.js +50 -18
  79. package/dist/pages/slack-callback-page.js.map +1 -1
  80. package/dist/pages/source-control-onboarding-page.js +1 -1
  81. package/dist/pages/source-control-onboarding-page.js.map +1 -1
  82. package/dist/provider-catalog.d.ts +1 -1
  83. package/dist/provider-catalog.d.ts.map +1 -1
  84. package/dist/provider-catalog.js +10 -5
  85. package/dist/provider-catalog.js.map +1 -1
  86. package/dist/routes/jira-callback.d.ts +8 -0
  87. package/dist/routes/jira-callback.d.ts.map +1 -0
  88. package/dist/routes/jira-callback.js +9 -0
  89. package/dist/routes/jira-callback.js.map +1 -0
  90. package/dist/routes/jira.d.ts +6 -0
  91. package/dist/routes/jira.d.ts.map +1 -0
  92. package/dist/routes/jira.js +7 -0
  93. package/dist/routes/jira.js.map +1 -0
  94. package/dist/sentry-callback.js +2 -2
  95. package/dist/sentry-callback.js.map +1 -1
  96. package/dist/tsconfig.test.tsbuildinfo +1 -1
  97. package/dist/workspace-navigation.d.ts +13 -0
  98. package/dist/workspace-navigation.d.ts.map +1 -0
  99. package/dist/workspace-navigation.js +17 -0
  100. package/dist/workspace-navigation.js.map +1 -0
  101. package/package.json +14 -13
  102. package/src/application/complete-integration-callback.test.ts +44 -1
  103. package/src/application/complete-integration-callback.ts +61 -8
  104. package/src/components/callback-status-shell.tsx +17 -10
  105. package/src/components/installed-integrations-section.tsx +16 -9
  106. package/src/components/integration-gallery-for-workspace.tsx +20 -10
  107. package/src/components/integration-gallery.stories.tsx +10 -10
  108. package/src/components/integration-gallery.test.tsx +30 -15
  109. package/src/components/integration-usage-events.test.ts +13 -0
  110. package/src/components/provider-grid.tsx +6 -6
  111. package/src/components/redirect-install-page.test.tsx +3 -3
  112. package/src/components/redirect-install-page.tsx +2 -2
  113. package/src/components/webhook/webhook-modals.stories.tsx +2 -2
  114. package/src/core/models.ts +18 -0
  115. package/src/feature.ts +17 -7
  116. package/src/hooks/api/integration-mapper.ts +6 -0
  117. package/src/hooks/api/integrations.test.ts +92 -0
  118. package/src/hooks/api/integrations.ts +72 -1
  119. package/src/index.ts +4 -0
  120. package/src/jira-callback-state.ts +19 -0
  121. package/src/jira-callback.test.ts +76 -0
  122. package/src/jira-callback.ts +67 -0
  123. package/src/jira-form-errors.test.ts +57 -0
  124. package/src/jira-form-errors.ts +94 -0
  125. package/src/pages/gitea-install-page.tsx +2 -2
  126. package/src/pages/jira-callback-page.test.tsx +250 -0
  127. package/src/pages/jira-callback-page.tsx +366 -0
  128. package/src/pages/jira-install-page.tsx +28 -0
  129. package/src/pages/linear-callback-page.test.tsx +25 -12
  130. package/src/pages/linear-callback-page.tsx +73 -12
  131. package/src/pages/sentry-callback-page.test.tsx +8 -5
  132. package/src/pages/sentry-callback-page.tsx +32 -8
  133. package/src/pages/slack-callback-page.test.tsx +78 -0
  134. package/src/pages/slack-callback-page.tsx +56 -18
  135. package/src/pages/source-control-onboarding-page.test.tsx +4 -4
  136. package/src/pages/source-control-onboarding-page.tsx +1 -1
  137. package/src/provider-catalog.test.ts +10 -4
  138. package/src/provider-catalog.ts +16 -10
  139. package/src/routes/jira-callback.tsx +8 -0
  140. package/src/routes/jira.tsx +4 -0
  141. package/src/sentry-callback.ts +2 -2
  142. package/src/workspace-navigation.test.ts +43 -0
  143. package/src/workspace-navigation.ts +38 -0
  144. package/test/render.tsx +2 -1
  145. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,10 +1,12 @@
1
1
  import type { IntegrationConnectionDto, IntegrationProviderDto, RepositoryDto } from '@shipfox/api-integration-core-dto';
2
+ import type { JiraAccessibleResourceDto } from '@shipfox/api-integration-jira-dto';
2
3
  import type { WebhookConnectionDto } from '@shipfox/api-integration-webhook-dto';
3
- import type { InstallRedirect, IntegrationConnection, IntegrationProvider, Repository, WebhookConnection } from '#core/models.js';
4
+ import type { InstallRedirect, IntegrationConnection, IntegrationProvider, JiraSite, Repository, WebhookConnection } from '#core/models.js';
4
5
  export declare function toIntegrationProvider(dto: IntegrationProviderDto): IntegrationProvider;
5
6
  export declare function toInstallRedirect(dto: {
6
7
  install_url: string;
7
8
  }): InstallRedirect;
9
+ export declare function toJiraSite(dto: JiraAccessibleResourceDto): JiraSite;
8
10
  export declare function toIntegrationConnection(dto: IntegrationConnectionDto): IntegrationConnection;
9
11
  export declare function toRepository(dto: RepositoryDto): Repository;
10
12
  export declare function toWebhookConnection(dto: WebhookConnectionDto): WebhookConnection;
@@ -1 +1 @@
1
- {"version":3,"file":"integration-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integration-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC/E,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,GAAG,mBAAmB,CAEtF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GAAG,eAAe,CAE7E;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,wBAAwB,GAAG,qBAAqB,CAc5F;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAY3D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,iBAAiB,CAWhF"}
1
+ {"version":3,"file":"integration-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integration-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC/E,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,GAAG,mBAAmB,CAEtF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GAAG,eAAe,CAE7E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,yBAAyB,GAAG,QAAQ,CAEnE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,wBAAwB,GAAG,qBAAqB,CAc5F;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAY3D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,iBAAiB,CAWhF"}
@@ -10,6 +10,14 @@ export function toInstallRedirect(dto) {
10
10
  installUrl: dto.install_url
11
11
  };
12
12
  }
13
+ export function toJiraSite(dto) {
14
+ return {
15
+ cloudId: dto.cloud_id,
16
+ name: dto.name,
17
+ url: dto.url,
18
+ scopes: dto.scopes
19
+ };
20
+ }
13
21
  export function toIntegrationConnection(dto) {
14
22
  return {
15
23
  id: dto.id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/integration-mapper.ts"],"sourcesContent":["import type {\n IntegrationConnectionDto,\n IntegrationProviderDto,\n RepositoryDto,\n} from '@shipfox/api-integration-core-dto';\nimport type {WebhookConnectionDto} from '@shipfox/api-integration-webhook-dto';\nimport type {\n InstallRedirect,\n IntegrationConnection,\n IntegrationProvider,\n Repository,\n WebhookConnection,\n} from '#core/models.js';\n\nexport function toIntegrationProvider(dto: IntegrationProviderDto): IntegrationProvider {\n return {provider: dto.provider, displayName: dto.display_name, capabilities: dto.capabilities};\n}\n\nexport function toInstallRedirect(dto: {install_url: string}): InstallRedirect {\n return {installUrl: dto.install_url};\n}\n\nexport function toIntegrationConnection(dto: IntegrationConnectionDto): IntegrationConnection {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n provider: dto.provider,\n externalAccountId: dto.external_account_id,\n slug: dto.slug,\n displayName: dto.display_name,\n lifecycleStatus: dto.lifecycle_status,\n capabilities: dto.capabilities,\n externalUrl: dto.external_url,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toRepository(dto: RepositoryDto): Repository {\n return {\n connectionId: dto.connection_id,\n externalRepositoryId: dto.external_repository_id,\n owner: dto.owner,\n name: dto.name,\n fullName: dto.full_name,\n defaultBranch: dto.default_branch,\n visibility: dto.visibility,\n cloneUrl: dto.clone_url,\n htmlUrl: dto.html_url,\n };\n}\n\nexport function toWebhookConnection(dto: WebhookConnectionDto): WebhookConnection {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n name: dto.name,\n slug: dto.slug,\n lifecycleStatus: dto.lifecycle_status,\n inboundUrl: dto.inbound_url,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n"],"names":["toIntegrationProvider","dto","provider","displayName","display_name","capabilities","toInstallRedirect","installUrl","install_url","toIntegrationConnection","id","workspaceId","workspace_id","externalAccountId","external_account_id","slug","lifecycleStatus","lifecycle_status","externalUrl","external_url","createdAt","created_at","updatedAt","updated_at","toRepository","connectionId","connection_id","externalRepositoryId","external_repository_id","owner","name","fullName","full_name","defaultBranch","default_branch","visibility","cloneUrl","clone_url","htmlUrl","html_url","toWebhookConnection","inboundUrl","inbound_url"],"mappings":"AAcA,OAAO,SAASA,sBAAsBC,GAA2B;IAC/D,OAAO;QAACC,UAAUD,IAAIC,QAAQ;QAAEC,aAAaF,IAAIG,YAAY;QAAEC,cAAcJ,IAAII,YAAY;IAAA;AAC/F;AAEA,OAAO,SAASC,kBAAkBL,GAA0B;IAC1D,OAAO;QAACM,YAAYN,IAAIO,WAAW;IAAA;AACrC;AAEA,OAAO,SAASC,wBAAwBR,GAA6B;IACnE,OAAO;QACLS,IAAIT,IAAIS,EAAE;QACVC,aAAaV,IAAIW,YAAY;QAC7BV,UAAUD,IAAIC,QAAQ;QACtBW,mBAAmBZ,IAAIa,mBAAmB;QAC1CC,MAAMd,IAAIc,IAAI;QACdZ,aAAaF,IAAIG,YAAY;QAC7BY,iBAAiBf,IAAIgB,gBAAgB;QACrCZ,cAAcJ,IAAII,YAAY;QAC9Ba,aAAajB,IAAIkB,YAAY;QAC7BC,WAAWnB,IAAIoB,UAAU;QACzBC,WAAWrB,IAAIsB,UAAU;IAC3B;AACF;AAEA,OAAO,SAASC,aAAavB,GAAkB;IAC7C,OAAO;QACLwB,cAAcxB,IAAIyB,aAAa;QAC/BC,sBAAsB1B,IAAI2B,sBAAsB;QAChDC,OAAO5B,IAAI4B,KAAK;QAChBC,MAAM7B,IAAI6B,IAAI;QACdC,UAAU9B,IAAI+B,SAAS;QACvBC,eAAehC,IAAIiC,cAAc;QACjCC,YAAYlC,IAAIkC,UAAU;QAC1BC,UAAUnC,IAAIoC,SAAS;QACvBC,SAASrC,IAAIsC,QAAQ;IACvB;AACF;AAEA,OAAO,SAASC,oBAAoBvC,GAAyB;IAC3D,OAAO;QACLS,IAAIT,IAAIS,EAAE;QACVC,aAAaV,IAAIW,YAAY;QAC7BkB,MAAM7B,IAAI6B,IAAI;QACdf,MAAMd,IAAIc,IAAI;QACdC,iBAAiBf,IAAIgB,gBAAgB;QACrCwB,YAAYxC,IAAIyC,WAAW;QAC3BtB,WAAWnB,IAAIoB,UAAU;QACzBC,WAAWrB,IAAIsB,UAAU;IAC3B;AACF"}
1
+ {"version":3,"sources":["../../../src/hooks/api/integration-mapper.ts"],"sourcesContent":["import type {\n IntegrationConnectionDto,\n IntegrationProviderDto,\n RepositoryDto,\n} from '@shipfox/api-integration-core-dto';\nimport type {JiraAccessibleResourceDto} from '@shipfox/api-integration-jira-dto';\nimport type {WebhookConnectionDto} from '@shipfox/api-integration-webhook-dto';\nimport type {\n InstallRedirect,\n IntegrationConnection,\n IntegrationProvider,\n JiraSite,\n Repository,\n WebhookConnection,\n} from '#core/models.js';\n\nexport function toIntegrationProvider(dto: IntegrationProviderDto): IntegrationProvider {\n return {provider: dto.provider, displayName: dto.display_name, capabilities: dto.capabilities};\n}\n\nexport function toInstallRedirect(dto: {install_url: string}): InstallRedirect {\n return {installUrl: dto.install_url};\n}\n\nexport function toJiraSite(dto: JiraAccessibleResourceDto): JiraSite {\n return {cloudId: dto.cloud_id, name: dto.name, url: dto.url, scopes: dto.scopes};\n}\n\nexport function toIntegrationConnection(dto: IntegrationConnectionDto): IntegrationConnection {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n provider: dto.provider,\n externalAccountId: dto.external_account_id,\n slug: dto.slug,\n displayName: dto.display_name,\n lifecycleStatus: dto.lifecycle_status,\n capabilities: dto.capabilities,\n externalUrl: dto.external_url,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toRepository(dto: RepositoryDto): Repository {\n return {\n connectionId: dto.connection_id,\n externalRepositoryId: dto.external_repository_id,\n owner: dto.owner,\n name: dto.name,\n fullName: dto.full_name,\n defaultBranch: dto.default_branch,\n visibility: dto.visibility,\n cloneUrl: dto.clone_url,\n htmlUrl: dto.html_url,\n };\n}\n\nexport function toWebhookConnection(dto: WebhookConnectionDto): WebhookConnection {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n name: dto.name,\n slug: dto.slug,\n lifecycleStatus: dto.lifecycle_status,\n inboundUrl: dto.inbound_url,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n"],"names":["toIntegrationProvider","dto","provider","displayName","display_name","capabilities","toInstallRedirect","installUrl","install_url","toJiraSite","cloudId","cloud_id","name","url","scopes","toIntegrationConnection","id","workspaceId","workspace_id","externalAccountId","external_account_id","slug","lifecycleStatus","lifecycle_status","externalUrl","external_url","createdAt","created_at","updatedAt","updated_at","toRepository","connectionId","connection_id","externalRepositoryId","external_repository_id","owner","fullName","full_name","defaultBranch","default_branch","visibility","cloneUrl","clone_url","htmlUrl","html_url","toWebhookConnection","inboundUrl","inbound_url"],"mappings":"AAgBA,OAAO,SAASA,sBAAsBC,GAA2B;IAC/D,OAAO;QAACC,UAAUD,IAAIC,QAAQ;QAAEC,aAAaF,IAAIG,YAAY;QAAEC,cAAcJ,IAAII,YAAY;IAAA;AAC/F;AAEA,OAAO,SAASC,kBAAkBL,GAA0B;IAC1D,OAAO;QAACM,YAAYN,IAAIO,WAAW;IAAA;AACrC;AAEA,OAAO,SAASC,WAAWR,GAA8B;IACvD,OAAO;QAACS,SAAST,IAAIU,QAAQ;QAAEC,MAAMX,IAAIW,IAAI;QAAEC,KAAKZ,IAAIY,GAAG;QAAEC,QAAQb,IAAIa,MAAM;IAAA;AACjF;AAEA,OAAO,SAASC,wBAAwBd,GAA6B;IACnE,OAAO;QACLe,IAAIf,IAAIe,EAAE;QACVC,aAAahB,IAAIiB,YAAY;QAC7BhB,UAAUD,IAAIC,QAAQ;QACtBiB,mBAAmBlB,IAAImB,mBAAmB;QAC1CC,MAAMpB,IAAIoB,IAAI;QACdlB,aAAaF,IAAIG,YAAY;QAC7BkB,iBAAiBrB,IAAIsB,gBAAgB;QACrClB,cAAcJ,IAAII,YAAY;QAC9BmB,aAAavB,IAAIwB,YAAY;QAC7BC,WAAWzB,IAAI0B,UAAU;QACzBC,WAAW3B,IAAI4B,UAAU;IAC3B;AACF;AAEA,OAAO,SAASC,aAAa7B,GAAkB;IAC7C,OAAO;QACL8B,cAAc9B,IAAI+B,aAAa;QAC/BC,sBAAsBhC,IAAIiC,sBAAsB;QAChDC,OAAOlC,IAAIkC,KAAK;QAChBvB,MAAMX,IAAIW,IAAI;QACdwB,UAAUnC,IAAIoC,SAAS;QACvBC,eAAerC,IAAIsC,cAAc;QACjCC,YAAYvC,IAAIuC,UAAU;QAC1BC,UAAUxC,IAAIyC,SAAS;QACvBC,SAAS1C,IAAI2C,QAAQ;IACvB;AACF;AAEA,OAAO,SAASC,oBAAoB5C,GAAyB;IAC3D,OAAO;QACLe,IAAIf,IAAIe,EAAE;QACVC,aAAahB,IAAIiB,YAAY;QAC7BN,MAAMX,IAAIW,IAAI;QACdS,MAAMpB,IAAIoB,IAAI;QACdC,iBAAiBrB,IAAIsB,gBAAgB;QACrCuB,YAAY7C,IAAI8C,WAAW;QAC3BrB,WAAWzB,IAAI0B,UAAU;QACzBC,WAAW3B,IAAI4B,UAAU;IAC3B;AACF"}
@@ -1,11 +1,12 @@
1
1
  import type { IntegrationCapabilityDto, UpdateIntegrationConnectionBodyDto } from '@shipfox/api-integration-core-dto';
2
2
  import type { CreateGiteaConnectionBodyDto } from '@shipfox/api-integration-gitea-dto';
3
3
  import type { CreateGithubInstallBodyDto } from '@shipfox/api-integration-github-dto';
4
+ import type { CompleteJiraSiteSelectionBodyDto, CreateJiraInstallBodyDto, JiraCallbackQueryDto } from '@shipfox/api-integration-jira-dto';
4
5
  import type { CreateLinearInstallBodyDto, LinearCallbackQueryDto } from '@shipfox/api-integration-linear-dto';
5
6
  import type { CreateSentryInstallBodyDto, SentryConnectBodyDto } from '@shipfox/api-integration-sentry-dto';
6
7
  import type { CreateSlackInstallBodyDto, SlackCallbackQueryDto } from '@shipfox/api-integration-slack-dto';
7
8
  import { type FetchQueryOptions, type InfiniteData, type UseInfiniteQueryOptions } from '@tanstack/react-query';
8
- import { type InstallRedirect, type IntegrationConnection, type IntegrationProvider, type RepositoryPage } from '#core/models.js';
9
+ import { type InstallRedirect, type IntegrationConnection, type IntegrationProvider, type JiraSite, type RepositoryPage } from '#core/models.js';
9
10
  export declare const integrationsQueryKeys: {
10
11
  all: readonly ["integrations"];
11
12
  providers: (capability: IntegrationCapabilityDto | "all") => readonly ["integrations", "providers", "source_control" | "agent_tools" | "all"];
@@ -47,6 +48,7 @@ export declare function completeGithubCallback({ code, installationId, state, se
47
48
  }): Promise<IntegrationConnection>;
48
49
  export declare function createSentryInstall(body: CreateSentryInstallBodyDto): Promise<InstallRedirect>;
49
50
  export declare function createLinearInstall(body: CreateLinearInstallBodyDto): Promise<InstallRedirect>;
51
+ export declare function createJiraInstall(body: CreateJiraInstallBodyDto): Promise<InstallRedirect>;
50
52
  export declare function createSlackInstall(body: CreateSlackInstallBodyDto): Promise<InstallRedirect>;
51
53
  export declare function completeLinearCallback({ query, token, }: {
52
54
  query: LinearCallbackQueryDto;
@@ -56,6 +58,17 @@ export declare function completeSlackCallback({ query, token, }: {
56
58
  query: SlackCallbackQueryDto;
57
59
  token: string;
58
60
  }): Promise<IntegrationConnection>;
61
+ export type JiraCallbackResult = IntegrationConnection | {
62
+ sites: JiraSite[];
63
+ };
64
+ export declare function completeJiraCallback({ query, token, }: {
65
+ query: JiraCallbackQueryDto;
66
+ token: string;
67
+ }): Promise<JiraCallbackResult>;
68
+ export declare function completeJiraSiteSelection({ body, token, }: {
69
+ body: CompleteJiraSiteSelectionBodyDto;
70
+ token: string;
71
+ }): Promise<IntegrationConnection>;
59
72
  export declare function connectSentry({ body, token }: {
60
73
  body: SentryConnectBodyDto;
61
74
  token: string;
@@ -96,6 +109,9 @@ export declare function useCreateLinearInstallMutation(): import("@tanstack/reac
96
109
  export declare function useCreateSlackInstallMutation(): import("@tanstack/react-query").UseMutationResult<InstallRedirect, Error, {
97
110
  workspace_id: string;
98
111
  }, unknown>;
112
+ export declare function useCreateJiraInstallMutation(): import("@tanstack/react-query").UseMutationResult<InstallRedirect, Error, {
113
+ workspace_id: string;
114
+ }, unknown>;
99
115
  export declare function useCompleteLinearCallbackMutation(): import("@tanstack/react-query").UseMutationResult<IntegrationConnection, Error, {
100
116
  query: LinearCallbackQueryDto;
101
117
  token: string;
@@ -104,6 +120,14 @@ export declare function useCompleteSlackCallbackMutation(): import("@tanstack/re
104
120
  query: SlackCallbackQueryDto;
105
121
  token: string;
106
122
  }, unknown>;
123
+ export declare function useCompleteJiraCallbackMutation(): import("@tanstack/react-query").UseMutationResult<JiraCallbackResult, Error, {
124
+ query: JiraCallbackQueryDto;
125
+ token: string;
126
+ }, unknown>;
127
+ export declare function useCompleteJiraSiteSelectionMutation(): import("@tanstack/react-query").UseMutationResult<IntegrationConnection, Error, {
128
+ body: CompleteJiraSiteSelectionBodyDto;
129
+ token: string;
130
+ }, unknown>;
107
131
  export declare function useUpdateIntegrationConnectionMutation(): import("@tanstack/react-query").UseMutationResult<IntegrationConnection, Error, {
108
132
  connectionId: string;
109
133
  body: UpdateIntegrationConnectionBodyDto;
@@ -1 +1 @@
1
- {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/integrations.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,17 @@
1
1
  import { integrationConnectionDtoSchema, listIntegrationConnectionsResponseSchema, listIntegrationProvidersResponseSchema, listRepositoriesResponseSchema } from '@shipfox/api-integration-core-dto';
2
2
  import { createGiteaConnectionResponseSchema } from '@shipfox/api-integration-gitea-dto';
3
3
  import { createGithubInstallResponseSchema, githubCallbackResponseSchema } from '@shipfox/api-integration-github-dto';
4
+ import { createJiraInstallResponseSchema, jiraCallbackResponseSchema } from '@shipfox/api-integration-jira-dto';
4
5
  import { createLinearInstallResponseSchema, linearCallbackResponseSchema } from '@shipfox/api-integration-linear-dto';
5
6
  import { createSentryInstallResponseSchema, sentryConnectResponseSchema } from '@shipfox/api-integration-sentry-dto';
6
7
  import { createSlackInstallResponseSchema, slackCallbackResponseSchema } from '@shipfox/api-integration-slack-dto';
7
8
  import { checkedApiRequest, emptyResponseSchema } from '@shipfox/client-api';
8
9
  import { infiniteQueryOptions, queryOptions, useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
9
10
  import { isUsableConnection } from '#core/models.js';
11
+ import { serializeJiraCallbackQuery } from '#jira-callback.js';
10
12
  import { serializeLinearCallbackQuery } from '#linear-callback.js';
11
13
  import { serializeSlackCallbackQuery } from '#slack-callback.js';
12
- import { toInstallRedirect, toIntegrationConnection, toIntegrationProvider, toRepository } from './integration-mapper.js';
14
+ import { toInstallRedirect, toIntegrationConnection, toIntegrationProvider, toJiraSite, toRepository } from './integration-mapper.js';
13
15
  export const integrationsQueryKeys = {
14
16
  all: [
15
17
  'integrations'
@@ -69,7 +71,7 @@ export async function listSourceConnections({ workspaceId, signal }) {
69
71
  });
70
72
  // The endpoint returns every lifecycle status (the settings hub needs that),
71
73
  // but source-control consumers (onboarding redirect, project creation) only
72
- // act on usable connections a disabled/error one must read as "not there".
74
+ // act on usable connections. A disabled/error one must read as "not there".
73
75
  return connections.filter(isUsableConnection);
74
76
  }
75
77
  export function sourceConnectionsQueryOptions(workspaceId) {
@@ -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({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/integrations.ts"],"sourcesContent":["import type {\n IntegrationCapabilityDto,\n UpdateIntegrationConnectionBodyDto,\n} from '@shipfox/api-integration-core-dto';\nimport {\n integrationConnectionDtoSchema,\n listIntegrationConnectionsResponseSchema,\n listIntegrationProvidersResponseSchema,\n listRepositoriesResponseSchema,\n} from '@shipfox/api-integration-core-dto';\nimport type {CreateGiteaConnectionBodyDto} from '@shipfox/api-integration-gitea-dto';\nimport {createGiteaConnectionResponseSchema} from '@shipfox/api-integration-gitea-dto';\nimport type {CreateGithubInstallBodyDto} from '@shipfox/api-integration-github-dto';\nimport {\n createGithubInstallResponseSchema,\n githubCallbackResponseSchema,\n} from '@shipfox/api-integration-github-dto';\nimport type {\n CreateLinearInstallBodyDto,\n LinearCallbackQueryDto,\n} from '@shipfox/api-integration-linear-dto';\nimport {\n createLinearInstallResponseSchema,\n linearCallbackResponseSchema,\n} from '@shipfox/api-integration-linear-dto';\nimport type {\n CreateSentryInstallBodyDto,\n SentryConnectBodyDto,\n} from '@shipfox/api-integration-sentry-dto';\nimport {\n createSentryInstallResponseSchema,\n sentryConnectResponseSchema,\n} from '@shipfox/api-integration-sentry-dto';\nimport type {\n CreateSlackInstallBodyDto,\n SlackCallbackQueryDto,\n} from '@shipfox/api-integration-slack-dto';\nimport {\n createSlackInstallResponseSchema,\n slackCallbackResponseSchema,\n} from '@shipfox/api-integration-slack-dto';\nimport {checkedApiRequest, emptyResponseSchema} from '@shipfox/client-api';\nimport {\n type FetchQueryOptions,\n type InfiniteData,\n infiniteQueryOptions,\n queryOptions,\n type UseInfiniteQueryOptions,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport {\n type InstallRedirect,\n type IntegrationConnection,\n type IntegrationProvider,\n isUsableConnection,\n type RepositoryPage,\n} from '#core/models.js';\nimport {serializeLinearCallbackQuery} from '#linear-callback.js';\nimport {serializeSlackCallbackQuery} from '#slack-callback.js';\nimport {\n toInstallRedirect,\n toIntegrationConnection,\n toIntegrationProvider,\n toRepository,\n} from './integration-mapper.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\ntype SourceConnectionsQueryKey =\n | ReturnType<typeof integrationsQueryKeys.sourceConnections>\n | readonly ['integrations', 'source-connections'];\n\ntype SourceConnectionsQueryOptions = FetchQueryOptions<\n IntegrationConnection[],\n Error,\n IntegrationConnection[],\n SourceConnectionsQueryKey\n>;\n\ntype ProvidersQueryKey = ReturnType<typeof integrationsQueryKeys.providers>;\n\ntype ProvidersQueryOptions = FetchQueryOptions<\n IntegrationProvider[],\n Error,\n IntegrationProvider[],\n ProvidersQueryKey\n>;\n\ntype ConnectionsQueryKey =\n | ReturnType<typeof integrationsQueryKeys.connections>\n | readonly ['integrations', 'connections'];\n\ntype ConnectionsQueryOptions = FetchQueryOptions<\n IntegrationConnection[],\n Error,\n IntegrationConnection[],\n ConnectionsQueryKey\n>;\n\ntype RepositoriesQueryKey =\n | ReturnType<typeof integrationsQueryKeys.repositories>\n | readonly ['integrations', 'repositories'];\n\ntype RepositoriesInfiniteQueryOptions = UseInfiniteQueryOptions<\n RepositoryPage,\n Error,\n InfiniteData<RepositoryPage, string | undefined>,\n RepositoriesQueryKey,\n string | undefined\n>;\n\nexport async function listIntegrationProviders({\n capability,\n signal,\n}: {\n capability?: IntegrationCapabilityDto;\n signal?: AbortSignal;\n}): Promise<IntegrationProvider[]> {\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 const response = await checkedApiRequest(listIntegrationProvidersResponseSchema, path, {signal});\n return response.providers.map(toIntegrationProvider);\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}): Promise<IntegrationConnection[]> {\n const search = new URLSearchParams({workspace_id: workspaceId});\n if (capability) search.set('capability', capability);\n const response = await checkedApiRequest(\n listIntegrationConnectionsResponseSchema,\n `/integration-connections?${search.toString()}`,\n {signal},\n );\n return response.connections.map(toIntegrationConnection);\n}\n\nexport async function listSourceConnections({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}): Promise<IntegrationConnection[]> {\n const connections = 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 connections.filter(isUsableConnection);\n}\n\nexport function sourceConnectionsQueryOptions(\n workspaceId: string | undefined,\n): SourceConnectionsQueryOptions {\n return queryOptions({\n queryKey: workspaceId\n ? integrationsQueryKeys.sourceConnections(workspaceId)\n : ([...integrationsQueryKeys.all, 'source-connections'] as const),\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listSourceConnections({workspaceId: workspaceId ?? '', signal}),\n });\n}\n\nexport async function createGiteaConnection(\n body: CreateGiteaConnectionBodyDto,\n): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n createGiteaConnectionResponseSchema,\n '/integrations/gitea/connections',\n {\n method: 'POST',\n body,\n },\n );\n return toIntegrationConnection(response);\n}\n\nexport async function createGithubInstall(\n body: CreateGithubInstallBodyDto,\n): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createGithubInstallResponseSchema, '/integrations/github/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function completeGithubCallback({\n code,\n installationId,\n state,\n setupAction,\n token,\n}: {\n code: string;\n installationId: number;\n state: string;\n setupAction?: string;\n token: string;\n}): Promise<IntegrationConnection> {\n const query = new URLSearchParams({code, installation_id: String(installationId), state});\n if (setupAction) query.set('setup_action', setupAction);\n const response = await checkedApiRequest(\n githubCallbackResponseSchema,\n `/integrations/github/callback/api?${query.toString()}`,\n {headers: {authorization: `Bearer ${token}`}},\n );\n return toIntegrationConnection(response);\n}\n\nexport async function createSentryInstall(\n body: CreateSentryInstallBodyDto,\n): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createSentryInstallResponseSchema, '/integrations/sentry/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function createLinearInstall(\n body: CreateLinearInstallBodyDto,\n): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createLinearInstallResponseSchema, '/integrations/linear/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function createSlackInstall(\n body: CreateSlackInstallBodyDto,\n): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createSlackInstallResponseSchema, '/integrations/slack/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function completeLinearCallback({\n query,\n token,\n}: {\n query: LinearCallbackQueryDto;\n token: string;\n}): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n linearCallbackResponseSchema,\n `/integrations/linear/callback/api?${serializeLinearCallbackQuery(query)}`,\n {headers: {authorization: `Bearer ${token}`}},\n );\n return toIntegrationConnection(response);\n}\n\nexport async function completeSlackCallback({\n query,\n token,\n}: {\n query: SlackCallbackQueryDto;\n token: string;\n}): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n slackCallbackResponseSchema,\n `/integrations/slack/callback/api?${serializeSlackCallbackQuery(query)}`,\n {headers: {authorization: `Bearer ${token}`}},\n );\n return toIntegrationConnection(response);\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 const response = await checkedApiRequest(\n sentryConnectResponseSchema,\n '/integrations/sentry/connect',\n {\n method: 'POST',\n body,\n headers: {authorization: `Bearer ${token}`},\n },\n );\n return toIntegrationConnection(response);\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}): Promise<RepositoryPage> {\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 const response = await checkedApiRequest(listRepositoriesResponseSchema, path, {signal});\n return {\n repositories: response.repositories.map(toRepository),\n ...(response.next_cursor == null ? {} : {nextCursor: response.next_cursor}),\n };\n}\n\nexport async function updateIntegrationConnection({\n connectionId,\n body,\n}: {\n connectionId: string;\n body: UpdateIntegrationConnectionBodyDto;\n}): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n integrationConnectionDtoSchema,\n `/integration-connections/${encodeURIComponent(connectionId)}`,\n {method: 'PATCH', body},\n );\n return toIntegrationConnection(response);\n}\n\nexport async function deleteIntegrationConnection({connectionId}: {connectionId: string}) {\n await checkedApiRequest(\n emptyResponseSchema,\n `/integration-connections/${encodeURIComponent(connectionId)}`,\n {\n method: 'DELETE',\n },\n );\n}\n\nexport function useIntegrationProvidersQuery(params?: {capability?: IntegrationCapabilityDto}) {\n return useQuery(integrationProvidersQueryOptions(params?.capability));\n}\n\nexport function integrationProvidersQueryOptions(\n capability?: IntegrationCapabilityDto,\n): ProvidersQueryOptions {\n return queryOptions({\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(sourceConnectionsQueryOptions(workspaceId));\n}\n\nexport function useIntegrationConnectionsQuery(workspaceId: string | undefined) {\n return useQuery(integrationConnectionsQueryOptions(workspaceId));\n}\n\nexport function integrationConnectionsQueryOptions(\n workspaceId: string | undefined,\n): ConnectionsQueryOptions {\n return queryOptions({\n queryKey: workspaceId\n ? integrationsQueryKeys.connections(workspaceId, 'all')\n : ([...integrationsQueryKeys.all, 'connections'] as const),\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listIntegrationConnections({workspaceId: workspaceId ?? '', signal}),\n });\n}\n\nexport function repositoriesInfiniteQueryOptions(\n connectionId: string | undefined,\n options?: {search?: string},\n): RepositoriesInfiniteQueryOptions {\n const trimmedSearch = options?.search?.trim() ?? '';\n return infiniteQueryOptions({\n queryKey: connectionId\n ? integrationsQueryKeys.repositories(connectionId, trimmedSearch)\n : ([...integrationsQueryKeys.all, 'repositories'] as const),\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.nextCursor,\n });\n}\n\nexport function useRepositoriesInfiniteQuery(\n connectionId: string | undefined,\n options?: {search?: string},\n) {\n return useInfiniteQuery(repositoriesInfiniteQueryOptions(connectionId, options));\n}\n\nexport function useCreateGiteaConnectionMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: createGiteaConnection,\n onSuccess: async (connection) => {\n await queryClient.invalidateQueries({\n queryKey: integrationsQueryKeys.connectionsByWorkspace(connection.workspaceId),\n refetchType: 'all',\n });\n },\n });\n}\n\nexport function useCreateLinearInstallMutation() {\n return useMutation({mutationFn: createLinearInstall});\n}\n\nexport function useCreateSlackInstallMutation() {\n return useMutation({mutationFn: createSlackInstall});\n}\n\nexport function useCompleteLinearCallbackMutation() {\n return useMutation({mutationFn: completeLinearCallback});\n}\n\nexport function useCompleteSlackCallbackMutation() {\n return useMutation({mutationFn: completeSlackCallback});\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.workspaceId),\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":["integrationConnectionDtoSchema","listIntegrationConnectionsResponseSchema","listIntegrationProvidersResponseSchema","listRepositoriesResponseSchema","createGiteaConnectionResponseSchema","createGithubInstallResponseSchema","githubCallbackResponseSchema","createLinearInstallResponseSchema","linearCallbackResponseSchema","createSentryInstallResponseSchema","sentryConnectResponseSchema","createSlackInstallResponseSchema","slackCallbackResponseSchema","checkedApiRequest","emptyResponseSchema","infiniteQueryOptions","queryOptions","useInfiniteQuery","useMutation","useQuery","useQueryClient","isUsableConnection","serializeLinearCallbackQuery","serializeSlackCallbackQuery","toInstallRedirect","toIntegrationConnection","toIntegrationProvider","toRepository","integrationsQueryKeys","all","providers","capability","connections","workspaceId","connectionsByWorkspace","sourceConnections","repositories","connectionId","search","listIntegrationProviders","signal","URLSearchParams","set","query","toString","path","response","map","listIntegrationConnections","workspace_id","listSourceConnections","filter","sourceConnectionsQueryOptions","queryKey","enabled","Boolean","queryFn","createGiteaConnection","body","method","createGithubInstall","completeGithubCallback","code","installationId","state","setupAction","token","installation_id","String","headers","authorization","createSentryInstall","createLinearInstall","createSlackInstall","completeLinearCallback","completeSlackCallback","connectSentry","listRepositories","cursor","params","next_cursor","nextCursor","updateIntegrationConnection","encodeURIComponent","deleteIntegrationConnection","useIntegrationProvidersQuery","integrationProvidersQueryOptions","useSourceConnectionsQuery","useIntegrationConnectionsQuery","integrationConnectionsQueryOptions","repositoriesInfiniteQueryOptions","options","trimmedSearch","trim","initialPageParam","undefined","pageParam","args","getNextPageParam","lastPage","useRepositoriesInfiniteQuery","useCreateGiteaConnectionMutation","queryClient","mutationFn","onSuccess","connection","invalidateQueries","refetchType","useCreateLinearInstallMutation","useCreateSlackInstallMutation","useCompleteLinearCallbackMutation","useCompleteSlackCallbackMutation","useUpdateIntegrationConnectionMutation","useDeleteIntegrationConnectionMutation","_workspaceId","_result","variables"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/hooks/api/integrations.ts"],"sourcesContent":["import type {\n IntegrationCapabilityDto,\n UpdateIntegrationConnectionBodyDto,\n} from '@shipfox/api-integration-core-dto';\nimport {\n integrationConnectionDtoSchema,\n listIntegrationConnectionsResponseSchema,\n listIntegrationProvidersResponseSchema,\n listRepositoriesResponseSchema,\n} from '@shipfox/api-integration-core-dto';\nimport type {CreateGiteaConnectionBodyDto} from '@shipfox/api-integration-gitea-dto';\nimport {createGiteaConnectionResponseSchema} from '@shipfox/api-integration-gitea-dto';\nimport type {CreateGithubInstallBodyDto} from '@shipfox/api-integration-github-dto';\nimport {\n createGithubInstallResponseSchema,\n githubCallbackResponseSchema,\n} from '@shipfox/api-integration-github-dto';\nimport type {\n CompleteJiraSiteSelectionBodyDto,\n CreateJiraInstallBodyDto,\n JiraCallbackQueryDto,\n} from '@shipfox/api-integration-jira-dto';\nimport {\n createJiraInstallResponseSchema,\n jiraCallbackResponseSchema,\n} from '@shipfox/api-integration-jira-dto';\nimport type {\n CreateLinearInstallBodyDto,\n LinearCallbackQueryDto,\n} from '@shipfox/api-integration-linear-dto';\nimport {\n createLinearInstallResponseSchema,\n linearCallbackResponseSchema,\n} from '@shipfox/api-integration-linear-dto';\nimport type {\n CreateSentryInstallBodyDto,\n SentryConnectBodyDto,\n} from '@shipfox/api-integration-sentry-dto';\nimport {\n createSentryInstallResponseSchema,\n sentryConnectResponseSchema,\n} from '@shipfox/api-integration-sentry-dto';\nimport type {\n CreateSlackInstallBodyDto,\n SlackCallbackQueryDto,\n} from '@shipfox/api-integration-slack-dto';\nimport {\n createSlackInstallResponseSchema,\n slackCallbackResponseSchema,\n} from '@shipfox/api-integration-slack-dto';\nimport {checkedApiRequest, emptyResponseSchema} from '@shipfox/client-api';\nimport {\n type FetchQueryOptions,\n type InfiniteData,\n infiniteQueryOptions,\n queryOptions,\n type UseInfiniteQueryOptions,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport {\n type InstallRedirect,\n type IntegrationConnection,\n type IntegrationProvider,\n isUsableConnection,\n type JiraSite,\n type RepositoryPage,\n} from '#core/models.js';\nimport {serializeJiraCallbackQuery} from '#jira-callback.js';\nimport {serializeLinearCallbackQuery} from '#linear-callback.js';\nimport {serializeSlackCallbackQuery} from '#slack-callback.js';\nimport {\n toInstallRedirect,\n toIntegrationConnection,\n toIntegrationProvider,\n toJiraSite,\n toRepository,\n} from './integration-mapper.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\ntype SourceConnectionsQueryKey =\n | ReturnType<typeof integrationsQueryKeys.sourceConnections>\n | readonly ['integrations', 'source-connections'];\n\ntype SourceConnectionsQueryOptions = FetchQueryOptions<\n IntegrationConnection[],\n Error,\n IntegrationConnection[],\n SourceConnectionsQueryKey\n>;\n\ntype ProvidersQueryKey = ReturnType<typeof integrationsQueryKeys.providers>;\n\ntype ProvidersQueryOptions = FetchQueryOptions<\n IntegrationProvider[],\n Error,\n IntegrationProvider[],\n ProvidersQueryKey\n>;\n\ntype ConnectionsQueryKey =\n | ReturnType<typeof integrationsQueryKeys.connections>\n | readonly ['integrations', 'connections'];\n\ntype ConnectionsQueryOptions = FetchQueryOptions<\n IntegrationConnection[],\n Error,\n IntegrationConnection[],\n ConnectionsQueryKey\n>;\n\ntype RepositoriesQueryKey =\n | ReturnType<typeof integrationsQueryKeys.repositories>\n | readonly ['integrations', 'repositories'];\n\ntype RepositoriesInfiniteQueryOptions = UseInfiniteQueryOptions<\n RepositoryPage,\n Error,\n InfiniteData<RepositoryPage, string | undefined>,\n RepositoriesQueryKey,\n string | undefined\n>;\n\nexport async function listIntegrationProviders({\n capability,\n signal,\n}: {\n capability?: IntegrationCapabilityDto;\n signal?: AbortSignal;\n}): Promise<IntegrationProvider[]> {\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 const response = await checkedApiRequest(listIntegrationProvidersResponseSchema, path, {signal});\n return response.providers.map(toIntegrationProvider);\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}): Promise<IntegrationConnection[]> {\n const search = new URLSearchParams({workspace_id: workspaceId});\n if (capability) search.set('capability', capability);\n const response = await checkedApiRequest(\n listIntegrationConnectionsResponseSchema,\n `/integration-connections?${search.toString()}`,\n {signal},\n );\n return response.connections.map(toIntegrationConnection);\n}\n\nexport async function listSourceConnections({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}): Promise<IntegrationConnection[]> {\n const connections = 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 connections.filter(isUsableConnection);\n}\n\nexport function sourceConnectionsQueryOptions(\n workspaceId: string | undefined,\n): SourceConnectionsQueryOptions {\n return queryOptions({\n queryKey: workspaceId\n ? integrationsQueryKeys.sourceConnections(workspaceId)\n : ([...integrationsQueryKeys.all, 'source-connections'] as const),\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listSourceConnections({workspaceId: workspaceId ?? '', signal}),\n });\n}\n\nexport async function createGiteaConnection(\n body: CreateGiteaConnectionBodyDto,\n): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n createGiteaConnectionResponseSchema,\n '/integrations/gitea/connections',\n {\n method: 'POST',\n body,\n },\n );\n return toIntegrationConnection(response);\n}\n\nexport async function createGithubInstall(\n body: CreateGithubInstallBodyDto,\n): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createGithubInstallResponseSchema, '/integrations/github/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function completeGithubCallback({\n code,\n installationId,\n state,\n setupAction,\n token,\n}: {\n code: string;\n installationId: number;\n state: string;\n setupAction?: string;\n token: string;\n}): Promise<IntegrationConnection> {\n const query = new URLSearchParams({code, installation_id: String(installationId), state});\n if (setupAction) query.set('setup_action', setupAction);\n const response = await checkedApiRequest(\n githubCallbackResponseSchema,\n `/integrations/github/callback/api?${query.toString()}`,\n {headers: {authorization: `Bearer ${token}`}},\n );\n return toIntegrationConnection(response);\n}\n\nexport async function createSentryInstall(\n body: CreateSentryInstallBodyDto,\n): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createSentryInstallResponseSchema, '/integrations/sentry/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function createLinearInstall(\n body: CreateLinearInstallBodyDto,\n): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createLinearInstallResponseSchema, '/integrations/linear/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function createJiraInstall(body: CreateJiraInstallBodyDto): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createJiraInstallResponseSchema, '/integrations/jira/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function createSlackInstall(\n body: CreateSlackInstallBodyDto,\n): Promise<InstallRedirect> {\n return toInstallRedirect(\n await checkedApiRequest(createSlackInstallResponseSchema, '/integrations/slack/install', {\n method: 'POST',\n body,\n }),\n );\n}\n\nexport async function completeLinearCallback({\n query,\n token,\n}: {\n query: LinearCallbackQueryDto;\n token: string;\n}): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n linearCallbackResponseSchema,\n `/integrations/linear/callback/api?${serializeLinearCallbackQuery(query)}`,\n {headers: {authorization: `Bearer ${token}`}},\n );\n return toIntegrationConnection(response);\n}\n\nexport async function completeSlackCallback({\n query,\n token,\n}: {\n query: SlackCallbackQueryDto;\n token: string;\n}): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n slackCallbackResponseSchema,\n `/integrations/slack/callback/api?${serializeSlackCallbackQuery(query)}`,\n {headers: {authorization: `Bearer ${token}`}},\n );\n return toIntegrationConnection(response);\n}\n\nexport type JiraCallbackResult = IntegrationConnection | {sites: JiraSite[]};\n\nexport async function completeJiraCallback({\n query,\n token,\n}: {\n query: JiraCallbackQueryDto;\n token: string;\n}): Promise<JiraCallbackResult> {\n const response = await checkedApiRequest(\n jiraCallbackResponseSchema,\n `/integrations/jira/callback/api?${serializeJiraCallbackQuery(query)}`,\n {headers: {authorization: `Bearer ${token}`}},\n );\n return 'sites' in response\n ? {sites: response.sites.map(toJiraSite)}\n : toIntegrationConnection(response);\n}\n\nexport async function completeJiraSiteSelection({\n body,\n token,\n}: {\n body: CompleteJiraSiteSelectionBodyDto;\n token: string;\n}): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n integrationConnectionDtoSchema,\n '/integrations/jira/callback/site',\n {\n method: 'POST',\n body,\n headers: {authorization: `Bearer ${token}`},\n },\n );\n return toIntegrationConnection(response);\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 const response = await checkedApiRequest(\n sentryConnectResponseSchema,\n '/integrations/sentry/connect',\n {\n method: 'POST',\n body,\n headers: {authorization: `Bearer ${token}`},\n },\n );\n return toIntegrationConnection(response);\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}): Promise<RepositoryPage> {\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 const response = await checkedApiRequest(listRepositoriesResponseSchema, path, {signal});\n return {\n repositories: response.repositories.map(toRepository),\n ...(response.next_cursor == null ? {} : {nextCursor: response.next_cursor}),\n };\n}\n\nexport async function updateIntegrationConnection({\n connectionId,\n body,\n}: {\n connectionId: string;\n body: UpdateIntegrationConnectionBodyDto;\n}): Promise<IntegrationConnection> {\n const response = await checkedApiRequest(\n integrationConnectionDtoSchema,\n `/integration-connections/${encodeURIComponent(connectionId)}`,\n {method: 'PATCH', body},\n );\n return toIntegrationConnection(response);\n}\n\nexport async function deleteIntegrationConnection({connectionId}: {connectionId: string}) {\n await checkedApiRequest(\n emptyResponseSchema,\n `/integration-connections/${encodeURIComponent(connectionId)}`,\n {\n method: 'DELETE',\n },\n );\n}\n\nexport function useIntegrationProvidersQuery(params?: {capability?: IntegrationCapabilityDto}) {\n return useQuery(integrationProvidersQueryOptions(params?.capability));\n}\n\nexport function integrationProvidersQueryOptions(\n capability?: IntegrationCapabilityDto,\n): ProvidersQueryOptions {\n return queryOptions({\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(sourceConnectionsQueryOptions(workspaceId));\n}\n\nexport function useIntegrationConnectionsQuery(workspaceId: string | undefined) {\n return useQuery(integrationConnectionsQueryOptions(workspaceId));\n}\n\nexport function integrationConnectionsQueryOptions(\n workspaceId: string | undefined,\n): ConnectionsQueryOptions {\n return queryOptions({\n queryKey: workspaceId\n ? integrationsQueryKeys.connections(workspaceId, 'all')\n : ([...integrationsQueryKeys.all, 'connections'] as const),\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listIntegrationConnections({workspaceId: workspaceId ?? '', signal}),\n });\n}\n\nexport function repositoriesInfiniteQueryOptions(\n connectionId: string | undefined,\n options?: {search?: string},\n): RepositoriesInfiniteQueryOptions {\n const trimmedSearch = options?.search?.trim() ?? '';\n return infiniteQueryOptions({\n queryKey: connectionId\n ? integrationsQueryKeys.repositories(connectionId, trimmedSearch)\n : ([...integrationsQueryKeys.all, 'repositories'] as const),\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.nextCursor,\n });\n}\n\nexport function useRepositoriesInfiniteQuery(\n connectionId: string | undefined,\n options?: {search?: string},\n) {\n return useInfiniteQuery(repositoriesInfiniteQueryOptions(connectionId, options));\n}\n\nexport function useCreateGiteaConnectionMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: createGiteaConnection,\n onSuccess: async (connection) => {\n await queryClient.invalidateQueries({\n queryKey: integrationsQueryKeys.connectionsByWorkspace(connection.workspaceId),\n refetchType: 'all',\n });\n },\n });\n}\n\nexport function useCreateLinearInstallMutation() {\n return useMutation({mutationFn: createLinearInstall});\n}\n\nexport function useCreateSlackInstallMutation() {\n return useMutation({mutationFn: createSlackInstall});\n}\n\nexport function useCreateJiraInstallMutation() {\n return useMutation({mutationFn: createJiraInstall});\n}\n\nexport function useCompleteLinearCallbackMutation() {\n return useMutation({mutationFn: completeLinearCallback});\n}\n\nexport function useCompleteSlackCallbackMutation() {\n return useMutation({mutationFn: completeSlackCallback});\n}\n\nexport function useCompleteJiraCallbackMutation() {\n return useMutation({mutationFn: completeJiraCallback});\n}\n\nexport function useCompleteJiraSiteSelectionMutation() {\n return useMutation({mutationFn: completeJiraSiteSelection});\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.workspaceId),\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":["integrationConnectionDtoSchema","listIntegrationConnectionsResponseSchema","listIntegrationProvidersResponseSchema","listRepositoriesResponseSchema","createGiteaConnectionResponseSchema","createGithubInstallResponseSchema","githubCallbackResponseSchema","createJiraInstallResponseSchema","jiraCallbackResponseSchema","createLinearInstallResponseSchema","linearCallbackResponseSchema","createSentryInstallResponseSchema","sentryConnectResponseSchema","createSlackInstallResponseSchema","slackCallbackResponseSchema","checkedApiRequest","emptyResponseSchema","infiniteQueryOptions","queryOptions","useInfiniteQuery","useMutation","useQuery","useQueryClient","isUsableConnection","serializeJiraCallbackQuery","serializeLinearCallbackQuery","serializeSlackCallbackQuery","toInstallRedirect","toIntegrationConnection","toIntegrationProvider","toJiraSite","toRepository","integrationsQueryKeys","all","providers","capability","connections","workspaceId","connectionsByWorkspace","sourceConnections","repositories","connectionId","search","listIntegrationProviders","signal","URLSearchParams","set","query","toString","path","response","map","listIntegrationConnections","workspace_id","listSourceConnections","filter","sourceConnectionsQueryOptions","queryKey","enabled","Boolean","queryFn","createGiteaConnection","body","method","createGithubInstall","completeGithubCallback","code","installationId","state","setupAction","token","installation_id","String","headers","authorization","createSentryInstall","createLinearInstall","createJiraInstall","createSlackInstall","completeLinearCallback","completeSlackCallback","completeJiraCallback","sites","completeJiraSiteSelection","connectSentry","listRepositories","cursor","params","next_cursor","nextCursor","updateIntegrationConnection","encodeURIComponent","deleteIntegrationConnection","useIntegrationProvidersQuery","integrationProvidersQueryOptions","useSourceConnectionsQuery","useIntegrationConnectionsQuery","integrationConnectionsQueryOptions","repositoriesInfiniteQueryOptions","options","trimmedSearch","trim","initialPageParam","undefined","pageParam","args","getNextPageParam","lastPage","useRepositoriesInfiniteQuery","useCreateGiteaConnectionMutation","queryClient","mutationFn","onSuccess","connection","invalidateQueries","refetchType","useCreateLinearInstallMutation","useCreateSlackInstallMutation","useCreateJiraInstallMutation","useCompleteLinearCallbackMutation","useCompleteSlackCallbackMutation","useCompleteJiraCallbackMutation","useCompleteJiraSiteSelectionMutation","useUpdateIntegrationConnectionMutation","useDeleteIntegrationConnectionMutation","_workspaceId","_result","variables"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,8 +6,12 @@ export * from './components/redirect-install-page.js';
6
6
  export * from './components/repository-picker.js';
7
7
  export * from './connection-status-badge.js';
8
8
  export * from './hooks/api/integrations.js';
9
+ export * from './jira-callback.js';
10
+ export * from './jira-form-errors.js';
9
11
  export * from './pages/gitea-install-page.js';
10
12
  export * from './pages/github-install-page.js';
13
+ export * from './pages/jira-callback-page.js';
14
+ export * from './pages/jira-install-page.js';
11
15
  export * from './pages/linear-callback-page.js';
12
16
  export * from './pages/linear-install-page.js';
13
17
  export * from './pages/sentry-callback-page.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -6,8 +6,12 @@ export * from './components/redirect-install-page.js';
6
6
  export * from './components/repository-picker.js';
7
7
  export * from './connection-status-badge.js';
8
8
  export * from './hooks/api/integrations.js';
9
+ export * from './jira-callback.js';
10
+ export * from './jira-form-errors.js';
9
11
  export * from './pages/gitea-install-page.js';
10
12
  export * from './pages/github-install-page.js';
13
+ export * from './pages/jira-callback-page.js';
14
+ export * from './pages/jira-install-page.js';
11
15
  export * from './pages/linear-callback-page.js';
12
16
  export * from './pages/linear-install-page.js';
13
17
  export * from './pages/sentry-callback-page.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from '@shipfox/integration-icons';\nexport * from '#core/models.js';\nexport * from './components/connection-picker.js';\nexport * from './components/integration-gallery.js';\nexport * from './components/redirect-install-page.js';\nexport * from './components/repository-picker.js';\nexport * from './connection-status-badge.js';\nexport * from './hooks/api/integrations.js';\nexport * from './pages/gitea-install-page.js';\nexport * from './pages/github-install-page.js';\nexport * from './pages/linear-callback-page.js';\nexport * from './pages/linear-install-page.js';\nexport * from './pages/sentry-callback-page.js';\nexport * from './pages/sentry-install-page.js';\nexport * from './pages/slack-callback-page.js';\nexport * from './pages/slack-install-page.js';\nexport * from './pages/source-control-onboarding-page.js';\nexport * from './provider-catalog.js';\nexport * from './sentry-callback.js';\nexport * from './slack-callback.js';\n"],"names":[],"mappings":"AAAA,cAAc,6BAA6B;AAC3C,cAAc,kBAAkB;AAChC,cAAc,oCAAoC;AAClD,cAAc,sCAAsC;AACpD,cAAc,wCAAwC;AACtD,cAAc,oCAAoC;AAClD,cAAc,+BAA+B;AAC7C,cAAc,8BAA8B;AAC5C,cAAc,gCAAgC;AAC9C,cAAc,iCAAiC;AAC/C,cAAc,kCAAkC;AAChD,cAAc,iCAAiC;AAC/C,cAAc,kCAAkC;AAChD,cAAc,iCAAiC;AAC/C,cAAc,iCAAiC;AAC/C,cAAc,gCAAgC;AAC9C,cAAc,4CAA4C;AAC1D,cAAc,wBAAwB;AACtC,cAAc,uBAAuB;AACrC,cAAc,sBAAsB"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from '@shipfox/integration-icons';\nexport * from '#core/models.js';\nexport * from './components/connection-picker.js';\nexport * from './components/integration-gallery.js';\nexport * from './components/redirect-install-page.js';\nexport * from './components/repository-picker.js';\nexport * from './connection-status-badge.js';\nexport * from './hooks/api/integrations.js';\nexport * from './jira-callback.js';\nexport * from './jira-form-errors.js';\nexport * from './pages/gitea-install-page.js';\nexport * from './pages/github-install-page.js';\nexport * from './pages/jira-callback-page.js';\nexport * from './pages/jira-install-page.js';\nexport * from './pages/linear-callback-page.js';\nexport * from './pages/linear-install-page.js';\nexport * from './pages/sentry-callback-page.js';\nexport * from './pages/sentry-install-page.js';\nexport * from './pages/slack-callback-page.js';\nexport * from './pages/slack-install-page.js';\nexport * from './pages/source-control-onboarding-page.js';\nexport * from './provider-catalog.js';\nexport * from './sentry-callback.js';\nexport * from './slack-callback.js';\n"],"names":[],"mappings":"AAAA,cAAc,6BAA6B;AAC3C,cAAc,kBAAkB;AAChC,cAAc,oCAAoC;AAClD,cAAc,sCAAsC;AACpD,cAAc,wCAAwC;AACtD,cAAc,oCAAoC;AAClD,cAAc,+BAA+B;AAC7C,cAAc,8BAA8B;AAC5C,cAAc,qBAAqB;AACnC,cAAc,wBAAwB;AACtC,cAAc,gCAAgC;AAC9C,cAAc,iCAAiC;AAC/C,cAAc,gCAAgC;AAC9C,cAAc,+BAA+B;AAC7C,cAAc,kCAAkC;AAChD,cAAc,iCAAiC;AAC/C,cAAc,kCAAkC;AAChD,cAAc,iCAAiC;AAC/C,cAAc,iCAAiC;AAC/C,cAAc,gCAAgC;AAC9C,cAAc,4CAA4C;AAC1D,cAAc,wBAAwB;AACtC,cAAc,uBAAuB;AACrC,cAAc,sBAAsB"}
@@ -0,0 +1,9 @@
1
+ import type { IntegrationConnection } from '#core/models.js';
2
+ import type { JiraCallbackResult } from '#hooks/api/integrations.js';
3
+ export declare const JIRA_CALLBACK_CACHE_SIZE = 32;
4
+ export declare const jiraCallbackRequests: import("@shipfox/client-ui").SingleFlight<string, JiraCallbackResult>;
5
+ export declare const jiraSiteSelectionRequests: import("@shipfox/client-ui").SingleFlight<string, IntegrationConnection>;
6
+ export declare const jiraCompletedConnections: Map<string, IntegrationConnection>;
7
+ export declare const jiraToastedCallbacks: Set<string>;
8
+ export declare function resetJiraCallbackState(): void;
9
+ //# sourceMappingURL=jira-callback-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-callback-state.d.ts","sourceRoot":"","sources":["../src/jira-callback-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAEnE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,eAAO,MAAM,oBAAoB,uEAE/B,CAAC;AACH,eAAO,MAAM,yBAAyB,0EAAsD,CAAC;AAC7F,eAAO,MAAM,wBAAwB,oCAA2C,CAAC;AACjF,eAAO,MAAM,oBAAoB,aAAoB,CAAC;AAEtD,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C"}
@@ -0,0 +1,16 @@
1
+ import { createSingleFlight } from '@shipfox/client-ui';
2
+ export const JIRA_CALLBACK_CACHE_SIZE = 32;
3
+ export const jiraCallbackRequests = createSingleFlight({
4
+ maxTerminalResults: JIRA_CALLBACK_CACHE_SIZE
5
+ });
6
+ export const jiraSiteSelectionRequests = createSingleFlight();
7
+ export const jiraCompletedConnections = new Map();
8
+ export const jiraToastedCallbacks = new Set();
9
+ export function resetJiraCallbackState() {
10
+ jiraCallbackRequests.clear();
11
+ jiraSiteSelectionRequests.clear();
12
+ jiraCompletedConnections.clear();
13
+ jiraToastedCallbacks.clear();
14
+ }
15
+
16
+ //# sourceMappingURL=jira-callback-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/jira-callback-state.ts"],"sourcesContent":["import {createSingleFlight} from '@shipfox/client-ui';\nimport type {IntegrationConnection} from '#core/models.js';\nimport type {JiraCallbackResult} from '#hooks/api/integrations.js';\n\nexport const JIRA_CALLBACK_CACHE_SIZE = 32;\n\nexport const jiraCallbackRequests = createSingleFlight<string, JiraCallbackResult>({\n maxTerminalResults: JIRA_CALLBACK_CACHE_SIZE,\n});\nexport const jiraSiteSelectionRequests = createSingleFlight<string, IntegrationConnection>();\nexport const jiraCompletedConnections = new Map<string, IntegrationConnection>();\nexport const jiraToastedCallbacks = new Set<string>();\n\nexport function resetJiraCallbackState(): void {\n jiraCallbackRequests.clear();\n jiraSiteSelectionRequests.clear();\n jiraCompletedConnections.clear();\n jiraToastedCallbacks.clear();\n}\n"],"names":["createSingleFlight","JIRA_CALLBACK_CACHE_SIZE","jiraCallbackRequests","maxTerminalResults","jiraSiteSelectionRequests","jiraCompletedConnections","Map","jiraToastedCallbacks","Set","resetJiraCallbackState","clear"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,qBAAqB;AAItD,OAAO,MAAMC,2BAA2B,GAAG;AAE3C,OAAO,MAAMC,uBAAuBF,mBAA+C;IACjFG,oBAAoBF;AACtB,GAAG;AACH,OAAO,MAAMG,4BAA4BJ,qBAAoD;AAC7F,OAAO,MAAMK,2BAA2B,IAAIC,MAAqC;AACjF,OAAO,MAAMC,uBAAuB,IAAIC,MAAc;AAEtD,OAAO,SAASC;IACdP,qBAAqBQ,KAAK;IAC1BN,0BAA0BM,KAAK;IAC/BL,yBAAyBK,KAAK;IAC9BH,qBAAqBG,KAAK;AAC5B"}
@@ -0,0 +1,11 @@
1
+ import type { JiraCallbackQueryDto } from '@shipfox/api-integration-jira-dto';
2
+ import { type BrowserStorage } from '@shipfox/client-ui';
3
+ export declare const JIRA_INSTALL_WORKSPACE_KEY = "shipfox.jira-install.workspace-id";
4
+ type WorkspaceStorage = BrowserStorage | undefined;
5
+ export declare function saveJiraInstallWorkspace(storage: WorkspaceStorage, workspaceId: string): void;
6
+ export declare function readJiraInstallWorkspace(storage: WorkspaceStorage): string | undefined;
7
+ export declare function clearJiraInstallWorkspace(storage: WorkspaceStorage): void;
8
+ export declare function parseJiraCallbackQuery(search: Record<string, unknown>): JiraCallbackQueryDto | undefined;
9
+ export declare function serializeJiraCallbackQuery(query: JiraCallbackQueryDto): string;
10
+ export {};
11
+ //# sourceMappingURL=jira-callback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-callback.d.ts","sourceRoot":"","sources":["../src/jira-callback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,KAAK,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAC;AAanD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAEtF;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAEzE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,oBAAoB,GAAG,SAAS,CAWlC;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAS9E"}
@@ -0,0 +1,59 @@
1
+ import { createTypedBrowserStorage } from '@shipfox/client-ui';
2
+ export const JIRA_INSTALL_WORKSPACE_KEY = 'shipfox.jira-install.workspace-id';
3
+ const jiraInstallWorkspaceStorageKey = {
4
+ key: JIRA_INSTALL_WORKSPACE_KEY,
5
+ lifetime: 'session',
6
+ // This is a one-shot navigation hint, not private workspace state. It must
7
+ // remain readable on an OAuth callback before workspace hydration completes;
8
+ // the signed callback state and returned connection are authoritative.
9
+ principalScope: 'global',
10
+ serialize: (workspaceId)=>workspaceId,
11
+ parse: (value)=>value || undefined
12
+ };
13
+ export function saveJiraInstallWorkspace(storage, workspaceId) {
14
+ installWorkspaceStorage(storage).write(workspaceId);
15
+ }
16
+ export function readJiraInstallWorkspace(storage) {
17
+ return installWorkspaceStorage(storage).read();
18
+ }
19
+ export function clearJiraInstallWorkspace(storage) {
20
+ installWorkspaceStorage(storage).remove();
21
+ }
22
+ function installWorkspaceStorage(storage) {
23
+ return createTypedBrowserStorage(()=>storage, jiraInstallWorkspaceStorageKey);
24
+ }
25
+ export function parseJiraCallbackQuery(search) {
26
+ const state = stringParam(search.state);
27
+ if (!state) return undefined;
28
+ const code = stringParam(search.code);
29
+ if (code) return {
30
+ code,
31
+ state
32
+ };
33
+ const error = stringParam(search.error);
34
+ if (!error) return undefined;
35
+ const errorDescription = stringParam(search.error_description);
36
+ return errorDescription ? {
37
+ error,
38
+ error_description: errorDescription,
39
+ state
40
+ } : {
41
+ error,
42
+ state
43
+ };
44
+ }
45
+ export function serializeJiraCallbackQuery(query) {
46
+ const params = new URLSearchParams();
47
+ if ('code' in query) params.set('code', query.code);
48
+ else {
49
+ params.set('error', query.error);
50
+ if (query.error_description) params.set('error_description', query.error_description);
51
+ }
52
+ params.set('state', query.state);
53
+ return params.toString();
54
+ }
55
+ function stringParam(value) {
56
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
57
+ }
58
+
59
+ //# sourceMappingURL=jira-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/jira-callback.ts"],"sourcesContent":["import type {JiraCallbackQueryDto} from '@shipfox/api-integration-jira-dto';\nimport {\n type BrowserStorage,\n type BrowserStorageKey,\n createTypedBrowserStorage,\n} from '@shipfox/client-ui';\n\nexport const JIRA_INSTALL_WORKSPACE_KEY = 'shipfox.jira-install.workspace-id';\n\ntype WorkspaceStorage = BrowserStorage | undefined;\n\nconst jiraInstallWorkspaceStorageKey = {\n key: JIRA_INSTALL_WORKSPACE_KEY,\n lifetime: 'session',\n // This is a one-shot navigation hint, not private workspace state. It must\n // remain readable on an OAuth callback before workspace hydration completes;\n // the signed callback state and returned connection are authoritative.\n principalScope: 'global',\n serialize: (workspaceId: string) => workspaceId,\n parse: (value: string) => value || undefined,\n} satisfies BrowserStorageKey<string>;\n\nexport function saveJiraInstallWorkspace(storage: WorkspaceStorage, workspaceId: string): void {\n installWorkspaceStorage(storage).write(workspaceId);\n}\n\nexport function readJiraInstallWorkspace(storage: WorkspaceStorage): string | undefined {\n return installWorkspaceStorage(storage).read();\n}\n\nexport function clearJiraInstallWorkspace(storage: WorkspaceStorage): void {\n installWorkspaceStorage(storage).remove();\n}\n\nfunction installWorkspaceStorage(storage: WorkspaceStorage) {\n return createTypedBrowserStorage(() => storage, jiraInstallWorkspaceStorageKey);\n}\n\nexport function parseJiraCallbackQuery(\n search: Record<string, unknown>,\n): JiraCallbackQueryDto | undefined {\n const state = stringParam(search.state);\n if (!state) return undefined;\n\n const code = stringParam(search.code);\n if (code) return {code, state};\n\n const error = stringParam(search.error);\n if (!error) return undefined;\n const errorDescription = stringParam(search.error_description);\n return errorDescription ? {error, error_description: errorDescription, state} : {error, state};\n}\n\nexport function serializeJiraCallbackQuery(query: JiraCallbackQueryDto): string {\n const params = new URLSearchParams();\n if ('code' in query) params.set('code', query.code);\n else {\n params.set('error', query.error);\n if (query.error_description) params.set('error_description', query.error_description);\n }\n params.set('state', query.state);\n return params.toString();\n}\n\nfunction stringParam(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n"],"names":["createTypedBrowserStorage","JIRA_INSTALL_WORKSPACE_KEY","jiraInstallWorkspaceStorageKey","key","lifetime","principalScope","serialize","workspaceId","parse","value","undefined","saveJiraInstallWorkspace","storage","installWorkspaceStorage","write","readJiraInstallWorkspace","read","clearJiraInstallWorkspace","remove","parseJiraCallbackQuery","search","state","stringParam","code","error","errorDescription","error_description","serializeJiraCallbackQuery","query","params","URLSearchParams","set","toString","length"],"mappings":"AACA,SAGEA,yBAAyB,QACpB,qBAAqB;AAE5B,OAAO,MAAMC,6BAA6B,oCAAoC;AAI9E,MAAMC,iCAAiC;IACrCC,KAAKF;IACLG,UAAU;IACV,2EAA2E;IAC3E,6EAA6E;IAC7E,uEAAuE;IACvEC,gBAAgB;IAChBC,WAAW,CAACC,cAAwBA;IACpCC,OAAO,CAACC,QAAkBA,SAASC;AACrC;AAEA,OAAO,SAASC,yBAAyBC,OAAyB,EAAEL,WAAmB;IACrFM,wBAAwBD,SAASE,KAAK,CAACP;AACzC;AAEA,OAAO,SAASQ,yBAAyBH,OAAyB;IAChE,OAAOC,wBAAwBD,SAASI,IAAI;AAC9C;AAEA,OAAO,SAASC,0BAA0BL,OAAyB;IACjEC,wBAAwBD,SAASM,MAAM;AACzC;AAEA,SAASL,wBAAwBD,OAAyB;IACxD,OAAOZ,0BAA0B,IAAMY,SAASV;AAClD;AAEA,OAAO,SAASiB,uBACdC,MAA+B;IAE/B,MAAMC,QAAQC,YAAYF,OAAOC,KAAK;IACtC,IAAI,CAACA,OAAO,OAAOX;IAEnB,MAAMa,OAAOD,YAAYF,OAAOG,IAAI;IACpC,IAAIA,MAAM,OAAO;QAACA;QAAMF;IAAK;IAE7B,MAAMG,QAAQF,YAAYF,OAAOI,KAAK;IACtC,IAAI,CAACA,OAAO,OAAOd;IACnB,MAAMe,mBAAmBH,YAAYF,OAAOM,iBAAiB;IAC7D,OAAOD,mBAAmB;QAACD;QAAOE,mBAAmBD;QAAkBJ;IAAK,IAAI;QAACG;QAAOH;IAAK;AAC/F;AAEA,OAAO,SAASM,2BAA2BC,KAA2B;IACpE,MAAMC,SAAS,IAAIC;IACnB,IAAI,UAAUF,OAAOC,OAAOE,GAAG,CAAC,QAAQH,MAAML,IAAI;SAC7C;QACHM,OAAOE,GAAG,CAAC,SAASH,MAAMJ,KAAK;QAC/B,IAAII,MAAMF,iBAAiB,EAAEG,OAAOE,GAAG,CAAC,qBAAqBH,MAAMF,iBAAiB;IACtF;IACAG,OAAOE,GAAG,CAAC,SAASH,MAAMP,KAAK;IAC/B,OAAOQ,OAAOG,QAAQ;AACxB;AAEA,SAASV,YAAYb,KAAc;IACjC,OAAO,OAAOA,UAAU,YAAYA,MAAMwB,MAAM,GAAG,IAAIxB,QAAQC;AACjE"}
@@ -0,0 +1,8 @@
1
+ export interface JiraCallbackFailure {
2
+ title: string;
3
+ message: string;
4
+ startOver: boolean;
5
+ signIn: boolean;
6
+ }
7
+ export declare function classifyJiraCallbackError(error: unknown): JiraCallbackFailure;
8
+ //# sourceMappingURL=jira-form-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-form-errors.d.ts","sourceRoot":"","sources":["../src/jira-form-errors.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAwE7E"}