@shipfox/client-secrets 4.0.0 → 6.0.1

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 (82) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +46 -0
  3. package/dist/components/form-errors.d.ts.map +1 -1
  4. package/dist/components/form-errors.js +0 -6
  5. package/dist/components/form-errors.js.map +1 -1
  6. package/dist/components/secret-form.d.ts.map +1 -1
  7. package/dist/components/secret-form.js +6 -8
  8. package/dist/components/secret-form.js.map +1 -1
  9. package/dist/components/variable-form.d.ts.map +1 -1
  10. package/dist/components/variable-form.js +6 -8
  11. package/dist/components/variable-form.js.map +1 -1
  12. package/dist/components/workspace-secrets-section.d.ts.map +1 -1
  13. package/dist/components/workspace-secrets-section.js +4 -2
  14. package/dist/components/workspace-secrets-section.js.map +1 -1
  15. package/dist/components/workspace-secrets-section.stories.d.ts.map +1 -1
  16. package/dist/components/workspace-secrets-section.stories.js.map +1 -1
  17. package/dist/components/workspace-variables-section.d.ts.map +1 -1
  18. package/dist/components/workspace-variables-section.js +5 -3
  19. package/dist/components/workspace-variables-section.js.map +1 -1
  20. package/dist/components/workspace-variables-section.stories.d.ts.map +1 -1
  21. package/dist/components/workspace-variables-section.stories.js.map +1 -1
  22. package/dist/core/store.d.ts +54 -0
  23. package/dist/core/store.d.ts.map +1 -0
  24. package/dist/core/store.js +44 -0
  25. package/dist/core/store.js.map +1 -0
  26. package/dist/feature.d.ts +39 -0
  27. package/dist/feature.d.ts.map +1 -0
  28. package/dist/feature.js +35 -0
  29. package/dist/feature.js.map +1 -0
  30. package/dist/hooks/api/create-store-api.d.ts +31 -49
  31. package/dist/hooks/api/create-store-api.d.ts.map +1 -1
  32. package/dist/hooks/api/create-store-api.js +44 -45
  33. package/dist/hooks/api/create-store-api.js.map +1 -1
  34. package/dist/hooks/api/secrets.d.ts +16 -55
  35. package/dist/hooks/api/secrets.d.ts.map +1 -1
  36. package/dist/hooks/api/secrets.js +10 -2
  37. package/dist/hooks/api/secrets.js.map +1 -1
  38. package/dist/hooks/api/store-mapper.d.ts +7 -0
  39. package/dist/hooks/api/store-mapper.d.ts.map +1 -0
  40. package/dist/hooks/api/store-mapper.js +36 -0
  41. package/dist/hooks/api/store-mapper.js.map +1 -0
  42. package/dist/hooks/api/variables.d.ts +25 -78
  43. package/dist/hooks/api/variables.d.ts.map +1 -1
  44. package/dist/hooks/api/variables.js +37 -28
  45. package/dist/hooks/api/variables.js.map +1 -1
  46. package/dist/routes/secrets-settings.d.ts +5 -0
  47. package/dist/routes/secrets-settings.d.ts.map +1 -0
  48. package/dist/routes/secrets-settings.js +10 -0
  49. package/dist/routes/secrets-settings.js.map +1 -0
  50. package/dist/routes/variables-settings.d.ts +5 -0
  51. package/dist/routes/variables-settings.d.ts.map +1 -0
  52. package/dist/routes/variables-settings.js +10 -0
  53. package/dist/routes/variables-settings.js.map +1 -0
  54. package/dist/tsconfig.test.tsbuildinfo +1 -1
  55. package/package.json +17 -9
  56. package/src/components/form-errors.test.ts +2 -2
  57. package/src/components/form-errors.ts +0 -3
  58. package/src/components/secret-form.tsx +15 -5
  59. package/src/components/variable-form.tsx +15 -5
  60. package/src/components/workspace-secrets-section.stories.tsx +1 -2
  61. package/src/components/workspace-secrets-section.tsx +8 -4
  62. package/src/components/workspace-variables-section.stories.tsx +1 -2
  63. package/src/components/workspace-variables-section.tsx +10 -6
  64. package/src/core/store.test.ts +38 -0
  65. package/src/core/store.ts +91 -0
  66. package/src/feature.ts +29 -0
  67. package/src/hooks/api/create-store-api.ts +104 -75
  68. package/src/hooks/api/secrets.test.ts +16 -10
  69. package/src/hooks/api/secrets.ts +11 -14
  70. package/src/hooks/api/store-mapper.test.ts +39 -0
  71. package/src/hooks/api/store-mapper.ts +47 -0
  72. package/src/hooks/api/variables.ts +52 -36
  73. package/src/routes/secrets-settings.tsx +6 -0
  74. package/src/routes/variables-settings.tsx +6 -0
  75. package/tsconfig.build.tsbuildinfo +1 -1
  76. package/vercel.json +5 -0
  77. package/dist/components/store-key.d.ts +0 -20
  78. package/dist/components/store-key.d.ts.map +0 -1
  79. package/dist/components/store-key.js +0 -25
  80. package/dist/components/store-key.js.map +0 -1
  81. package/src/components/store-key.test.ts +0 -53
  82. package/src/components/store-key.ts +0 -36
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/create-store-api.ts"],"sourcesContent":["import {SECRETS_MAX_LIST_LIMIT, type SecretWriteWarningDto} from '@shipfox/api-secrets-dto';\nimport {apiRequest} from '@shipfox/client-api';\nimport {useMutation, useQuery, useQueryClient} from '@tanstack/react-query';\n\n/**\n * Secrets and variables share an identical management surface (list / put /\n * delete under `/workspaces/:id/{resource}`); only the response envelope keys\n * and DTO types differ. This factory builds the typed transport functions,\n * query keys, and React Query hooks for one resource so `secrets.ts` and\n * `variables.ts` stay thin instantiations. The forms and sections diverge\n * (write-only vs readable) and are kept separate on purpose.\n */\nexport interface CreateStoreApiConfig<TItem, TListResponse, TPutResponse> {\n /** URL segment and query-key namespace, e.g. `'secrets'` or `'variables'`. */\n resource: string;\n /** Pulls the item array out of a list response. */\n listItems: (response: TListResponse) => TItem[];\n /** Pulls the single item out of a put response. */\n putItem: (response: TPutResponse) => TItem;\n}\n\nexport interface PutResult<TItem> {\n item: TItem;\n warnings: SecretWriteWarningDto[];\n}\n\nexport function createStoreApi<\n TItem,\n TListResponse,\n TPutBody,\n TPutResponse extends {warnings: SecretWriteWarningDto[]},\n>(config: CreateStoreApiConfig<TItem, TListResponse, TPutResponse>) {\n const {resource, listItems, putItem} = config;\n\n const queryKeys = {\n all: [resource] as const,\n list: (workspaceId: string) => [resource, 'list', workspaceId] as const,\n };\n\n // The store is a bounded set (per-workspace cap), so the UI fetches every key\n // in one call rather than paginating: request the max limit and ignore the\n // cursor. See SECRETS_MAX_LIST_LIMIT / the S1a list route.\n async function listAll(params: {\n workspaceId: string;\n projectId?: string | undefined;\n signal?: AbortSignal | undefined;\n }): Promise<TItem[]> {\n const search = new URLSearchParams({limit: String(SECRETS_MAX_LIST_LIMIT)});\n if (params.projectId) search.set('project_id', params.projectId);\n const response = await apiRequest<TListResponse>(\n `/workspaces/${params.workspaceId}/${resource}?${search.toString()}`,\n {signal: params.signal},\n );\n return listItems(response);\n }\n\n async function put(params: {\n workspaceId: string;\n key: string;\n body: TPutBody;\n }): Promise<PutResult<TItem>> {\n const response = await apiRequest<TPutResponse>(\n `/workspaces/${params.workspaceId}/${resource}/${encodeURIComponent(params.key)}`,\n {method: 'PUT', body: params.body},\n );\n return {item: putItem(response), warnings: response.warnings};\n }\n\n async function remove(params: {\n workspaceId: string;\n key: string;\n projectId?: string | undefined;\n }): Promise<void> {\n const search = params.projectId\n ? `?${new URLSearchParams({project_id: params.projectId}).toString()}`\n : '';\n await apiRequest<void>(\n `/workspaces/${params.workspaceId}/${resource}/${encodeURIComponent(params.key)}${search}`,\n {method: 'DELETE'},\n );\n }\n\n function useListQuery(workspaceId: string | undefined) {\n return useQuery({\n queryKey: workspaceId ? queryKeys.list(workspaceId) : [resource, 'list'],\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listAll({workspaceId: workspaceId ?? '', signal}),\n });\n }\n\n function usePutMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: put,\n // Invalidate the whole resource namespace so the per-item detail cache\n // (full variable values) is refreshed too, not just the list.\n onSuccess: async () => {\n await queryClient.invalidateQueries({queryKey: queryKeys.all});\n },\n });\n }\n\n function useDeleteMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: remove,\n onSuccess: async () => {\n await queryClient.invalidateQueries({queryKey: queryKeys.all});\n },\n });\n }\n\n return {queryKeys, listAll, put, remove, useListQuery, usePutMutation, useDeleteMutation};\n}\n"],"names":["SECRETS_MAX_LIST_LIMIT","apiRequest","useMutation","useQuery","useQueryClient","createStoreApi","config","resource","listItems","putItem","queryKeys","all","list","workspaceId","listAll","params","search","URLSearchParams","limit","String","projectId","set","response","toString","signal","put","encodeURIComponent","key","method","body","item","warnings","remove","project_id","useListQuery","queryKey","enabled","Boolean","queryFn","usePutMutation","queryClient","mutationFn","onSuccess","invalidateQueries","useDeleteMutation"],"mappings":"AAAA,SAAQA,sBAAsB,QAAmC,2BAA2B;AAC5F,SAAQC,UAAU,QAAO,sBAAsB;AAC/C,SAAQC,WAAW,EAAEC,QAAQ,EAAEC,cAAc,QAAO,wBAAwB;AAwB5E,OAAO,SAASC,eAKdC,MAAgE;IAChE,MAAM,EAACC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAC,GAAGH;IAEvC,MAAMI,YAAY;QAChBC,KAAK;YAACJ;SAAS;QACfK,MAAM,CAACC,cAAwB;gBAACN;gBAAU;gBAAQM;aAAY;IAChE;IAEA,8EAA8E;IAC9E,2EAA2E;IAC3E,2DAA2D;IAC3D,eAAeC,QAAQC,MAItB;QACC,MAAMC,SAAS,IAAIC,gBAAgB;YAACC,OAAOC,OAAOnB;QAAuB;QACzE,IAAIe,OAAOK,SAAS,EAAEJ,OAAOK,GAAG,CAAC,cAAcN,OAAOK,SAAS;QAC/D,MAAME,WAAW,MAAMrB,WACrB,CAAC,YAAY,EAAEc,OAAOF,WAAW,CAAC,CAAC,EAAEN,SAAS,CAAC,EAAES,OAAOO,QAAQ,IAAI,EACpE;YAACC,QAAQT,OAAOS,MAAM;QAAA;QAExB,OAAOhB,UAAUc;IACnB;IAEA,eAAeG,IAAIV,MAIlB;QACC,MAAMO,WAAW,MAAMrB,WACrB,CAAC,YAAY,EAAEc,OAAOF,WAAW,CAAC,CAAC,EAAEN,SAAS,CAAC,EAAEmB,mBAAmBX,OAAOY,GAAG,GAAG,EACjF;YAACC,QAAQ;YAAOC,MAAMd,OAAOc,IAAI;QAAA;QAEnC,OAAO;YAACC,MAAMrB,QAAQa;YAAWS,UAAUT,SAASS,QAAQ;QAAA;IAC9D;IAEA,eAAeC,OAAOjB,MAIrB;QACC,MAAMC,SAASD,OAAOK,SAAS,GAC3B,CAAC,CAAC,EAAE,IAAIH,gBAAgB;YAACgB,YAAYlB,OAAOK,SAAS;QAAA,GAAGG,QAAQ,IAAI,GACpE;QACJ,MAAMtB,WACJ,CAAC,YAAY,EAAEc,OAAOF,WAAW,CAAC,CAAC,EAAEN,SAAS,CAAC,EAAEmB,mBAAmBX,OAAOY,GAAG,IAAIX,QAAQ,EAC1F;YAACY,QAAQ;QAAQ;IAErB;IAEA,SAASM,aAAarB,WAA+B;QACnD,OAAOV,SAAS;YACdgC,UAAUtB,cAAcH,UAAUE,IAAI,CAACC,eAAe;gBAACN;gBAAU;aAAO;YACxE6B,SAASC,QAAQxB;YACjByB,SAAS,CAAC,EAACd,MAAM,EAAC,GAAKV,QAAQ;oBAACD,aAAaA,eAAe;oBAAIW;gBAAM;QACxE;IACF;IAEA,SAASe;QACP,MAAMC,cAAcpC;QACpB,OAAOF,YAAY;YACjBuC,YAAYhB;YACZ,uEAAuE;YACvE,8DAA8D;YAC9DiB,WAAW;gBACT,MAAMF,YAAYG,iBAAiB,CAAC;oBAACR,UAAUzB,UAAUC,GAAG;gBAAA;YAC9D;QACF;IACF;IAEA,SAASiC;QACP,MAAMJ,cAAcpC;QACpB,OAAOF,YAAY;YACjBuC,YAAYT;YACZU,WAAW;gBACT,MAAMF,YAAYG,iBAAiB,CAAC;oBAACR,UAAUzB,UAAUC,GAAG;gBAAA;YAC9D;QACF;IACF;IAEA,OAAO;QAACD;QAAWI;QAASW;QAAKO;QAAQE;QAAcK;QAAgBK;IAAiB;AAC1F"}
1
+ {"version":3,"sources":["../../../src/hooks/api/create-store-api.ts"],"sourcesContent":["import {SECRETS_MAX_LIST_LIMIT} from '@shipfox/api-secrets-dto';\nimport {\n checkedApiRequest,\n emptyResponseSchema,\n type StandardSchema,\n type StandardSchemaOutput,\n} from '@shipfox/client-api';\nimport {\n type FetchQueryOptions,\n queryOptions,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport {\n type DeleteStoreCommand,\n type PutStoreCommand,\n projectIdFromScope,\n type StoreScope,\n type StoreWriteWarning,\n workspaceStoreScope,\n} from '#core/store.js';\n\ntype StoreApiConfig<\n TListItem,\n TPutItem,\n TListSchema extends StandardSchema,\n TPutSchema extends StandardSchema,\n> = {\n resource: 'secrets' | 'variables';\n listResponseSchema: TListSchema;\n putResponseSchema: TPutSchema;\n toListItems: (response: StandardSchemaOutput<TListSchema>) => TListItem[];\n toPutResult: (response: StandardSchemaOutput<TPutSchema>) => {\n item: TPutItem;\n warnings: StoreWriteWarning[];\n };\n};\n\nexport function createStoreApi<\n TListItem,\n TPutItem,\n TListSchema extends StandardSchema,\n TPutSchema extends StandardSchema,\n>(config: StoreApiConfig<TListItem, TPutItem, TListSchema, TPutSchema>) {\n const {resource} = config;\n const queryKeys = {\n all: [resource] as const,\n list: (workspaceId: string, scope: StoreScope = workspaceStoreScope) =>\n [...queryKeys.all, 'list', workspaceId, scope] as const,\n };\n\n type ListQueryOptions = FetchQueryOptions<\n TListItem[],\n Error,\n TListItem[],\n ReturnType<typeof queryKeys.list>\n >;\n\n function searchForScope(scope: StoreScope, includeLimit = false): string {\n const search = new URLSearchParams();\n if (includeLimit) search.set('limit', String(SECRETS_MAX_LIST_LIMIT));\n const projectId = projectIdFromScope(scope);\n if (projectId) search.set('project_id', projectId);\n return search.toString();\n }\n\n async function listAll(params: {\n workspaceId: string;\n scope?: StoreScope;\n signal?: AbortSignal | undefined;\n }): Promise<TListItem[]> {\n const scope = params.scope ?? workspaceStoreScope;\n const response = await checkedApiRequest(\n config.listResponseSchema,\n `/workspaces/${params.workspaceId}/${resource}?${searchForScope(scope, true)}`,\n {signal: params.signal},\n );\n return config.toListItems(response);\n }\n\n async function put(command: PutStoreCommand) {\n const response = await checkedApiRequest(\n config.putResponseSchema,\n `/workspaces/${command.workspaceId}/${resource}/${encodeURIComponent(command.key)}`,\n {\n method: 'PUT',\n body: {value: command.value, project_id: projectIdFromScope(command.scope)},\n },\n );\n return config.toPutResult(response);\n }\n\n async function remove(command: DeleteStoreCommand): Promise<void> {\n const search = searchForScope(command.scope);\n await checkedApiRequest(\n emptyResponseSchema,\n `/workspaces/${command.workspaceId}/${resource}/${encodeURIComponent(command.key)}${search ? `?${search}` : ''}`,\n {method: 'DELETE'},\n );\n }\n\n function listQueryOptions(\n workspaceId: string,\n scope: StoreScope = workspaceStoreScope,\n ): ListQueryOptions {\n return queryOptions({\n queryKey: queryKeys.list(workspaceId, scope),\n queryFn: ({signal}) => listAll({workspaceId, scope, signal}),\n });\n }\n\n function useListQuery(workspaceId: string | undefined, scope: StoreScope = workspaceStoreScope) {\n return useQuery({...listQueryOptions(workspaceId ?? '', scope), enabled: Boolean(workspaceId)});\n }\n\n function usePutMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: put,\n onSuccess: async () => await queryClient.invalidateQueries({queryKey: queryKeys.all}),\n });\n }\n\n function useDeleteMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: remove,\n onSuccess: async () => await queryClient.invalidateQueries({queryKey: queryKeys.all}),\n });\n }\n\n return {\n queryKeys,\n listAll,\n put,\n remove,\n listQueryOptions,\n useListQuery,\n usePutMutation,\n useDeleteMutation,\n };\n}\n"],"names":["SECRETS_MAX_LIST_LIMIT","checkedApiRequest","emptyResponseSchema","queryOptions","useMutation","useQuery","useQueryClient","projectIdFromScope","workspaceStoreScope","createStoreApi","config","resource","queryKeys","all","list","workspaceId","scope","searchForScope","includeLimit","search","URLSearchParams","set","String","projectId","toString","listAll","params","response","listResponseSchema","signal","toListItems","put","command","putResponseSchema","encodeURIComponent","key","method","body","value","project_id","toPutResult","remove","listQueryOptions","queryKey","queryFn","useListQuery","enabled","Boolean","usePutMutation","queryClient","mutationFn","onSuccess","invalidateQueries","useDeleteMutation"],"mappings":"AAAA,SAAQA,sBAAsB,QAAO,2BAA2B;AAChE,SACEC,iBAAiB,EACjBC,mBAAmB,QAGd,sBAAsB;AAC7B,SAEEC,YAAY,EACZC,WAAW,EACXC,QAAQ,EACRC,cAAc,QACT,wBAAwB;AAC/B,SAGEC,kBAAkB,EAGlBC,mBAAmB,QACd,iBAAiB;AAkBxB,OAAO,SAASC,eAKdC,MAAoE;IACpE,MAAM,EAACC,QAAQ,EAAC,GAAGD;IACnB,MAAME,YAAY;QAChBC,KAAK;YAACF;SAAS;QACfG,MAAM,CAACC,aAAqBC,QAAoBR,mBAAmB,GACjE;mBAAII,UAAUC,GAAG;gBAAE;gBAAQE;gBAAaC;aAAM;IAClD;IASA,SAASC,eAAeD,KAAiB,EAAEE,eAAe,KAAK;QAC7D,MAAMC,SAAS,IAAIC;QACnB,IAAIF,cAAcC,OAAOE,GAAG,CAAC,SAASC,OAAOtB;QAC7C,MAAMuB,YAAYhB,mBAAmBS;QACrC,IAAIO,WAAWJ,OAAOE,GAAG,CAAC,cAAcE;QACxC,OAAOJ,OAAOK,QAAQ;IACxB;IAEA,eAAeC,QAAQC,MAItB;QACC,MAAMV,QAAQU,OAAOV,KAAK,IAAIR;QAC9B,MAAMmB,WAAW,MAAM1B,kBACrBS,OAAOkB,kBAAkB,EACzB,CAAC,YAAY,EAAEF,OAAOX,WAAW,CAAC,CAAC,EAAEJ,SAAS,CAAC,EAAEM,eAAeD,OAAO,OAAO,EAC9E;YAACa,QAAQH,OAAOG,MAAM;QAAA;QAExB,OAAOnB,OAAOoB,WAAW,CAACH;IAC5B;IAEA,eAAeI,IAAIC,OAAwB;QACzC,MAAML,WAAW,MAAM1B,kBACrBS,OAAOuB,iBAAiB,EACxB,CAAC,YAAY,EAAED,QAAQjB,WAAW,CAAC,CAAC,EAAEJ,SAAS,CAAC,EAAEuB,mBAAmBF,QAAQG,GAAG,GAAG,EACnF;YACEC,QAAQ;YACRC,MAAM;gBAACC,OAAON,QAAQM,KAAK;gBAAEC,YAAYhC,mBAAmByB,QAAQhB,KAAK;YAAC;QAC5E;QAEF,OAAON,OAAO8B,WAAW,CAACb;IAC5B;IAEA,eAAec,OAAOT,OAA2B;QAC/C,MAAMb,SAASF,eAAee,QAAQhB,KAAK;QAC3C,MAAMf,kBACJC,qBACA,CAAC,YAAY,EAAE8B,QAAQjB,WAAW,CAAC,CAAC,EAAEJ,SAAS,CAAC,EAAEuB,mBAAmBF,QAAQG,GAAG,IAAIhB,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,IAAI,EAChH;YAACiB,QAAQ;QAAQ;IAErB;IAEA,SAASM,iBACP3B,WAAmB,EACnBC,QAAoBR,mBAAmB;QAEvC,OAAOL,aAAa;YAClBwC,UAAU/B,UAAUE,IAAI,CAACC,aAAaC;YACtC4B,SAAS,CAAC,EAACf,MAAM,EAAC,GAAKJ,QAAQ;oBAACV;oBAAaC;oBAAOa;gBAAM;QAC5D;IACF;IAEA,SAASgB,aAAa9B,WAA+B,EAAEC,QAAoBR,mBAAmB;QAC5F,OAAOH,SAAS;YAAC,GAAGqC,iBAAiB3B,eAAe,IAAIC,MAAM;YAAE8B,SAASC,QAAQhC;QAAY;IAC/F;IAEA,SAASiC;QACP,MAAMC,cAAc3C;QACpB,OAAOF,YAAY;YACjB8C,YAAYnB;YACZoB,WAAW,UAAY,MAAMF,YAAYG,iBAAiB,CAAC;oBAACT,UAAU/B,UAAUC,GAAG;gBAAA;QACrF;IACF;IAEA,SAASwC;QACP,MAAMJ,cAAc3C;QACpB,OAAOF,YAAY;YACjB8C,YAAYT;YACZU,WAAW,UAAY,MAAMF,YAAYG,iBAAiB,CAAC;oBAACT,UAAU/B,UAAUC,GAAG;gBAAA;QACrF;IACF;IAEA,OAAO;QACLD;QACAa;QACAM;QACAU;QACAC;QACAG;QACAG;QACAK;IACF;AACF"}
@@ -1,61 +1,22 @@
1
1
  export declare const secretsQueryKeys: {
2
- all: readonly [string];
3
- list: (workspaceId: string) => readonly [string, "list", string];
2
+ all: readonly ["secrets" | "variables"];
3
+ list: (workspaceId: string, scope?: import("../../core/store.js").StoreScope) => readonly ["secrets" | "variables", "list", string, import("../../core/store.js").StoreScope];
4
4
  };
5
5
  export declare const listSecrets: (params: {
6
6
  workspaceId: string;
7
- projectId?: string | undefined;
7
+ scope?: import("../../core/store.js").StoreScope;
8
8
  signal?: AbortSignal | undefined;
9
- }) => Promise<{
10
- key: string;
11
- project_id: string | null;
12
- created_at: string;
13
- updated_at: string;
14
- last_edited_by: string | null;
15
- }[]>;
16
- export declare const putSecret: (params: {
17
- workspaceId: string;
18
- key: string;
19
- body: {
20
- value: string;
21
- project_id?: string | undefined;
22
- };
23
- }) => Promise<import("./create-store-api.js").PutResult<{
24
- key: string;
25
- project_id: string | null;
26
- created_at: string;
27
- updated_at: string;
28
- last_edited_by: string | null;
29
- }>>;
30
- export declare const deleteSecret: (params: {
31
- workspaceId: string;
32
- key: string;
33
- projectId?: string | undefined;
34
- }) => Promise<void>;
35
- export declare const useSecretsQuery: (workspaceId: string | undefined) => import("@tanstack/react-query").UseQueryResult<NoInfer<{
36
- key: string;
37
- project_id: string | null;
38
- created_at: string;
39
- updated_at: string;
40
- last_edited_by: string | null;
41
- }[]>, Error>;
42
- export declare const usePutSecretMutation: () => import("@tanstack/react-query").UseMutationResult<import("./create-store-api.js").PutResult<{
43
- key: string;
44
- project_id: string | null;
45
- created_at: string;
46
- updated_at: string;
47
- last_edited_by: string | null;
48
- }>, Error, {
49
- workspaceId: string;
50
- key: string;
51
- body: {
52
- value: string;
53
- project_id?: string | undefined;
54
- };
55
- }, unknown>;
56
- export declare const useDeleteSecretMutation: () => import("@tanstack/react-query").UseMutationResult<void, Error, {
57
- workspaceId: string;
58
- key: string;
59
- projectId?: string | undefined;
60
- }, unknown>;
9
+ }) => Promise<import("../../core/store.js").StoreMetadata[]>;
10
+ export declare const putSecret: (command: import("../../core/store.js").PutStoreCommand) => Promise<{
11
+ item: import("../../core/store.js").StoreMetadata;
12
+ warnings: import("../../core/store.js").StoreWriteWarning[];
13
+ }>;
14
+ export declare const deleteSecret: (command: import("../../core/store.js").DeleteStoreCommand) => Promise<void>;
15
+ export declare const listSecretsQueryOptions: (workspaceId: string, scope?: import("../../core/store.js").StoreScope) => import("@tanstack/react-query").FetchQueryOptions<import("../../core/store.js").StoreMetadata[], Error, import("../../core/store.js").StoreMetadata[], readonly ["secrets" | "variables", "list", string, import("../../core/store.js").StoreScope], never>;
16
+ export declare const useSecretsQuery: (workspaceId: string | undefined, scope?: import("../../core/store.js").StoreScope) => import("@tanstack/react-query").UseQueryResult<NoInfer<import("../../core/store.js").StoreMetadata[]>, Error>;
17
+ export declare const usePutSecretMutation: () => import("@tanstack/react-query").UseMutationResult<{
18
+ item: import("../../core/store.js").StoreMetadata;
19
+ warnings: import("../../core/store.js").StoreWriteWarning[];
20
+ }, Error, import("../../core/store.js").PutStoreCommand, unknown>;
21
+ export declare const useDeleteSecretMutation: () => import("@tanstack/react-query").UseMutationResult<void, Error, import("../../core/store.js").DeleteStoreCommand, unknown>;
61
22
  //# sourceMappingURL=secrets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/secrets.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,gBAAgB;;;CAAuB,CAAC;AACrD,eAAO,MAAM,WAAW;;;;;;;;;;IAAqB,CAAC;AAC9C,eAAO,MAAM,SAAS;;;;;;;;;;;;;GAAiB,CAAC;AACxC,eAAO,MAAM,YAAY;;;;mBAAoB,CAAC;AAC9C,eAAO,MAAM,eAAe;;;;;;YAA0B,CAAC;AACvD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;WAA4B,CAAC;AAC9D,eAAO,MAAM,uBAAuB;;;;WAA+B,CAAC"}
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/secrets.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,gBAAgB;;;CAAuB,CAAC;AACrD,eAAO,MAAM,WAAW;;;;4DAAqB,CAAC;AAC9C,eAAO,MAAM,SAAS;;;EAAiB,CAAC;AACxC,eAAO,MAAM,YAAY,8EAAoB,CAAC;AAC9C,eAAO,MAAM,uBAAuB,wUAA8B,CAAC;AACnE,eAAO,MAAM,eAAe,sMAA0B,CAAC;AACvD,eAAO,MAAM,oBAAoB;;;iEAA4B,CAAC;AAC9D,eAAO,MAAM,uBAAuB,iIAA+B,CAAC"}
@@ -1,13 +1,21 @@
1
+ import { listSecretsResponseSchema, putSecretResponseSchema } from '@shipfox/api-secrets-dto';
1
2
  import { createStoreApi } from './create-store-api.js';
