@cobaltcore-dev/aurora 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/client/{BucketToastNotifications-D2Cq2VrV.mjs → BucketToastNotifications-BGd2wVmh.mjs} +2 -2
  2. package/dist/client/{BucketToastNotifications-D2Cq2VrV.mjs.map → BucketToastNotifications-BGd2wVmh.mjs.map} +1 -1
  3. package/dist/client/DeletePcaModal-BU6kbKsw.mjs +80 -0
  4. package/dist/client/DeletePcaModal-BU6kbKsw.mjs.map +1 -0
  5. package/dist/client/DetailsInfo-BUyuYpJj.mjs +52 -0
  6. package/dist/client/DetailsInfo-BUyuYpJj.mjs.map +1 -0
  7. package/dist/client/{FloatingIpActionModals-sJlSFIsK.mjs → FloatingIpActionModals-DAtZoYGS.mjs} +22 -22
  8. package/dist/client/{FloatingIpActionModals-sJlSFIsK.mjs.map → FloatingIpActionModals-DAtZoYGS.mjs.map} +1 -1
  9. package/dist/client/{ImageToastNotifications-CISH3c_d.mjs → ImageToastNotifications-BhjU1bfT.mjs} +7 -7
  10. package/dist/client/{ImageToastNotifications-CISH3c_d.mjs.map → ImageToastNotifications-BhjU1bfT.mjs.map} +1 -1
  11. package/dist/client/{_flavorId-Cx5tf2KQ.mjs → _flavorId-BQY7YhNx.mjs} +2 -2
  12. package/dist/client/{_flavorId-Cx5tf2KQ.mjs.map → _flavorId-BQY7YhNx.mjs.map} +1 -1
  13. package/dist/client/{_flavorId-C6RJfhh8.mjs → _flavorId-sS1sg_DZ.mjs} +3 -3
  14. package/dist/client/{_flavorId-C6RJfhh8.mjs.map → _flavorId-sS1sg_DZ.mjs.map} +1 -1
  15. package/dist/client/{_floatingIpId-C4Sa8tMa.mjs → _floatingIpId-BHZGh8U8.mjs} +2 -2
  16. package/dist/client/{_floatingIpId-C4Sa8tMa.mjs.map → _floatingIpId-BHZGh8U8.mjs.map} +1 -1
  17. package/dist/client/{_floatingIpId-CAUBZ5WD2.mjs → _floatingIpId-CR3aD38l2.mjs} +5 -5
  18. package/dist/client/{_floatingIpId-CAUBZ5WD2.mjs.map → _floatingIpId-CR3aD38l2.mjs.map} +1 -1
  19. package/dist/client/{_imageId-DpXNAIbD.mjs → _imageId-Cf-Xdksv.mjs} +3 -3
  20. package/dist/client/{_imageId-DpXNAIbD.mjs.map → _imageId-Cf-Xdksv.mjs.map} +1 -1
  21. package/dist/client/_pcaId-B7j0sXnY.mjs +545 -0
  22. package/dist/client/_pcaId-B7j0sXnY.mjs.map +1 -0
  23. package/dist/client/{_projectId-fEA6fnFQ.mjs → _projectId-Cq9JnhRj.mjs} +3 -3
  24. package/dist/client/{_projectId-fEA6fnFQ.mjs.map → _projectId-Cq9JnhRj.mjs.map} +1 -1
  25. package/dist/client/{_projectId-w-tZz0FI.mjs → _projectId-D8FHe0gr.mjs} +2 -2
  26. package/dist/client/{_projectId-w-tZz0FI.mjs.map → _projectId-D8FHe0gr.mjs.map} +1 -1
  27. package/dist/client/{_projectId-qvINx3Dx.mjs → _projectId-Ig3QqYzt.mjs} +2 -2
  28. package/dist/client/{_projectId-qvINx3Dx.mjs.map → _projectId-Ig3QqYzt.mjs.map} +1 -1
  29. package/dist/client/{_projectId-BOaPmCuz.mjs → _projectId-b4NGeECR.mjs} +3 -3
  30. package/dist/client/{_projectId-BOaPmCuz.mjs.map → _projectId-b4NGeECR.mjs.map} +1 -1
  31. package/dist/client/{_securityGroupId-B6_lD8ry.mjs → _securityGroupId-BVSsCus9.mjs} +2 -2
  32. package/dist/client/{_securityGroupId-B6_lD8ry.mjs.map → _securityGroupId-BVSsCus9.mjs.map} +1 -1
  33. package/dist/client/{_securityGroupId-D9FHSkNU.mjs → _securityGroupId-gwV4eB0s.mjs} +16 -16
  34. package/dist/client/{_securityGroupId-D9FHSkNU.mjs.map → _securityGroupId-gwV4eB0s.mjs.map} +1 -1
  35. package/dist/client/{_storageType-ZFnIALny.mjs → _storageType-CH2khFcZ.mjs} +2 -2
  36. package/dist/client/{_storageType-ZFnIALny.mjs.map → _storageType-CH2khFcZ.mjs.map} +1 -1
  37. package/dist/client/{_storageType-MgntkZb6.mjs → _storageType-D-1H6SX1.mjs} +856 -856
  38. package/dist/client/{_storageType-MgntkZb6.mjs.map → _storageType-D-1H6SX1.mjs.map} +1 -1
  39. package/dist/client/build-DgeVmENN.mjs.map +1 -1
  40. package/dist/client/{floatingips-DOGKGGkC.mjs → floatingips-DyBEotB8.mjs} +10 -10
  41. package/dist/client/{floatingips-DOGKGGkC.mjs.map → floatingips-DyBEotB8.mjs.map} +1 -1
  42. package/dist/client/hooks-iGiEkLTp.mjs +12 -0
  43. package/dist/client/hooks-iGiEkLTp.mjs.map +1 -0
  44. package/dist/client/{images-B1wqMKYw.mjs → images-BklbSacK.mjs} +2 -2
  45. package/dist/client/{images-B1wqMKYw.mjs.map → images-BklbSacK.mjs.map} +1 -1
  46. package/dist/client/{images-D5UsQi8i.mjs → images-C3voJ3B1.mjs} +259 -259
  47. package/dist/client/{images-D5UsQi8i.mjs.map → images-C3voJ3B1.mjs.map} +1 -1
  48. package/dist/client/index.d.ts +2 -0
  49. package/dist/client/index.js +337 -344
  50. package/dist/client/index.js.map +1 -1
  51. package/dist/client/md-CyCflQee.mjs.map +1 -1
  52. package/dist/client/{objects-DpgXMFrG.mjs → objects-B3Z8h4RU.mjs} +2 -2
  53. package/dist/client/{objects-DpgXMFrG.mjs.map → objects-B3Z8h4RU.mjs.map} +1 -1
  54. package/dist/client/{objects-Deo1Ic1A.mjs → objects-CGOfO00N.mjs} +499 -475
  55. package/dist/client/objects-CGOfO00N.mjs.map +1 -0
  56. package/dist/client/{pca-DztTIs18.mjs → pca-72YR_Pk0.mjs} +3 -3
  57. package/dist/client/pca-72YR_Pk0.mjs.map +1 -0
  58. package/dist/client/pca-CsBx_IDO.mjs +251 -0
  59. package/dist/client/pca-CsBx_IDO.mjs.map +1 -0
  60. package/dist/client/pcaAccess-Br4kVjLQ.mjs +9 -0
  61. package/dist/client/pcaAccess-Br4kVjLQ.mjs.map +1 -0
  62. package/dist/client/{securitygroups-BRtHaTLm.mjs → securitygroups-8vRbXmBL.mjs} +3 -3
  63. package/dist/client/{securitygroups-BRtHaTLm.mjs.map → securitygroups-8vRbXmBL.mjs.map} +1 -1
  64. package/dist/client/trpcClient-BxcNKnhv.mjs +65 -0
  65. package/dist/client/trpcClient-BxcNKnhv.mjs.map +1 -0
  66. package/dist/client/trpcClient.d.ts +56 -49
  67. package/dist/server/index.d.ts +51 -49
  68. package/dist/server/index.js +53 -23
  69. package/package.json +4 -2
  70. package/dist/client/_pcaId-DY9GPV7t.mjs +0 -479
  71. package/dist/client/_pcaId-DY9GPV7t.mjs.map +0 -1
  72. package/dist/client/_pcaId-ldtkXsbp.mjs +0 -36
  73. package/dist/client/_pcaId-ldtkXsbp.mjs.map +0 -1
  74. package/dist/client/constants-COPE2ktv.mjs +0 -153
  75. package/dist/client/constants-COPE2ktv.mjs.map +0 -1
  76. package/dist/client/hooks-DvdvErNv.mjs +0 -2
  77. package/dist/client/objects-Deo1Ic1A.mjs.map +0 -1
  78. package/dist/client/pca-B7WldCGw.mjs +0 -202
  79. package/dist/client/pca-B7WldCGw.mjs.map +0 -1
  80. package/dist/client/pca-DztTIs18.mjs.map +0 -1
  81. package/dist/client/pcaAccess-BYUY700H.mjs +0 -9
  82. package/dist/client/pcaAccess-BYUY700H.mjs.map +0 -1
  83. package/dist/client/trpcClient-Dy_MP_Pv.mjs +0 -57
  84. package/dist/client/trpcClient-Dy_MP_Pv.mjs.map +0 -1
