@shipfox/client-runners 22.0.3 → 23.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.
@@ -1,2 +1,2 @@
1
1
  $ shipfox-swc
2
- Successfully compiled: 24 files with swc (340.79ms)
2
+ Successfully compiled: 24 files with swc (354.03ms)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @shipfox/client-runners
2
2
 
3
+ ## 23.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 69a92c4: Adds `installation_runners` (`managed` or `none`) to the active-provisioners response. The value is `managed` when reserved runner labels are configured or an installation-scope provisioner token is active, so client consumers can determine whether the installation provides runner capacity.
8
+ - Updated dependencies [693e656]
9
+ - Updated dependencies [69a92c4]
10
+ - @shipfox/client-shell@23.0.0
11
+ - @shipfox/api-runners-dto@14.0.0
12
+
3
13
  ## 22.0.3
4
14
 
5
15
  ### Patch Changes
@@ -280,7 +280,8 @@ function fetchForScenario(scenario) {
280
280
  prefix: 'sf_pt_docker',
281
281
  last_seen_at: NOW
282
282
  }
283
- ]
283
+ ],
284
+ installation_runners: 'none'
284
285
  }));
285
286
  }
286
287
  return Promise.resolve(jsonResponse({}, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/token-settings-sections.stories.tsx"],"sourcesContent":["import type {ManualRegistrationTokenDto, ProvisionerTokenDto} from '@shipfox/api-runners-dto';\nimport {configureApiClient} from '@shipfox/client-api';\nimport {RelativeTimeProvider} from '@shipfox/react-ui/relative-time';\nimport {Toaster} from '@shipfox/react-ui/toast';\nimport {Code} from '@shipfox/react-ui/typography';\nimport type {Decorator, Meta, StoryObj} from '@storybook/react';\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query';\nimport type {ReactNode} from 'react';\nimport {within} from 'storybook/test';\nimport type {\n CreatedProvisionerToken,\n ManualRegistrationToken,\n ProvisionerToken,\n} from '#core/token.js';\nimport {CreatedManualRegistrationTokenPanel} from './create-manual-registration-token-form.js';\nimport {CreatedProvisionerTokenPanel} from './create-provisioner-token-form.js';\nimport {\n EmptyManualRegistrationTokens,\n ManualRegistrationTokenList,\n ManualRegistrationTokenTableSkeleton,\n} from './manual-registration-token-list.js';\nimport {WorkspaceManualRegistrationTokensSettingsSection} from './manual-registration-tokens-settings-section.js';\nimport {\n EmptyProvisionerTokens,\n ProvisionerTokenList,\n ProvisionerTokenTableSkeleton,\n} from './provisioner-token-list.js';\nimport {WorkspaceProvisionerTokensSettingsSection} from './provisioner-tokens-settings-section.js';\n\nconst WORKSPACE_ID = '11111111-1111-4111-8111-111111111111';\nconst NOW = '2026-06-26T12:00:00.000Z';\nconst EIGHT_MINUTES_AGO = '2026-06-26T11:52:00.000Z';\nconst EXPIRES_AT = '2026-09-24T12:00:00.000Z';\nconst CREATED_AT = '2026-06-20T12:00:00.000Z';\n\ntype Scenario = 'populated' | 'empty' | 'loading' | 'errors';\n\ninterface TokenSettingsSectionsStoryProps {\n scenario: Scenario;\n}\n\nconst withQueryClient: Decorator = (Story) => {\n const queryClient = new QueryClient({defaultOptions: {queries: {retry: false}}});\n return (\n <QueryClientProvider client={queryClient}>\n <RelativeTimeProvider>\n <Story />\n </RelativeTimeProvider>\n <Toaster />\n </QueryClientProvider>\n );\n};\n\nfunction TokenSettingsSectionsStory({scenario}: TokenSettingsSectionsStoryProps) {\n configureApiClient({\n baseUrl: 'https://api.example.test',\n fetchImpl: fetchForScenario(scenario),\n });\n\n return (\n <StorySurface>\n <WorkspaceManualRegistrationTokensSettingsSection workspaceId={WORKSPACE_ID} />\n <WorkspaceProvisionerTokensSettingsSection workspaceId={WORKSPACE_ID} />\n </StorySurface>\n );\n}\n\nconst meta = {\n title: 'Runners/TokenSettingsSections',\n component: TokenSettingsSectionsStory,\n parameters: {layout: 'fullscreen'},\n decorators: [withQueryClient],\n args: {scenario: 'populated'},\n} satisfies Meta<typeof TokenSettingsSectionsStory>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Playground: Story = {\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await canvas.findAllByText('Deploy runner');\n await canvas.findAllByText('Docker autoscaler');\n await canvas.findAllByText('Connected');\n await canvas.findAllByText('Never connected');\n },\n};\n\nexport const DataStates: Story = {\n render: () => (\n <StorySurface>\n <StateExample label=\"Manual empty\">\n <EmptyManualRegistrationTokens />\n </StateExample>\n <StateExample label=\"Manual loading\">\n <ManualRegistrationTokenTableSkeleton />\n </StateExample>\n <StateExample label=\"Provisioner empty\">\n <EmptyProvisionerTokens />\n </StateExample>\n <StateExample label=\"Provisioner loading\">\n <ProvisionerTokenTableSkeleton />\n </StateExample>\n </StorySurface>\n ),\n};\n\nexport const Errors: Story = {\n args: {scenario: 'errors'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await canvas.findByText(\"Couldn't load manual registration tokens\");\n await canvas.findByText(\"Couldn't load provisioner registration tokens\");\n },\n};\n\nexport const Statuses: Story = {\n render: () => (\n <StorySurface>\n <ProvisionerTokenList\n workspaceId={WORKSPACE_ID}\n tokens={[\n provisionerTokenModel({\n id: '33333333-3333-4333-8333-333333333333',\n name: 'Docker autoscaler',\n lastSeenAt: NOW,\n }),\n provisionerTokenModel({\n id: '44444444-4444-4444-8444-444444444444',\n name: 'Kubernetes spot pool',\n lastSeenAt: EIGHT_MINUTES_AGO,\n }),\n provisionerTokenModel({\n id: '55555555-5555-4555-8555-555555555555',\n name: 'Buildkite migration pool',\n lastSeenAt: null,\n }),\n ]}\n activeIds={new Set(['33333333-3333-4333-8333-333333333333'])}\n />\n </StorySurface>\n ),\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await canvas.findAllByText('Connected');\n await canvas.findAllByText('Last seen');\n await canvas.findAllByText('Never connected');\n },\n};\n\nexport const Content: Story = {\n render: () => (\n <StorySurface>\n <StateExample label=\"Existing tokens\">\n <div className=\"flex flex-col gap-24\">\n <ManualRegistrationTokenList\n workspaceId={WORKSPACE_ID}\n tokens={[\n manualRegistrationToken({name: 'Deploy runner', prefix: 'sf_mrt_deploy'}),\n manualRegistrationToken({\n id: '66666666-6666-4666-8666-666666666666',\n name: 'macOS build host',\n prefix: 'sf_mrt_macos',\n expiresAt: null,\n }),\n ]}\n />\n <ProvisionerTokenList\n workspaceId={WORKSPACE_ID}\n tokens={provisionerTokenModels()}\n activeIds={new Set(['33333333-3333-4333-8333-333333333333'])}\n />\n </div>\n </StateExample>\n <StateExample label=\"Long names\">\n <div className=\"flex flex-col gap-24\">\n <ManualRegistrationTokenList\n workspaceId={WORKSPACE_ID}\n tokens={[\n manualRegistrationToken({\n name: 'self-hosted-runner-for-production-release-candidate-validation-on-metal',\n prefix: 'sf_mrt_release_candidate_validation',\n }),\n ]}\n />\n <ProvisionerTokenList\n workspaceId={WORKSPACE_ID}\n tokens={[\n provisionerTokenModel({\n name: 'docker-provisioner-for-west-coast-gpu-burst-capacity-and-fallback',\n prefix: 'sf_pt_west_coast_gpu_burst',\n lastSeenAt: EIGHT_MINUTES_AGO,\n }),\n ]}\n activeIds={new Set()}\n />\n </div>\n </StateExample>\n </StorySurface>\n ),\n};\n\nexport const CreatedTokenPanels: Story = {\n render: () => (\n <StorySurface>\n <StateExample label=\"Manual token reveal\">\n <CreatedManualRegistrationTokenPanel\n token={{\n id: '77777777-7777-4777-8777-777777777777',\n token: 'sf_mrt_4nJvNrs23ExampleManualTokenValue',\n prefix: 'sf_mrt_4nJv',\n name: 'Deploy runner',\n workspaceId: WORKSPACE_ID,\n expiresAt: EXPIRES_AT,\n createdAt: CREATED_AT,\n }}\n />\n </StateExample>\n <StateExample label=\"Provisioner token reveal\">\n <CreatedProvisionerTokenPanel token={createdProvisionerToken()} />\n </StateExample>\n </StorySurface>\n ),\n};\n\nfunction StorySurface({children}: {children: ReactNode}) {\n return (\n <div className=\"min-h-screen bg-background-subtle-base p-24\">\n <div className=\"mx-auto flex w-full max-w-[920px] flex-col gap-32\">{children}</div>\n </div>\n );\n}\n\nfunction StateExample({label, children}: {label: string; children: ReactNode}) {\n return (\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n {label}\n </Code>\n <div className=\"rounded-8 border border-border-neutral-base bg-background-neutral-base p-16\">\n {children}\n </div>\n </div>\n );\n}\n\nfunction fetchForScenario(scenario: Scenario): typeof fetch {\n return (input) => {\n const url = requestUrl(input);\n if (scenario === 'loading') return new Promise<Response>(() => undefined);\n if (url.pathname.endsWith('/runners/manual-registration-tokens')) {\n if (scenario === 'errors') return Promise.resolve(errorResponse());\n return Promise.resolve(\n jsonResponse({\n manual_registration_tokens: scenario === 'empty' ? [] : [manualToken()],\n }),\n );\n }\n if (url.pathname.endsWith('/provisioners/tokens')) {\n if (scenario === 'errors') return Promise.resolve(errorResponse());\n return Promise.resolve(\n jsonResponse({\n tokens: scenario === 'empty' ? [] : provisionerTokens(),\n }),\n );\n }\n if (url.pathname.endsWith('/provisioners/active')) {\n return Promise.resolve(\n jsonResponse({\n provisioners:\n scenario === 'empty'\n ? []\n : [\n {\n id: '33333333-3333-4333-8333-333333333333',\n name: 'Docker autoscaler',\n prefix: 'sf_pt_docker',\n last_seen_at: NOW,\n },\n ],\n }),\n );\n }\n return Promise.resolve(jsonResponse({}, {status: 404}));\n };\n}\n\nfunction provisionerTokens(): ProvisionerTokenDto[] {\n return [\n provisionerToken({\n id: '33333333-3333-4333-8333-333333333333',\n name: 'Docker autoscaler',\n prefix: 'sf_pt_docker',\n last_seen_at: NOW,\n }),\n provisionerToken({\n id: '44444444-4444-4444-8444-444444444444',\n name: 'Kubernetes spot pool',\n prefix: 'sf_pt_spot',\n last_seen_at: EIGHT_MINUTES_AGO,\n }),\n provisionerToken({\n id: '55555555-5555-4555-8555-555555555555',\n name: 'Buildkite migration pool',\n prefix: 'sf_pt_migrate',\n last_seen_at: null,\n }),\n ];\n}\n\nfunction manualRegistrationToken(\n overrides: Partial<ManualRegistrationToken> = {},\n): ManualRegistrationToken {\n return {\n id: '22222222-2222-4222-8222-222222222222',\n workspaceId: WORKSPACE_ID,\n prefix: 'sf_mrt_deploy',\n name: 'Deploy runner',\n expiresAt: EXPIRES_AT,\n revokedAt: null,\n createdAt: CREATED_AT,\n updatedAt: CREATED_AT,\n ...overrides,\n };\n}\n\nfunction provisionerTokenModel(overrides: Partial<ProvisionerToken> = {}): ProvisionerToken {\n return {\n ...manualRegistrationToken(),\n createdByUserId: '99999999-9999-4999-8999-999999999999',\n revokedByUserId: null,\n lastSeenAt: NOW,\n ...overrides,\n };\n}\n\nfunction provisionerTokenModels(): ProvisionerToken[] {\n return [\n provisionerTokenModel({id: '33333333-3333-4333-8333-333333333333', name: 'Docker autoscaler'}),\n provisionerTokenModel({\n id: '44444444-4444-4444-8444-444444444444',\n name: 'Kubernetes spot pool',\n lastSeenAt: EIGHT_MINUTES_AGO,\n }),\n provisionerTokenModel({\n id: '55555555-5555-4555-8555-555555555555',\n name: 'Buildkite migration pool',\n lastSeenAt: null,\n }),\n ];\n}\n\nfunction createdProvisionerToken(): CreatedProvisionerToken {\n return {\n ...provisionerTokenModel({name: 'Docker autoscaler'}),\n token: 'sf_pt_Rv8YwrExampleProvisionerTokenValue',\n };\n}\n\nfunction manualToken(\n overrides: Partial<ManualRegistrationTokenDto> = {},\n): ManualRegistrationTokenDto {\n return {\n id: '22222222-2222-4222-8222-222222222222',\n workspace_id: WORKSPACE_ID,\n prefix: 'sf_mrt_deploy',\n name: 'Deploy runner',\n expires_at: EXPIRES_AT,\n revoked_at: null,\n created_at: CREATED_AT,\n updated_at: CREATED_AT,\n ...overrides,\n };\n}\n\nfunction provisionerToken(overrides: Partial<ProvisionerTokenDto> = {}): ProvisionerTokenDto {\n return {\n id: '33333333-3333-4333-8333-333333333333',\n scope: 'workspace',\n workspace_id: WORKSPACE_ID,\n prefix: 'sf_pt_docker',\n name: 'Docker autoscaler',\n created_by_user_id: '99999999-9999-4999-8999-999999999999',\n revoked_by_user_id: null,\n expires_at: EXPIRES_AT,\n revoked_at: null,\n last_seen_at: NOW,\n created_at: CREATED_AT,\n updated_at: CREATED_AT,\n ...overrides,\n };\n}\n\nfunction requestUrl(input: RequestInfo | URL): URL {\n if (typeof input === 'string') return new URL(input);\n if (input instanceof URL) return input;\n return new URL(input.url);\n}\n\nfunction jsonResponse(body: unknown, init: ResponseInit = {}) {\n return new Response(JSON.stringify(body), {\n status: 200,\n headers: {'content-type': 'application/json'},\n ...init,\n });\n}\n\nfunction errorResponse() {\n return jsonResponse({code: 'server-error'}, {status: 500, statusText: 'Server error'});\n}\n"],"names":["configureApiClient","RelativeTimeProvider","Toaster","Code","QueryClient","QueryClientProvider","within","CreatedManualRegistrationTokenPanel","CreatedProvisionerTokenPanel","EmptyManualRegistrationTokens","ManualRegistrationTokenList","ManualRegistrationTokenTableSkeleton","WorkspaceManualRegistrationTokensSettingsSection","EmptyProvisionerTokens","ProvisionerTokenList","ProvisionerTokenTableSkeleton","WorkspaceProvisionerTokensSettingsSection","WORKSPACE_ID","NOW","EIGHT_MINUTES_AGO","EXPIRES_AT","CREATED_AT","withQueryClient","Story","queryClient","defaultOptions","queries","retry","client","TokenSettingsSectionsStory","scenario","baseUrl","fetchImpl","fetchForScenario","StorySurface","workspaceId","meta","title","component","parameters","layout","decorators","args","Playground","play","canvasElement","canvas","findAllByText","DataStates","render","StateExample","label","Errors","findByText","Statuses","tokens","provisionerTokenModel","id","name","lastSeenAt","activeIds","Set","Content","div","className","manualRegistrationToken","prefix","expiresAt","provisionerTokenModels","CreatedTokenPanels","token","createdAt","createdProvisionerToken","children","variant","input","url","requestUrl","Promise","undefined","pathname","endsWith","resolve","errorResponse","jsonResponse","manual_registration_tokens","manualToken","provisionerTokens","provisioners","last_seen_at","status","provisionerToken","overrides","revokedAt","updatedAt","createdByUserId","revokedByUserId","workspace_id","expires_at","revoked_at","created_at","updated_at","scope","created_by_user_id","revoked_by_user_id","URL","body","init","Response","JSON","stringify","headers","code","statusText"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/components/token-settings-sections.stories.tsx"],"sourcesContent":["import type {ManualRegistrationTokenDto, ProvisionerTokenDto} from '@shipfox/api-runners-dto';\nimport {configureApiClient} from '@shipfox/client-api';\nimport {RelativeTimeProvider} from '@shipfox/react-ui/relative-time';\nimport {Toaster} from '@shipfox/react-ui/toast';\nimport {Code} from '@shipfox/react-ui/typography';\nimport type {Decorator, Meta, StoryObj} from '@storybook/react';\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query';\nimport type {ReactNode} from 'react';\nimport {within} from 'storybook/test';\nimport type {\n CreatedProvisionerToken,\n ManualRegistrationToken,\n ProvisionerToken,\n} from '#core/token.js';\nimport {CreatedManualRegistrationTokenPanel} from './create-manual-registration-token-form.js';\nimport {CreatedProvisionerTokenPanel} from './create-provisioner-token-form.js';\nimport {\n EmptyManualRegistrationTokens,\n ManualRegistrationTokenList,\n ManualRegistrationTokenTableSkeleton,\n} from './manual-registration-token-list.js';\nimport {WorkspaceManualRegistrationTokensSettingsSection} from './manual-registration-tokens-settings-section.js';\nimport {\n EmptyProvisionerTokens,\n ProvisionerTokenList,\n ProvisionerTokenTableSkeleton,\n} from './provisioner-token-list.js';\nimport {WorkspaceProvisionerTokensSettingsSection} from './provisioner-tokens-settings-section.js';\n\nconst WORKSPACE_ID = '11111111-1111-4111-8111-111111111111';\nconst NOW = '2026-06-26T12:00:00.000Z';\nconst EIGHT_MINUTES_AGO = '2026-06-26T11:52:00.000Z';\nconst EXPIRES_AT = '2026-09-24T12:00:00.000Z';\nconst CREATED_AT = '2026-06-20T12:00:00.000Z';\n\ntype Scenario = 'populated' | 'empty' | 'loading' | 'errors';\n\ninterface TokenSettingsSectionsStoryProps {\n scenario: Scenario;\n}\n\nconst withQueryClient: Decorator = (Story) => {\n const queryClient = new QueryClient({defaultOptions: {queries: {retry: false}}});\n return (\n <QueryClientProvider client={queryClient}>\n <RelativeTimeProvider>\n <Story />\n </RelativeTimeProvider>\n <Toaster />\n </QueryClientProvider>\n );\n};\n\nfunction TokenSettingsSectionsStory({scenario}: TokenSettingsSectionsStoryProps) {\n configureApiClient({\n baseUrl: 'https://api.example.test',\n fetchImpl: fetchForScenario(scenario),\n });\n\n return (\n <StorySurface>\n <WorkspaceManualRegistrationTokensSettingsSection workspaceId={WORKSPACE_ID} />\n <WorkspaceProvisionerTokensSettingsSection workspaceId={WORKSPACE_ID} />\n </StorySurface>\n );\n}\n\nconst meta = {\n title: 'Runners/TokenSettingsSections',\n component: TokenSettingsSectionsStory,\n parameters: {layout: 'fullscreen'},\n decorators: [withQueryClient],\n args: {scenario: 'populated'},\n} satisfies Meta<typeof TokenSettingsSectionsStory>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Playground: Story = {\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await canvas.findAllByText('Deploy runner');\n await canvas.findAllByText('Docker autoscaler');\n await canvas.findAllByText('Connected');\n await canvas.findAllByText('Never connected');\n },\n};\n\nexport const DataStates: Story = {\n render: () => (\n <StorySurface>\n <StateExample label=\"Manual empty\">\n <EmptyManualRegistrationTokens />\n </StateExample>\n <StateExample label=\"Manual loading\">\n <ManualRegistrationTokenTableSkeleton />\n </StateExample>\n <StateExample label=\"Provisioner empty\">\n <EmptyProvisionerTokens />\n </StateExample>\n <StateExample label=\"Provisioner loading\">\n <ProvisionerTokenTableSkeleton />\n </StateExample>\n </StorySurface>\n ),\n};\n\nexport const Errors: Story = {\n args: {scenario: 'errors'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await canvas.findByText(\"Couldn't load manual registration tokens\");\n await canvas.findByText(\"Couldn't load provisioner registration tokens\");\n },\n};\n\nexport const Statuses: Story = {\n render: () => (\n <StorySurface>\n <ProvisionerTokenList\n workspaceId={WORKSPACE_ID}\n tokens={[\n provisionerTokenModel({\n id: '33333333-3333-4333-8333-333333333333',\n name: 'Docker autoscaler',\n lastSeenAt: NOW,\n }),\n provisionerTokenModel({\n id: '44444444-4444-4444-8444-444444444444',\n name: 'Kubernetes spot pool',\n lastSeenAt: EIGHT_MINUTES_AGO,\n }),\n provisionerTokenModel({\n id: '55555555-5555-4555-8555-555555555555',\n name: 'Buildkite migration pool',\n lastSeenAt: null,\n }),\n ]}\n activeIds={new Set(['33333333-3333-4333-8333-333333333333'])}\n />\n </StorySurface>\n ),\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await canvas.findAllByText('Connected');\n await canvas.findAllByText('Last seen');\n await canvas.findAllByText('Never connected');\n },\n};\n\nexport const Content: Story = {\n render: () => (\n <StorySurface>\n <StateExample label=\"Existing tokens\">\n <div className=\"flex flex-col gap-24\">\n <ManualRegistrationTokenList\n workspaceId={WORKSPACE_ID}\n tokens={[\n manualRegistrationToken({name: 'Deploy runner', prefix: 'sf_mrt_deploy'}),\n manualRegistrationToken({\n id: '66666666-6666-4666-8666-666666666666',\n name: 'macOS build host',\n prefix: 'sf_mrt_macos',\n expiresAt: null,\n }),\n ]}\n />\n <ProvisionerTokenList\n workspaceId={WORKSPACE_ID}\n tokens={provisionerTokenModels()}\n activeIds={new Set(['33333333-3333-4333-8333-333333333333'])}\n />\n </div>\n </StateExample>\n <StateExample label=\"Long names\">\n <div className=\"flex flex-col gap-24\">\n <ManualRegistrationTokenList\n workspaceId={WORKSPACE_ID}\n tokens={[\n manualRegistrationToken({\n name: 'self-hosted-runner-for-production-release-candidate-validation-on-metal',\n prefix: 'sf_mrt_release_candidate_validation',\n }),\n ]}\n />\n <ProvisionerTokenList\n workspaceId={WORKSPACE_ID}\n tokens={[\n provisionerTokenModel({\n name: 'docker-provisioner-for-west-coast-gpu-burst-capacity-and-fallback',\n prefix: 'sf_pt_west_coast_gpu_burst',\n lastSeenAt: EIGHT_MINUTES_AGO,\n }),\n ]}\n activeIds={new Set()}\n />\n </div>\n </StateExample>\n </StorySurface>\n ),\n};\n\nexport const CreatedTokenPanels: Story = {\n render: () => (\n <StorySurface>\n <StateExample label=\"Manual token reveal\">\n <CreatedManualRegistrationTokenPanel\n token={{\n id: '77777777-7777-4777-8777-777777777777',\n token: 'sf_mrt_4nJvNrs23ExampleManualTokenValue',\n prefix: 'sf_mrt_4nJv',\n name: 'Deploy runner',\n workspaceId: WORKSPACE_ID,\n expiresAt: EXPIRES_AT,\n createdAt: CREATED_AT,\n }}\n />\n </StateExample>\n <StateExample label=\"Provisioner token reveal\">\n <CreatedProvisionerTokenPanel token={createdProvisionerToken()} />\n </StateExample>\n </StorySurface>\n ),\n};\n\nfunction StorySurface({children}: {children: ReactNode}) {\n return (\n <div className=\"min-h-screen bg-background-subtle-base p-24\">\n <div className=\"mx-auto flex w-full max-w-[920px] flex-col gap-32\">{children}</div>\n </div>\n );\n}\n\nfunction StateExample({label, children}: {label: string; children: ReactNode}) {\n return (\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n {label}\n </Code>\n <div className=\"rounded-8 border border-border-neutral-base bg-background-neutral-base p-16\">\n {children}\n </div>\n </div>\n );\n}\n\nfunction fetchForScenario(scenario: Scenario): typeof fetch {\n return (input) => {\n const url = requestUrl(input);\n if (scenario === 'loading') return new Promise<Response>(() => undefined);\n if (url.pathname.endsWith('/runners/manual-registration-tokens')) {\n if (scenario === 'errors') return Promise.resolve(errorResponse());\n return Promise.resolve(\n jsonResponse({\n manual_registration_tokens: scenario === 'empty' ? [] : [manualToken()],\n }),\n );\n }\n if (url.pathname.endsWith('/provisioners/tokens')) {\n if (scenario === 'errors') return Promise.resolve(errorResponse());\n return Promise.resolve(\n jsonResponse({\n tokens: scenario === 'empty' ? [] : provisionerTokens(),\n }),\n );\n }\n if (url.pathname.endsWith('/provisioners/active')) {\n return Promise.resolve(\n jsonResponse({\n provisioners:\n scenario === 'empty'\n ? []\n : [\n {\n id: '33333333-3333-4333-8333-333333333333',\n name: 'Docker autoscaler',\n prefix: 'sf_pt_docker',\n last_seen_at: NOW,\n },\n ],\n installation_runners: 'none',\n }),\n );\n }\n return Promise.resolve(jsonResponse({}, {status: 404}));\n };\n}\n\nfunction provisionerTokens(): ProvisionerTokenDto[] {\n return [\n provisionerToken({\n id: '33333333-3333-4333-8333-333333333333',\n name: 'Docker autoscaler',\n prefix: 'sf_pt_docker',\n last_seen_at: NOW,\n }),\n provisionerToken({\n id: '44444444-4444-4444-8444-444444444444',\n name: 'Kubernetes spot pool',\n prefix: 'sf_pt_spot',\n last_seen_at: EIGHT_MINUTES_AGO,\n }),\n provisionerToken({\n id: '55555555-5555-4555-8555-555555555555',\n name: 'Buildkite migration pool',\n prefix: 'sf_pt_migrate',\n last_seen_at: null,\n }),\n ];\n}\n\nfunction manualRegistrationToken(\n overrides: Partial<ManualRegistrationToken> = {},\n): ManualRegistrationToken {\n return {\n id: '22222222-2222-4222-8222-222222222222',\n workspaceId: WORKSPACE_ID,\n prefix: 'sf_mrt_deploy',\n name: 'Deploy runner',\n expiresAt: EXPIRES_AT,\n revokedAt: null,\n createdAt: CREATED_AT,\n updatedAt: CREATED_AT,\n ...overrides,\n };\n}\n\nfunction provisionerTokenModel(overrides: Partial<ProvisionerToken> = {}): ProvisionerToken {\n return {\n ...manualRegistrationToken(),\n createdByUserId: '99999999-9999-4999-8999-999999999999',\n revokedByUserId: null,\n lastSeenAt: NOW,\n ...overrides,\n };\n}\n\nfunction provisionerTokenModels(): ProvisionerToken[] {\n return [\n provisionerTokenModel({id: '33333333-3333-4333-8333-333333333333', name: 'Docker autoscaler'}),\n provisionerTokenModel({\n id: '44444444-4444-4444-8444-444444444444',\n name: 'Kubernetes spot pool',\n lastSeenAt: EIGHT_MINUTES_AGO,\n }),\n provisionerTokenModel({\n id: '55555555-5555-4555-8555-555555555555',\n name: 'Buildkite migration pool',\n lastSeenAt: null,\n }),\n ];\n}\n\nfunction createdProvisionerToken(): CreatedProvisionerToken {\n return {\n ...provisionerTokenModel({name: 'Docker autoscaler'}),\n token: 'sf_pt_Rv8YwrExampleProvisionerTokenValue',\n };\n}\n\nfunction manualToken(\n overrides: Partial<ManualRegistrationTokenDto> = {},\n): ManualRegistrationTokenDto {\n return {\n id: '22222222-2222-4222-8222-222222222222',\n workspace_id: WORKSPACE_ID,\n prefix: 'sf_mrt_deploy',\n name: 'Deploy runner',\n expires_at: EXPIRES_AT,\n revoked_at: null,\n created_at: CREATED_AT,\n updated_at: CREATED_AT,\n ...overrides,\n };\n}\n\nfunction provisionerToken(overrides: Partial<ProvisionerTokenDto> = {}): ProvisionerTokenDto {\n return {\n id: '33333333-3333-4333-8333-333333333333',\n scope: 'workspace',\n workspace_id: WORKSPACE_ID,\n prefix: 'sf_pt_docker',\n name: 'Docker autoscaler',\n created_by_user_id: '99999999-9999-4999-8999-999999999999',\n revoked_by_user_id: null,\n expires_at: EXPIRES_AT,\n revoked_at: null,\n last_seen_at: NOW,\n created_at: CREATED_AT,\n updated_at: CREATED_AT,\n ...overrides,\n };\n}\n\nfunction requestUrl(input: RequestInfo | URL): URL {\n if (typeof input === 'string') return new URL(input);\n if (input instanceof URL) return input;\n return new URL(input.url);\n}\n\nfunction jsonResponse(body: unknown, init: ResponseInit = {}) {\n return new Response(JSON.stringify(body), {\n status: 200,\n headers: {'content-type': 'application/json'},\n ...init,\n });\n}\n\nfunction errorResponse() {\n return jsonResponse({code: 'server-error'}, {status: 500, statusText: 'Server error'});\n}\n"],"names":["configureApiClient","RelativeTimeProvider","Toaster","Code","QueryClient","QueryClientProvider","within","CreatedManualRegistrationTokenPanel","CreatedProvisionerTokenPanel","EmptyManualRegistrationTokens","ManualRegistrationTokenList","ManualRegistrationTokenTableSkeleton","WorkspaceManualRegistrationTokensSettingsSection","EmptyProvisionerTokens","ProvisionerTokenList","ProvisionerTokenTableSkeleton","WorkspaceProvisionerTokensSettingsSection","WORKSPACE_ID","NOW","EIGHT_MINUTES_AGO","EXPIRES_AT","CREATED_AT","withQueryClient","Story","queryClient","defaultOptions","queries","retry","client","TokenSettingsSectionsStory","scenario","baseUrl","fetchImpl","fetchForScenario","StorySurface","workspaceId","meta","title","component","parameters","layout","decorators","args","Playground","play","canvasElement","canvas","findAllByText","DataStates","render","StateExample","label","Errors","findByText","Statuses","tokens","provisionerTokenModel","id","name","lastSeenAt","activeIds","Set","Content","div","className","manualRegistrationToken","prefix","expiresAt","provisionerTokenModels","CreatedTokenPanels","token","createdAt","createdProvisionerToken","children","variant","input","url","requestUrl","Promise","undefined","pathname","endsWith","resolve","errorResponse","jsonResponse","manual_registration_tokens","manualToken","provisionerTokens","provisioners","last_seen_at","installation_runners","status","provisionerToken","overrides","revokedAt","updatedAt","createdByUserId","revokedByUserId","workspace_id","expires_at","revoked_at","created_at","updated_at","scope","created_by_user_id","revoked_by_user_id","URL","body","init","Response","JSON","stringify","headers","code","statusText"],"mappings":";AACA,SAAQA,kBAAkB,QAAO,sBAAsB;AACvD,SAAQC,oBAAoB,QAAO,kCAAkC;AACrE,SAAQC,OAAO,QAAO,0BAA0B;AAChD,SAAQC,IAAI,QAAO,+BAA+B;AAElD,SAAQC,WAAW,EAAEC,mBAAmB,QAAO,wBAAwB;AAEvE,SAAQC,MAAM,QAAO,iBAAiB;AAMtC,SAAQC,mCAAmC,QAAO,6CAA6C;AAC/F,SAAQC,4BAA4B,QAAO,qCAAqC;AAChF,SACEC,6BAA6B,EAC7BC,2BAA2B,EAC3BC,oCAAoC,QAC/B,sCAAsC;AAC7C,SAAQC,gDAAgD,QAAO,mDAAmD;AAClH,SACEC,sBAAsB,EACtBC,oBAAoB,EACpBC,6BAA6B,QACxB,8BAA8B;AACrC,SAAQC,yCAAyC,QAAO,2CAA2C;AAEnG,MAAMC,eAAe;AACrB,MAAMC,MAAM;AACZ,MAAMC,oBAAoB;AAC1B,MAAMC,aAAa;AACnB,MAAMC,aAAa;AAQnB,MAAMC,kBAA6B,CAACC;IAClC,MAAMC,cAAc,IAAIpB,YAAY;QAACqB,gBAAgB;YAACC,SAAS;gBAACC,OAAO;YAAK;QAAC;IAAC;IAC9E,qBACE,MAACtB;QAAoBuB,QAAQJ;;0BAC3B,KAACvB;0BACC,cAAA,KAACsB;;0BAEH,KAACrB;;;AAGP;AAEA,SAAS2B,2BAA2B,EAACC,QAAQ,EAAkC;IAC7E9B,mBAAmB;QACjB+B,SAAS;QACTC,WAAWC,iBAAiBH;IAC9B;IAEA,qBACE,MAACI;;0BACC,KAACtB;gBAAiDuB,aAAalB;;0BAC/D,KAACD;gBAA0CmB,aAAalB;;;;AAG9D;AAEA,MAAMmB,OAAO;IACXC,OAAO;IACPC,WAAWT;IACXU,YAAY;QAACC,QAAQ;IAAY;IACjCC,YAAY;QAACnB;KAAgB;IAC7BoB,MAAM;QAACZ,UAAU;IAAW;AAC9B;AAEA,eAAeM,KAAK;AAGpB,OAAO,MAAMO,aAAoB;IAC/BC,MAAM,OAAO,EAACC,aAAa,EAAC;QAC1B,MAAMC,SAASxC,OAAOuC;QACtB,MAAMC,OAAOC,aAAa,CAAC;QAC3B,MAAMD,OAAOC,aAAa,CAAC;QAC3B,MAAMD,OAAOC,aAAa,CAAC;QAC3B,MAAMD,OAAOC,aAAa,CAAC;IAC7B;AACF,EAAE;AAEF,OAAO,MAAMC,aAAoB;IAC/BC,QAAQ,kBACN,MAACf;;8BACC,KAACgB;oBAAaC,OAAM;8BAClB,cAAA,KAAC1C;;8BAEH,KAACyC;oBAAaC,OAAM;8BAClB,cAAA,KAACxC;;8BAEH,KAACuC;oBAAaC,OAAM;8BAClB,cAAA,KAACtC;;8BAEH,KAACqC;oBAAaC,OAAM;8BAClB,cAAA,KAACpC;;;;AAIT,EAAE;AAEF,OAAO,MAAMqC,SAAgB;IAC3BV,MAAM;QAACZ,UAAU;IAAQ;IACzBc,MAAM,OAAO,EAACC,aAAa,EAAC;QAC1B,MAAMC,SAASxC,OAAOuC;QACtB,MAAMC,OAAOO,UAAU,CAAC;QACxB,MAAMP,OAAOO,UAAU,CAAC;IAC1B;AACF,EAAE;AAEF,OAAO,MAAMC,WAAkB;IAC7BL,QAAQ,kBACN,KAACf;sBACC,cAAA,KAACpB;gBACCqB,aAAalB;gBACbsC,QAAQ;oBACNC,sBAAsB;wBACpBC,IAAI;wBACJC,MAAM;wBACNC,YAAYzC;oBACd;oBACAsC,sBAAsB;wBACpBC,IAAI;wBACJC,MAAM;wBACNC,YAAYxC;oBACd;oBACAqC,sBAAsB;wBACpBC,IAAI;wBACJC,MAAM;wBACNC,YAAY;oBACd;iBACD;gBACDC,WAAW,IAAIC,IAAI;oBAAC;iBAAuC;;;IAIjEjB,MAAM,OAAO,EAACC,aAAa,EAAC;QAC1B,MAAMC,SAASxC,OAAOuC;QACtB,MAAMC,OAAOC,aAAa,CAAC;QAC3B,MAAMD,OAAOC,aAAa,CAAC;QAC3B,MAAMD,OAAOC,aAAa,CAAC;IAC7B;AACF,EAAE;AAEF,OAAO,MAAMe,UAAiB;IAC5Bb,QAAQ,kBACN,MAACf;;8BACC,KAACgB;oBAAaC,OAAM;8BAClB,cAAA,MAACY;wBAAIC,WAAU;;0CACb,KAACtD;gCACCyB,aAAalB;gCACbsC,QAAQ;oCACNU,wBAAwB;wCAACP,MAAM;wCAAiBQ,QAAQ;oCAAe;oCACvED,wBAAwB;wCACtBR,IAAI;wCACJC,MAAM;wCACNQ,QAAQ;wCACRC,WAAW;oCACb;iCACD;;0CAEH,KAACrD;gCACCqB,aAAalB;gCACbsC,QAAQa;gCACRR,WAAW,IAAIC,IAAI;oCAAC;iCAAuC;;;;;8BAIjE,KAACX;oBAAaC,OAAM;8BAClB,cAAA,MAACY;wBAAIC,WAAU;;0CACb,KAACtD;gCACCyB,aAAalB;gCACbsC,QAAQ;oCACNU,wBAAwB;wCACtBP,MAAM;wCACNQ,QAAQ;oCACV;iCACD;;0CAEH,KAACpD;gCACCqB,aAAalB;gCACbsC,QAAQ;oCACNC,sBAAsB;wCACpBE,MAAM;wCACNQ,QAAQ;wCACRP,YAAYxC;oCACd;iCACD;gCACDyC,WAAW,IAAIC;;;;;;;AAM3B,EAAE;AAEF,OAAO,MAAMQ,qBAA4B;IACvCpB,QAAQ,kBACN,MAACf;;8BACC,KAACgB;oBAAaC,OAAM;8BAClB,cAAA,KAAC5C;wBACC+D,OAAO;4BACLb,IAAI;4BACJa,OAAO;4BACPJ,QAAQ;4BACRR,MAAM;4BACNvB,aAAalB;4BACbkD,WAAW/C;4BACXmD,WAAWlD;wBACb;;;8BAGJ,KAAC6B;oBAAaC,OAAM;8BAClB,cAAA,KAAC3C;wBAA6B8D,OAAOE;;;;;AAI7C,EAAE;AAEF,SAAStC,aAAa,EAACuC,QAAQ,EAAwB;IACrD,qBACE,KAACV;QAAIC,WAAU;kBACb,cAAA,KAACD;YAAIC,WAAU;sBAAqDS;;;AAG1E;AAEA,SAASvB,aAAa,EAACC,KAAK,EAAEsB,QAAQ,EAAuC;IAC3E,qBACE,MAACV;QAAIC,WAAU;;0BACb,KAAC7D;gBAAKuE,SAAQ;gBAAQV,WAAU;0BAC7Bb;;0BAEH,KAACY;gBAAIC,WAAU;0BACZS;;;;AAIT;AAEA,SAASxC,iBAAiBH,QAAkB;IAC1C,OAAO,CAAC6C;QACN,MAAMC,MAAMC,WAAWF;QACvB,IAAI7C,aAAa,WAAW,OAAO,IAAIgD,QAAkB,IAAMC;QAC/D,IAAIH,IAAII,QAAQ,CAACC,QAAQ,CAAC,wCAAwC;YAChE,IAAInD,aAAa,UAAU,OAAOgD,QAAQI,OAAO,CAACC;YAClD,OAAOL,QAAQI,OAAO,CACpBE,aAAa;gBACXC,4BAA4BvD,aAAa,UAAU,EAAE,GAAG;oBAACwD;iBAAc;YACzE;QAEJ;QACA,IAAIV,IAAII,QAAQ,CAACC,QAAQ,CAAC,yBAAyB;YACjD,IAAInD,aAAa,UAAU,OAAOgD,QAAQI,OAAO,CAACC;YAClD,OAAOL,QAAQI,OAAO,CACpBE,aAAa;gBACX7B,QAAQzB,aAAa,UAAU,EAAE,GAAGyD;YACtC;QAEJ;QACA,IAAIX,IAAII,QAAQ,CAACC,QAAQ,CAAC,yBAAyB;YACjD,OAAOH,QAAQI,OAAO,CACpBE,aAAa;gBACXI,cACE1D,aAAa,UACT,EAAE,GACF;oBACE;wBACE2B,IAAI;wBACJC,MAAM;wBACNQ,QAAQ;wBACRuB,cAAcvE;oBAChB;iBACD;gBACPwE,sBAAsB;YACxB;QAEJ;QACA,OAAOZ,QAAQI,OAAO,CAACE,aAAa,CAAC,GAAG;YAACO,QAAQ;QAAG;IACtD;AACF;AAEA,SAASJ;IACP,OAAO;QACLK,iBAAiB;YACfnC,IAAI;YACJC,MAAM;YACNQ,QAAQ;YACRuB,cAAcvE;QAChB;QACA0E,iBAAiB;YACfnC,IAAI;YACJC,MAAM;YACNQ,QAAQ;YACRuB,cAActE;QAChB;QACAyE,iBAAiB;YACfnC,IAAI;YACJC,MAAM;YACNQ,QAAQ;YACRuB,cAAc;QAChB;KACD;AACH;AAEA,SAASxB,wBACP4B,YAA8C,CAAC,CAAC;IAEhD,OAAO;QACLpC,IAAI;QACJtB,aAAalB;QACbiD,QAAQ;QACRR,MAAM;QACNS,WAAW/C;QACX0E,WAAW;QACXvB,WAAWlD;QACX0E,WAAW1E;QACX,GAAGwE,SAAS;IACd;AACF;AAEA,SAASrC,sBAAsBqC,YAAuC,CAAC,CAAC;IACtE,OAAO;QACL,GAAG5B,yBAAyB;QAC5B+B,iBAAiB;QACjBC,iBAAiB;QACjBtC,YAAYzC;QACZ,GAAG2E,SAAS;IACd;AACF;AAEA,SAASzB;IACP,OAAO;QACLZ,sBAAsB;YAACC,IAAI;YAAwCC,MAAM;QAAmB;QAC5FF,sBAAsB;YACpBC,IAAI;YACJC,MAAM;YACNC,YAAYxC;QACd;QACAqC,sBAAsB;YACpBC,IAAI;YACJC,MAAM;YACNC,YAAY;QACd;KACD;AACH;AAEA,SAASa;IACP,OAAO;QACL,GAAGhB,sBAAsB;YAACE,MAAM;QAAmB,EAAE;QACrDY,OAAO;IACT;AACF;AAEA,SAASgB,YACPO,YAAiD,CAAC,CAAC;IAEnD,OAAO;QACLpC,IAAI;QACJyC,cAAcjF;QACdiD,QAAQ;QACRR,MAAM;QACNyC,YAAY/E;QACZgF,YAAY;QACZC,YAAYhF;QACZiF,YAAYjF;QACZ,GAAGwE,SAAS;IACd;AACF;AAEA,SAASD,iBAAiBC,YAA0C,CAAC,CAAC;IACpE,OAAO;QACLpC,IAAI;QACJ8C,OAAO;QACPL,cAAcjF;QACdiD,QAAQ;QACRR,MAAM;QACN8C,oBAAoB;QACpBC,oBAAoB;QACpBN,YAAY/E;QACZgF,YAAY;QACZX,cAAcvE;QACdmF,YAAYhF;QACZiF,YAAYjF;QACZ,GAAGwE,SAAS;IACd;AACF;AAEA,SAAShB,WAAWF,KAAwB;IAC1C,IAAI,OAAOA,UAAU,UAAU,OAAO,IAAI+B,IAAI/B;IAC9C,IAAIA,iBAAiB+B,KAAK,OAAO/B;IACjC,OAAO,IAAI+B,IAAI/B,MAAMC,GAAG;AAC1B;AAEA,SAASQ,aAAauB,IAAa,EAAEC,OAAqB,CAAC,CAAC;IAC1D,OAAO,IAAIC,SAASC,KAAKC,SAAS,CAACJ,OAAO;QACxChB,QAAQ;QACRqB,SAAS;YAAC,gBAAgB;QAAkB;QAC5C,GAAGJ,IAAI;IACT;AACF;AAEA,SAASzB;IACP,OAAOC,aAAa;QAAC6B,MAAM;IAAc,GAAG;QAACtB,QAAQ;QAAKuB,YAAY;IAAc;AACtF"}
@@ -19,6 +19,12 @@ export interface ActiveProvisioner {
19
19
  prefix: string;
20
20
  lastSeenAt: string;
21
21
  }
22
+ export type InstallationRunnersStatus = 'managed' | 'none';
23
+ export type ActiveProvisioners = ActiveProvisioner[];
24
+ export interface ActiveProvisionersResponse {
25
+ provisioners: ActiveProvisioners;
26
+ installationRunners: InstallationRunnersStatus;
27
+ }
22
28
  export interface CreatedManualRegistrationToken {
23
29
  token: string;
24
30
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/core/token.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,uBAAuB;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAwB,SAAQ,8BAA8B;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC;AAEzF,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAC,GAC9D;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,GAClF;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAC,CAAC;AAE/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,kBAAkB,CAGhG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,GAAG,MAAM,CAErF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,MAAM,CAEzF;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,YAAY,CAAC,EAClD,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,2BAA2B,CAY7B"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/core/token.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/token.ts"],"sourcesContent":["export interface ManualRegistrationToken {\n id: string;\n workspaceId: string;\n prefix: string;\n name: string | null;\n expiresAt: string | null;\n revokedAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ProvisionerToken extends ManualRegistrationToken {\n createdByUserId: string;\n revokedByUserId: string | null;\n lastSeenAt: string | null;\n}\n\nexport interface ActiveProvisioner {\n id: string;\n name: string | null;\n prefix: string;\n lastSeenAt: string;\n}\n\nexport interface CreatedManualRegistrationToken {\n token: string;\n id: string;\n prefix: string;\n name: string | null;\n workspaceId: string;\n expiresAt: string | null;\n createdAt: string;\n}\n\nexport interface CreatedProvisionerToken extends CreatedManualRegistrationToken {\n createdByUserId: string;\n revokedByUserId: string | null;\n revokedAt: string | null;\n lastSeenAt: string | null;\n updatedAt: string;\n}\n\nexport type TokenExpiration = {kind: 'never'} | {kind: 'expires-after'; seconds: number};\n\nexport interface CreateTokenCommand {\n name?: string;\n expiration: TokenExpiration;\n}\n\nexport type ProvisionerConnectionStatus =\n | {kind: 'connected'; dotVariant: 'success'; label: 'Connected'}\n | {kind: 'last-seen'; dotVariant: 'neutral'; label: 'Last seen'; lastSeenAt: string}\n | {kind: 'never-connected'; dotVariant: 'neutral'; label: 'Never connected'};\n\nexport function createTokenCommand(name: string, expiration: TokenExpiration): CreateTokenCommand {\n const trimmedName = name.trim();\n return {expiration, ...(trimmedName ? {name: trimmedName} : {})};\n}\n\nexport function tokenDisplayName(token: Pick<ManualRegistrationToken, 'name'>): string {\n return token.name || 'Unnamed token';\n}\n\nexport function provisionerTokenDisplayName(token: Pick<ProvisionerToken, 'name'>): string {\n return token.name || 'Unnamed provisioner';\n}\n\nexport function provisionerConnectionStatus(\n token: Pick<ProvisionerToken, 'id' | 'lastSeenAt'>,\n activeIds: ReadonlySet<string>,\n): ProvisionerConnectionStatus {\n if (activeIds.has(token.id))\n return {kind: 'connected', dotVariant: 'success', label: 'Connected'};\n if (token.lastSeenAt) {\n return {\n kind: 'last-seen',\n dotVariant: 'neutral',\n label: 'Last seen',\n lastSeenAt: token.lastSeenAt,\n };\n }\n return {kind: 'never-connected', dotVariant: 'neutral', label: 'Never connected'};\n}\n"],"names":["createTokenCommand","name","expiration","trimmedName","trim","tokenDisplayName","token","provisionerTokenDisplayName","provisionerConnectionStatus","activeIds","has","id","kind","dotVariant","label","lastSeenAt"],"mappings":"AAsDA,OAAO,SAASA,mBAAmBC,IAAY,EAAEC,UAA2B;IAC1E,MAAMC,cAAcF,KAAKG,IAAI;IAC7B,OAAO;QAACF;QAAY,GAAIC,cAAc;YAACF,MAAME;QAAW,IAAI,CAAC,CAAC;IAAC;AACjE;AAEA,OAAO,SAASE,iBAAiBC,KAA4C;IAC3E,OAAOA,MAAML,IAAI,IAAI;AACvB;AAEA,OAAO,SAASM,4BAA4BD,KAAqC;IAC/E,OAAOA,MAAML,IAAI,IAAI;AACvB;AAEA,OAAO,SAASO,4BACdF,KAAkD,EAClDG,SAA8B;IAE9B,IAAIA,UAAUC,GAAG,CAACJ,MAAMK,EAAE,GACxB,OAAO;QAACC,MAAM;QAAaC,YAAY;QAAWC,OAAO;IAAW;IACtE,IAAIR,MAAMS,UAAU,EAAE;QACpB,OAAO;YACLH,MAAM;YACNC,YAAY;YACZC,OAAO;YACPC,YAAYT,MAAMS,UAAU;QAC9B;IACF;IACA,OAAO;QAACH,MAAM;QAAmBC,YAAY;QAAWC,OAAO;IAAiB;AAClF"}
1
+ {"version":3,"sources":["../../src/core/token.ts"],"sourcesContent":["export interface ManualRegistrationToken {\n id: string;\n workspaceId: string;\n prefix: string;\n name: string | null;\n expiresAt: string | null;\n revokedAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ProvisionerToken extends ManualRegistrationToken {\n createdByUserId: string;\n revokedByUserId: string | null;\n lastSeenAt: string | null;\n}\n\nexport interface ActiveProvisioner {\n id: string;\n name: string | null;\n prefix: string;\n lastSeenAt: string;\n}\n\nexport type InstallationRunnersStatus = 'managed' | 'none';\n\nexport type ActiveProvisioners = ActiveProvisioner[];\n\nexport interface ActiveProvisionersResponse {\n provisioners: ActiveProvisioners;\n installationRunners: InstallationRunnersStatus;\n}\n\nexport interface CreatedManualRegistrationToken {\n token: string;\n id: string;\n prefix: string;\n name: string | null;\n workspaceId: string;\n expiresAt: string | null;\n createdAt: string;\n}\n\nexport interface CreatedProvisionerToken extends CreatedManualRegistrationToken {\n createdByUserId: string;\n revokedByUserId: string | null;\n revokedAt: string | null;\n lastSeenAt: string | null;\n updatedAt: string;\n}\n\nexport type TokenExpiration = {kind: 'never'} | {kind: 'expires-after'; seconds: number};\n\nexport interface CreateTokenCommand {\n name?: string;\n expiration: TokenExpiration;\n}\n\nexport type ProvisionerConnectionStatus =\n | {kind: 'connected'; dotVariant: 'success'; label: 'Connected'}\n | {kind: 'last-seen'; dotVariant: 'neutral'; label: 'Last seen'; lastSeenAt: string}\n | {kind: 'never-connected'; dotVariant: 'neutral'; label: 'Never connected'};\n\nexport function createTokenCommand(name: string, expiration: TokenExpiration): CreateTokenCommand {\n const trimmedName = name.trim();\n return {expiration, ...(trimmedName ? {name: trimmedName} : {})};\n}\n\nexport function tokenDisplayName(token: Pick<ManualRegistrationToken, 'name'>): string {\n return token.name || 'Unnamed token';\n}\n\nexport function provisionerTokenDisplayName(token: Pick<ProvisionerToken, 'name'>): string {\n return token.name || 'Unnamed provisioner';\n}\n\nexport function provisionerConnectionStatus(\n token: Pick<ProvisionerToken, 'id' | 'lastSeenAt'>,\n activeIds: ReadonlySet<string>,\n): ProvisionerConnectionStatus {\n if (activeIds.has(token.id))\n return {kind: 'connected', dotVariant: 'success', label: 'Connected'};\n if (token.lastSeenAt) {\n return {\n kind: 'last-seen',\n dotVariant: 'neutral',\n label: 'Last seen',\n lastSeenAt: token.lastSeenAt,\n };\n }\n return {kind: 'never-connected', dotVariant: 'neutral', label: 'Never connected'};\n}\n"],"names":["createTokenCommand","name","expiration","trimmedName","trim","tokenDisplayName","token","provisionerTokenDisplayName","provisionerConnectionStatus","activeIds","has","id","kind","dotVariant","label","lastSeenAt"],"mappings":"AA+DA,OAAO,SAASA,mBAAmBC,IAAY,EAAEC,UAA2B;IAC1E,MAAMC,cAAcF,KAAKG,IAAI;IAC7B,OAAO;QAACF;QAAY,GAAIC,cAAc;YAACF,MAAME;QAAW,IAAI,CAAC,CAAC;IAAC;AACjE;AAEA,OAAO,SAASE,iBAAiBC,KAA4C;IAC3E,OAAOA,MAAML,IAAI,IAAI;AACvB;AAEA,OAAO,SAASM,4BAA4BD,KAAqC;IAC/E,OAAOA,MAAML,IAAI,IAAI;AACvB;AAEA,OAAO,SAASO,4BACdF,KAAkD,EAClDG,SAA8B;IAE9B,IAAIA,UAAUC,GAAG,CAACJ,MAAMK,EAAE,GACxB,OAAO;QAACC,MAAM;QAAaC,YAAY;QAAWC,OAAO;IAAW;IACtE,IAAIR,MAAMS,UAAU,EAAE;QACpB,OAAO;YACLH,MAAM;YACNC,YAAY;YACZC,OAAO;YACPC,YAAYT,MAAMS,UAAU;QAC9B;IACF;IACA,OAAO;QAACH,MAAM;QAAmBC,YAAY;QAAWC,OAAO;IAAiB;AAClF"}
@@ -1,12 +1,13 @@
1
- import { type FetchQueryOptions } from '@tanstack/react-query';
2
- import type { ActiveProvisioner, CreatedProvisionerToken, CreateTokenCommand, ProvisionerToken } from '#core/token.js';
1
+ import { type UseQueryOptions } from '@tanstack/react-query';
2
+ import type { ActiveProvisioners, ActiveProvisionersResponse, CreatedProvisionerToken, CreateTokenCommand, InstallationRunnersStatus, ProvisionerToken } from '#core/token.js';
3
3
  export declare const provisionerTokenQueryKeys: {
4
4
  all: readonly ['provisioner-tokens'];
5
5
  list: (workspaceId: string) => readonly ["provisioner-tokens", "tokens", string];
6
6
  active: (workspaceId: string) => readonly ["provisioner-tokens", "provisioners", string];
7
7
  };
8
- type ProvisionerTokensQueryOptions = FetchQueryOptions<ProvisionerToken[], Error, ProvisionerToken[], ReturnType<typeof provisionerTokenQueryKeys.list>>;
9
- type ActiveProvisionersQueryOptions = FetchQueryOptions<ActiveProvisioner[], Error, ActiveProvisioner[], ReturnType<typeof provisionerTokenQueryKeys.active>>;
8
+ type ProvisionerTokensQueryOptions = UseQueryOptions<ProvisionerToken[], Error, ProvisionerToken[], ReturnType<typeof provisionerTokenQueryKeys.list>>;
9
+ type ActiveProvisionersQueryOptions = UseQueryOptions<ActiveProvisionersResponse, Error, ActiveProvisioners, ReturnType<typeof provisionerTokenQueryKeys.active>>;
10
+ type InstallationRunnersStatusQueryOptions = UseQueryOptions<ActiveProvisionersResponse, Error, InstallationRunnersStatus, ReturnType<typeof provisionerTokenQueryKeys.active>>;
10
11
  export declare function listProvisionerTokens({ workspaceId, signal, }: {
11
12
  workspaceId: string;
12
13
  signal?: AbortSignal;
@@ -19,14 +20,20 @@ export declare function revokeProvisionerToken({ workspaceId, tokenId, }: {
19
20
  workspaceId: string;
20
21
  tokenId: string;
21
22
  }): Promise<ProvisionerToken>;
23
+ export declare function listActiveProvisionersResponse({ workspaceId, signal, }: {
24
+ workspaceId: string;
25
+ signal?: AbortSignal;
26
+ }): Promise<ActiveProvisionersResponse>;
22
27
  export declare function listActiveProvisioners({ workspaceId, signal, }: {
23
28
  workspaceId: string;
24
29
  signal?: AbortSignal;
25
- }): Promise<ActiveProvisioner[]>;
30
+ }): Promise<ActiveProvisioners>;
26
31
  export declare function provisionerTokensQueryOptions(workspaceId: string): ProvisionerTokensQueryOptions;
27
32
  export declare function activeProvisionersQueryOptions(workspaceId: string): ActiveProvisionersQueryOptions;
33
+ export declare function installationRunnersStatusQueryOptions(workspaceId: string): InstallationRunnersStatusQueryOptions;
28
34
  export declare function useProvisionerTokensQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<ProvisionerToken[]>, Error>;
29
- export declare function useActiveProvisionersQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<ActiveProvisioner[]>, Error>;
35
+ export declare function useActiveProvisionersQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<ActiveProvisioners>, Error>;
36
+ export declare function useInstallationRunnersStatusQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<InstallationRunnersStatus, Error>;
30
37
  export declare function useCreateProvisionerTokenMutation(workspaceId: string): import("@tanstack/react-query").UseMutationResult<CreatedProvisionerToken, Error, CreateTokenCommand, unknown>;
31
38
  export declare function useRevokeProvisionerTokenMutation(workspaceId: string): import("@tanstack/react-query").UseMutationResult<ProvisionerToken, Error, string, unknown>;
32
39
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"provisioner-tokens.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/provisioner-tokens.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,iBAAiB,EAKvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAUxB,eAAO,MAAM,yBAAyB;IACpC,GAAG,YAAG,oBAAoB;IAC1B,IAAI,gBAAgB,MAAM;IAC1B,MAAM,gBAAgB,MAAM;CAE7B,CAAC;AAEF,KAAK,6BAA6B,GAAG,iBAAiB,CACpD,gBAAgB,EAAE,EAClB,KAAK,EACL,gBAAgB,EAAE,EAClB,UAAU,CAAC,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAClD,CAAC;AAEF,KAAK,8BAA8B,GAAG,iBAAiB,CACrD,iBAAiB,EAAE,EACnB,KAAK,EACL,iBAAiB,EAAE,EACnB,UAAU,CAAC,OAAO,yBAAyB,CAAC,MAAM,CAAC,CACpD,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,EAC1C,WAAW,EACX,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAO9B;AAED,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,OAAO,GACR,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;CAC7B,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAOnC;AAED,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,OAAO,GACR,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAO5B;AAED,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAO/B;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,6BAA6B,CAOhG;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,8BAA8B,CAOhC;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,sFAKxE;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,uFAKzE;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,kHAQpE;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,+FAWpE"}
1
+ {"version":3,"file":"provisioner-tokens.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/provisioner-tokens.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,eAAe,EAIrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAUxB,eAAO,MAAM,yBAAyB;IACpC,GAAG,YAAG,oBAAoB;IAC1B,IAAI,gBAAgB,MAAM;IAC1B,MAAM,gBAAgB,MAAM;CAE7B,CAAC;AAEF,KAAK,6BAA6B,GAAG,eAAe,CAClD,gBAAgB,EAAE,EAClB,KAAK,EACL,gBAAgB,EAAE,EAClB,UAAU,CAAC,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAClD,CAAC;AAEF,KAAK,8BAA8B,GAAG,eAAe,CACnD,0BAA0B,EAC1B,KAAK,EACL,kBAAkB,EAClB,UAAU,CAAC,OAAO,yBAAyB,CAAC,MAAM,CAAC,CACpD,CAAC;AAEF,KAAK,qCAAqC,GAAG,eAAe,CAC1D,0BAA0B,EAC1B,KAAK,EACL,yBAAyB,EACzB,UAAU,CAAC,OAAO,yBAAyB,CAAC,MAAM,CAAC,CACpD,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,EAC1C,WAAW,EACX,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAO9B;AAED,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,OAAO,GACR,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;CAC7B,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAOnC;AAED,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,OAAO,GACR,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAO5B;AAED,wBAAsB,8BAA8B,CAAC,EACnD,WAAW,EACX,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAOtC;AAED,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAM9B;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,6BAA6B,CAOhG;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,8BAA8B,CAShC;AAED,wBAAgB,qCAAqC,CACnD,WAAW,EAAE,MAAM,GAClB,qCAAqC,CASvC;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,sFAKxE;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,sFAUzE;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,oFAUhF;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,kHAQpE;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,+FAWpE"}
@@ -1,7 +1,7 @@
1
1
  import { createProvisionerTokenResponseSchema, listActiveProvisionersResponseSchema, listProvisionerTokensResponseSchema, revokeProvisionerTokenResponseSchema } from '@shipfox/api-runners-dto';