3
+ import { toSecretMetadata, toStoreWriteWarnings } from './store-mapper.js';
2
4
  const secretsApi = createStoreApi({
3
5
  resource: 'secrets',
4
- listItems: (response)=>response.secrets,
5
- putItem: (response)=>response.secret
6
+ listResponseSchema: listSecretsResponseSchema,
7
+ putResponseSchema: putSecretResponseSchema,
8
+ toListItems: (response)=>response.secrets.map(toSecretMetadata),
9
+ toPutResult: (response)=>({
10
+ item: toSecretMetadata(response.secret),
11
+ warnings: toStoreWriteWarnings(response.warnings)
12
+ })
6
13
  });
7
14
  export const secretsQueryKeys = secretsApi.queryKeys;
8
15
  export const listSecrets = secretsApi.listAll;
9
16
  export const putSecret = secretsApi.put;
10
17
  export const deleteSecret = secretsApi.remove;
18
+ export const listSecretsQueryOptions = secretsApi.listQueryOptions;
11
19
  export const useSecretsQuery = secretsApi.useListQuery;
12
20
  export const usePutSecretMutation = secretsApi.usePutMutation;
13
21
  export const useDeleteSecretMutation = secretsApi.useDeleteMutation;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/secrets.ts"],"sourcesContent":["import type {\n ListSecretsResponseDto,\n PutSecretBodyDto,\n PutSecretResponseDto,\n SecretDto,\n} from '@shipfox/api-secrets-dto';\nimport {createStoreApi} from './create-store-api.js';\n\nconst secretsApi = createStoreApi<\n SecretDto,\n ListSecretsResponseDto,\n PutSecretBodyDto,\n PutSecretResponseDto\n>({\n resource: 'secrets',\n listItems: (response) => response.secrets,\n putItem: (response) => response.secret,\n});\n\nexport const secretsQueryKeys = secretsApi.queryKeys;\nexport const listSecrets = secretsApi.listAll;\nexport const putSecret = secretsApi.put;\nexport const deleteSecret = secretsApi.remove;\nexport const useSecretsQuery = secretsApi.useListQuery;\nexport const usePutSecretMutation = secretsApi.usePutMutation;\nexport const useDeleteSecretMutation = secretsApi.useDeleteMutation;\n"],"names":["createStoreApi","secretsApi","resource","listItems","response","secrets","putItem","secret","secretsQueryKeys","queryKeys","listSecrets","listAll","putSecret","put","deleteSecret","remove","useSecretsQuery","useListQuery","usePutSecretMutation","usePutMutation","useDeleteSecretMutation","useDeleteMutation"],"mappings":"AAMA,SAAQA,cAAc,QAAO,wBAAwB;AAErD,MAAMC,aAAaD,eAKjB;IACAE,UAAU;IACVC,WAAW,CAACC,WAAaA,SAASC,OAAO;IACzCC,SAAS,CAACF,WAAaA,SAASG,MAAM;AACxC;AAEA,OAAO,MAAMC,mBAAmBP,WAAWQ,SAAS,CAAC;AACrD,OAAO,MAAMC,cAAcT,WAAWU,OAAO,CAAC;AAC9C,OAAO,MAAMC,YAAYX,WAAWY,GAAG,CAAC;AACxC,OAAO,MAAMC,eAAeb,WAAWc,MAAM,CAAC;AAC9C,OAAO,MAAMC,kBAAkBf,WAAWgB,YAAY,CAAC;AACvD,OAAO,MAAMC,uBAAuBjB,WAAWkB,cAAc,CAAC;AAC9D,OAAO,MAAMC,0BAA0BnB,WAAWoB,iBAAiB,CAAC"}