@@ -0,0 +1,65 @@
1
+ import { createTRPCReact as e } from "@trpc/react-query";
2
+ import { createTRPCClient as t, httpBatchLink as n, httpBatchStreamLink as r, httpLink as i, httpSubscriptionLink as a, isNonJsonSerializable as o, splitLink as s } from "@trpc/client";
3
+ //#region src/client/trpcClient.ts
4
+ var c = {
5
+ token: null,
6
+ pending: null,
7
+ async getHeaders() {
8
+ if (this.token) return { "x-csrf-token": this.token };
9
+ this.pending ||= fetch("/csrf-token").then((e) => e.json()).then(({ csrfToken: e }) => (this.token = e, this.pending = null, e)).catch((e) => (this.pending = null, console.error("Failed to fetch CSRF token:", e), null));
10
+ let e = await this.pending;
11
+ return e ? { "x-csrf-token": e } : {};
12
+ },
13
+ invalidate() {
14
+ this.token = null;
15
+ }
16
+ }, l = new Set(["storage.swift.downloadObject", "storage.ceph.objects.downloadObject"]), u = { bffEndpoint: "/polaris-bff" };
17
+ function d(e) {
18
+ u.bffEndpoint = e;
19
+ }
20
+ var f = () => [s({
21
+ condition: (e) => e.type === "subscription",
22
+ true: a({
23
+ url: u.bffEndpoint,
24
+ eventSourceOptions: async () => ({ headers: await c.getHeaders() })
25
+ }),
26
+ false: s({
27
+ condition: (e) => o(e.input),
28
+ true: i({
29
+ url: u.bffEndpoint,
30
+ async headers({ op: e }) {
31
+ let t = await c.getHeaders(), n = e.context?.headers ?? {};
32
+ return {
33
+ ...t,
34
+ ...n
35
+ };
36
+ }
37
+ }),
38
+ false: s({
39
+ condition: (e) => l.has(e.path),
40
+ true: r({
41
+ url: u.bffEndpoint,
42
+ async headers() {
43
+ return c.getHeaders();
44
+ }
45
+ }),
46
+ false: n({
47
+ url: u.bffEndpoint,
48
+ async headers() {
49
+ return c.getHeaders();
50
+ }
51
+ })
52
+ })
53
+ })
54
+ })], p = e(), m = {
55
+ react: null,
56
+ vanilla: null
57
+ }, h = new Proxy({}, { get(e, t) {
58
+ return m.react ||= p.createClient({ links: f() }), m.react[t];
59
+ } }), g = new Proxy({}, { get(e, n) {
60
+ return m.vanilla ||= t({ links: f() }), m.vanilla[n];
61
+ } });
62
+ //#endregion
63
+ export { h as i, g as n, p as r, d as t };
64
+
65
+ //# sourceMappingURL=trpcClient-BxcNKnhv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpcClient-BxcNKnhv.mjs","names":["createTRPCReact","createTRPCClient","httpBatchLink","httpBatchStreamLink","httpLink","splitLink","isNonJsonSerializable","httpSubscriptionLink","csrfCache","token","pending","getHeaders","fetch","then","res","json","csrfToken","catch","error","console","invalidate","invalidateCsrfToken","STREAMING_PROCEDURES","Set","config","bffEndpoint","setBffEndpoint","endpoint","getLinks","condition","op","type","true","url","eventSourceOptions","headers","false","input","csrf","extra","context","has","path","trpcReact","clients","react","vanilla","trpcReactClient","Proxy","get","_target","prop","createClient","links","trpcClient"],"sources":["../../src/client/trpcClient.ts"],"sourcesContent":["import { createTRPCReact } from \"@trpc/react-query\"\nimport type { CreateTRPCReact } from \"@trpc/react-query\"\nimport { createTRPCClient, type TRPCClient } from \"@trpc/client\"\nimport {\n httpBatchLink,\n httpBatchStreamLink,\n httpLink,\n splitLink,\n isNonJsonSerializable,\n httpSubscriptionLink,\n} from \"@trpc/client\"\nimport type { AuroraRouter } from \"../server/routers\"\n\n/** Type alias for the React tRPC client */\nexport type TrpcReact = ReturnType<typeof createTRPCReact<AuroraRouter>>\n\n/** Type alias for the vanilla tRPC client */\nexport type TrpcClient = ReturnType<typeof createTRPCClient<AuroraRouter>>\n\n/** Generic type for creating a typed React tRPC client with a custom router */\nexport type CreateTypedTrpcReact<TRouter extends AuroraRouter> = CreateTRPCReact<TRouter, unknown>\n\n/** Generic type for creating a typed vanilla tRPC client with a custom router */\nexport type CreateTypedTrpcClient<TRouter extends AuroraRouter> = TRPCClient<TRouter>\n\n// CSRF token cache with request deduplication\nconst csrfCache = {\n token: null as string | null,\n pending: null as Promise<string | null> | null,\n\n async getHeaders() {\n if (this.token) {\n return { \"x-csrf-token\": this.token }\n }\n\n // Dedupe concurrent fetches - only one request in flight at a time\n if (!this.pending) {\n this.pending = fetch(\"/csrf-token\")\n .then((res) => res.json())\n .then(({ csrfToken }) => {\n this.token = csrfToken\n this.pending = null\n return csrfToken as string\n })\n .catch((error) => {\n this.pending = null\n console.error(\"Failed to fetch CSRF token:\", error)\n return null\n })\n }\n\n const token = await this.pending\n return token ? { \"x-csrf-token\": token } : {}\n },\n\n invalidate() {\n this.token = null\n },\n}\n\n/**\n * Invalidate the cached CSRF token.\n * Call this when receiving a 403 response to trigger a fresh token fetch on the next request.\n */\nexport const invalidateCsrfToken = () => csrfCache.invalidate()\n\n// Procedures that return async iterables (chunked streaming responses).\n// These are routed through httpBatchStreamLink instead of httpBatchLink.\n// Add any new streaming procedure paths here.\nconst STREAMING_PROCEDURES = new Set<string>([\"storage.swift.downloadObject\", \"storage.ceph.objects.downloadObject\"])\n\n// BFF endpoint - set once by App before any tRPC calls are made\nconst config = {\n bffEndpoint: \"/polaris-bff\",\n}\n\nexport function setBffEndpoint(endpoint: string) {\n config.bffEndpoint = endpoint\n}\n\nconst getLinks = () => [\n splitLink({\n // First check: is it a subscription?\n condition: (op) => op.type === \"subscription\",\n // Use HTTP subscription link for subscriptions (long-polling)\n true: httpSubscriptionLink({\n url: config.bffEndpoint,\n // Callback to populate headers\n eventSourceOptions: async () => {\n return { headers: await csrfCache.getHeaders() }\n },\n }),\n // For non-subscriptions, check for non-JSON data or streaming procedures\n false: splitLink({\n // Non-JSON serializable input (FormData, Blob, ArrayBuffer, etc.) → plain httpLink.\n condition: (op) => isNonJsonSerializable(op.input),\n true: httpLink({\n url: config.bffEndpoint,\n async headers({ op }) {\n const csrf = await csrfCache.getHeaders()\n // Per-request headers can be injected via tRPC operation context.\n // op.context is set by the caller and forwarded through the link chain.\n const extra = (op.context as { headers?: Record<string, string> } | undefined)?.headers ?? {}\n return { ...csrf, ...extra }\n },\n }),\n // For JSON procedures, decide between streaming and regular batching\n false: splitLink({\n // Procedures returning async iterables must use httpBatchStreamLink.\n // httpBatchLink buffers the full response before resolving, which\n // breaks streaming. httpBatchStreamLink preserves batching while\n // supporting chunked/streamed responses.\n // Note: httpBatchStreamLink is intentionally NOT used globally because\n // it is incompatible with the @fastify/csrf-protection cookie rotation\n // used in this app — CSRF tokens can expire mid-stream on long-lived\n // connections. Scope it only to procedures that actually need streaming.\n condition: (op) => STREAMING_PROCEDURES.has(op.path),\n true: httpBatchStreamLink({\n url: config.bffEndpoint,\n async headers() {\n return csrfCache.getHeaders()\n },\n }),\n // Regular JSON mutations/queries — standard batching\n false: httpBatchLink({\n url: config.bffEndpoint,\n async headers() {\n return csrfCache.getHeaders()\n },\n }),\n }),\n }),\n }),\n]\n\n// React Query client (for hooks like useQuery/useMutation/useSubscription)\nexport const trpcReact: TrpcReact = createTRPCReact<AuroraRouter>()\n\n// Lazy-initialized clients - created on first access after setBffEndpoint() has been called by App\nconst clients = {\n react: null as ReturnType<typeof trpcReact.createClient> | null,\n vanilla: null as TrpcClient | null,\n}\n\nexport const trpcReactClient = new Proxy({} as ReturnType<typeof trpcReact.createClient>, {\n get(_target, prop) {\n if (!clients.react) {\n clients.react = trpcReact.createClient({ links: getLinks() })\n }\n return (clients.react as Record<string | symbol, unknown>)[prop]\n },\n})\n\nexport const trpcClient: TrpcClient = new Proxy({} as TrpcClient, {\n get(_target, prop) {\n if (!clients.vanilla) {\n clients.vanilla = createTRPCClient<AuroraRouter>({ links: getLinks() })\n }\n return (clients.vanilla as Record<string | symbol, unknown>)[prop]\n },\n})\n"],"mappings":";;;AA0BA,IAAMQ,IAAY;CAChBC,OAAO;CACPC,SAAS;CAET,MAAMC,aAAAA;EACJ,IAAI,KAAKF,OACP,OAAO,EAAE,gBAAgB,KAAKA,MAAM;EAItC,AACE,KAAKC,YAAUE,MAAM,aAAA,EAClBC,MAAMC,MAAQA,EAAIC,KAAI,CAAA,EACtBF,MAAM,EAAEG,oBACP,KAAKP,QAAQO,GACb,KAAKN,UAAU,MACRM,EACT,EACCC,OAAOC,OACN,KAAKR,UAAU,MACfS,QAAQD,MAAM,+BAA+BA,CAAAA,GACtC,KACT;EAGJ,IAAMT,IAAQ,MAAM,KAAKC;EACzB,OAAOD,IAAQ,EAAE,gBAAgBA,EAAM,IAAI,CAAC;CAC9C;CAEAW,aAAAA;EACE,KAAKX,QAAQ;CACf;AACF,GAWMa,IAAuB,IAAIC,IAAY,CAAC,gCAAgC,qCAAA,CAAsC,GAG9GC,IAAS,EACbC,aAAa,eACf;AAEA,SAAgBC,EAAeC,GAAgB;CAC7CH,EAAOC,cAAcE;AACvB;AAEA,IAAMC,UAAiB,CACrBvB,EAAU;CAERwB,YAAYC,MAAOA,EAAGC,SAAS;CAE/BC,MAAMzB,EAAqB;EACzB0B,KAAKT,EAAOC;EAEZS,oBAAoB,aACX,EAAEC,SAAS,MAAM3B,EAAUG,WAAU,EAAG;CAEnD,CAAA;CAEAyB,OAAO/B,EAAU;EAEfwB,YAAYC,MAAOxB,EAAsBwB,EAAGO,KAAK;EACjDL,MAAM5B,EAAS;GACb6B,KAAKT,EAAOC;GACZ,MAAMU,QAAQ,EAAEL,SAAI;IAClB,IAAMQ,IAAO,MAAM9B,EAAUG,WAAU,GAGjC4B,IAAQ,EAAIC,SAA8DL,WAAW,CAAC;IAC5F,OAAO;KAAE,GAAGG;KAAM,GAAGC;IAAM;GAC7B;EACF,CAAA;EAEAH,OAAO/B,EAAU;GASfwB,YAAYC,MAAOR,EAAqBmB,IAAIX,EAAGY,IAAI;GACnDV,MAAM7B,EAAoB;IACxB8B,KAAKT,EAAOC;IACZ,MAAMU,UAAAA;KACJ,OAAO3B,EAAUG,WAAU;IAC7B;GACF,CAAA;GAEAyB,OAAOlC,EAAc;IACnB+B,KAAKT,EAAOC;IACZ,MAAMU,UAAAA;KACJ,OAAO3B,EAAUG,WAAU;IAC7B;GACF,CAAA;EACF,CAAA;CACF,CAAA;AACF,CAAA,CAAA,GAIWgC,IAAuB3C,EAAAA,GAG9B4C,IAAU;CACdC,OAAO;CACPC,SAAS;AACX,GAEaC,IAAkB,IAAIC,MAAM,CAAC,GAAgD,EACxFC,IAAIC,GAASC,GAAI;CAIf,OAHA,AACEP,EAAQC,UAAQF,EAAUS,aAAa,EAAEC,OAAOzB,EAAAA,EAAW,CAAA,GAEtD,EAASiB,MAA2CM;AAC7D,EACF,CAAA,GAEaG,IAAyB,IAAIN,MAAM,CAAC,GAAiB,EAChEC,IAAIC,GAASC,GAAI;CAIf,OAHA,AACEP,EAAQE,YAAU7C,EAA+B,EAAEoD,OAAOzB,EAAAA,EAAW,CAAA,GAEhE,EAASkB,QAA6CK;AAC/D,EACF,CAAA"}
@@ -9,6 +9,11 @@ export type TrpcClient = ReturnType<typeof createTRPCClient<AuroraRouter>>;
9
9
  export type CreateTypedTrpcReact<TRouter extends AuroraRouter> = CreateTRPCReact<TRouter, unknown>;
