@superblocksteam/sdk 2.0.83 → 2.0.84-next.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.
- package/.turbo/turbo-build.log +1 -1
- package/dist/cli-replacement/automatic-upgrades.d.ts +0 -6
- package/dist/cli-replacement/automatic-upgrades.d.ts.map +1 -1
- package/dist/cli-replacement/automatic-upgrades.js +5 -27
- package/dist/cli-replacement/automatic-upgrades.js.map +1 -1
- package/dist/cli-replacement/dev.d.mts.map +1 -1
- package/dist/cli-replacement/dev.mjs +260 -217
- package/dist/cli-replacement/dev.mjs.map +1 -1
- package/dist/cli-replacement/version-detection.d.ts +71 -0
- package/dist/cli-replacement/version-detection.d.ts.map +1 -0
- package/dist/cli-replacement/version-detection.js +186 -0
- package/dist/cli-replacement/version-detection.js.map +1 -0
- package/dist/cli-replacement/version-detection.test.d.ts +5 -0
- package/dist/cli-replacement/version-detection.test.d.ts.map +1 -0
- package/dist/cli-replacement/version-detection.test.js +257 -0
- package/dist/cli-replacement/version-detection.test.js.map +1 -0
- package/dist/dev-utils/dev-server.mjs +133 -115
- package/dist/dev-utils/dev-server.mjs.map +1 -1
- package/dist/telemetry/index.d.ts +4 -4
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +92 -64
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/index.test.d.ts +2 -0
- package/dist/telemetry/index.test.d.ts.map +1 -0
- package/dist/telemetry/index.test.js +93 -0
- package/dist/telemetry/index.test.js.map +1 -0
- package/dist/telemetry/local-obs.d.ts +73 -0
- package/dist/telemetry/local-obs.d.ts.map +1 -0
- package/dist/telemetry/local-obs.js +107 -0
- package/dist/telemetry/local-obs.js.map +1 -0
- package/dist/telemetry/util.d.ts +1 -2
- package/dist/telemetry/util.d.ts.map +1 -1
- package/dist/telemetry/util.js +26 -4
- package/dist/telemetry/util.js.map +1 -1
- package/package.json +6 -5
- package/src/cli-replacement/automatic-upgrades.ts +10 -42
- package/src/cli-replacement/dev.mts +336 -281
- package/src/cli-replacement/version-detection.test.ts +336 -0
- package/src/cli-replacement/version-detection.ts +220 -0
- package/src/dev-utils/dev-server.mts +149 -127
- package/src/telemetry/index.test.ts +130 -0
- package/src/telemetry/index.ts +105 -83
- package/src/telemetry/local-obs.ts +138 -0
- package/src/telemetry/util.ts +27 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/turbo.json +20 -2
|
@@ -536,145 +536,167 @@ async function startVite({
|
|
|
536
536
|
dispose: () => void;
|
|
537
537
|
routeIndex: number;
|
|
538
538
|
}> {
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
539
|
+
return tracer.startActiveSpan("startVite", async (startViteSpan) => {
|
|
540
|
+
try {
|
|
541
|
+
const logger = getLogger(loggerOverride);
|
|
542
|
+
logger.info("Creating dev server...");
|
|
543
|
+
const viteLogger = createLogger();
|
|
544
|
+
viteLogger.info = (msg: string) => logger.info(msg);
|
|
545
|
+
viteLogger.warn = (msg: string) => {
|
|
546
|
+
logger.warn(msg);
|
|
547
|
+
};
|
|
548
|
+
viteLogger.warnOnce = (msg: string) => {
|
|
549
|
+
logger.warn(msg);
|
|
550
|
+
};
|
|
551
|
+
viteLogger.error = (msg: string) => {
|
|
552
|
+
logger.error(msg);
|
|
553
|
+
};
|
|
554
554
|
|
|
555
|
-
|
|
556
|
-
logger.debug(
|
|
557
|
-
`Custom components ${isCustomBuildEnabled ? "enabled" : "disabled"}`,
|
|
558
|
-
);
|
|
559
|
-
const customFolder = path.join(root, "custom");
|
|
560
|
-
const draftsFolder = path.join(root, ".superblocks");
|
|
555
|
+
viteLogger.clearScreen = () => {};
|
|
561
556
|
|
|
562
|
-
|
|
557
|
+
const isCustomBuildEnabled = await isCustomComponentsEnabled();
|
|
558
|
+
logger.debug(
|
|
559
|
+
`Custom components ${isCustomBuildEnabled ? "enabled" : "disabled"}`,
|
|
560
|
+
);
|
|
561
|
+
const customFolder = path.join(root, "custom");
|
|
562
|
+
const draftsFolder = path.join(root, ".superblocks");
|
|
563
563
|
|
|
564
|
-
|
|
565
|
-
logger.debug(`Allocated HMR port: ${hmrPort}`);
|
|
564
|
+
const env = loadEnv(mode, root, "");
|
|
566
565
|
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
clientPort: port,
|
|
570
|
-
server: httpServer,
|
|
571
|
-
overlay: false,
|
|
572
|
-
};
|
|
566
|
+
const hmrPort = await getFreePort();
|
|
567
|
+
logger.debug(`Allocated HMR port: ${hmrPort}`);
|
|
573
568
|
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
`CSB environment detected, HMR configured for host: ${hmrHost}`,
|
|
581
|
-
);
|
|
582
|
-
}
|
|
569
|
+
const hmrOptions: HmrOptions = {
|
|
570
|
+
port: hmrPort,
|
|
571
|
+
clientPort: port,
|
|
572
|
+
server: httpServer,
|
|
573
|
+
overlay: false,
|
|
574
|
+
};
|
|
583
575
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
576
|
+
// https://codesandbox.io/docs/learn/environment/preview-urls#using-environment-variables
|
|
577
|
+
if (process.env.CSB_BASE_PREVIEW_HOST) {
|
|
578
|
+
const hmrHost = `${os.hostname()}-${port}.${process.env.CSB_BASE_PREVIEW_HOST}`;
|
|
579
|
+
hmrOptions.host = hmrHost;
|
|
580
|
+
hmrOptions.clientPort = 443; // tells client to use default ssl port
|
|
581
|
+
logger.debug(
|
|
582
|
+
`CSB environment detected, HMR configured for host: ${hmrHost}`,
|
|
583
|
+
);
|
|
584
|
+
}
|
|
591
585
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
checkAuthorization,
|
|
600
|
-
tracer,
|
|
601
|
-
logger,
|
|
602
|
-
features,
|
|
603
|
-
},
|
|
604
|
-
{ isCustomBuildEnabled },
|
|
605
|
-
);
|
|
586
|
+
if (process.env.SABS_LIVE_EDIT_HOSTNAME) {
|
|
587
|
+
hmrOptions.host = process.env.SABS_LIVE_EDIT_HOSTNAME;
|
|
588
|
+
hmrOptions.clientPort = 443; // tells client to use default ssl port
|
|
589
|
+
logger.debug(
|
|
590
|
+
`SABS environment detected, HMR configured for host: ${hmrOptions.host}`,
|
|
591
|
+
);
|
|
592
|
+
}
|
|
606
593
|
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
[
|
|
648
|
-
import.meta.resolve("@babel/plugin-proposal-decorators"),
|
|
649
|
-
{
|
|
650
|
-
version: "2023-11",
|
|
594
|
+
const fileSyncPluginCreator = fileSyncVitePlugin(
|
|
595
|
+
{
|
|
596
|
+
fsOperationQueue,
|
|
597
|
+
syncService,
|
|
598
|
+
lockService,
|
|
599
|
+
aiService,
|
|
600
|
+
httpServer,
|
|
601
|
+
checkAuthorization,
|
|
602
|
+
tracer,
|
|
603
|
+
logger,
|
|
604
|
+
features,
|
|
605
|
+
},
|
|
606
|
+
{ isCustomBuildEnabled },
|
|
607
|
+
);
|
|
608
|
+
|
|
609
|
+
logger.debug("Configuring dev server with plugins and options");
|
|
610
|
+
const viteServer = await tracer.startActiveSpan(
|
|
611
|
+
"viteCreateServer",
|
|
612
|
+
async (viteCreateSpan) => {
|
|
613
|
+
try {
|
|
614
|
+
const server = await createServer({
|
|
615
|
+
root,
|
|
616
|
+
mode,
|
|
617
|
+
clearScreen: process.env.SUPERBLOCKS_CLI_ENV !== "local",
|
|
618
|
+
customLogger: viteLogger,
|
|
619
|
+
server: {
|
|
620
|
+
middlewareMode: true,
|
|
621
|
+
watch: {
|
|
622
|
+
ignored: [`${customFolder}/**/*`, `${draftsFolder}/**/*`],
|
|
623
|
+
},
|
|
624
|
+
hmr: hmrOptions,
|
|
625
|
+
cors: {
|
|
626
|
+
origin: true,
|
|
627
|
+
credentials: true,
|
|
628
|
+
},
|
|
629
|
+
},
|
|
630
|
+
build: {
|
|
631
|
+
rollupOptions: {
|
|
632
|
+
external: [`${customFolder}/**/*`],
|
|
633
|
+
},
|
|
651
634
|
},
|
|
652
|
-
|
|
653
|
-
|
|
635
|
+
define: {
|
|
636
|
+
// this replaces a string in @superblocksteam/shared
|
|
637
|
+
"process.env.SUPERBLOCKS_PUBLIC_INTEGRATIONS_CDN_URL": process
|
|
638
|
+
.env.SUPERBLOCKS_PUBLIC_INTEGRATIONS_CDN_URL
|
|
639
|
+
? JSON.stringify(
|
|
640
|
+
process.env.SUPERBLOCKS_PUBLIC_INTEGRATIONS_CDN_URL,
|
|
641
|
+
)
|
|
642
|
+
: "undefined",
|
|
643
|
+
},
|
|
644
|
+
plugins: [
|
|
645
|
+
tsconfigPaths(),
|
|
646
|
+
customComponentsPlugin(),
|
|
647
|
+
fileSyncPluginCreator.plugin,
|
|
648
|
+
// Add a virtual "stub" module for the build manifest
|
|
649
|
+
buildManifestStubPlugin(),
|
|
650
|
+
react({
|
|
651
|
+
babel: {
|
|
652
|
+
plugins: [
|
|
653
|
+
// We will bring this back later
|
|
654
|
+
// "babel-plugin-react-compiler",
|
|
655
|
+
[
|
|
656
|
+
import.meta
|
|
657
|
+
.resolve("@babel/plugin-proposal-decorators"),
|
|
658
|
+
{
|
|
659
|
+
version: "2023-11",
|
|
660
|
+
},
|
|
661
|
+
],
|
|
662
|
+
],
|
|
663
|
+
},
|
|
664
|
+
}),
|
|
665
|
+
createLucideReactImportOptimizer(),
|
|
666
|
+
ddRumPlugin({
|
|
667
|
+
clientToken: env.SUPERBLOCKS_LIBRARY_DD_CLIENT_TOKEN ?? "",
|
|
668
|
+
applicationId:
|
|
669
|
+
env.SUPERBLOCKS_LIBRARY_DD_APPLICATION_ID ?? "",
|
|
670
|
+
env: env.SUPERBLOCKS_LIBRARY_ENV ?? "prod",
|
|
671
|
+
// TODO: This version refers to the LIBRARY version for Datadog RUM, not the CLI version.
|
|
672
|
+
// CLI auto-upgrade still works - the caching changes in this PR only affect detection speed.
|
|
673
|
+
// Replace with dynamic library version injection once available.
|
|
674
|
+
version: "1.0.0",
|
|
675
|
+
}),
|
|
676
|
+
],
|
|
677
|
+
});
|
|
678
|
+
return server;
|
|
679
|
+
} finally {
|
|
680
|
+
viteCreateSpan.end();
|
|
681
|
+
}
|
|
654
682
|
},
|
|
655
|
-
|
|
656
|
-
createLucideReactImportOptimizer(),
|
|
657
|
-
ddRumPlugin({
|
|
658
|
-
clientToken: env.SUPERBLOCKS_LIBRARY_DD_CLIENT_TOKEN ?? "",
|
|
659
|
-
applicationId: env.SUPERBLOCKS_LIBRARY_DD_APPLICATION_ID ?? "",
|
|
660
|
-
env: env.SUPERBLOCKS_LIBRARY_ENV ?? "prod",
|
|
661
|
-
// TODO: Version should be injected from the library. Replace once we have the autoupgrade feature.
|
|
662
|
-
version: "1.0.0",
|
|
663
|
-
}),
|
|
664
|
-
],
|
|
665
|
-
});
|
|
683
|
+
);
|
|
666
684
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
685
|
+
const routeIndex = (app._router as IRouter).stack.length;
|
|
686
|
+
app.use(viteServer.middlewares);
|
|
687
|
+
logger.info("Dev server created and middleware attached successfully");
|
|
670
688
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
689
|
+
return {
|
|
690
|
+
viteServer,
|
|
691
|
+
routeIndex,
|
|
692
|
+
dispose: () => {
|
|
693
|
+
fileSyncPluginCreator.dispose();
|
|
694
|
+
},
|
|
695
|
+
};
|
|
696
|
+
} finally {
|
|
697
|
+
startViteSpan.end();
|
|
698
|
+
}
|
|
699
|
+
});
|
|
678
700
|
}
|
|
679
701
|
|
|
680
702
|
const DEFAULT_HMR_PORT = 24678;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import {
|
|
2
|
+
describe,
|
|
3
|
+
it,
|
|
4
|
+
expect,
|
|
5
|
+
vi,
|
|
6
|
+
beforeAll,
|
|
7
|
+
afterAll,
|
|
8
|
+
beforeEach,
|
|
9
|
+
} from "vitest";
|
|
10
|
+
|
|
11
|
+
// Set environment variables before any imports
|
|
12
|
+
process.env.OTEL_SDK_DISABLED = "true";
|
|
13
|
+
process.env.SUPERBLOCKS_DEPLOYMENT_TYPE = "";
|
|
14
|
+
|
|
15
|
+
// Mock dd-trace before importing the module under test
|
|
16
|
+
vi.mock("dd-trace", () => ({
|
|
17
|
+
default: {
|
|
18
|
+
init: vi.fn(),
|
|
19
|
+
llmobs: { enabled: false },
|
|
20
|
+
},
|
|
21
|
+
}));
|
|
22
|
+
|
|
23
|
+
// Mock getConfiguration to avoid needing real credentials
|
|
24
|
+
vi.mock("./util.js", () => ({
|
|
25
|
+
SERVICE_NAME: "sdk-dev-server",
|
|
26
|
+
getConfiguration: vi.fn().mockResolvedValue({
|
|
27
|
+
superblocksBaseUrl: new URL("https://app.superblocks.com"),
|
|
28
|
+
otlpBaseUrl: "https://app.superblocks.com/api",
|
|
29
|
+
superblocksHostname: "app.superblocks.com",
|
|
30
|
+
serviceName: "sdk-dev-server",
|
|
31
|
+
token: "test1234",
|
|
32
|
+
}),
|
|
33
|
+
}));
|
|
34
|
+
|
|
35
|
+
// Mock the logging module
|
|
36
|
+
vi.mock("./logging.js", () => ({
|
|
37
|
+
getLogger: vi.fn().mockReturnValue({
|
|
38
|
+
info: vi.fn(),
|
|
39
|
+
debug: vi.fn(),
|
|
40
|
+
warn: vi.fn(),
|
|
41
|
+
error: vi.fn(),
|
|
42
|
+
}),
|
|
43
|
+
}));
|
|
44
|
+
|
|
45
|
+
// Import type for module shape
|
|
46
|
+
import type * as TelemetryModule from "./index.js";
|
|
47
|
+
|
|
48
|
+
describe("CLI SDK Telemetry Integration", () => {
|
|
49
|
+
let telemetryModule: typeof TelemetryModule;
|
|
50
|
+
|
|
51
|
+
beforeAll(async () => {
|
|
52
|
+
// Dynamic import after mocks are set up
|
|
53
|
+
telemetryModule = await import("./index.js");
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
afterAll(async () => {
|
|
57
|
+
// Clean up telemetry
|
|
58
|
+
const { resetTelemetry, isTelemetryInitialized, getTelemetryInstance } =
|
|
59
|
+
await import("@superblocksteam/telemetry");
|
|
60
|
+
if (isTelemetryInitialized()) {
|
|
61
|
+
await getTelemetryInstance().shutdown();
|
|
62
|
+
resetTelemetry();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
beforeEach(() => {
|
|
67
|
+
vi.clearAllMocks();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
describe("configureTelemetry", () => {
|
|
71
|
+
it("successfully initializes telemetry", async () => {
|
|
72
|
+
const { isTelemetryInitialized } =
|
|
73
|
+
await import("@superblocksteam/telemetry");
|
|
74
|
+
|
|
75
|
+
await telemetryModule.configureTelemetry();
|
|
76
|
+
|
|
77
|
+
expect(isTelemetryInitialized()).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it("initializes dd-trace for LLMObs", async () => {
|
|
81
|
+
const ddTrace = await import("dd-trace");
|
|
82
|
+
|
|
83
|
+
await telemetryModule.configureTelemetry();
|
|
84
|
+
|
|
85
|
+
expect(ddTrace.default.init).toHaveBeenCalled();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
describe("getTracer", () => {
|
|
90
|
+
it("returns working tracer after initialization", async () => {
|
|
91
|
+
await telemetryModule.configureTelemetry();
|
|
92
|
+
|
|
93
|
+
const tracer = telemetryModule.getTracer();
|
|
94
|
+
|
|
95
|
+
expect(tracer).toBeDefined();
|
|
96
|
+
expect(typeof tracer.startSpan).toBe("function");
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it("can create spans", async () => {
|
|
100
|
+
await telemetryModule.configureTelemetry();
|
|
101
|
+
const tracer = telemetryModule.getTracer();
|
|
102
|
+
|
|
103
|
+
const span = tracer.startSpan("test-span");
|
|
104
|
+
|
|
105
|
+
expect(span).toBeDefined();
|
|
106
|
+
span.end();
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
describe("getLogger", () => {
|
|
111
|
+
it("returns working logger after initialization", async () => {
|
|
112
|
+
await telemetryModule.configureTelemetry();
|
|
113
|
+
|
|
114
|
+
const logger = telemetryModule.getLogger();
|
|
115
|
+
|
|
116
|
+
expect(logger).toBeDefined();
|
|
117
|
+
expect(typeof logger.emit).toBe("function");
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
describe("deploymentType", () => {
|
|
122
|
+
it("exports deploymentType constant", () => {
|
|
123
|
+
expect(telemetryModule.deploymentType).toBeDefined();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("exports isCloudPrem constant", () => {
|
|
127
|
+
expect(typeof telemetryModule.isCloudPrem).toBe("boolean");
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
});
|