1
+ {"version":3,"sources":["../../../src/hooks/api/secrets.ts"],"sourcesContent":["import {listSecretsResponseSchema, putSecretResponseSchema} from '@shipfox/api-secrets-dto';\nimport {createStoreApi} from './create-store-api.js';\nimport {toSecretMetadata, toStoreWriteWarnings} from './store-mapper.js';\n\nconst secretsApi = createStoreApi({\n resource: 'secrets',\n listResponseSchema: listSecretsResponseSchema,\n putResponseSchema: putSecretResponseSchema,\n toListItems: (response) => response.secrets.map(toSecretMetadata),\n toPutResult: (response) => ({\n item: toSecretMetadata(response.secret),\n warnings: toStoreWriteWarnings(response.warnings),\n }),\n});\n\nexport const secretsQueryKeys = secretsApi.queryKeys;\nexport const listSecrets = secretsApi.listAll;\nexport const putSecret = secretsApi.put;\nexport const deleteSecret = secretsApi.remove;\nexport const listSecretsQueryOptions = secretsApi.listQueryOptions;\nexport const useSecretsQuery = secretsApi.useListQuery;\nexport const usePutSecretMutation = secretsApi.usePutMutation;\nexport const useDeleteSecretMutation = secretsApi.useDeleteMutation;\n"],"names":["listSecretsResponseSchema","putSecretResponseSchema","createStoreApi","toSecretMetadata","toStoreWriteWarnings","secretsApi","resource","listResponseSchema","putResponseSchema","toListItems","response","secrets","map","toPutResult","item","secret","warnings","secretsQueryKeys","queryKeys","listSecrets","listAll","putSecret","put","deleteSecret","remove","listSecretsQueryOptions","listQueryOptions","useSecretsQuery","useListQuery","usePutSecretMutation","usePutMutation","useDeleteSecretMutation","useDeleteMutation"],"mappings":"AAAA,SAAQA,yBAAyB,EAAEC,uBAAuB,QAAO,2BAA2B;AAC5F,SAAQC,cAAc,QAAO,wBAAwB;AACrD,SAAQC,gBAAgB,EAAEC,oBAAoB,QAAO,oBAAoB;AAEzE,MAAMC,aAAaH,eAAe;IAChCI,UAAU;IACVC,oBAAoBP;IACpBQ,mBAAmBP;IACnBQ,aAAa,CAACC,WAAaA,SAASC,OAAO,CAACC,GAAG,CAACT;IAChDU,aAAa,CAACH,WAAc,CAAA;YAC1BI,MAAMX,iBAAiBO,SAASK,MAAM;YACtCC,UAAUZ,qBAAqBM,SAASM,QAAQ;QAClD,CAAA;AACF;AAEA,OAAO,MAAMC,mBAAmBZ,WAAWa,SAAS,CAAC;AACrD,OAAO,MAAMC,cAAcd,WAAWe,OAAO,CAAC;AAC9C,OAAO,MAAMC,YAAYhB,WAAWiB,GAAG,CAAC;AACxC,OAAO,MAAMC,eAAelB,WAAWmB,MAAM,CAAC;AAC9C,OAAO,MAAMC,0BAA0BpB,WAAWqB,gBAAgB,CAAC;AACnE,OAAO,MAAMC,kBAAkBtB,WAAWuB,YAAY,CAAC;AACvD,OAAO,MAAMC,uBAAuBxB,WAAWyB,cAAc,CAAC;AAC9D,OAAO,MAAMC,0BAA0B1B,WAAW2B,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SecretDto, SecretWriteWarningDto, VariableDto, VariableListItemDto } from '@shipfox/api-secrets-dto';
2
+ import type { SecretMetadata, StoreWriteWarning, Variable, VariablePreview } from '#core/store.js';
3
+ export declare function toSecretMetadata(secret: SecretDto): SecretMetadata;
4
+ export declare function toVariablePreview(variable: VariableListItemDto): VariablePreview;
5
+ export declare function toVariable(variable: VariableDto): Variable;
6
+ export declare function toStoreWriteWarnings(warnings: readonly SecretWriteWarningDto[]): StoreWriteWarning[];
7
+ //# sourceMappingURL=store-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/store-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,cAAc,EAEd,iBAAiB,EACjB,QAAQ,EACR,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAaxB,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc,CAElE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,eAAe,CAOhF;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,QAAQ,CAE1D;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,GACzC,iBAAiB,EAAE,CAErB"}
@@ -0,0 +1,36 @@
1
+ import { scopeFromProjectId } from '#core/store.js';
2
+ function toStoreMetadata(item) {
3
+ return {
4
+ key: item.key,
5
+ scope: scopeFromProjectId(item.project_id),
6
+ createdAt: item.created_at,
7
+ updatedAt: item.updated_at,
8
+ lastEditedBy: item.last_edited_by
9
+ };
10
+ }
11
+ export function toSecretMetadata(secret) {
12
+ return toStoreMetadata(secret);
13
+ }
14
+ export function toVariablePreview(variable) {
15
+ return {
16
+ ...toStoreMetadata(variable),
17
+ value: variable.value,
18
+ valueState: 'preview',
19
+ valueTruncated: variable.value_truncated
20
+ };
21
+ }
22
+ export function toVariable(variable) {
23
+ return {
24
+ ...toStoreMetadata(variable),
25
+ value: variable.value,
26
+ valueState: 'full'
27
+ };
28
+ }
29
+ export function toStoreWriteWarnings(warnings) {
30
+ return warnings.map((warning)=>({
31
+ code: warning.code,
32
+ key: warning.key
33
+ }));
34
+ }
35
+
36
+ //# sourceMappingURL=store-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/api/store-mapper.ts"],"sourcesContent":["import type {\n SecretDto,\n SecretWriteWarningDto,\n VariableDto,\n VariableListItemDto,\n} from '@shipfox/api-secrets-dto';\nimport type {\n SecretMetadata,\n StoreMetadata,\n StoreWriteWarning,\n Variable,\n VariablePreview,\n} from '#core/store.js';\nimport {scopeFromProjectId} from '#core/store.js';\n\nfunction toStoreMetadata(item: SecretDto): StoreMetadata {\n return {\n key: item.key,\n scope: scopeFromProjectId(item.project_id),\n createdAt: item.created_at,\n updatedAt: item.updated_at,\n lastEditedBy: item.last_edited_by,\n };\n}\n\nexport function toSecretMetadata(secret: SecretDto): SecretMetadata {\n return toStoreMetadata(secret);\n}\n\nexport function toVariablePreview(variable: VariableListItemDto): VariablePreview {\n return {\n ...toStoreMetadata(variable),\n value: variable.value,\n valueState: 'preview',\n valueTruncated: variable.value_truncated,\n };\n}\n\nexport function toVariable(variable: VariableDto): Variable {\n return {...toStoreMetadata(variable), value: variable.value, valueState: 'full'};\n}\n\nexport function toStoreWriteWarnings(\n warnings: readonly SecretWriteWarningDto[],\n): StoreWriteWarning[] {\n return warnings.map((warning) => ({code: warning.code, key: warning.key}));\n}\n"],"names":["scopeFromProjectId","toStoreMetadata","item","key","scope","project_id","createdAt","created_at","updatedAt","updated_at","lastEditedBy","last_edited_by","toSecretMetadata","secret","toVariablePreview","variable","value","valueState","valueTruncated","value_truncated","toVariable","toStoreWriteWarnings","warnings","map","warning","code"],"mappings":"AAaA,SAAQA,kBAAkB,QAAO,iBAAiB;AAElD,SAASC,gBAAgBC,IAAe;IACtC,OAAO;QACLC,KAAKD,KAAKC,GAAG;QACbC,OAAOJ,mBAAmBE,KAAKG,UAAU;QACzCC,WAAWJ,KAAKK,UAAU;QAC1BC,WAAWN,KAAKO,UAAU;QAC1BC,cAAcR,KAAKS,cAAc;IACnC;AACF;AAEA,OAAO,SAASC,iBAAiBC,MAAiB;IAChD,OAAOZ,gBAAgBY;AACzB;AAEA,OAAO,SAASC,kBAAkBC,QAA6B;IAC7D,OAAO;QACL,GAAGd,gBAAgBc,SAAS;QAC5BC,OAAOD,SAASC,KAAK;QACrBC,YAAY;QACZC,gBAAgBH,SAASI,eAAe;IAC1C;AACF;AAEA,OAAO,SAASC,WAAWL,QAAqB;IAC9C,OAAO;QAAC,GAAGd,gBAAgBc,SAAS;QAAEC,OAAOD,SAASC,KAAK;QAAEC,YAAY;IAAM;AACjF;AAEA,OAAO,SAASI,qBACdC,QAA0C;IAE1C,OAAOA,SAASC,GAAG,CAAC,CAACC,UAAa,CAAA;YAACC,MAAMD,QAAQC,IAAI;YAAEtB,KAAKqB,QAAQrB,GAAG;QAAA,CAAA;AACzE"}
@@ -1,88 +1,35 @@
1
- import type { VariableDto } from '@shipfox/api-secrets-dto';
1
+ import { type FetchQueryOptions } from '@tanstack/react-query';
2
+ import { type StoreScope, type Variable } from '#core/store.js';
2
3
  export declare const variablesQueryKeys: {
3
- all: readonly [string];
4
- list: (workspaceId: string) => readonly [string, "list", string];
4
+ all: readonly ["secrets" | "variables"];
5
+ list: (workspaceId: string, scope?: StoreScope) => readonly ["secrets" | "variables", "list", string, StoreScope];
5
6
  };
6
7
  export declare const listVariables: (params: {
7
8
  workspaceId: string;
8
- projectId?: string | undefined;
9
+ scope?: StoreScope;
9
10
  signal?: AbortSignal | undefined;
10
- }) => Promise<{
11
- key: string;
12
- project_id: string | null;
13
- created_at: string;
14
- updated_at: string;
15
- last_edited_by: string | null;
16
- value: string;
17
- value_truncated: boolean;
18
- }[]>;
19
- export declare const putVariable: (params: {
20
- workspaceId: string;
21
- key: string;
22
- body: {
23
- value: string;
24
- project_id?: string | undefined;
25
- };
26
- }) => Promise<import("./create-store-api.js").PutResult<{
27
- key: string;
28
- project_id: string | null;
29
- created_at: string;
30
- updated_at: string;
31
- last_edited_by: string | null;
32
- value: string;
33
- value_truncated: boolean;
34
- }>>;
35
- export declare const deleteVariable: (params: {
36
- workspaceId: string;
37
- key: string;
38
- projectId?: string | undefined;
39
- }) => Promise<void>;
40
- export declare const useVariablesQuery: (workspaceId: string | undefined) => import("@tanstack/react-query").UseQueryResult<NoInfer<{
41
- key: string;
42
- project_id: string | null;
43
- created_at: string;
44
- updated_at: string;
45
- last_edited_by: string | null;
46
- value: string;
47
- value_truncated: boolean;
48
- }[]>, Error>;
49
- export declare const usePutVariableMutation: () => import("@tanstack/react-query").UseMutationResult<import("./create-store-api.js").PutResult<{
50
- key: string;
51
- project_id: string | null;
52
- created_at: string;
53
- updated_at: string;
54
- last_edited_by: string | null;
55
- value: string;
56
- value_truncated: boolean;
57
- }>, Error, {
58
- workspaceId: string;
59
- key: string;
60
- body: {
61
- value: string;
62
- project_id?: string | undefined;
63
- };
64
- }, unknown>;
65
- export declare const useDeleteVariableMutation: () => import("@tanstack/react-query").UseMutationResult<void, Error, {
66
- workspaceId: string;
67
- key: string;
68
- projectId?: string | undefined;
69
- }, unknown>;
70
- /**
71
- * Reads a single variable including its full value. The list only returns a
72
- * bounded preview, so editing a truncated variable fetches the full value here.
73
- */
11
+ }) => Promise<import("#core/store.js").VariablePreview[]>;
12
+ export declare const putVariable: (command: import("#core/store.js").PutStoreCommand) => Promise<{
13
+ item: Variable;
14
+ warnings: import("#core/store.js").StoreWriteWarning[];
15
+ }>;
16
+ export declare const deleteVariable: (command: import("#core/store.js").DeleteStoreCommand) => Promise<void>;
17
+ export declare const listVariablesQueryOptions: (workspaceId: string, scope?: StoreScope) => FetchQueryOptions<import("#core/store.js").VariablePreview[], Error, import("#core/store.js").VariablePreview[], readonly ["secrets" | "variables", "list", string, StoreScope], never>;
18
+ export declare const useVariablesQuery: (workspaceId: string | undefined, scope?: StoreScope) => import("@tanstack/react-query").UseQueryResult<NoInfer<import("#core/store.js").VariablePreview[]>, Error>;
19
+ export declare const usePutVariableMutation: () => import("@tanstack/react-query").UseMutationResult<{
20
+ item: Variable;
21
+ warnings: import("#core/store.js").StoreWriteWarning[];
22
+ }, Error, import("#core/store.js").PutStoreCommand, unknown>;
23
+ export declare const useDeleteVariableMutation: () => import("@tanstack/react-query").UseMutationResult<void, Error, import("#core/store.js").DeleteStoreCommand, unknown>;
24
+ export declare const variableQueryKey: (workspaceId: string, key: string, scope: StoreScope) => readonly ["secrets" | "variables", "detail", string, string, StoreScope];
25
+ type VariableQueryOptions = FetchQueryOptions<Variable, Error, Variable, ReturnType<typeof variableQueryKey>>;
74
26
  export declare function getVariable(params: {
75
27
  workspaceId: string;
76
28
  key: string;
77
- projectId?: string | undefined;
29
+ scope?: StoreScope;
78
30
  signal?: AbortSignal | undefined;
79
- }): Promise<VariableDto>;
80
- export declare function useVariableQuery(workspaceId: string, key: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
81
- key: string;
82
- project_id: string | null;
83
- created_at: string;
84
- updated_at: string;
85
- last_edited_by: string | null;
86
- value: string;
87
- }>, Error>;
31
+ }): Promise<Variable>;
32
+ export declare function variableQueryOptions(workspaceId: string, key: string, scope?: StoreScope): VariableQueryOptions;
33
+ export declare function useVariableQuery(workspaceId: string, key: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<Variable>, Error>;
34
+ export {};
88
35
  //# sourceMappingURL=variables.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/variables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAiBlC,eAAO,MAAM,kBAAkB;;;CAAyB,CAAC;AACzD,eAAO,MAAM,aAAa;;;;;;;;;;;;IAAuB,CAAC;AAClD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;GAAmB,CAAC;AAC5C,eAAO,MAAM,cAAc;;;;mBAAsB,CAAC;AAClD,eAAO,MAAM,iBAAiB;;;;;;;;YAA4B,CAAC;AAC3D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;WAA8B,CAAC;AAClE,eAAO,MAAM,yBAAyB;;;;WAAiC,CAAC;AAExE;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC,GAAG,OAAO,CAAC,WAAW,CAAC,CASvB;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS;;;;;;;WAQ5E"}
1
+ {"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/variables.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,KAAK,iBAAiB,EAAyB,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,QAAQ,EAEd,MAAM,gBAAgB,CAAC;AAexB,eAAO,MAAM,kBAAkB;;;CAAyB,CAAC;AACzD,eAAO,MAAM,aAAa;;;;yDAAuB,CAAC;AAClD,eAAO,MAAM,WAAW;;;EAAmB,CAAC;AAC5C,eAAO,MAAM,cAAc,yEAAsB,CAAC;AAClD,eAAO,MAAM,yBAAyB,sOAAgC,CAAC;AACvE,eAAO,MAAM,iBAAiB,qKAA4B,CAAC;AAC3D,eAAO,MAAM,sBAAsB;;;4DAA8B,CAAC;AAClE,eAAO,MAAM,yBAAyB,4HAAiC,CAAC;AAExE,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,EAAE,KAAK,MAAM,EAAE,OAAO,UAAU,6EACX,CAAC;AAE1E,KAAK,oBAAoB,GAAG,iBAAiB,CAC3C,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,CAAC,OAAO,gBAAgB,CAAC,CACpC,CAAC;AAEF,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC,qBAUA;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,UAAgC,GACtC,oBAAoB,CAKtB;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,4EAE5E"}
@@ -1,52 +1,61 @@
1
- import { apiRequest } from '@shipfox/client-api';
2
- import { useQuery } from '@tanstack/react-query';
1
+ import { getVariableResponseSchema, listVariablesResponseSchema, putVariableResponseSchema } from '@shipfox/api-secrets-dto';
2
+ import { checkedApiRequest } from '@shipfox/client-api';
3
+ import { queryOptions, useQuery } from '@tanstack/react-query';
4
+ import { projectIdFromScope, workspaceStoreScope } from '#core/store.js';
3
5
  import { createStoreApi } from './create-store-api.js';
6
+ import { toStoreWriteWarnings, toVariable, toVariablePreview } from './store-mapper.js';
4
7
  const variablesApi = createStoreApi({
5
8
  resource: 'variables',
6
- listItems: (response)=>response.variables,
7
- // The list carries only a preview; a freshly-written value is the full value.
8
- putItem: (response)=>({
9
- ...response.variable,
10
- value_truncated: false
9
+ listResponseSchema: listVariablesResponseSchema,
10
+ putResponseSchema: putVariableResponseSchema,
11
+ toListItems: (response)=>response.variables.map(toVariablePreview),
12
+ toPutResult: (response)=>({
13
+ item: toVariable(response.variable),
14
+ warnings: toStoreWriteWarnings(response.warnings)
11
15
  })
12
16
  });
13
17
  export const variablesQueryKeys = variablesApi.queryKeys;
14
18
  export const listVariables = variablesApi.listAll;
15
19
  export const putVariable = variablesApi.put;
16
20
  export const deleteVariable = variablesApi.remove;
21
+ export const listVariablesQueryOptions = variablesApi.listQueryOptions;
17
22
  export const useVariablesQuery = variablesApi.useListQuery;
18
23
  export const usePutVariableMutation = variablesApi.usePutMutation;
19
24
  export const useDeleteVariableMutation = variablesApi.useDeleteMutation;
20
- /**
21
- * Reads a single variable including its full value. The list only returns a
22
- * bounded preview, so editing a truncated variable fetches the full value here.
23
- */ export async function getVariable(params) {
24
- const search = params.projectId ? `?${new URLSearchParams({
25
- project_id: params.projectId
25
+ export const variableQueryKey = (workspaceId, key, scope)=>[
26
+ ...variablesQueryKeys.all,
27
+ 'detail',
28
+ workspaceId,
29
+ key,
30
+ scope
31
+ ];
32
+ export async function getVariable(params) {
33
+ const scope = params.scope ?? workspaceStoreScope;
34
+ const projectId = projectIdFromScope(scope);
35
+ const search = projectId ? `?${new URLSearchParams({
36
+ project_id: projectId
26
37
  }).toString()}` : '';
27
- const response = await apiRequest(`/workspaces/${params.workspaceId}/variables/${encodeURIComponent(params.key)}${search}`, {
38
+ const response = await checkedApiRequest(getVariableResponseSchema, `/workspaces/${params.workspaceId}/variables/${encodeURIComponent(params.key)}${search}`, {
28
39
  signal: params.signal
29
40
  });
30
- return response.variable;
41
+ return toVariable(response.variable);
31
42
  }
32
- export function useVariableQuery(workspaceId, key) {
33
- return useQuery({
34
- queryKey: key ? [
35
- ...variablesQueryKeys.all,
36
- 'detail',
37
- workspaceId,
38
- key
39
- ] : [
40
- ...variablesQueryKeys.all,
41
- 'detail'
42
- ],
43
- enabled: Boolean(key),
43
+ export function variableQueryOptions(workspaceId, key, scope = workspaceStoreScope) {
44
+ return queryOptions({
45
+ queryKey: variableQueryKey(workspaceId, key, scope),
44
46
  queryFn: ({ signal })=>getVariable({
45
47
  workspaceId,
46
- key: key ?? '',
48
+ key,
49
+ scope,
47
50
  signal
48
51
  })
49
52
  });
50
53
  }
54
+ export function useVariableQuery(workspaceId, key) {
55
+ return useQuery({
56
+ ...variableQueryOptions(workspaceId, key ?? ''),
57
+ enabled: Boolean(key)
58
+ });
59
+ }
51
60
 
52
61
  //# sourceMappingURL=variables.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/variables.ts"],"sourcesContent":["import type {\n GetVariableResponseDto,\n ListVariablesResponseDto,\n PutVariableBodyDto,\n PutVariableResponseDto,\n VariableDto,\n VariableListItemDto,\n} from '@shipfox/api-secrets-dto';\nimport {apiRequest} from '@shipfox/client-api';\nimport {useQuery} from '@tanstack/react-query';\nimport {createStoreApi} from './create-store-api.js';\n\nconst variablesApi = createStoreApi<\n VariableListItemDto,\n ListVariablesResponseDto,\n PutVariableBodyDto,\n PutVariableResponseDto\n>({\n resource: 'variables',\n listItems: (response) => response.variables,\n // The list carries only a preview; a freshly-written value is the full value.\n putItem: (response) => ({...response.variable, value_truncated: false}),\n});\n\nexport const variablesQueryKeys = variablesApi.queryKeys;\nexport const listVariables = variablesApi.listAll;\nexport const putVariable = variablesApi.put;\nexport const deleteVariable = variablesApi.remove;\nexport const useVariablesQuery = variablesApi.useListQuery;\nexport const usePutVariableMutation = variablesApi.usePutMutation;\nexport const useDeleteVariableMutation = variablesApi.useDeleteMutation;\n\n/**\n * Reads a single variable including its full value. The list only returns a\n * bounded preview, so editing a truncated variable fetches the full value here.\n */\nexport async function getVariable(params: {\n workspaceId: string;\n key: string;\n projectId?: string | undefined;\n signal?: AbortSignal | undefined;\n}): Promise<VariableDto> {\n const search = params.projectId\n ? `?${new URLSearchParams({project_id: params.projectId}).toString()}`\n : '';\n const response = await apiRequest<GetVariableResponseDto>(\n `/workspaces/${params.workspaceId}/variables/${encodeURIComponent(params.key)}${search}`,\n {signal: params.signal},\n );\n return response.variable;\n}\n\nexport function useVariableQuery(workspaceId: string, key: string | undefined) {\n return useQuery({\n queryKey: key\n ? [...variablesQueryKeys.all, 'detail', workspaceId, key]\n : [...variablesQueryKeys.all, 'detail'],\n enabled: Boolean(key),\n queryFn: ({signal}) => getVariable({workspaceId, key: key ?? '', signal}),\n });\n}\n"],"names":["apiRequest","useQuery","createStoreApi","variablesApi","resource","listItems","response","variables","putItem","variable","value_truncated","variablesQueryKeys","queryKeys","listVariables","listAll","putVariable","put","deleteVariable","remove","useVariablesQuery","useListQuery","usePutVariableMutation","usePutMutation","useDeleteVariableMutation","useDeleteMutation","getVariable","params","search","projectId","URLSearchParams","project_id","toString","workspaceId","encodeURIComponent","key","signal","useVariableQuery","queryKey","all","enabled","Boolean","queryFn"],"mappings":"AAQA,SAAQA,UAAU,QAAO,sBAAsB;AAC/C,SAAQC,QAAQ,QAAO,wBAAwB;AAC/C,SAAQC,cAAc,QAAO,wBAAwB;AAErD,MAAMC,eAAeD,eAKnB;IACAE,UAAU;IACVC,WAAW,CAACC,WAAaA,SAASC,SAAS;IAC3C,8EAA8E;IAC9EC,SAAS,CAACF,WAAc,CAAA;YAAC,GAAGA,SAASG,QAAQ;YAAEC,iBAAiB;QAAK,CAAA;AACvE;AAEA,OAAO,MAAMC,qBAAqBR,aAAaS,SAAS,CAAC;AACzD,OAAO,MAAMC,gBAAgBV,aAAaW,OAAO,CAAC;AAClD,OAAO,MAAMC,cAAcZ,aAAaa,GAAG,CAAC;AAC5C,OAAO,MAAMC,iBAAiBd,aAAae,MAAM,CAAC;AAClD,OAAO,MAAMC,oBAAoBhB,aAAaiB,YAAY,CAAC;AAC3D,OAAO,MAAMC,yBAAyBlB,aAAamB,cAAc,CAAC;AAClE,OAAO,MAAMC,4BAA4BpB,aAAaqB,iBAAiB,CAAC;AAExE;;;CAGC,GACD,OAAO,eAAeC,YAAYC,MAKjC;IACC,MAAMC,SAASD,OAAOE,SAAS,GAC3B,CAAC,CAAC,EAAE,IAAIC,gBAAgB;QAACC,YAAYJ,OAAOE,SAAS;IAAA,GAAGG,QAAQ,IAAI,GACpE;IACJ,MAAMzB,WAAW,MAAMN,WACrB,CAAC,YAAY,EAAE0B,OAAOM,WAAW,CAAC,WAAW,EAAEC,mBAAmBP,OAAOQ,GAAG,IAAIP,QAAQ,EACxF;QAACQ,QAAQT,OAAOS,MAAM;IAAA;IAExB,OAAO7B,SAASG,QAAQ;AAC1B;AAEA,OAAO,SAAS2B,iBAAiBJ,WAAmB,EAAEE,GAAuB;IAC3E,OAAOjC,SAAS;QACdoC,UAAUH,MACN;eAAIvB,mBAAmB2B,GAAG;YAAE;YAAUN;YAAaE;SAAI,GACvD;eAAIvB,mBAAmB2B,GAAG;YAAE;SAAS;QACzCC,SAASC,QAAQN;QACjBO,SAAS,CAAC,EAACN,MAAM,EAAC,GAAKV,YAAY;gBAACO;gBAAaE,KAAKA,OAAO;gBAAIC;YAAM;IACzE;AACF"}
1
+ {"version":3,"sources":["../../../src/hooks/api/variables.ts"],"sourcesContent":["import {\n getVariableResponseSchema,\n listVariablesResponseSchema,\n putVariableResponseSchema,\n} from '@shipfox/api-secrets-dto';\nimport {checkedApiRequest} from '@shipfox/client-api';\nimport {type FetchQueryOptions, queryOptions, useQuery} from '@tanstack/react-query';\nimport {\n projectIdFromScope,\n type StoreScope,\n type Variable,\n workspaceStoreScope,\n} from '#core/store.js';\nimport {createStoreApi} from './create-store-api.js';\nimport {toStoreWriteWarnings, toVariable, toVariablePreview} from './store-mapper.js';\n\nconst variablesApi = createStoreApi({\n resource: 'variables',\n listResponseSchema: listVariablesResponseSchema,\n putResponseSchema: putVariableResponseSchema,\n toListItems: (response) => response.variables.map(toVariablePreview),\n toPutResult: (response) => ({\n item: toVariable(response.variable),\n warnings: toStoreWriteWarnings(response.warnings),\n }),\n});\n\nexport const variablesQueryKeys = variablesApi.queryKeys;\nexport const listVariables = variablesApi.listAll;\nexport const putVariable = variablesApi.put;\nexport const deleteVariable = variablesApi.remove;\nexport const listVariablesQueryOptions = variablesApi.listQueryOptions;\nexport const useVariablesQuery = variablesApi.useListQuery;\nexport const usePutVariableMutation = variablesApi.usePutMutation;\nexport const useDeleteVariableMutation = variablesApi.useDeleteMutation;\n\nexport const variableQueryKey = (workspaceId: string, key: string, scope: StoreScope) =>\n [...variablesQueryKeys.all, 'detail', workspaceId, key, scope] as const;\n\ntype VariableQueryOptions = FetchQueryOptions<\n Variable,\n Error,\n Variable,\n ReturnType<typeof variableQueryKey>\n>;\n\nexport async function getVariable(params: {\n workspaceId: string;\n key: string;\n scope?: StoreScope;\n signal?: AbortSignal | undefined;\n}) {\n const scope = params.scope ?? workspaceStoreScope;\n const projectId = projectIdFromScope(scope);\n const search = projectId ? `?${new URLSearchParams({project_id: projectId}).toString()}` : '';\n const response = await checkedApiRequest(\n getVariableResponseSchema,\n `/workspaces/${params.workspaceId}/variables/${encodeURIComponent(params.key)}${search}`,\n {signal: params.signal},\n );\n return toVariable(response.variable);\n}\n\nexport function variableQueryOptions(\n workspaceId: string,\n key: string,\n scope: StoreScope = workspaceStoreScope,\n): VariableQueryOptions {\n return queryOptions({\n queryKey: variableQueryKey(workspaceId, key, scope),\n queryFn: ({signal}) => getVariable({workspaceId, key, scope, signal}),\n });\n}\n\nexport function useVariableQuery(workspaceId: string, key: string | undefined) {\n return useQuery({...variableQueryOptions(workspaceId, key ?? ''), enabled: Boolean(key)});\n}\n"],"names":["getVariableResponseSchema","listVariablesResponseSchema","putVariableResponseSchema","checkedApiRequest","queryOptions","useQuery","projectIdFromScope","workspaceStoreScope","createStoreApi","toStoreWriteWarnings","toVariable","toVariablePreview","variablesApi","resource","listResponseSchema","putResponseSchema","toListItems","response","variables","map","toPutResult","item","variable","warnings","variablesQueryKeys","queryKeys","listVariables","listAll","putVariable","put","deleteVariable","remove","listVariablesQueryOptions","listQueryOptions","useVariablesQuery","useListQuery","usePutVariableMutation","usePutMutation","useDeleteVariableMutation","useDeleteMutation","variableQueryKey","workspaceId","key","scope","all","getVariable","params","projectId","search","URLSearchParams","project_id","toString","encodeURIComponent","signal","variableQueryOptions","queryKey","queryFn","useVariableQuery","enabled","Boolean"],"mappings":"AAAA,SACEA,yBAAyB,EACzBC,2BAA2B,EAC3BC,yBAAyB,QACpB,2BAA2B;AAClC,SAAQC,iBAAiB,QAAO,sBAAsB;AACtD,SAAgCC,YAAY,EAAEC,QAAQ,QAAO,wBAAwB;AACrF,SACEC,kBAAkB,EAGlBC,mBAAmB,QACd,iBAAiB;AACxB,SAAQC,cAAc,QAAO,wBAAwB;AACrD,SAAQC,oBAAoB,EAAEC,UAAU,EAAEC,iBAAiB,QAAO,oBAAoB;AAEtF,MAAMC,eAAeJ,eAAe;IAClCK,UAAU;IACVC,oBAAoBb;IACpBc,mBAAmBb;IACnBc,aAAa,CAACC,WAAaA,SAASC,SAAS,CAACC,GAAG,CAACR;IAClDS,aAAa,CAACH,WAAc,CAAA;YAC1BI,MAAMX,WAAWO,SAASK,QAAQ;YAClCC,UAAUd,qBAAqBQ,SAASM,QAAQ;QAClD,CAAA;AACF;AAEA,OAAO,MAAMC,qBAAqBZ,aAAaa,SAAS,CAAC;AACzD,OAAO,MAAMC,gBAAgBd,aAAae,OAAO,CAAC;AAClD,OAAO,MAAMC,cAAchB,aAAaiB,GAAG,CAAC;AAC5C,OAAO,MAAMC,iBAAiBlB,aAAamB,MAAM,CAAC;AAClD,OAAO,MAAMC,4BAA4BpB,aAAaqB,gBAAgB,CAAC;AACvE,OAAO,MAAMC,oBAAoBtB,aAAauB,YAAY,CAAC;AAC3D,OAAO,MAAMC,yBAAyBxB,aAAayB,cAAc,CAAC;AAClE,OAAO,MAAMC,4BAA4B1B,aAAa2B,iBAAiB,CAAC;AAExE,OAAO,MAAMC,mBAAmB,CAACC,aAAqBC,KAAaC,QACjE;WAAInB,mBAAmBoB,GAAG;QAAE;QAAUH;QAAaC;QAAKC;KAAM,CAAU;AAS1E,OAAO,eAAeE,YAAYC,MAKjC;IACC,MAAMH,QAAQG,OAAOH,KAAK,IAAIpC;IAC9B,MAAMwC,YAAYzC,mBAAmBqC;IACrC,MAAMK,SAASD,YAAY,CAAC,CAAC,EAAE,IAAIE,gBAAgB;QAACC,YAAYH;IAAS,GAAGI,QAAQ,IAAI,GAAG;IAC3F,MAAMlC,WAAW,MAAMd,kBACrBH,2BACA,CAAC,YAAY,EAAE8C,OAAOL,WAAW,CAAC,WAAW,EAAEW,mBAAmBN,OAAOJ,GAAG,IAAIM,QAAQ,EACxF;QAACK,QAAQP,OAAOO,MAAM;IAAA;IAExB,OAAO3C,WAAWO,SAASK,QAAQ;AACrC;AAEA,OAAO,SAASgC,qBACdb,WAAmB,EACnBC,GAAW,EACXC,QAAoBpC,mBAAmB;IAEvC,OAAOH,aAAa;QAClBmD,UAAUf,iBAAiBC,aAAaC,KAAKC;QAC7Ca,SAAS,CAAC,EAACH,MAAM,EAAC,GAAKR,YAAY;gBAACJ;gBAAaC;gBAAKC;gBAAOU;YAAM;IACrE;AACF;AAEA,OAAO,SAASI,iBAAiBhB,WAAmB,EAAEC,GAAuB;IAC3E,OAAOrC,SAAS;QAAC,GAAGiD,qBAAqBb,aAAaC,OAAO,GAAG;QAAEgB,SAASC,QAAQjB;IAAI;AACzF"}
@@ -0,0 +1,5 @@
1
+ declare const _default: import("@shipfox/client-shell/runtime").RouteImpl<{
2
+ readonly component: () => import("react").JSX.Element;
3
+ }>;
4
+ export default _default;
5
+ //# sourceMappingURL=secrets-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-settings.d.ts","sourceRoot":"","sources":["../../src/routes/secrets-settings.tsx"],"names":[],"mappings":";;;AAGA,wBAEG"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { defineRoute, useActiveWorkspace } from '@shipfox/client-shell/runtime';
3
+ import { WorkspaceSecretsSection } from '#index.js';
4
+ export default defineRoute({
5
+ component: ()=>/*#__PURE__*/ _jsx(WorkspaceSecretsSection, {
6
+ workspaceId: useActiveWorkspace().id
7
+ })
8
+ });
9
+
10
+ //# sourceMappingURL=secrets-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/routes/secrets-settings.tsx"],"sourcesContent":["import {defineRoute, useActiveWorkspace} from '@shipfox/client-shell/runtime';\nimport {WorkspaceSecretsSection} from '#index.js';\n\nexport default defineRoute({\n component: () => <WorkspaceSecretsSection workspaceId={useActiveWorkspace().id} />,\n});\n"],"names":["defineRoute","useActiveWorkspace","WorkspaceSecretsSection","component","workspaceId","id"],"mappings":";AAAA,SAAQA,WAAW,EAAEC,kBAAkB,QAAO,gCAAgC;AAC9E,SAAQC,uBAAuB,QAAO,YAAY;AAElD,eAAeF,YAAY;IACzBG,WAAW,kBAAM,KAACD;YAAwBE,aAAaH,qBAAqBI,EAAE;;AAChF,GAAG"}
@@ -0,0 +1,5 @@
1
+ declare const _default: import("@shipfox/client-shell/runtime").RouteImpl<{
2
+ readonly component: () => import("react").JSX.Element;
3
+ }>;
4
+ export default _default;
5
+ //# sourceMappingURL=variables-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables-settings.d.ts","sourceRoot":"","sources":["../../src/routes/variables-settings.tsx"],"names":[],"mappings":";;;AAGA,wBAEG"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { defineRoute, useActiveWorkspace } from '@shipfox/client-shell/runtime';
3
+ import { WorkspaceVariablesSection } from '#index.js';
4
+ export default defineRoute({
5
+ component: ()=>/*#__PURE__*/ _jsx(WorkspaceVariablesSection, {
6
+ workspaceId: useActiveWorkspace().id
7
+ })
8
+ });
9
+
10
+ //# sourceMappingURL=variables-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/routes/variables-settings.tsx"],"sourcesContent":["import {defineRoute, useActiveWorkspace} from '@shipfox/client-shell/runtime';\nimport {WorkspaceVariablesSection} from '#index.js';\n\nexport default defineRoute({\n component: () => <WorkspaceVariablesSection workspaceId={useActiveWorkspace().id} />,\n});\n"],"names":["defineRoute","useActiveWorkspace","WorkspaceVariablesSection","component","workspaceId","id"],"mappings":";AAAA,SAAQA,WAAW,EAAEC,kBAAkB,QAAO,gCAAgC;AAC9E,SAAQC,yBAAyB,QAAO,YAAY;AAEpD,eAAeF,YAAY;IACzBG,WAAW,kBAAM,KAACD;YAA0BE,aAAaH,qBAAqBI,EAAE;;AAClF,GAAG"}