10
10
  /** Generic type for creating a typed vanilla tRPC client with a custom router */
11
11
  export type CreateTypedTrpcClient<TRouter extends AuroraRouter> = TRPCClient<TRouter>;
12
+ /**
13
+ * Invalidate the cached CSRF token.
14
+ * Call this when receiving a 403 response to trigger a fresh token fetch on the next request.
15
+ */
16
+ export declare const invalidateCsrfToken: () => void;
12
17
  export declare function setBffEndpoint(endpoint: string): void;
13
18
  export declare const trpcReact: TrpcReact;
14
19
  export declare const trpcReactClient: TRPCClient<import('@trpc/server').TRPCBuiltRouter<{
@@ -50,22 +55,25 @@ export declare const trpcReactClient: TRPCClient<import('@trpc/server').TRPCBuil
50
55
  } | undefined;
51
56
  configuration?: {
52
57
  subject: {
53
- common_name: string;
58
+ named_attributes: {
59
+ cn: string;
60
+ c?: string[] | undefined;
61
+ l?: string[] | undefined;
62
+ o?: string[] | undefined;
63
+ ou?: string[] | undefined;
64
+ postal_code?: string[] | undefined;
65
+ st?: string[] | undefined;
66
+ serial_number?: string | undefined;
67
+ street?: string[] | undefined;
68
+ };
54
69
  additional_attribute?: {
55
70
  key: number[];
56
71
  value: string;
57
72
  }[] | undefined;
58
- country?: string[] | undefined;
59
- locality?: string[] | undefined;
60
- organization?: string[] | undefined;
61
- organizational_unit?: string[] | undefined;
62
- postal_code?: string[] | undefined;
63
- province?: string[] | undefined;
64
- serial_number?: string | undefined;
65
- street_address?: string[] | undefined;
66
73
  };
67
74
  } | undefined;
