@syncular/console 0.0.0 → 0.0.4-25

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 (156) hide show
  1. package/dist/App.d.ts +14 -0
  2. package/dist/App.d.ts.map +1 -0
  3. package/dist/App.js +33 -0
  4. package/dist/App.js.map +1 -0
  5. package/dist/browser-main.d.ts +2 -0
  6. package/dist/browser-main.d.ts.map +1 -0
  7. package/dist/browser-main.js +9 -0
  8. package/dist/browser-main.js.map +1 -0
  9. package/dist/hooks/ConnectionContext.d.ts +30 -0
  10. package/dist/hooks/ConnectionContext.d.ts.map +1 -0
  11. package/dist/hooks/ConnectionContext.js +127 -0
  12. package/dist/hooks/ConnectionContext.js.map +1 -0
  13. package/dist/hooks/index.d.ts +10 -0
  14. package/dist/hooks/index.d.ts.map +1 -0
  15. package/dist/hooks/index.js +10 -0
  16. package/dist/hooks/index.js.map +1 -0
  17. package/dist/hooks/useConsoleApi.d.ts +152 -0
  18. package/dist/hooks/useConsoleApi.d.ts.map +1 -0
  19. package/dist/hooks/useConsoleApi.js +623 -0
  20. package/dist/hooks/useConsoleApi.js.map +1 -0
  21. package/dist/hooks/useInstanceContext.d.ts +9 -0
  22. package/dist/hooks/useInstanceContext.d.ts.map +1 -0
  23. package/dist/hooks/useInstanceContext.js +14 -0
  24. package/dist/hooks/useInstanceContext.js.map +1 -0
  25. package/dist/hooks/useLiveEvents.d.ts +33 -0
  26. package/dist/hooks/useLiveEvents.d.ts.map +1 -0
  27. package/dist/hooks/useLiveEvents.js +199 -0
  28. package/dist/hooks/useLiveEvents.js.map +1 -0
  29. package/dist/hooks/useLocalStorage.d.ts +2 -0
  30. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  31. package/dist/hooks/useLocalStorage.js +36 -0
  32. package/dist/hooks/useLocalStorage.js.map +1 -0
  33. package/dist/hooks/usePartitionContext.d.ts +9 -0
  34. package/dist/hooks/usePartitionContext.d.ts.map +1 -0
  35. package/dist/hooks/usePartitionContext.js +14 -0
  36. package/dist/hooks/usePartitionContext.js.map +1 -0
  37. package/dist/hooks/usePreferences.d.ts +35 -0
  38. package/dist/hooks/usePreferences.d.ts.map +1 -0
  39. package/dist/hooks/usePreferences.js +48 -0
  40. package/dist/hooks/usePreferences.js.map +1 -0
  41. package/dist/hooks/useRequestEvents.d.ts +7 -0
  42. package/dist/hooks/useRequestEvents.d.ts.map +1 -0
  43. package/dist/hooks/useRequestEvents.js +33 -0
  44. package/dist/hooks/useRequestEvents.js.map +1 -0
  45. package/dist/hooks/useTimeRange.d.ts +18 -0
  46. package/dist/hooks/useTimeRange.d.ts.map +1 -0
  47. package/dist/hooks/useTimeRange.js +18 -0
  48. package/dist/hooks/useTimeRange.js.map +1 -0
  49. package/dist/index.d.ts +10 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +10 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/layout.d.ts +6 -0
  54. package/dist/layout.d.ts.map +1 -0
  55. package/dist/layout.js +85 -0
  56. package/dist/layout.js.map +1 -0
  57. package/dist/lib/api.d.ts +11 -0
  58. package/dist/lib/api.d.ts.map +1 -0
  59. package/dist/lib/api.js +20 -0
  60. package/dist/lib/api.js.map +1 -0
  61. package/dist/lib/topology.d.ts +8 -0
  62. package/dist/lib/topology.d.ts.map +1 -0
  63. package/dist/lib/topology.js +76 -0
  64. package/dist/lib/topology.js.map +1 -0
  65. package/dist/lib/types.d.ts +194 -0
  66. package/dist/lib/types.d.ts.map +1 -0
  67. package/dist/lib/types.js +5 -0
  68. package/dist/lib/types.js.map +1 -0
  69. package/dist/mount.d.ts +10 -0
  70. package/dist/mount.d.ts.map +1 -0
  71. package/dist/mount.js +25 -0
  72. package/dist/mount.js.map +1 -0
  73. package/dist/pages/Command.d.ts +2 -0
  74. package/dist/pages/Command.d.ts.map +1 -0
  75. package/dist/pages/Command.js +215 -0
  76. package/dist/pages/Command.js.map +1 -0
  77. package/dist/pages/Config.d.ts +2 -0
  78. package/dist/pages/Config.d.ts.map +1 -0
  79. package/dist/pages/Config.js +504 -0
  80. package/dist/pages/Config.js.map +1 -0
  81. package/dist/pages/Fleet.d.ts +2 -0
  82. package/dist/pages/Fleet.d.ts.map +1 -0
  83. package/dist/pages/Fleet.js +126 -0
  84. package/dist/pages/Fleet.js.map +1 -0
  85. package/dist/pages/Ops.d.ts +2 -0
  86. package/dist/pages/Ops.d.ts.map +1 -0
  87. package/dist/pages/Ops.js +294 -0
  88. package/dist/pages/Ops.js.map +1 -0
  89. package/dist/pages/Stream.d.ts +6 -0
  90. package/dist/pages/Stream.d.ts.map +1 -0
  91. package/dist/pages/Stream.js +403 -0
  92. package/dist/pages/Stream.js.map +1 -0
  93. package/dist/pages/index.d.ts +6 -0
  94. package/dist/pages/index.d.ts.map +1 -0
  95. package/dist/pages/index.js +6 -0
  96. package/dist/pages/index.js.map +1 -0
  97. package/dist/routeTree.d.ts +2 -0
  98. package/dist/routeTree.d.ts.map +1 -0
  99. package/dist/routeTree.js +18 -0
  100. package/dist/routeTree.js.map +1 -0
  101. package/dist/routes/__root.d.ts +2 -0
  102. package/dist/routes/__root.d.ts.map +1 -0
  103. package/dist/routes/__root.js +6 -0
  104. package/dist/routes/__root.js.map +1 -0
  105. package/dist/routes/config.d.ts +2 -0
  106. package/dist/routes/config.d.ts.map +1 -0
  107. package/dist/routes/config.js +9 -0
  108. package/dist/routes/config.js.map +1 -0
  109. package/dist/routes/fleet.d.ts +2 -0
  110. package/dist/routes/fleet.d.ts.map +1 -0
  111. package/dist/routes/fleet.js +9 -0
  112. package/dist/routes/fleet.js.map +1 -0
  113. package/dist/routes/index.d.ts +2 -0
  114. package/dist/routes/index.d.ts.map +1 -0
  115. package/dist/routes/index.js +9 -0
  116. package/dist/routes/index.js.map +1 -0
  117. package/dist/routes/investigate-commit.d.ts +2 -0
  118. package/dist/routes/investigate-commit.d.ts.map +1 -0
  119. package/dist/routes/investigate-commit.js +14 -0
  120. package/dist/routes/investigate-commit.js.map +1 -0
  121. package/dist/routes/investigate-event.d.ts +2 -0
  122. package/dist/routes/investigate-event.d.ts.map +1 -0
  123. package/dist/routes/investigate-event.js +14 -0
  124. package/dist/routes/investigate-event.js.map +1 -0
  125. package/dist/routes/ops.d.ts +2 -0
  126. package/dist/routes/ops.d.ts.map +1 -0
  127. package/dist/routes/ops.js +9 -0
  128. package/dist/routes/ops.js.map +1 -0
  129. package/dist/routes/stream.d.ts +2 -0
  130. package/dist/routes/stream.d.ts.map +1 -0
  131. package/dist/routes/stream.js +9 -0
  132. package/dist/routes/stream.js.map +1 -0
  133. package/dist/runtime-config.d.ts +12 -0
  134. package/dist/runtime-config.d.ts.map +1 -0
  135. package/dist/runtime-config.js +35 -0
  136. package/dist/runtime-config.js.map +1 -0
  137. package/dist/sentry.d.ts +11 -0
  138. package/dist/sentry.d.ts.map +1 -0
  139. package/dist/sentry.js +60 -0
  140. package/dist/sentry.js.map +1 -0
  141. package/package.json +27 -7
  142. package/src/App.tsx +46 -25
  143. package/src/browser-main.tsx +10 -0
  144. package/src/index.ts +1 -0
  145. package/src/mount.tsx +6 -3
  146. package/src/runtime-config.ts +50 -0
  147. package/web-dist/apple-touch-icon.png +0 -0
  148. package/web-dist/chunk-7ayekhzx.css +1 -0
  149. package/web-dist/chunk-myppbvt5.js +90 -0
  150. package/web-dist/favicon-96x96.png +0 -0
  151. package/web-dist/favicon.ico +0 -0
  152. package/web-dist/favicon.svg +3 -0
  153. package/web-dist/index.html +19 -0
  154. package/web-dist/site.webmanifest +21 -0
  155. package/web-dist/web-app-manifest-192x192.png +0 -0
  156. package/web-dist/web-app-manifest-512x512.png +0 -0
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createRoute } from '@tanstack/react-router';
3
+ import { Stream } from '../pages/index.js';
4
+ import { Route as rootRoute } from './__root.js';
5
+ function InvestigateCommit() {
6
+ const { seq } = Route.useParams();
7
+ return _jsx(Stream, { initialSelectedEntryId: `#${seq}` });
8
+ }
9
+ export const Route = createRoute({
10
+ getParentRoute: () => rootRoute,
11
+ path: '/investigate/commit/$seq',
12
+ component: InvestigateCommit,
13
+ });
14
+ //# sourceMappingURL=investigate-commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investigate-commit.js","sourceRoot":"","sources":["../../src/routes/investigate-commit.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,UAAU,CAAC;AAE9C,SAAS,iBAAiB,GAAG;IAC3B,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAClC,OAAO,KAAC,MAAM,IAAC,sBAAsB,EAAE,IAAI,GAAG,EAAE,GAAI,CAAC;AAAA,CACtD;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;IAC/B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;IAC/B,IAAI,EAAE,0BAA0B;IAChC,SAAS,EAAE,iBAAiB;CAC7B,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const Route: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, undefined, {}, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/investigate/event/$id", "/investigate/event/$id", string, "/investigate/event/$id", undefined, import("@tanstack/router-core").ResolveParams<"/investigate/event/$id">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
2
+ //# sourceMappingURL=investigate-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investigate-event.d.ts","sourceRoot":"","sources":["../../src/routes/investigate-event.tsx"],"names":[],"mappings":"AASA,eAAO,MAAM,KAAK,ypBAIhB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createRoute } from '@tanstack/react-router';
3
+ import { Stream } from '../pages/index.js';
4
+ import { Route as rootRoute } from './__root.js';
5
+ function InvestigateEvent() {
6
+ const { id } = Route.useParams();
7
+ return _jsx(Stream, { initialSelectedEntryId: `E${id}` });
8
+ }
9
+ export const Route = createRoute({
10
+ getParentRoute: () => rootRoute,
11
+ path: '/investigate/event/$id',
12
+ component: InvestigateEvent,
13
+ });
14
+ //# sourceMappingURL=investigate-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investigate-event.js","sourceRoot":"","sources":["../../src/routes/investigate-event.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,UAAU,CAAC;AAE9C,SAAS,gBAAgB,GAAG;IAC1B,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,OAAO,KAAC,MAAM,IAAC,sBAAsB,EAAE,IAAI,EAAE,EAAE,GAAI,CAAC;AAAA,CACrD;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;IAC/B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;IAC/B,IAAI,EAAE,wBAAwB;IAC9B,SAAS,EAAE,gBAAgB;CAC5B,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const Route: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, undefined, {}, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/ops", "/ops", string, "/ops", undefined, import("@tanstack/router-core").ResolveParams<"/ops">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
2
+ //# sourceMappingURL=ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/routes/ops.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,KAAK,ilBAIhB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { createRoute } from '@tanstack/react-router';
2
+ import { Ops } from '../pages/index.js';
3
+ import { Route as rootRoute } from './__root.js';
4
+ export const Route = createRoute({
5
+ getParentRoute: () => rootRoute,
6
+ path: '/ops',
7
+ component: Ops,
8
+ });
9
+ //# sourceMappingURL=ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/routes/ops.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;IAC/B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;IAC/B,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,GAAG;CACf,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const Route: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, undefined, {}, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/stream", "/stream", string, "/stream", undefined, import("@tanstack/router-core").ResolveParams<"/stream">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
2
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/routes/stream.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,KAAK,6lBAIhB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { createRoute } from '@tanstack/react-router';
2
+ import { Stream } from '../pages/index.js';
3
+ import { Route as rootRoute } from './__root.js';
4
+ export const Route = createRoute({
5
+ getParentRoute: () => rootRoute,
6
+ path: '/stream',
7
+ component: Stream,
8
+ });
9
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/routes/stream.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;IAC/B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;IAC/B,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,MAAM;CAClB,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const CONSOLE_BASEPATH_META = "syncular-console-basepath";
2
+ export declare const CONSOLE_SERVER_URL_META = "syncular-console-server-url";
3
+ export declare const CONSOLE_TOKEN_META = "syncular-console-token";
4
+ interface ConsoleConnectionConfig {
5
+ serverUrl: string;
6
+ token: string;
7
+ }
8
+ export declare function normalizeBasePath(basePath: string | undefined): string;
9
+ export declare function resolveConsoleBasePathFromMeta(): string;
10
+ export declare function resolveConsoleConnectionConfigFromMeta(): ConsoleConnectionConfig | null;
11
+ export {};
12
+ //# sourceMappingURL=runtime-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-config.d.ts","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AACjE,eAAO,MAAM,uBAAuB,gCAAgC,CAAC;AACrE,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAE3D,UAAU,uBAAuB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AA2BD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAItE;AAED,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED,wBAAgB,sCAAsC,IAAI,uBAAuB,GAAG,IAAI,CAKvF"}
@@ -0,0 +1,35 @@
1
+ export const CONSOLE_BASEPATH_META = 'syncular-console-basepath';
2
+ export const CONSOLE_SERVER_URL_META = 'syncular-console-server-url';
3
+ export const CONSOLE_TOKEN_META = 'syncular-console-token';
4
+ function cleanValue(value) {
5
+ if (!value)
6
+ return undefined;
7
+ const trimmed = value.trim();
8
+ return trimmed.length > 0 ? trimmed : undefined;
9
+ }
10
+ function readMeta(name) {
11
+ const documentLike = globalThis.document;
12
+ if (!documentLike)
13
+ return undefined;
14
+ const value = documentLike
15
+ .querySelector(`meta[name="${name}"]`)
16
+ ?.getAttribute('content');
17
+ return cleanValue(value);
18
+ }
19
+ export function normalizeBasePath(basePath) {
20
+ if (!basePath || basePath === '/')
21
+ return '/';
22
+ const withLeadingSlash = basePath.startsWith('/') ? basePath : `/${basePath}`;
23
+ return withLeadingSlash.replace(/\/+$/g, '') || '/';
24
+ }
25
+ export function resolveConsoleBasePathFromMeta() {
26
+ return normalizeBasePath(readMeta(CONSOLE_BASEPATH_META));
27
+ }
28
+ export function resolveConsoleConnectionConfigFromMeta() {
29
+ const serverUrl = readMeta(CONSOLE_SERVER_URL_META);
30
+ const token = readMeta(CONSOLE_TOKEN_META);
31
+ if (!serverUrl || !token)
32
+ return null;
33
+ return { serverUrl, token };
34
+ }
35
+ //# sourceMappingURL=runtime-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAe3D,SAAS,UAAU,CAAC,KAAgC,EAAsB;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CACjD;AAED,SAAS,QAAQ,CAAC,IAAY,EAAsB;IAClD,MAAM,YAAY,GAAI,UAA8C,CAAC,QAAQ,CAAC;IAC9E,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAEpC,MAAM,KAAK,GAAG,YAAY;SACvB,aAAa,CAAC,cAAc,IAAI,IAAI,CAAC;QACtC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAE5B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAAA,CAC1B;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA4B,EAAU;IACtE,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAC9C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;IAC9E,OAAO,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AAAA,CACrD;AAED,MAAM,UAAU,8BAA8B,GAAW;IACvD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAAA,CAC3D;AAED,MAAM,UAAU,sCAAsC,GAAmC;IACvF,MAAM,SAAS,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAAA,CAC7B"}
@@ -0,0 +1,11 @@
1
+ import type { BrowserSentryInitOptions } from '@syncular/observability-sentry';
2
+ declare global {
3
+ var __SYNCULAR_SENTRY_DSN__: string | undefined;
4
+ var __SYNCULAR_SENTRY_ENVIRONMENT__: string | undefined;
5
+ var __SYNCULAR_SENTRY_RELEASE__: string | undefined;
6
+ }
7
+ /**
8
+ * Resolve browser Sentry options from globals, meta tags, or build-time env.
9
+ */
10
+ export declare function resolveConsoleBrowserSentryOptions(): BrowserSentryInitOptions | null;
11
+ //# sourceMappingURL=sentry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../src/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,CAAC,MAAM,CAAC,CAAC;IACd,IAAI,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,IAAI,+BAA+B,EAAE,MAAM,GAAG,SAAS,CAAC;IACxD,IAAI,2BAA2B,EAAE,MAAM,GAAG,SAAS,CAAC;CACrD;AAgCD;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,wBAAwB,GAAG,IAAI,CA4BpF"}
package/dist/sentry.js ADDED
@@ -0,0 +1,60 @@
1
+ const SENTRY_DSN_META = 'syncular-sentry-dsn';
2
+ const SENTRY_ENVIRONMENT_META = 'syncular-sentry-environment';
3
+ const SENTRY_RELEASE_META = 'syncular-sentry-release';
4
+ function cleanValue(value) {
5
+ if (!value)
6
+ return undefined;
7
+ const trimmed = value.trim();
8
+ return trimmed.length > 0 ? trimmed : undefined;
9
+ }
10
+ function readMeta(name) {
11
+ if (typeof document === 'undefined')
12
+ return undefined;
13
+ const value = document
14
+ .querySelector(`meta[name="${name}"]`)
15
+ ?.getAttribute('content');
16
+ return cleanValue(value);
17
+ }
18
+ function readEnv(name) {
19
+ if (typeof process === 'undefined')
20
+ return undefined;
21
+ return cleanValue(process.env[name]);
22
+ }
23
+ function firstDefined(values) {
24
+ for (const value of values) {
25
+ if (value)
26
+ return value;
27
+ }
28
+ return undefined;
29
+ }
30
+ /**
31
+ * Resolve browser Sentry options from globals, meta tags, or build-time env.
32
+ */
33
+ export function resolveConsoleBrowserSentryOptions() {
34
+ const dsn = firstDefined([
35
+ cleanValue(globalThis.__SYNCULAR_SENTRY_DSN__),
36
+ readMeta(SENTRY_DSN_META),
37
+ readEnv('SYNCULAR_SENTRY_DSN'),
38
+ ]);
39
+ if (!dsn)
40
+ return null;
41
+ const environment = firstDefined([
42
+ cleanValue(globalThis.__SYNCULAR_SENTRY_ENVIRONMENT__),
43
+ readMeta(SENTRY_ENVIRONMENT_META),
44
+ readEnv('SYNCULAR_SENTRY_ENVIRONMENT'),
45
+ ]);
46
+ const release = firstDefined([
47
+ cleanValue(globalThis.__SYNCULAR_SENTRY_RELEASE__),
48
+ readMeta(SENTRY_RELEASE_META),
49
+ readEnv('SYNCULAR_SENTRY_RELEASE'),
50
+ ]);
51
+ return {
52
+ dsn,
53
+ environment,
54
+ release,
55
+ enableLogs: true,
56
+ tracesSampleRate: 0.2,
57
+ tracePropagationTargets: [/^https?:\/\/.*\/api\/.*/],
58
+ };
59
+ }
60
+ //# sourceMappingURL=sentry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../src/sentry.ts"],"names":[],"mappings":"AAQA,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAC9C,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAEtD,SAAS,UAAU,CAAC,KAAgC,EAAsB;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CACjD;AAED,SAAS,QAAQ,CAAC,IAAY,EAAsB;IAClD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,KAAK,GAAG,QAAQ;SACnB,aAAa,CAAC,cAAc,IAAI,IAAI,CAAC;QACtC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAAA,CAC1B;AAED,SAAS,OAAO,CAAC,IAAY,EAAsB;IACjD,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACrD,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAAA,CACtC;AAED,SAAS,YAAY,CAAC,MAAiC,EAAsB;IAC3E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AAAA,CAClB;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC,GAAoC;IACpF,MAAM,GAAG,GAAG,YAAY,CAAC;QACvB,UAAU,CAAC,UAAU,CAAC,uBAAuB,CAAC;QAC9C,QAAQ,CAAC,eAAe,CAAC;QACzB,OAAO,CAAC,qBAAqB,CAAC;KAC/B,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,WAAW,GAAG,YAAY,CAAC;QAC/B,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC;QACtD,QAAQ,CAAC,uBAAuB,CAAC;QACjC,OAAO,CAAC,6BAA6B,CAAC;KACvC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,YAAY,CAAC;QAC3B,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC;QAClD,QAAQ,CAAC,mBAAmB,CAAC;QAC7B,OAAO,CAAC,yBAAyB,CAAC;KACnC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG;QACH,WAAW;QACX,OAAO;QACP,UAAU,EAAE,IAAI;QAChB,gBAAgB,EAAE,GAAG;QACrB,uBAAuB,EAAE,CAAC,yBAAyB,CAAC;KACrD,CAAC;AAAA,CACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/console",
3
- "version": "0.0.0",
3
+ "version": "0.0.4-25",
4
4
  "description": "Embeddable Syncular console UI",
