@shipfox/client-secrets 5.0.0 → 6.0.2

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 (72) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +49 -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 +13 -0
  27. package/dist/feature.d.ts.map +1 -1
  28. package/dist/feature.js +17 -16
  29. package/dist/feature.js.map +1 -1
  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/tsconfig.test.tsbuildinfo +1 -1
  47. package/package.json +9 -10
  48. package/src/components/form-errors.test.ts +2 -2
  49. package/src/components/form-errors.ts +0 -3
  50. package/src/components/secret-form.tsx +15 -5
  51. package/src/components/variable-form.tsx +15 -5
  52. package/src/components/workspace-secrets-section.stories.tsx +1 -2
  53. package/src/components/workspace-secrets-section.tsx +8 -4
  54. package/src/components/workspace-variables-section.stories.tsx +1 -2
  55. package/src/components/workspace-variables-section.tsx +10 -6
  56. package/src/core/store.test.ts +38 -0
  57. package/src/core/store.ts +91 -0
  58. package/src/feature.ts +13 -11
  59. package/src/hooks/api/create-store-api.ts +104 -75
  60. package/src/hooks/api/secrets.test.ts +16 -10
  61. package/src/hooks/api/secrets.ts +11 -14
  62. package/src/hooks/api/store-mapper.test.ts +39 -0
  63. package/src/hooks/api/store-mapper.ts +47 -0
  64. package/src/hooks/api/variables.ts +52 -36
  65. package/tsconfig.build.tsbuildinfo +1 -1
  66. package/vercel.json +5 -0
  67. package/dist/components/store-key.d.ts +0 -20
  68. package/dist/components/store-key.d.ts.map +0 -1
  69. package/dist/components/store-key.js +0 -25
  70. package/dist/components/store-key.js.map +0 -1
  71. package/src/components/store-key.test.ts +0 -53
  72. package/src/components/store-key.ts +0 -36
@@ -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"}