68
75
  csr?: string | undefined;
76
+ display_subject?: string | undefined;
69
77
  imported_certificate_chain?: string | undefined;
70
78
  }[];
71
79
  links: {
@@ -81,19 +89,9 @@ export declare const trpcReactClient: TRPCClient<import('@trpc/server').TRPCBuil
81
89
  project_id: string;
82
90
  configuration: {
83
91
  subject: {
84
- common_name: string;
85
- additional_attribute?: {
86
- key: number[];
87
- value: string;
88
- }[] | undefined;
89
- country?: string[] | undefined;
90
- locality?: string[] | undefined;
91
- organization?: string[] | undefined;
92
- organizational_unit?: string[] | undefined;
93
- postal_code?: string[] | undefined;
94
- province?: string[] | undefined;
95
- serial_number?: string | undefined;
96
- street_address?: string[] | undefined;
92
+ named_attributes: {
93
+ cn: string;
94
+ };
97
95
  };
98
96
  };
99
97
  };
@@ -116,22 +114,25 @@ export declare const trpcReactClient: TRPCClient<import('@trpc/server').TRPCBuil
116
114
  } | undefined;
117
115
  configuration?: {
118
116
  subject: {
119
- common_name: string;
117
+ named_attributes: {
118
+ cn: string;
119
+ c?: string[] | undefined;
120
+ l?: string[] | undefined;
121
+ o?: string[] | undefined;
122
+ ou?: string[] | undefined;
123
+ postal_code?: string[] | undefined;
124
+ st?: string[] | undefined;
125
+ serial_number?: string | undefined;
126
+ street?: string[] | undefined;
127
+ };
120
128
  additional_attribute?: {
121
129
  key: number[];
122
130
  value: string;
123
131
  }[] | undefined;
124
- country?: string[] | undefined;
125
- locality?: string[] | undefined;
126
- organization?: string[] | undefined;
127
- organizational_unit?: string[] | undefined;
128
- postal_code?: string[] | undefined;
129
- province?: string[] | undefined;
130
- serial_number?: string | undefined;
131
- street_address?: string[] | undefined;
132
132
  };
133
133
  } | undefined;