2
2
  import { checkedApiRequest } from '@shipfox/client-api';
3
3
  import { queryOptions, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
4
- import { toActiveProvisioner, toCreatedProvisionerToken, toCreateTokenBody, toProvisionerToken } from './token-mapper.js';
4
+ import { toActiveProvisionersResponse, toCreatedProvisionerToken, toCreateTokenBody, toProvisionerToken } from './token-mapper.js';
5
5
  const PROVISIONER_TOKEN_REFETCH_INTERVAL_MS = 30_000;
6
6
  export const provisionerTokenQueryKeys = {
7
7
  all: [
@@ -37,11 +37,20 @@ export async function revokeProvisionerToken({ workspaceId, tokenId }) {
37
37
  });
38
38
  return toProvisionerToken(response);
39
39
  }
40
- export async function listActiveProvisioners({ workspaceId, signal }) {
40
+ export async function listActiveProvisionersResponse({ workspaceId, signal }) {
41
41
  const response = await checkedApiRequest(listActiveProvisionersResponseSchema, `/workspaces/${workspaceId}/provisioners/active`, {
42
42
  signal
43
43
  });
44
- return response.provisioners.map(toActiveProvisioner);
44
+ return toActiveProvisionersResponse(response);
45
+ }
46
+ export async function listActiveProvisioners({ workspaceId, signal }) {
47
+ const response = await listActiveProvisionersResponse({
48
+ workspaceId,
49
+ ...signal ? {
50
+ signal
51
+ } : {}
52
+ });
53
+ return response.provisioners;
45
54
  }
46
55
  export function provisionerTokensQueryOptions(workspaceId) {
47
56
  return queryOptions({
@@ -55,15 +64,32 @@ export function provisionerTokensQueryOptions(workspaceId) {
55
64
  });
56
65
  }
57
66
  export function activeProvisionersQueryOptions(workspaceId) {
58
- return queryOptions({
67
+ return {
59
68
  queryKey: provisionerTokenQueryKeys.active(workspaceId),
60
- queryFn: ({ signal })=>listActiveProvisioners({
69
+ queryFn: ({ signal })=>listActiveProvisionersResponse({
61
70
  workspaceId,
62
- signal
71
+ ...signal ? {
72
+ signal
73
+ } : {}
63
74
  }),
75
+ select: (response)=>response.provisioners,
64
76
  refetchInterval: PROVISIONER_TOKEN_REFETCH_INTERVAL_MS,
65
77
  refetchIntervalInBackground: false
66
- });
78
+ };
79
+ }
80
+ export function installationRunnersStatusQueryOptions(workspaceId) {
81
+ return {
82
+ queryKey: provisionerTokenQueryKeys.active(workspaceId),
83
+ queryFn: ({ signal })=>listActiveProvisionersResponse({
84
+ workspaceId,
85
+ ...signal ? {
86
+ signal
87
+ } : {}
88
+ }),
89
+ select: (response)=>response.installationRunners,
90
+ refetchInterval: PROVISIONER_TOKEN_REFETCH_INTERVAL_MS,
91
+ refetchIntervalInBackground: false
92
+ };
67
93
  }
68
94
  export function useProvisionerTokensQuery(workspaceId) {
69
95
  return useQuery({
@@ -77,6 +103,12 @@ export function useActiveProvisionersQuery(workspaceId) {
77
103
  enabled: Boolean(workspaceId)
78
104
  });
79
105
  }
106
+ export function useInstallationRunnersStatusQuery(workspaceId) {
107
+ return useQuery({
108
+ ...installationRunnersStatusQueryOptions(workspaceId ?? ''),
109
+ enabled: Boolean(workspaceId)
110
+ });
111
+ }
80
112
  export function useCreateProvisionerTokenMutation(workspaceId) {
81
113
  const queryClient = useQueryClient();
82
114
  return useMutation({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/provisioner-tokens.ts"],"sourcesContent":["import {\n createProvisionerTokenResponseSchema,\n listActiveProvisionersResponseSchema,\n listProvisionerTokensResponseSchema,\n revokeProvisionerTokenResponseSchema,\n} from '@shipfox/api-runners-dto';\nimport {checkedApiRequest} from '@shipfox/client-api';\nimport {\n type FetchQueryOptions,\n queryOptions,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport type {\n ActiveProvisioner,\n CreatedProvisionerToken,\n CreateTokenCommand,\n ProvisionerToken,\n} from '#core/token.js';\nimport {\n toActiveProvisioner,\n toCreatedProvisionerToken,\n toCreateTokenBody,\n toProvisionerToken,\n} from './token-mapper.js';\n\nconst PROVISIONER_TOKEN_REFETCH_INTERVAL_MS = 30_000;\n\nexport const provisionerTokenQueryKeys = {\n all: ['provisioner-tokens'] as const,\n list: (workspaceId: string) => [...provisionerTokenQueryKeys.all, 'tokens', workspaceId] as const,\n active: (workspaceId: string) =>\n [...provisionerTokenQueryKeys.all, 'provisioners', workspaceId] as const,\n};\n\ntype ProvisionerTokensQueryOptions = FetchQueryOptions<\n ProvisionerToken[],\n Error,\n ProvisionerToken[],\n ReturnType<typeof provisionerTokenQueryKeys.list>\n>;\n\ntype ActiveProvisionersQueryOptions = FetchQueryOptions<\n ActiveProvisioner[],\n Error,\n ActiveProvisioner[],\n ReturnType<typeof provisionerTokenQueryKeys.active>\n>;\n\nexport async function listProvisionerTokens({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}): Promise<ProvisionerToken[]> {\n const response = await checkedApiRequest(\n listProvisionerTokensResponseSchema,\n `/workspaces/${workspaceId}/provisioners/tokens`,\n {signal},\n );\n return response.tokens.map(toProvisionerToken);\n}\n\nexport async function createProvisionerToken({\n workspaceId,\n command,\n}: {\n workspaceId: string;\n command: CreateTokenCommand;\n}): Promise<CreatedProvisionerToken> {\n const response = await checkedApiRequest(\n createProvisionerTokenResponseSchema,\n `/workspaces/${workspaceId}/provisioners/tokens`,\n {method: 'POST', body: toCreateTokenBody(command)},\n );\n return toCreatedProvisionerToken(response);\n}\n\nexport async function revokeProvisionerToken({\n workspaceId,\n tokenId,\n}: {\n workspaceId: string;\n tokenId: string;\n}): Promise<ProvisionerToken> {\n const response = await checkedApiRequest(\n revokeProvisionerTokenResponseSchema,\n `/workspaces/${workspaceId}/provisioners/tokens/${tokenId}/revoke`,\n {method: 'POST'},\n );\n return toProvisionerToken(response);\n}\n\nexport async function listActiveProvisioners({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}): Promise<ActiveProvisioner[]> {\n const response = await checkedApiRequest(\n listActiveProvisionersResponseSchema,\n `/workspaces/${workspaceId}/provisioners/active`,\n {signal},\n );\n return response.provisioners.map(toActiveProvisioner);\n}\n\nexport function provisionerTokensQueryOptions(workspaceId: string): ProvisionerTokensQueryOptions {\n return queryOptions({\n queryKey: provisionerTokenQueryKeys.list(workspaceId),\n queryFn: ({signal}) => listProvisionerTokens({workspaceId, signal}),\n refetchInterval: PROVISIONER_TOKEN_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n });\n}\n\nexport function activeProvisionersQueryOptions(\n workspaceId: string,\n): ActiveProvisionersQueryOptions {\n return queryOptions({\n queryKey: provisionerTokenQueryKeys.active(workspaceId),\n queryFn: ({signal}) => listActiveProvisioners({workspaceId, signal}),\n refetchInterval: PROVISIONER_TOKEN_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n });\n}\n\nexport function useProvisionerTokensQuery(workspaceId: string | undefined) {\n return useQuery({\n ...provisionerTokensQueryOptions(workspaceId ?? ''),\n enabled: Boolean(workspaceId),\n });\n}\n\nexport function useActiveProvisionersQuery(workspaceId: string | undefined) {\n return useQuery({\n ...activeProvisionersQueryOptions(workspaceId ?? ''),\n enabled: Boolean(workspaceId),\n });\n}\n\nexport function useCreateProvisionerTokenMutation(workspaceId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (command: CreateTokenCommand) => createProvisionerToken({workspaceId, command}),\n onSuccess: async () => {\n await queryClient.invalidateQueries(provisionerTokensQueryOptions(workspaceId));\n },\n });\n}\n\nexport function useRevokeProvisionerTokenMutation(workspaceId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (tokenId: string) => revokeProvisionerToken({workspaceId, tokenId}),\n onSuccess: async () => {\n await Promise.all([\n queryClient.invalidateQueries(provisionerTokensQueryOptions(workspaceId)),\n queryClient.invalidateQueries(activeProvisionersQueryOptions(workspaceId)),\n ]);\n },\n });\n}\n"],"names":["createProvisionerTokenResponseSchema","listActiveProvisionersResponseSchema","listProvisionerTokensResponseSchema","revokeProvisionerTokenResponseSchema","checkedApiRequest","queryOptions","useMutation","useQuery","useQueryClient","toActiveProvisioner","toCreatedProvisionerToken","toCreateTokenBody","toProvisionerToken","PROVISIONER_TOKEN_REFETCH_INTERVAL_MS","provisionerTokenQueryKeys","all","list","workspaceId","active","listProvisionerTokens","signal","response","tokens","map","createProvisionerToken","command","method","body","revokeProvisionerToken","tokenId","listActiveProvisioners","provisioners","provisionerTokensQueryOptions","queryKey","queryFn","refetchInterval","refetchIntervalInBackground","activeProvisionersQueryOptions","useProvisionerTokensQuery","enabled","Boolean","useActiveProvisionersQuery","useCreateProvisionerTokenMutation","queryClient","mutationFn","onSuccess","invalidateQueries","useRevokeProvisionerTokenMutation","Promise"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/hooks/api/provisioner-tokens.ts"],"sourcesContent":["import {\n createProvisionerTokenResponseSchema,\n listActiveProvisionersResponseSchema,\n listProvisionerTokensResponseSchema,\n revokeProvisionerTokenResponseSchema,\n} from '@shipfox/api-runners-dto';\nimport {checkedApiRequest} from '@shipfox/client-api';\nimport {\n queryOptions,\n type UseQueryOptions,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport type {\n ActiveProvisioners,\n ActiveProvisionersResponse,\n CreatedProvisionerToken,\n CreateTokenCommand,\n InstallationRunnersStatus,\n ProvisionerToken,\n} from '#core/token.js';\nimport {\n toActiveProvisionersResponse,\n toCreatedProvisionerToken,\n toCreateTokenBody,\n toProvisionerToken,\n} from './token-mapper.js';\n\nconst PROVISIONER_TOKEN_REFETCH_INTERVAL_MS = 30_000;\n\nexport const provisionerTokenQueryKeys = {\n all: ['provisioner-tokens'] as const,\n list: (workspaceId: string) => [...provisionerTokenQueryKeys.all, 'tokens', workspaceId] as const,\n active: (workspaceId: string) =>\n [...provisionerTokenQueryKeys.all, 'provisioners', workspaceId] as const,\n};\n\ntype ProvisionerTokensQueryOptions = UseQueryOptions<\n ProvisionerToken[],\n Error,\n ProvisionerToken[],\n ReturnType<typeof provisionerTokenQueryKeys.list>\n>;\n\ntype ActiveProvisionersQueryOptions = UseQueryOptions<\n ActiveProvisionersResponse,\n Error,\n ActiveProvisioners,\n ReturnType<typeof provisionerTokenQueryKeys.active>\n>;\n\ntype InstallationRunnersStatusQueryOptions = UseQueryOptions<\n ActiveProvisionersResponse,\n Error,\n InstallationRunnersStatus,\n ReturnType<typeof provisionerTokenQueryKeys.active>\n>;\n\nexport async function listProvisionerTokens({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}): Promise<ProvisionerToken[]> {\n const response = await checkedApiRequest(\n listProvisionerTokensResponseSchema,\n `/workspaces/${workspaceId}/provisioners/tokens`,\n {signal},\n );\n return response.tokens.map(toProvisionerToken);\n}\n\nexport async function createProvisionerToken({\n workspaceId,\n command,\n}: {\n workspaceId: string;\n command: CreateTokenCommand;\n}): Promise<CreatedProvisionerToken> {\n const response = await checkedApiRequest(\n createProvisionerTokenResponseSchema,\n `/workspaces/${workspaceId}/provisioners/tokens`,\n {method: 'POST', body: toCreateTokenBody(command)},\n );\n return toCreatedProvisionerToken(response);\n}\n\nexport async function revokeProvisionerToken({\n workspaceId,\n tokenId,\n}: {\n workspaceId: string;\n tokenId: string;\n}): Promise<ProvisionerToken> {\n const response = await checkedApiRequest(\n revokeProvisionerTokenResponseSchema,\n `/workspaces/${workspaceId}/provisioners/tokens/${tokenId}/revoke`,\n {method: 'POST'},\n );\n return toProvisionerToken(response);\n}\n\nexport async function listActiveProvisionersResponse({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}): Promise<ActiveProvisionersResponse> {\n const response = await checkedApiRequest(\n listActiveProvisionersResponseSchema,\n `/workspaces/${workspaceId}/provisioners/active`,\n {signal},\n );\n return toActiveProvisionersResponse(response);\n}\n\nexport async function listActiveProvisioners({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}): Promise<ActiveProvisioners> {\n const response = await listActiveProvisionersResponse({\n workspaceId,\n ...(signal ? {signal} : {}),\n });\n return response.provisioners;\n}\n\nexport function provisionerTokensQueryOptions(workspaceId: string): ProvisionerTokensQueryOptions {\n return queryOptions({\n queryKey: provisionerTokenQueryKeys.list(workspaceId),\n queryFn: ({signal}) => listProvisionerTokens({workspaceId, signal}),\n refetchInterval: PROVISIONER_TOKEN_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n });\n}\n\nexport function activeProvisionersQueryOptions(\n workspaceId: string,\n): ActiveProvisionersQueryOptions {\n return {\n queryKey: provisionerTokenQueryKeys.active(workspaceId),\n queryFn: ({signal}) =>\n listActiveProvisionersResponse({workspaceId, ...(signal ? {signal} : {})}),\n select: (response) => response.provisioners,\n refetchInterval: PROVISIONER_TOKEN_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n };\n}\n\nexport function installationRunnersStatusQueryOptions(\n workspaceId: string,\n): InstallationRunnersStatusQueryOptions {\n return {\n queryKey: provisionerTokenQueryKeys.active(workspaceId),\n queryFn: ({signal}) =>\n listActiveProvisionersResponse({workspaceId, ...(signal ? {signal} : {})}),\n select: (response) => response.installationRunners,\n refetchInterval: PROVISIONER_TOKEN_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n };\n}\n\nexport function useProvisionerTokensQuery(workspaceId: string | undefined) {\n return useQuery({\n ...provisionerTokensQueryOptions(workspaceId ?? ''),\n enabled: Boolean(workspaceId),\n });\n}\n\nexport function useActiveProvisionersQuery(workspaceId: string | undefined) {\n return useQuery<\n ActiveProvisionersResponse,\n Error,\n ActiveProvisioners,\n ReturnType<typeof provisionerTokenQueryKeys.active>\n >({\n ...activeProvisionersQueryOptions(workspaceId ?? ''),\n enabled: Boolean(workspaceId),\n });\n}\n\nexport function useInstallationRunnersStatusQuery(workspaceId: string | undefined) {\n return useQuery<\n ActiveProvisionersResponse,\n Error,\n InstallationRunnersStatus,\n ReturnType<typeof provisionerTokenQueryKeys.active>\n >({\n ...installationRunnersStatusQueryOptions(workspaceId ?? ''),\n enabled: Boolean(workspaceId),\n });\n}\n\nexport function useCreateProvisionerTokenMutation(workspaceId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (command: CreateTokenCommand) => createProvisionerToken({workspaceId, command}),\n onSuccess: async () => {\n await queryClient.invalidateQueries(provisionerTokensQueryOptions(workspaceId));\n },\n });\n}\n\nexport function useRevokeProvisionerTokenMutation(workspaceId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (tokenId: string) => revokeProvisionerToken({workspaceId, tokenId}),\n onSuccess: async () => {\n await Promise.all([\n queryClient.invalidateQueries(provisionerTokensQueryOptions(workspaceId)),\n queryClient.invalidateQueries(activeProvisionersQueryOptions(workspaceId)),\n ]);\n },\n });\n}\n"],"names":["createProvisionerTokenResponseSchema","listActiveProvisionersResponseSchema","listProvisionerTokensResponseSchema","revokeProvisionerTokenResponseSchema","checkedApiRequest","queryOptions","useMutation","useQuery","useQueryClient","toActiveProvisionersResponse","toCreatedProvisionerToken","toCreateTokenBody","toProvisionerToken","PROVISIONER_TOKEN_REFETCH_INTERVAL_MS","provisionerTokenQueryKeys","all","list","workspaceId","active","listProvisionerTokens","signal","response","tokens","map","createProvisionerToken","command","method","body","revokeProvisionerToken","tokenId","listActiveProvisionersResponse","listActiveProvisioners","provisioners","provisionerTokensQueryOptions","queryKey","queryFn","refetchInterval","refetchIntervalInBackground","activeProvisionersQueryOptions","select","installationRunnersStatusQueryOptions","installationRunners","useProvisionerTokensQuery","enabled","Boolean","useActiveProvisionersQuery","useInstallationRunnersStatusQuery","useCreateProvisionerTokenMutation","queryClient","mutationFn","onSuccess","invalidateQueries","useRevokeProvisionerTokenMutation","Promise"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { ActiveProvisionerDto, CreateManualRegistrationTokenResponseDto, CreateProvisionerTokenResponseDto, ManualRegistrationTokenDto, ProvisionerTokenDto } from '@shipfox/api-runners-dto';
2
- import type { ActiveProvisioner, CreatedManualRegistrationToken, CreatedProvisionerToken, CreateTokenCommand, ManualRegistrationToken, ProvisionerToken } from '#core/token.js';
1
+ import type { ActiveProvisionerDto, CreateManualRegistrationTokenResponseDto, CreateProvisionerTokenResponseDto, ListActiveProvisionersResponseDto, ManualRegistrationTokenDto, ProvisionerTokenDto } from '@shipfox/api-runners-dto';
2
+ import type { ActiveProvisioner, ActiveProvisionersResponse, CreatedManualRegistrationToken, CreatedProvisionerToken, CreateTokenCommand, ManualRegistrationToken, ProvisionerToken } from '#core/token.js';
3
3
  export declare function toCreateTokenBody(command: CreateTokenCommand): {
4
4
  name?: string;
5
5
  ttl_seconds?: number;
@@ -7,6 +7,7 @@ export declare function toCreateTokenBody(command: CreateTokenCommand): {
7
7
  export declare function toManualRegistrationToken(dto: ManualRegistrationTokenDto): ManualRegistrationToken;
8
8
  export declare function toProvisionerToken(dto: ProvisionerTokenDto): ProvisionerToken;
9
9
  export declare function toActiveProvisioner(dto: ActiveProvisionerDto): ActiveProvisioner;
10
+ export declare function toActiveProvisionersResponse(dto: ListActiveProvisionersResponseDto): ActiveProvisionersResponse;
10
11
  export declare function toCreatedManualRegistrationToken(dto: CreateManualRegistrationTokenResponseDto): CreatedManualRegistrationToken;
11
12
  export declare function toCreatedProvisionerToken(dto: CreateProvisionerTokenResponseDto): CreatedProvisionerToken;
12
13
  //# sourceMappingURL=token-mapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/token-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,wCAAwC,EACxC,iCAAiC,EACjC,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,8BAA8B,EAC9B,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB;;;EAO5D;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,0BAA0B,GAC9B,uBAAuB,CAWzB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,gBAAgB,CAO7E;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,iBAAiB,CAEhF;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,wCAAwC,GAC5C,8BAA8B,CAUhC;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,iCAAiC,GACrC,uBAAuB,CASzB"}
1
+ {"version":3,"file":"token-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/token-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,wCAAwC,EACxC,iCAAiC,EACjC,iCAAiC,EACjC,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,0BAA0B,EAC1B,8BAA8B,EAC9B,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AACxB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB;;;EAO5D;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,0BAA0B,GAC9B,uBAAuB,CAWzB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,gBAAgB,CAO7E;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,iBAAiB,CAEhF;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,iCAAiC,GACrC,0BAA0B,CAK5B;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,wCAAwC,GAC5C,8BAA8B,CAUhC;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,iCAAiC,GACrC,uBAAuB,CASzB"}
@@ -36,6 +36,12 @@ export function toActiveProvisioner(dto) {
36
36
  lastSeenAt: dto.last_seen_at
37
37
  };
38
38
  }
39
+ export function toActiveProvisionersResponse(dto) {
40
+ return {
41
+ provisioners: dto.provisioners.map(toActiveProvisioner),
42
+ installationRunners: dto.installation_runners
43
+ };
44
+ }
39
45
  export function toCreatedManualRegistrationToken(dto) {
40
46
  return {
41
47
  token: dto.raw_token,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/token-mapper.ts"],"sourcesContent":["import type {\n ActiveProvisionerDto,\n CreateManualRegistrationTokenResponseDto,\n CreateProvisionerTokenResponseDto,\n ManualRegistrationTokenDto,\n ProvisionerTokenDto,\n} from '@shipfox/api-runners-dto';\nimport type {\n ActiveProvisioner,\n CreatedManualRegistrationToken,\n CreatedProvisionerToken,\n CreateTokenCommand,\n ManualRegistrationToken,\n ProvisionerToken,\n} from '#core/token.js';\n\nexport function toCreateTokenBody(command: CreateTokenCommand) {\n return {\n ...(command.name ? {name: command.name} : {}),\n ...(command.expiration.kind === 'expires-after'\n ? {ttl_seconds: command.expiration.seconds}\n : {}),\n };\n}\n\nexport function toManualRegistrationToken(\n dto: ManualRegistrationTokenDto,\n): ManualRegistrationToken {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n prefix: dto.prefix,\n name: dto.name,\n expiresAt: dto.expires_at,\n revokedAt: dto.revoked_at,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toProvisionerToken(dto: ProvisionerTokenDto): ProvisionerToken {\n return {\n ...toManualRegistrationToken(dto),\n createdByUserId: dto.created_by_user_id,\n revokedByUserId: dto.revoked_by_user_id,\n lastSeenAt: dto.last_seen_at,\n };\n}\n\nexport function toActiveProvisioner(dto: ActiveProvisionerDto): ActiveProvisioner {\n return {id: dto.id, name: dto.name, prefix: dto.prefix, lastSeenAt: dto.last_seen_at};\n}\n\nexport function toCreatedManualRegistrationToken(\n dto: CreateManualRegistrationTokenResponseDto,\n): CreatedManualRegistrationToken {\n return {\n token: dto.raw_token,\n id: dto.id,\n prefix: dto.prefix,\n name: dto.name,\n workspaceId: dto.workspace_id,\n expiresAt: dto.expires_at,\n createdAt: dto.created_at,\n };\n}\n\nexport function toCreatedProvisionerToken(\n dto: CreateProvisionerTokenResponseDto,\n): CreatedProvisionerToken {\n return {\n ...toCreatedManualRegistrationToken(dto),\n createdByUserId: dto.created_by_user_id,\n revokedByUserId: dto.revoked_by_user_id,\n revokedAt: dto.revoked_at,\n lastSeenAt: dto.last_seen_at,\n updatedAt: dto.updated_at,\n };\n}\n"],"names":["toCreateTokenBody","command","name","expiration","kind","ttl_seconds","seconds","toManualRegistrationToken","dto","id","workspaceId","workspace_id","prefix","expiresAt","expires_at","revokedAt","revoked_at","createdAt","created_at","updatedAt","updated_at","toProvisionerToken","createdByUserId","created_by_user_id","revokedByUserId","revoked_by_user_id","lastSeenAt","last_seen_at","toActiveProvisioner","toCreatedManualRegistrationToken","token","raw_token","toCreatedProvisionerToken"],"mappings":"AAgBA,OAAO,SAASA,kBAAkBC,OAA2B;IAC3D,OAAO;QACL,GAAIA,QAAQC,IAAI,GAAG;YAACA,MAAMD,QAAQC,IAAI;QAAA,IAAI,CAAC,CAAC;QAC5C,GAAID,QAAQE,UAAU,CAACC,IAAI,KAAK,kBAC5B;YAACC,aAAaJ,QAAQE,UAAU,CAACG,OAAO;QAAA,IACxC,CAAC,CAAC;IACR;AACF;AAEA,OAAO,SAASC,0BACdC,GAA+B;IAE/B,OAAO;QACLC,IAAID,IAAIC,EAAE;QACVC,aAAaF,IAAIG,YAAY;QAC7BC,QAAQJ,IAAII,MAAM;QAClBV,MAAMM,IAAIN,IAAI;QACdW,WAAWL,IAAIM,UAAU;QACzBC,WAAWP,IAAIQ,UAAU;QACzBC,WAAWT,IAAIU,UAAU;QACzBC,WAAWX,IAAIY,UAAU;IAC3B;AACF;AAEA,OAAO,SAASC,mBAAmBb,GAAwB;IACzD,OAAO;QACL,GAAGD,0BAA0BC,IAAI;QACjCc,iBAAiBd,IAAIe,kBAAkB;QACvCC,iBAAiBhB,IAAIiB,kBAAkB;QACvCC,YAAYlB,IAAImB,YAAY;IAC9B;AACF;AAEA,OAAO,SAASC,oBAAoBpB,GAAyB;IAC3D,OAAO;QAACC,IAAID,IAAIC,EAAE;QAAEP,MAAMM,IAAIN,IAAI;QAAEU,QAAQJ,IAAII,MAAM;QAAEc,YAAYlB,IAAImB,YAAY;IAAA;AACtF;AAEA,OAAO,SAASE,iCACdrB,GAA6C;IAE7C,OAAO;QACLsB,OAAOtB,IAAIuB,SAAS;QACpBtB,IAAID,IAAIC,EAAE;QACVG,QAAQJ,IAAII,MAAM;QAClBV,MAAMM,IAAIN,IAAI;QACdQ,aAAaF,IAAIG,YAAY;QAC7BE,WAAWL,IAAIM,UAAU;QACzBG,WAAWT,IAAIU,UAAU;IAC3B;AACF;AAEA,OAAO,SAASc,0BACdxB,GAAsC;IAEtC,OAAO;QACL,GAAGqB,iCAAiCrB,IAAI;QACxCc,iBAAiBd,IAAIe,kBAAkB;QACvCC,iBAAiBhB,IAAIiB,kBAAkB;QACvCV,WAAWP,IAAIQ,UAAU;QACzBU,YAAYlB,IAAImB,YAAY;QAC5BR,WAAWX,IAAIY,UAAU;IAC3B;AACF"}
1
+ {"version":3,"sources":["../../../src/hooks/api/token-mapper.ts"],"sourcesContent":["import type {\n ActiveProvisionerDto,\n CreateManualRegistrationTokenResponseDto,\n CreateProvisionerTokenResponseDto,\n ListActiveProvisionersResponseDto,\n ManualRegistrationTokenDto,\n ProvisionerTokenDto,\n} from '@shipfox/api-runners-dto';\nimport type {\n ActiveProvisioner,\n ActiveProvisionersResponse,\n CreatedManualRegistrationToken,\n CreatedProvisionerToken,\n CreateTokenCommand,\n ManualRegistrationToken,\n ProvisionerToken,\n} from '#core/token.js';\nexport function toCreateTokenBody(command: CreateTokenCommand) {\n return {\n ...(command.name ? {name: command.name} : {}),\n ...(command.expiration.kind === 'expires-after'\n ? {ttl_seconds: command.expiration.seconds}\n : {}),\n };\n}\n\nexport function toManualRegistrationToken(\n dto: ManualRegistrationTokenDto,\n): ManualRegistrationToken {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n prefix: dto.prefix,\n name: dto.name,\n expiresAt: dto.expires_at,\n revokedAt: dto.revoked_at,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toProvisionerToken(dto: ProvisionerTokenDto): ProvisionerToken {\n return {\n ...toManualRegistrationToken(dto),\n createdByUserId: dto.created_by_user_id,\n revokedByUserId: dto.revoked_by_user_id,\n lastSeenAt: dto.last_seen_at,\n };\n}\n\nexport function toActiveProvisioner(dto: ActiveProvisionerDto): ActiveProvisioner {\n return {id: dto.id, name: dto.name, prefix: dto.prefix, lastSeenAt: dto.last_seen_at};\n}\n\nexport function toActiveProvisionersResponse(\n dto: ListActiveProvisionersResponseDto,\n): ActiveProvisionersResponse {\n return {\n provisioners: dto.provisioners.map(toActiveProvisioner),\n installationRunners: dto.installation_runners,\n };\n}\n\nexport function toCreatedManualRegistrationToken(\n dto: CreateManualRegistrationTokenResponseDto,\n): CreatedManualRegistrationToken {\n return {\n token: dto.raw_token,\n id: dto.id,\n prefix: dto.prefix,\n name: dto.name,\n workspaceId: dto.workspace_id,\n expiresAt: dto.expires_at,\n createdAt: dto.created_at,\n };\n}\n\nexport function toCreatedProvisionerToken(\n dto: CreateProvisionerTokenResponseDto,\n): CreatedProvisionerToken {\n return {\n ...toCreatedManualRegistrationToken(dto),\n createdByUserId: dto.created_by_user_id,\n revokedByUserId: dto.revoked_by_user_id,\n revokedAt: dto.revoked_at,\n lastSeenAt: dto.last_seen_at,\n updatedAt: dto.updated_at,\n };\n}\n"],"names":["toCreateTokenBody","command","name","expiration","kind","ttl_seconds","seconds","toManualRegistrationToken","dto","id","workspaceId","workspace_id","prefix","expiresAt","expires_at","revokedAt","revoked_at","createdAt","created_at","updatedAt","updated_at","toProvisionerToken","createdByUserId","created_by_user_id","revokedByUserId","revoked_by_user_id","lastSeenAt","last_seen_at","toActiveProvisioner","toActiveProvisionersResponse","provisioners","map","installationRunners","installation_runners","toCreatedManualRegistrationToken","token","raw_token","toCreatedProvisionerToken"],"mappings":"AAiBA,OAAO,SAASA,kBAAkBC,OAA2B;IAC3D,OAAO;QACL,GAAIA,QAAQC,IAAI,GAAG;YAACA,MAAMD,QAAQC,IAAI;QAAA,IAAI,CAAC,CAAC;QAC5C,GAAID,QAAQE,UAAU,CAACC,IAAI,KAAK,kBAC5B;YAACC,aAAaJ,QAAQE,UAAU,CAACG,OAAO;QAAA,IACxC,CAAC,CAAC;IACR;AACF;AAEA,OAAO,SAASC,0BACdC,GAA+B;IAE/B,OAAO;QACLC,IAAID,IAAIC,EAAE;QACVC,aAAaF,IAAIG,YAAY;QAC7BC,QAAQJ,IAAII,MAAM;QAClBV,MAAMM,IAAIN,IAAI;QACdW,WAAWL,IAAIM,UAAU;QACzBC,WAAWP,IAAIQ,UAAU;QACzBC,WAAWT,IAAIU,UAAU;QACzBC,WAAWX,IAAIY,UAAU;IAC3B;AACF;AAEA,OAAO,SAASC,mBAAmBb,GAAwB;IACzD,OAAO;QACL,GAAGD,0BAA0BC,IAAI;QACjCc,iBAAiBd,IAAIe,kBAAkB;QACvCC,iBAAiBhB,IAAIiB,kBAAkB;QACvCC,YAAYlB,IAAImB,YAAY;IAC9B;AACF;AAEA,OAAO,SAASC,oBAAoBpB,GAAyB;IAC3D,OAAO;QAACC,IAAID,IAAIC,EAAE;QAAEP,MAAMM,IAAIN,IAAI;QAAEU,QAAQJ,IAAII,MAAM;QAAEc,YAAYlB,IAAImB,YAAY;IAAA;AACtF;AAEA,OAAO,SAASE,6BACdrB,GAAsC;IAEtC,OAAO;QACLsB,cAActB,IAAIsB,YAAY,CAACC,GAAG,CAACH;QACnCI,qBAAqBxB,IAAIyB,oBAAoB;IAC/C;AACF;AAEA,OAAO,SAASC,iCACd1B,GAA6C;IAE7C,OAAO;QACL2B,OAAO3B,IAAI4B,SAAS;QACpB3B,IAAID,IAAIC,EAAE;QACVG,QAAQJ,IAAII,MAAM;QAClBV,MAAMM,IAAIN,IAAI;QACdQ,aAAaF,IAAIG,YAAY;QAC7BE,WAAWL,IAAIM,UAAU;QACzBG,WAAWT,IAAIU,UAAU;IAC3B;AACF;AAEA,OAAO,SAASmB,0BACd7B,GAAsC;IAEtC,OAAO;QACL,GAAG0B,iCAAiC1B,IAAI;QACxCc,iBAAiBd,IAAIe,kBAAkB;QACvCC,iBAAiBhB,IAAIiB,kBAAkB;QACvCV,WAAWP,IAAIQ,UAAU;QACzBU,YAAYlB,IAAImB,YAAY;QAC5BR,WAAWX,IAAIY,UAAU;IAC3B;AACF"}