5
5
  "license": "MIT",
6
6
  "author": "Benjamin Kniffler",
@@ -34,17 +34,34 @@
34
34
  "default": "./dist/index.js"
35
35
  }
36
36
  },
37
+ "./runtime-config": {
38
+ "bun": "./src/runtime-config.ts",
39
+ "import": {
40
+ "types": "./dist/runtime-config.d.ts",
41
+ "default": "./dist/runtime-config.js"
42
+ }
43
+ },
44
+ "./browser-main": {
45
+ "bun": "./src/browser-main.tsx",
46
+ "import": {
47
+ "types": "./dist/browser-main.d.ts",
48
+ "default": "./dist/browser-main.js"
49
+ }
50
+ },
51
+ "./static": "./web-dist/index.html",
52
+ "./static/*": "./web-dist/*",
37
53
  "./styles.css": "./src/styles/globals.css"
38
54
  },
39
55
  "scripts": {
40
56
  "tsgo": "tsgo --noEmit",
41
- "build": "tsgo",
57
+ "build": "tsgo && bun run build:web",
58
+ "build:web": "bun run build-static.ts",
42
59
  "release": "bunx syncular-publish"
43
60
  },
44
61
  "dependencies": {
45
- "@syncular/observability-sentry": "0.0.0",
46
- "@syncular/transport-http": "0.0.0",
47
- "@syncular/ui": "0.0.0",
62
+ "@syncular/observability-sentry": "0.0.4-25",
63
+ "@syncular/transport-http": "0.0.4-25",
64
+ "@syncular/ui": "0.0.4-25",
48
65
  "@tanstack/react-query": "^5.90.21",
49
66
  "@tanstack/react-router": "^1.159.5",
50
67
  "lucide-react": "^0.563.0"
@@ -57,11 +74,14 @@
57
74
  "@syncular/config": "0.0.0",
58
75
  "@types/react": "^19",
59
76
  "@types/react-dom": "^19",
77
+ "bun-plugin-tailwind": "^0.1.2",
60
78
  "react": "^19.2.4",
61
- "react-dom": "^19.2.4"
79
+ "react-dom": "^19.2.4",
80
+ "tailwindcss": "^4.1.18"
62
81
  },