134
134
  csr?: string | undefined;
135
+ display_subject?: string | undefined;
135
136
  imported_certificate_chain?: string | undefined;
136
137
  };
137
138
  meta: object;
@@ -160,22 +161,25 @@ export declare const trpcReactClient: TRPCClient<import('@trpc/server').TRPCBuil
160
161
  } | undefined;
161
162
  configuration?: {
162
163
  subject: {
163
- common_name: string;
164
+ named_attributes: {
165
+ cn: string;
166
+ c?: string[] | undefined;
167
+ l?: string[] | undefined;
168
+ o?: string[] | undefined;
169
+ ou?: string[] | undefined;
170
+ postal_code?: string[] | undefined;
171
+ st?: string[] | undefined;
172
+ serial_number?: string | undefined;
173
+ street?: string[] | undefined;
174
+ };
164
175
  additional_attribute?: {
165
176
  key: number[];
166
177
  value: string;
167
178
  }[] | undefined;
168
- country?: string[] | undefined;
169
- locality?: string[] | undefined;
170
- organization?: string[] | undefined;
171
- organizational_unit?: string[] | undefined;
172
- postal_code?: string[] | undefined;
173
- province?: string[] | undefined;
174
- serial_number?: string | undefined;
175
- street_address?: string[] | undefined;
176
179
  };
177
180
  } | undefined;
178
181
  csr?: string | undefined;
182
+ display_subject?: string | undefined;
179
183
  imported_certificate_chain?: string | undefined;
180
184
  };
181
185
  meta: object;
@@ -213,22 +217,25 @@ export declare const trpcReactClient: TRPCClient<import('@trpc/server').TRPCBuil
213
217
  } | undefined;
214
218
  configuration?: {
215
219
  subject: {
216
- common_name: string;
220
+ named_attributes: {
221
+ cn: string;
222
+ c?: string[] | undefined;
223
+ l?: string[] | undefined;
224
+ o?: string[] | undefined;
225
+ ou?: string[] | undefined;
226
+ postal_code?: string[] | undefined;
227
+ st?: string[] | undefined;
228
+ serial_number?: string | undefined;
229
+ street?: string[] | undefined;
230
+ };
217
231
  additional_attribute?: {
218
232
  key: number[];
219
233
  value: string;
220
234
  }[] | undefined;
221
- country?: string[] | undefined;
222
- locality?: string[] | undefined;
223
- organization?: string[] | undefined;
224
- organizational_unit?: string[] | undefined;
225
- postal_code?: string[] | undefined;
226
- province?: string[] | undefined;
227
- serial_number?: string | undefined;
228
- street_address?: string[] | undefined;
229
235
  };
230
236
  } | undefined;
231
237
  csr?: string | undefined;
238
+ display_subject?: string | undefined;
232
239
  imported_certificate_chain?: string | undefined;
233
240
  };
234
241
  meta: object;
@@ -708,22 +708,25 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
708
708
  } | undefined;
709
709
  configuration?: {
710
710
  subject: {
711
- common_name: string;
711
+ named_attributes: {
712
+ cn: string;
713
+ c?: string[] | undefined;
714
+ l?: string[] | undefined;
715
+ o?: string[] | undefined;
716
+ ou?: string[] | undefined;
717
+ postal_code?: string[] | undefined;
718
+ st?: string[] | undefined;
719
+ serial_number?: string | undefined;
720
+ street?: string[] | undefined;
721
+ };
712
722
  additional_attribute?: {
713
723
  key: number[];
714
724
  value: string;
715
725
  }[] | undefined;
716
- country?: string[] | undefined;
717
- locality?: string[] | undefined;
718
- organization?: string[] | undefined;
719
- organizational_unit?: string[] | undefined;
720
- postal_code?: string[] | undefined;
721
- province?: string[] | undefined;
722
- serial_number?: string | undefined;
723
- street_address?: string[] | undefined;
724
726
  };
725
727
  } | undefined;
726
728
  csr?: string | undefined;
729
+ display_subject?: string | undefined;
727
730
  imported_certificate_chain?: string | undefined;
728
731
  }[];
729
732
  links: {
@@ -739,19 +742,9 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
739
742
  project_id: string;
740
743
  configuration: {
741
744
  subject: {
742
- common_name: string;
743
- additional_attribute?: {
744
- key: number[];
745
- value: string;
746
- }[] | undefined;
747
- country?: string[] | undefined;
748
- locality?: string[] | undefined;
749
- organization?: string[] | undefined;
750
- organizational_unit?: string[] | undefined;
751
- postal_code?: string[] | undefined;
752
- province?: string[] | undefined;
753
- serial_number?: string | undefined;
754
- street_address?: string[] | undefined;
745
+ named_attributes: {
746
+ cn: string;
747
+ };
755
748
  };
756
749
  };
757
750
  };
@@ -774,22 +767,25 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
774
767
  } | undefined;
775
768
  configuration?: {
776
769
  subject: {
777
- common_name: string;
770
+ named_attributes: {
771
+ cn: string;
772
+ c?: string[] | undefined;
773
+ l?: string[] | undefined;
774
+ o?: string[] | undefined;
775
+ ou?: string[] | undefined;
776
+ postal_code?: string[] | undefined;
777
+ st?: string[] | undefined;
778
+ serial_number?: string | undefined;
779
+ street?: string[] | undefined;
780
+ };
778
781
  additional_attribute?: {
779
782
  key: number[];
780
783
  value: string;
781
784
  }[] | undefined;
782
- country?: string[] | undefined;
783
- locality?: string[] | undefined;
784
- organization?: string[] | undefined;
785
- organizational_unit?: string[] | undefined;
786
- postal_code?: string[] | undefined;
787
- province?: string[] | undefined;
788
- serial_number?: string | undefined;
789
- street_address?: string[] | undefined;
790
785
  };
791
786
  } | undefined;
792
787
  csr?: string | undefined;
788
+ display_subject?: string | undefined;
793
789
  imported_certificate_chain?: string | undefined;