63
82
  "files": [
64
83
  "dist",
65
- "src"
84
+ "src",
85
+ "web-dist"
66
86
  ]
67
87
  }
package/src/App.tsx CHANGED
@@ -1,44 +1,65 @@
1
1
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
2
2
  import { createRouter, RouterProvider } from '@tanstack/react-router';
3
+ import { useMemo, useState } from 'react';
3
4
  import { ConnectionProvider } from './hooks/ConnectionContext';
5
+ import type { ConnectionConfig } from './lib/api';
4
6
  import { routeTree } from './routeTree';
7
+ import {
8
+ normalizeBasePath,
9
+ resolveConsoleBasePathFromMeta,
10
+ resolveConsoleConnectionConfigFromMeta,
11
+ } from './runtime-config';
5
12
 
6
- function getInjectedBasepath(): string {
7
- if (typeof document === 'undefined') return '/';
8
- const meta = document.querySelector<HTMLMetaElement>(
9
- 'meta[name="syncular-console-basepath"]'
10
- );
11
- const value = meta?.content?.trim();
12
- if (!value) return '/';
13
- if (value === '/') return '/';
14
- return value.startsWith('/') ? value.replace(/\/$/, '') : '/';
13
+ const routerForTypes = createRouter({ routeTree, basepath: '/' });
14
+
15
+ declare module '@tanstack/react-router' {
16
+ interface Register {
17
+ router: typeof routerForTypes;
18
+ }
15
19
  }
16
20
 
17
- const basepath = getInjectedBasepath();
21
+ export interface SyncularConsoleProps {
22
+ basePath?: string;
23
+ defaultConfig?: ConnectionConfig | null;
24
+ }
18
25
 
19
- const queryClient = new QueryClient({
20
- defaultOptions: {
21
- queries: {
22
- staleTime: 5000,
23
- retry: 1,
26
+ function createDefaultQueryClient(): QueryClient {
27
+ return new QueryClient({
28
+ defaultOptions: {
29
+ queries: {
30
+ staleTime: 5000,
31
+ retry: 1,
32
+ },
24
33
  },
25
- },
26
- });
27
-
28
- const router = createRouter({ routeTree, basepath });
34
+ });
35
+ }
29
36
 
30
- declare module '@tanstack/react-router' {
31
- interface Register {
32
- router: typeof router;
33
- }
37
+ function resolveBasePath(basePath: string | undefined): string {
38
+ return normalizeBasePath(basePath ?? resolveConsoleBasePathFromMeta());
34
39
  }
35
40
 
36
- export function App() {
41
+ function SyncularConsole(props: SyncularConsoleProps) {
42
+ const [queryClient] = useState(() => createDefaultQueryClient());
43
+ const router = useMemo(
44
+ () =>
45
+ createRouter({ routeTree, basepath: resolveBasePath(props.basePath) }),
46
+ [props.basePath]
47
+ );
48
+
49
+ const defaultConfig =
50
+ props.defaultConfig === undefined
51
+ ? resolveConsoleConnectionConfigFromMeta()
52
+ : props.defaultConfig;
53
+
37
54
  return (
38
55
  <QueryClientProvider client={queryClient}>
39
- <ConnectionProvider>
56
+ <ConnectionProvider defaultConfig={defaultConfig}>
40
57
  <RouterProvider router={router} />
41
58
  </ConnectionProvider>
42
59
  </QueryClientProvider>
43
60
  );
44
61
  }
62
+
63
+ export function App(props: SyncularConsoleProps) {
64
+ return <SyncularConsole {...props} />;
65
+ }
@@ -0,0 +1,10 @@
1
+ import { initAndConfigureBrowserSentry } from '@syncular/observability-sentry';
2
+ import { mountSyncularConsoleApp } from './mount';
3
+ import { resolveConsoleBrowserSentryOptions } from './sentry';
4
+
5
+ const sentryOptions = resolveConsoleBrowserSentryOptions();
6
+ if (sentryOptions) {
7
+ initAndConfigureBrowserSentry(sentryOptions);
8
+ }
9
+
10
+ mountSyncularConsoleApp('#root');
package/src/index.ts CHANGED
@@ -5,4 +5,5 @@ export * from './lib/api';
5
5
  export * from './mount';
6
6
  export * from './pages';
7
7
  export * from './routeTree';
8
+ export * from './runtime-config';
8
9
  export * from './sentry';
package/src/mount.tsx CHANGED
@@ -1,10 +1,11 @@
1
1
  import { StrictMode } from 'react';
2
2
  import { createRoot, type Root } from 'react-dom/client';
3
- import { App } from './App';
4
- import './styles/globals.css';
3
+ import { App, type SyncularConsoleProps } from './App';
5
4
 
6
5
  interface MountSyncularConsoleOptions {
7
6
  strictMode?: boolean;
7
+ basePath?: SyncularConsoleProps['basePath'];
8
+ defaultConfig?: SyncularConsoleProps['defaultConfig'];
8
9
  }
9
10
 
10
11
  function resolveContainer(containerOrSelector: Element | string): Element {
@@ -27,7 +28,9 @@ export function mountSyncularConsoleApp(
27
28
  options: MountSyncularConsoleOptions = {}
28
29
  ): Root {
29
30
  const root = createRoot(resolveContainer(containerOrSelector));
30
- const app = <App />;
31
+ const app = (
32
+ <App basePath={options.basePath} defaultConfig={options.defaultConfig} />
33
+ );
31
34
 
32
35
  if (options.strictMode === false) {
33
36
  root.render(app);
@@ -0,0 +1,50 @@
1
+ export const CONSOLE_BASEPATH_META = 'syncular-console-basepath';
2
+ export const CONSOLE_SERVER_URL_META = 'syncular-console-server-url';
3
+ export const CONSOLE_TOKEN_META = 'syncular-console-token';
4
+
5
+ interface ConsoleConnectionConfig {
6
+ serverUrl: string;
7
+ token: string;
8
+ }
9
+
10
+ interface MetaElementLike {
11
+ getAttribute: (name: string) => string | null;
12
+ }
13
+
14
+ interface MetaDocumentLike {
15
+ querySelector: (selector: string) => MetaElementLike | null;
16
+ }
17
+
18
+ function cleanValue(value: string | null | undefined): string | undefined {
19
+ if (!value) return undefined;
20
+ const trimmed = value.trim();
21
+ return trimmed.length > 0 ? trimmed : undefined;
22
+ }
23
+
24
+ function readMeta(name: string): string | undefined {
25
+ const documentLike = (globalThis as { document?: MetaDocumentLike }).document;
26
+ if (!documentLike) return undefined;
27
+
28
+ const value = documentLike
29
+ .querySelector(`meta[name="${name}"]`)
30
+ ?.getAttribute('content');
31
+
32
+ return cleanValue(value);
33
+ }
34
+
35
+ export function normalizeBasePath(basePath: string | undefined): string {
36
+ if (!basePath || basePath === '/') return '/';
37
+ const withLeadingSlash = basePath.startsWith('/') ? basePath : `/${basePath}`;
38
+ return withLeadingSlash.replace(/\/+$/g, '') || '/';
39
+ }
40
+
41
+ export function resolveConsoleBasePathFromMeta(): string {
42
+ return normalizeBasePath(readMeta(CONSOLE_BASEPATH_META));
43
+ }
44
+
45
+ export function resolveConsoleConnectionConfigFromMeta(): ConsoleConnectionConfig | null {
46
+ const serverUrl = readMeta(CONSOLE_SERVER_URL_META);
47
+ const token = readMeta(CONSOLE_TOKEN_META);
48
+ if (!serverUrl || !token) return null;
49
+ return { serverUrl, token };
50
+ }
Binary file