794
790
  };
795
791
  meta: object;
@@ -818,22 +814,25 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
818
814
  } | undefined;
819
815
  configuration?: {
820
816
  subject: {
821
- common_name: string;
817
+ named_attributes: {
818
+ cn: string;
819
+ c?: string[] | undefined;
820
+ l?: string[] | undefined;
821
+ o?: string[] | undefined;
822
+ ou?: string[] | undefined;
823
+ postal_code?: string[] | undefined;
824
+ st?: string[] | undefined;
825
+ serial_number?: string | undefined;
826
+ street?: string[] | undefined;
827
+ };
822
828
  additional_attribute?: {
823
829
  key: number[];
824
830
  value: string;
825
831
  }[] | undefined;
826
- country?: string[] | undefined;
827
- locality?: string[] | undefined;
828
- organization?: string[] | undefined;
829
- organizational_unit?: string[] | undefined;
830
- postal_code?: string[] | undefined;
831
- province?: string[] | undefined;
832
- serial_number?: string | undefined;
833
- street_address?: string[] | undefined;
834
832
  };
835
833
  } | undefined;
836
834
  csr?: string | undefined;
835
+ display_subject?: string | undefined;
837
836
  imported_certificate_chain?: string | undefined;
838
837
  };
839
838
  meta: object;
@@ -871,22 +870,25 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
871
870
  } | undefined;
872
871
  configuration?: {
873
872
  subject: {
874
- common_name: string;
873
+ named_attributes: {
874
+ cn: string;
875
+ c?: string[] | undefined;
876
+ l?: string[] | undefined;
877
+ o?: string[] | undefined;
878
+ ou?: string[] | undefined;
879
+ postal_code?: string[] | undefined;
880
+ st?: string[] | undefined;
881
+ serial_number?: string | undefined;
882
+ street?: string[] | undefined;
883
+ };
875
884
  additional_attribute?: {
876
885
  key: number[];
877
886
  value: string;
878
887
  }[] | undefined;
879
- country?: string[] | undefined;
880
- locality?: string[] | undefined;
881
- organization?: string[] | undefined;
882
- organizational_unit?: string[] | undefined;
883
- postal_code?: string[] | undefined;
884
- province?: string[] | undefined;
885
- serial_number?: string | undefined;
886
- street_address?: string[] | undefined;
887
888
  };
888
889
  } | undefined;
889
890
  csr?: string | undefined;
891
+ display_subject?: string | undefined;
890
892
  imported_certificate_chain?: string | undefined;
891
893
  };
892
894
  meta: object;
@@ -34673,10 +34673,20 @@ var objectRouter = {
34673
34673
  throw mappedError;
34674
34674
  }
34675
34675
  }, "emitMappedError");
34676
- const response = await s3.send(new import_client_s33.GetObjectCommand({
34677
- Bucket: containerName,
34678
- Key: objectKey
34679
- })).catch(emitMappedError);
34676
+ const response = await s3.send(
34677
+ new import_client_s33.GetObjectCommand({
34678
+ Bucket: containerName,
34679
+ Key: objectKey
34680
+ }),
34681
+ // AWS SDK v3's per-call cancellation option — the equivalent of passing
34682
+ // `{ signal }` to a raw fetch() (see 0010_abort_signal_propagation.md).
34683
+ // ctx.req.signal is aborted automatically when the client disconnects
34684
+ // (tab closed, navigated away) or explicitly via the cancel button,
34685
+ // which calls AbortController.abort() on the frontend.
34686
+ {
34687
+ abortSignal: ctx.req.signal
34688
+ }
34689
+ ).catch(emitMappedError);
34680
34690
  const body = response.Body;
34681
34691
  if (!body) {
34682
34692
  emitMappedError(new import_server13.TRPCError({
@@ -34695,8 +34705,13 @@ var objectRouter = {
34695
34705
  });
34696
34706
  let isFirst = true;
34697
34707
  let downloaded = 0;
34708
+ let aborted = false;
34698
34709
  try {
34699
34710
  for await (const value of body) {
34711
+ if (ctx.req.signal?.aborted) {
34712
+ aborted = true;
34713
+ break;
34714
+ }
34700
34715
  downloaded += value.byteLength;
34701
34716
  const progress = downloadProgressMap2.get(scopedDownloadId);
34702
34717
  progress.downloaded = downloaded;
@@ -34716,7 +34731,9 @@ var objectRouter = {
34716
34731
  };
34717
34732
  isFirst = false;
34718
34733
  }
34719
- downloadProgressEmitter2.emit(`progress:${scopedDownloadId}:complete`);
34734
+ if (!aborted) {
34735
+ downloadProgressEmitter2.emit(`progress:${scopedDownloadId}:complete`);
34736
+ }
34720
34737
  } catch (error) {
34721
34738
  emitMappedError(error);
34722
34739
  } finally {
@@ -37559,24 +37576,31 @@ var CertificateAuthorityAdditionalAttributeSchema = import_zod25.z.object({
37559
37576
  key: import_zod25.z.array(import_zod25.z.number().int()),
37560
37577
  value: import_zod25.z.string()
37561
37578
  });
37579
+ var stringOrStringArray = import_zod25.z.union([
37580
+ import_zod25.z.array(import_zod25.z.string()),
37581
+ import_zod25.z.string().transform((s) => [
37582
+ s
37583
+ ])
37584
+ ]);
37562
37585
  var CertificateAuthoritySubjectSchema = import_zod25.z.object({
37563
37586
  additional_attribute: import_zod25.z.array(CertificateAuthorityAdditionalAttributeSchema).optional(),
37564
- /** Typically domain name */
37565
- common_name: import_zod25.z.string(),
37566
- /** Country codes (ISO 3166-1 alpha-2). */
37567
- country: import_zod25.z.array(import_zod25.z.string()).optional(),
37568
- /** Locality/city names. */
37569
- locality: import_zod25.z.array(import_zod25.z.string()).optional(),
37570
- /** Organization names. */
37571
- organization: import_zod25.z.array(import_zod25.z.string()).optional(),
37572
- /** Organizational unit names. */
37573
- organizational_unit: import_zod25.z.array(import_zod25.z.string()).optional(),
37574
- /** Postal/ZIP codes. */
37575
- postal_code: import_zod25.z.array(import_zod25.z.string()).optional(),
37576
- /** State or province names. */
37577
- province: import_zod25.z.array(import_zod25.z.string()).optional(),
37578
- serial_number: import_zod25.z.string().optional(),
37579
- street_address: import_zod25.z.array(import_zod25.z.string()).optional()
37587
+ named_attributes: import_zod25.z.object({
37588
+ cn: import_zod25.z.string(),
37589
+ /** Country codes (ISO 3166-1 alpha-2). */
37590
+ c: stringOrStringArray.optional(),
37591
+ /** Locality/city names. */
37592
+ l: stringOrStringArray.optional(),
37593
+ /** Organization names. */
37594
+ o: stringOrStringArray.optional(),
37595
+ /** Organizational unit names. */
37596
+ ou: stringOrStringArray.optional(),
37597
+ /** Postal/ZIP codes. */
37598
+ postal_code: stringOrStringArray.optional(),
37599
+ /** State or province names. */
37600
+ st: stringOrStringArray.optional(),
37601
+ serial_number: import_zod25.z.string().optional(),
37602
+ street: stringOrStringArray.optional()
37603
+ })
37580
37604
  });
37581
37605
  var CertificateAuthorityStateSchema = import_zod25.z.enum([
37582
37606
  "CREATING",
@@ -37594,6 +37618,8 @@ var CertificateAuthoritySchema = import_zod25.z.object({
37594
37618
  subject: CertificateAuthoritySubjectSchema
37595
37619
  }).optional(),
37596
37620
  csr: import_zod25.z.string().optional(),
37621
+ /** Human-readable subject string, e.g. "CN=demo-ca.test.sci". */
37622
+ display_subject: import_zod25.z.string().optional(),
37597
37623
  id: import_zod25.z.string(),
37598
37624
  /**
37599
37625
  * Required on import certificate operation.
@@ -37622,7 +37648,11 @@ var CertificateAuthoritiesListInputSchema = projectScopedInputSchema.extend({
37622
37648
  });
37623
37649
  var CertificateAuthorityCreateSchema = import_zod25.z.object({
37624
37650
  configuration: import_zod25.z.object({
37625
- subject: CertificateAuthoritySubjectSchema
37651
+ subject: import_zod25.z.object({
37652
+ named_attributes: import_zod25.z.object({
37653
+ cn: import_zod25.z.string().trim().min(1)
37654
+ })
37655
+ })
37626
37656
  })
37627
37657
  });
37628
37658
  var CertificateAuthorityIdInputSchema = projectScopedInputSchema.extend({
@@ -37662,7 +37692,7 @@ var CertificatesListSchema = import_zod25.z.object({
37662
37692
  });
37663
37693
 
37664
37694
  // src/server/Services/routers/pcaRouter.ts
37665
- var PCA_BASE_URL = "certificate-authorities";
37695
+ var PCA_BASE_URL = "v1/certificate-authorities";
37666
37696
  var pcaRouter = {
37667
37697
  list: projectScopedProcedure.input(CertificateAuthoritiesListInputSchema).query(async ({ input, ctx }) => {
37668
37698
  return withErrorHandling3(async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cobaltcore-dev/aurora",
3
- "version": "0.18.0",
3
+ "version": "0.19.0",
4
4
  "private": false,
5
5
  "description": "Aurora OpenStack dashboard — server and client library",
6
6
  "license": "Apache-2.0",
@@ -51,6 +51,7 @@
51
51
  "@headlessui/react": "^2.2.2",
52
52
  "@lingui/core": "^5.9.5",
53
53
  "@lingui/react": "^5.9.5",
54
+ "@peculiar/x509": "^2.0.0",
54
55
  "@tanstack/react-form": "^1.28.5",
55
56
  "@tanstack/react-query": "^5.95.2",
56
57
  "@tanstack/react-router": "^1.168.4",
@@ -65,6 +66,7 @@
65
66
  "node-fetch": "^3.3.2",
66
67
  "react-error-boundary": "^6.1.0",
67
68
  "react-icons": "^5.6.0",
69
+ "reflect-metadata": "^0.2.2",
68
70
  "tailwind-merge": "^3.2.0",
69
71
  "zod": "^4.0.0"
70
72
  },
@@ -106,8 +108,8 @@
106
108
  "vite-plugin-svgr": "^5.0.0",
107
109
  "vite-tsconfig-paths": "^6.1.1",
108
110
  "vitest": "^4.1.2",
109
- "@cobaltcore-dev/policy-engine": "2.0.0",
110
111
  "@cobaltcore-dev/aurora-config": "0.0.1",
112
+ "@cobaltcore-dev/policy-engine": "2.0.0",
111
113
  "@cobaltcore-dev/signal-openstack": "1.0.0"
112
114
  },
113
115
  "scripts": {