praetom 0.2.1 → 0.2.4

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 (41) hide show
  1. package/dist/_esm-loader.js +5 -2
  2. package/dist/_esm-loader.js.map +1 -1
  3. package/dist/_internal.d.ts.map +1 -1
  4. package/dist/_internal.js +78 -14
  5. package/dist/_internal.js.map +1 -1
  6. package/dist/cli/cli.js +12 -0
  7. package/dist/cli/cli.js.map +1 -1
  8. package/dist/cli/commands/login.d.ts.map +1 -1
  9. package/dist/cli/commands/login.js +48 -2
  10. package/dist/cli/commands/login.js.map +1 -1
  11. package/dist/cli/commands/logout.d.ts +12 -0
  12. package/dist/cli/commands/logout.d.ts.map +1 -1
  13. package/dist/cli/commands/logout.js +42 -4
  14. package/dist/cli/commands/logout.js.map +1 -1
  15. package/dist/cli/commands/workspaces.d.ts +4 -0
  16. package/dist/cli/commands/workspaces.d.ts.map +1 -0
  17. package/dist/cli/commands/workspaces.js +46 -0
  18. package/dist/cli/commands/workspaces.js.map +1 -0
  19. package/dist/cli/util/api.d.ts +1 -1
  20. package/dist/cli/util/api.d.ts.map +1 -1
  21. package/dist/cli/util/api.js +26 -5
  22. package/dist/cli/util/api.js.map +1 -1
  23. package/dist/cli/util/auth-file.d.ts +7 -0
  24. package/dist/cli/util/auth-file.d.ts.map +1 -1
  25. package/dist/cli/util/auth-file.js +36 -8
  26. package/dist/cli/util/auth-file.js.map +1 -1
  27. package/dist/cli/util/run.d.ts.map +1 -1
  28. package/dist/cli/util/run.js +12 -1
  29. package/dist/cli/util/run.js.map +1 -1
  30. package/dist/server.d.ts +13 -0
  31. package/dist/server.d.ts.map +1 -1
  32. package/dist/server.js +237 -27
  33. package/dist/server.js.map +1 -1
  34. package/dist/vite/index.d.ts.map +1 -1
  35. package/dist/vite/index.js +21 -2
  36. package/dist/vite/index.js.map +1 -1
  37. package/dist/webpack/shared.d.ts +9 -1
  38. package/dist/webpack/shared.d.ts.map +1 -1
  39. package/dist/webpack/shared.js +21 -2
  40. package/dist/webpack/shared.js.map +1 -1
  41. package/package.json +7 -8
@@ -16,10 +16,17 @@ export declare const DEFAULT_API_BASE = "https://praetom.com";
16
16
  export interface AuthState {
17
17
  token: string;
18
18
  apiBase: string;
19
+ currentWorkspace: string | undefined;
19
20
  source: "env" | "file";
20
21
  }
21
22
  export declare function authFilePath(): string;
22
23
  export declare function readAuth(): Promise<AuthState | null>;
23
24
  export declare function writeAuth(token: string, apiBase?: string): Promise<void>;
25
+ /**
26
+ * Update only the `currentWorkspace` field; everything else carries
27
+ * over. Used by `praetom workspaces use <slug>` and by the post-login
28
+ * picker. Passing `undefined` clears the selection.
29
+ */
30
+ export declare function writeCurrentWorkspace(slug: string | undefined): Promise<void>;
24
31
  export declare function deleteAuth(): Promise<boolean>;
25
32
  //# sourceMappingURL=auth-file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-file.d.ts","sourceRoot":"","sources":["../../../src/cli/util/auth-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAStD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAwB1D;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9E;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CASnD"}
1
+ {"version":3,"file":"auth-file.d.ts","sourceRoot":"","sources":["../../../src/cli/util/auth-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAkBtD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAmB1D;AAaD,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9E;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CASnD"}
@@ -28,19 +28,24 @@ export async function readAuth() {
28
28
  return {
29
29
  token: envToken,
30
30
  apiBase: (process.env["PRAETOM_API_BASE"] ?? DEFAULT_API_BASE).replace(/\/+$/, ""),
31
+ currentWorkspace: process.env["PRAETOM_WORKSPACE"] || undefined,
31
32
  source: "env",
32
33
  };
33
34
  }
35
+ const parsed = await readAuthFile();
36
+ if (!parsed?.token)
37
+ return null;
38
+ return {
39
+ token: parsed.token,
40
+ apiBase: (parsed.apiBase ?? DEFAULT_API_BASE).replace(/\/+$/, ""),
41
+ currentWorkspace: parsed.currentWorkspace,
42
+ source: "file",
43
+ };
44
+ }
45
+ async function readAuthFile() {
34
46
  try {
35
47
  const raw = await fs.readFile(authFilePath(), "utf8");
36
- const parsed = JSON.parse(raw);
37
- if (!parsed.token)
38
- return null;
39
- return {
40
- token: parsed.token,
41
- apiBase: (parsed.apiBase ?? DEFAULT_API_BASE).replace(/\/+$/, ""),
42
- source: "file",
43
- };
48
+ return JSON.parse(raw);
44
49
  }
45
50
  catch (e) {
46
51
  const err = e;
@@ -52,13 +57,36 @@ export async function readAuth() {
52
57
  export async function writeAuth(token, apiBase) {
53
58
  const path = authFilePath();
54
59
  await fs.mkdir(dirname(path), { recursive: true, mode: 0o700 });
60
+ // Preserve any prior currentWorkspace selection — overwriting the
61
+ // file on relogin shouldn't silently drop the user's saved default.
62
+ const prior = await readAuthFile();
55
63
  const payload = {
56
64
  token,
57
65
  apiBase: apiBase && apiBase !== DEFAULT_API_BASE ? apiBase : undefined,
66
+ currentWorkspace: prior?.currentWorkspace,
58
67
  savedAt: new Date().toISOString(),
59
68
  };
60
69
  await fs.writeFile(path, JSON.stringify(payload, null, 2) + "\n", { mode: 0o600 });
61
70
  }
71
+ /**
72
+ * Update only the `currentWorkspace` field; everything else carries
73
+ * over. Used by `praetom workspaces use <slug>` and by the post-login
74
+ * picker. Passing `undefined` clears the selection.
75
+ */
76
+ export async function writeCurrentWorkspace(slug) {
77
+ const path = authFilePath();
78
+ const prior = await readAuthFile();
79
+ if (!prior?.token) {
80
+ throw new Error("Cannot set current workspace: no auth file exists. Run `praetom login` first.");
81
+ }
82
+ const payload = {
83
+ ...prior,
84
+ currentWorkspace: slug,
85
+ savedAt: new Date().toISOString(),
86
+ };
87
+ await fs.mkdir(dirname(path), { recursive: true, mode: 0o700 });
88
+ await fs.writeFile(path, JSON.stringify(payload, null, 2) + "\n", { mode: 0o600 });
89
+ }
62
90
  export async function deleteAuth() {
63
91
  try {
64
92
  await fs.unlink(authFilePath());
@@ -1 +1 @@
1
- {"version":3,"file":"auth-file.js","sourceRoot":"","sources":["../../../src/cli/util/auth-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-file.js","sourceRoot":"","sources":["../../../src/cli/util/auth-file.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/util/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;CACvC;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAElE;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CASnE"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/util/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;CACvC;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAElE;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CASnE"}
@@ -1,12 +1,23 @@
1
1
  import { detectAgent } from "./agent-env.js";
2
+ import { readAuth } from "./auth-file.js";
2
3
  /**
3
4
  * Lift a command implementation into commander's action signature: parse the
4
5
  * global flags off the program root and hand the command a clean RunContext.
5
6
  */
6
7
  export async function runCommand(program, fn) {
7
8
  const opts = program.opts();
9
+ // Workspace resolution: --workspace flag wins, then the saved
10
+ // `currentWorkspace` from auth.json (set by `praetom workspaces use`).
11
+ // If neither is set, leave undefined and let the server respond —
12
+ // the one-membership case auto-resolves there; multi-membership
13
+ // returns a 400 with the available slugs.
14
+ let workspace = opts.workspace;
15
+ if (!workspace) {
16
+ const auth = await readAuth();
17
+ workspace = auth?.currentWorkspace ?? undefined;
18
+ }
8
19
  const ctx = {
9
- workspace: opts.workspace,
20
+ workspace,
10
21
  repo: opts.repo,
11
22
  json: opts.json === true,
12
23
  nonInteractive: opts.nonInteractive === true,
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/util/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAgB7C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAgB,EAAE,EAAa;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAKrB,CAAC;IACL,MAAM,GAAG,GAAe;QACtB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;QACxB,cAAc,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI;QAC5C,KAAK,EAAE,WAAW,EAAE;KACrB,CAAC;IACF,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAe,EAAE,IAAY;IAC1D,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CACnE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,0BAA0B,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/util/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAgB1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAgB,EAAE,EAAa;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAKrB,CAAC;IACL,8DAA8D;IAC9D,uEAAuE;IACvE,kEAAkE;IAClE,gEAAgE;IAChE,0CAA0C;IAC1C,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,SAAS,GAAG,IAAI,EAAE,gBAAgB,IAAI,SAAS,CAAC;IAClD,CAAC;IACD,MAAM,GAAG,GAAe;QACtB,SAAS;QACT,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;QACxB,cAAc,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI;QAC5C,KAAK,EAAE,WAAW,EAAE;KACrB,CAAC;IACF,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAe,EAAE,IAAY;IAC1D,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CACnE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,0BAA0B,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
package/dist/server.d.ts CHANGED
@@ -50,6 +50,19 @@ export interface RegisterOptions {
50
50
  configEndpoint?: string;
51
51
  /** Suppress the boot-time console.warn lines (for tests). */
52
52
  silent?: boolean;
53
+ /**
54
+ * How often to re-fetch the runtime config and apply any new feature
55
+ * paths without restarting the process. Defaults to 60_000 (1 minute);
56
+ * set to 0 to disable polling and keep boot-only behavior. The poll
57
+ * sends `If-None-Match` so unchanged config short-circuits to 304.
58
+ *
59
+ * New mappings affect future `require()` / `import` calls; modules
60
+ * already loaded keep the wrap (or lack of wrap) they got at boot.
61
+ * For server frameworks that load route handlers lazily (Next.js's
62
+ * per-request route module load), new features apply on the next
63
+ * request to that route.
64
+ */
65
+ refreshIntervalMs?: number;
53
66
  }
54
67
  export declare function register(opts?: RegisterOptions): Promise<void>;
55
68
  export { emit };
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAKH,OAAO,EAAE,IAAI,EAAQ,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAuB5D,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAsB,QAAQ,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDxE;AA4GD,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,uBAAiB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAOH,OAAO,EAAE,IAAI,EAAQ,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA8G5D,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,wBAAsB,QAAQ,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DxE;AAuPD,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,uBAAiB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
package/dist/server.js CHANGED
@@ -42,9 +42,86 @@
42
42
  */
43
43
  import Module from "node:module";
44
44
  import { register as registerEsmLoader } from "node:module";
45
+ import { readFileSync } from "node:fs";
46
+ import { dirname, join, resolve } from "node:path";
45
47
  import { emit, init, wrapEntryPoint } from "./_internal.js";
46
48
  const mapByPath = new Map();
47
49
  let _hookInstalled = false;
50
+ let _lastEtag = null;
51
+ let _refreshTimer = null;
52
+ let _serviceName = null;
53
+ /**
54
+ * SDK version stamp emitted on every config fetch so the server can
55
+ * record which release is running where. Read from this package's
56
+ * package.json at build time via tsc — falls back to "unknown" if the
57
+ * file isn't reachable (bundled customer envs).
58
+ */
59
+ function readSdkVersion() {
60
+ try {
61
+ const pkgPath = resolve(dirname(new URL(import.meta.url).pathname), "..", "package.json");
62
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
63
+ return pkg.version ?? "unknown";
64
+ }
65
+ catch {
66
+ return "unknown";
67
+ }
68
+ }
69
+ const SDK_VERSION = readSdkVersion();
70
+ /**
71
+ * Find the "name" field of the nearest package.json walking up from
72
+ * the file that called register(). Used as the heartbeat identity —
73
+ * the server records (workspace, repo, service_name) so the path-
74
+ * matching LLM knows which subdirectories of a monorepo actually run
75
+ * the SDK and will emit spans.
76
+ *
77
+ * Returns null when no package.json is reachable (bundled apps,
78
+ * single-file scripts). Customers in that situation get the old
79
+ * "guess by manifest layout" behavior.
80
+ */
81
+ function detectServiceName() {
82
+ // The file that called register() is two frames up in the stack:
83
+ // register → caller. Pull its absolute path via Error stack parsing.
84
+ // Works in both CJS and ESM, no Node-version surprises.
85
+ const stack = new Error().stack ?? "";
86
+ const lines = stack.split("\n").slice(1);
87
+ let callerFile = null;
88
+ for (const line of lines) {
89
+ // Skip frames inside this module — the customer file is whatever
90
+ // comes first that isn't praetom's own code.
91
+ if (line.includes("/praetom/dist/") || line.includes("/praetom/src/")) {
92
+ continue;
93
+ }
94
+ // V8 stack frames look like " at fn (file:///path/to/file.ts:1:1)"
95
+ // or " at file:///path/to/file.ts:1:1". Pull the file:// URL or
96
+ // bare path before the line:col suffix.
97
+ const m = /\((?:file:\/\/)?([^):]+):\d+:\d+\)/.exec(line) ??
98
+ /at (?:file:\/\/)?([^\s:]+):\d+:\d+/.exec(line);
99
+ if (m && m[1]) {
100
+ callerFile = m[1];
101
+ break;
102
+ }
103
+ }
104
+ if (!callerFile)
105
+ return null;
106
+ // Walk up from the caller's directory until a package.json appears.
107
+ let dir = dirname(callerFile);
108
+ for (let depth = 0; depth < 20; depth++) {
109
+ try {
110
+ const raw = readFileSync(join(dir, "package.json"), "utf8");
111
+ const pkg = JSON.parse(raw);
112
+ if (pkg.name && typeof pkg.name === "string")
113
+ return pkg.name;
114
+ }
115
+ catch {
116
+ // No package.json here; keep walking.
117
+ }
118
+ const parent = dirname(dir);
119
+ if (parent === dir)
120
+ return null;
121
+ dir = parent;
122
+ }
123
+ return null;
124
+ }
48
125
  const DEFAULT_CONFIG_ENDPOINT = "https://praetom.com/api/runtime/config";
49
126
  export async function register(opts = {}) {
50
127
  const ingestId = opts.ingestId ?? process.env.PRAETOM_INGEST_ID;
@@ -58,45 +135,170 @@ export async function register(opts = {}) {
58
135
  warn("PRAETOM_INGEST_ID not set; instrumentation disabled");
59
136
  return;
60
137
  }
61
- // The token encodes (workspace, repo) identity — no PRAETOM_REPO or
62
- // deploy-provider env vars needed. Just call config; the server resolves
63
- // the repo from the bearer token.
64
- let config;
138
+ const cfgUrl = opts.configEndpoint ?? DEFAULT_CONFIG_ENDPOINT;
139
+ // Identify the calling service once the server uses this as the
140
+ // heartbeat key (workspace_instrumented_services.service_name). Null
141
+ // is fine; it just means the server can't record this heartbeat for
142
+ // path-matcher use.
143
+ _serviceName = detectServiceName();
144
+ // Initial fetch — must succeed before we install hooks; otherwise we
145
+ // have nothing to wrap and would just slow down every require().
146
+ const initial = await fetchConfig(cfgUrl, ingestId, warn);
147
+ if (!initial)
148
+ return;
149
+ init({
150
+ token: ingestId,
151
+ endpoint: opts.endpoint,
152
+ serviceName: initial.repo,
153
+ });
154
+ applyConfig(initial, warn);
155
+ if (mapByPath.size === 0) {
156
+ warn(`workspace ${initial.workspaceSlug} has no features for ${initial.repo}; instrumentation idle`);
157
+ // Still start the refresh loop so a feature added later via the
158
+ // dashboard wakes the SDK up without a redeploy.
159
+ }
160
+ else {
161
+ installRequireHook();
162
+ // module.register() (the ESM loader hook) needs Node 20.6+. Older
163
+ // Node silently throws inside Node's internals — customers would
164
+ // see "ESM loader registration failed: ..." with no context. Tell
165
+ // them clearly before we even try.
166
+ if (nodeSupportsModuleRegister()) {
167
+ installEsmLoader(warn);
168
+ }
169
+ else {
170
+ warn(`Node ${process.versions.node} is too old for ESM auto-wrap (need 20.6+). CommonJS features will still be instrumented via the require() hook, but ESM imports won't be. Upgrade Node to wrap both.`);
171
+ }
172
+ }
173
+ scheduleRefresh(cfgUrl, ingestId, warn, opts.refreshIntervalMs);
174
+ }
175
+ /**
176
+ * Whether the running Node has `module.register()` (added in 20.6.0,
177
+ * also backported to 18.19.0). Below those, `module.register()` exists
178
+ * as a property but throws on call.
179
+ */
180
+ function nodeSupportsModuleRegister() {
181
+ const v = process.versions.node;
182
+ const m = /^(\d+)\.(\d+)\.(\d+)/.exec(v);
183
+ if (!m)
184
+ return false;
185
+ const major = Number(m[1]);
186
+ const minor = Number(m[2]);
187
+ if (major >= 21)
188
+ return true;
189
+ if (major === 20 && minor >= 6)
190
+ return true;
191
+ if (major === 18 && minor >= 19)
192
+ return true;
193
+ return false;
194
+ }
195
+ /**
196
+ * Fetch the runtime config. Sends `If-None-Match` when we've fetched
197
+ * before so unchanged config short-circuits to 304. Returns null on
198
+ * network/parse failure (caller decides what to do) and on 304 (which
199
+ * is "no change" — caller should leave mapByPath alone).
200
+ */
201
+ async function fetchConfig(cfgUrl, ingestId, warn) {
65
202
  try {
66
- const cfgUrl = opts.configEndpoint ?? DEFAULT_CONFIG_ENDPOINT;
203
+ const headers = {
204
+ authorization: `Bearer ${ingestId}`,
205
+ "x-praetom-sdk-version": SDK_VERSION,
206
+ "x-praetom-node-version": process.versions.node,
207
+ };
208
+ if (_serviceName)
209
+ headers["x-praetom-service"] = _serviceName;
210
+ if (_lastEtag)
211
+ headers["if-none-match"] = _lastEtag;
67
212
  const abort = new AbortController();
68
213
  const timer = setTimeout(() => abort.abort(), 5_000);
69
- const res = await fetch(cfgUrl, {
70
- headers: { authorization: `Bearer ${ingestId}` },
71
- signal: abort.signal,
72
- }).finally(() => clearTimeout(timer));
214
+ const res = await fetch(cfgUrl, { headers, signal: abort.signal }).finally(() => clearTimeout(timer));
215
+ if (res.status === 304) {
216
+ return null;
217
+ }
73
218
  if (!res.ok) {
74
219
  warn(`runtime/config fetch failed: HTTP ${res.status}`);
75
- return;
220
+ return null;
76
221
  }
77
- config = (await res.json());
222
+ const config = (await res.json());
223
+ _lastEtag = res.headers.get("etag") ?? config.etag ?? _lastEtag;
224
+ return config;
78
225
  }
79
226
  catch (e) {
80
227
  warn(`runtime/config fetch error: ${e.message}`);
81
- return;
228
+ return null;
82
229
  }
83
- init({
84
- token: ingestId,
85
- endpoint: opts.endpoint,
86
- serviceName: config.repo,
87
- });
230
+ }
231
+ /**
232
+ * Replace `mapByPath` with the entries from a fresh config. Called on
233
+ * initial fetch AND on every successful refresh. The hooks read this
234
+ * Map at call time, so updates take effect for future requires/imports
235
+ * without re-installing anything. Already-loaded modules keep whatever
236
+ * wrap (or no-wrap) they got at boot.
237
+ */
238
+ function applyConfig(config, warn) {
88
239
  mapByPath.clear();
89
240
  for (const f of config.features) {
90
- for (const p of f.paths) {
91
- mapByPath.set(p, { slug: f.slug, entrySymbol: f.entrySymbol, side: f.side });
241
+ // Prefer the per-entry shape — each file has its own entrySymbol.
242
+ // Fall back to the legacy paths[] + feature-level entrySymbol when
243
+ // the server is older than this SDK build.
244
+ if (f.entries && f.entries.length > 0) {
245
+ for (const e of f.entries) {
246
+ mapByPath.set(e.path, {
247
+ slug: f.slug,
248
+ entrySymbol: e.entrySymbol,
249
+ side: e.side,
250
+ });
251
+ }
252
+ }
253
+ else if (f.paths) {
254
+ for (const p of f.paths) {
255
+ mapByPath.set(p, {
256
+ slug: f.slug,
257
+ entrySymbol: f.entrySymbol,
258
+ side: f.side,
259
+ });
260
+ }
92
261
  }
93
262
  }
94
- if (mapByPath.size === 0) {
95
- warn(`workspace ${config.workspaceSlug} has no features for ${config.repo}; instrumentation idle`);
263
+ // Touch warn so tree-shaking doesn't complain when this becomes a
264
+ // useful logging surface later (e.g. on config diffs).
265
+ void warn;
266
+ }
267
+ /**
268
+ * Start periodic re-fetch of the runtime config. Default cadence is
269
+ * 60s (RFC 8126's "private cache max-age" matches; lets the dashboard
270
+ * deliver a new feature definition to a long-lived process within ~a
271
+ * minute). Set `refreshIntervalMs: 0` to disable.
272
+ *
273
+ * The timer is unref()'d so polling never keeps the process alive past
274
+ * its real work.
275
+ */
276
+ function scheduleRefresh(cfgUrl, ingestId, warn, refreshIntervalMs) {
277
+ const ms = refreshIntervalMs ?? 60_000;
278
+ if (ms === 0)
96
279
  return;
280
+ if (_refreshTimer)
281
+ return; // idempotent — register() can be called more than once safely
282
+ _refreshTimer = setInterval(() => {
283
+ void (async () => {
284
+ const next = await fetchConfig(cfgUrl, ingestId, warn);
285
+ if (!next)
286
+ return; // 304 or error — mapByPath stays as it is
287
+ applyConfig(next, warn);
288
+ if (mapByPath.size > 0 && !_hookInstalled) {
289
+ // A feature was just defined for a workspace that had none at
290
+ // boot; flip the hooks on now.
291
+ installRequireHook();
292
+ if (nodeSupportsModuleRegister())
293
+ installEsmLoader(warn);
294
+ }
295
+ })();
296
+ }, ms);
297
+ // Don't let polling keep the process alive (e.g. for short-lived
298
+ // tasks that happen to call register()).
299
+ if (typeof _refreshTimer.unref === "function") {
300
+ _refreshTimer.unref();
97
301
  }
98
- installRequireHook();
99
- installEsmLoader(warn);
100
302
  }
101
303
  function installEsmLoader(warn) {
102
304
  if (_esmLoaderInstalled)
@@ -142,11 +344,19 @@ function installRequireHook() {
142
344
  _hookInstalled = true;
143
345
  }
144
346
  function matchFeatureForPath(absolutePath) {
347
+ // Normalize Windows separators once up front.
348
+ const normalized = absolutePath.replace(/\\/g, "/");
145
349
  for (const [featurePath, info] of mapByPath) {
146
- if (absolutePath === featurePath ||
147
- absolutePath.endsWith(`/${featurePath}`) ||
148
- // Windows path support
149
- absolutePath.replace(/\\/g, "/").endsWith(`/${featurePath}`)) {
350
+ if (normalized === featurePath)
351
+ return info;
352
+ // Anchored suffix match: featurePath must be multi-segment, and the
353
+ // absolute path must end with "/" + featurePath. That "/" before
354
+ // the match is what prevents `/api/cart/checkout` from matching a
355
+ // featurePath of `checkout` — single-segment paths get NO suffix
356
+ // match at all because the directory boundary check isn't strong
357
+ // enough to disambiguate them. Discovery emits full repo-relative
358
+ // paths today, so this rule never costs us a real match.
359
+ if (featurePath.includes("/") && normalized.endsWith(`/${featurePath}`)) {
150
360
  return info;
151
361
  }
152
362
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAenC,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAeD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,IAAI,GAAE,kBAAuB,GAAG,MAAM,CA6ErE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAwBnC,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAeD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,IAAI,GAAE,kBAAuB,GAAG,MAAM,CA8FrE"}
@@ -91,9 +91,28 @@ export default function praetom(opts = {}) {
91
91
  },
92
92
  };
93
93
  function matchFeatureForPath(relPath) {
94
+ const matches = (p) => {
95
+ if (relPath === p)
96
+ return true;
97
+ // Anchored suffix: featurePath must be multi-segment so the
98
+ // "/" boundary is real. Single-segment paths get NO suffix
99
+ // match — would false-positive on `/api/cart/checkout` vs "checkout".
100
+ return p.includes("/") && relPath.endsWith(`/${p}`);
101
+ };
94
102
  for (const feature of featureMap) {
95
- if (feature.paths.some((p) => relPath === p || relPath.endsWith(`/${p}`))) {
96
- return { slug: feature.slug, entrySymbol: feature.entrySymbol };
103
+ // Per-file entry shape: each path carries its own entrySymbol.
104
+ if (feature.entries && feature.entries.length > 0) {
105
+ for (const entry of feature.entries) {
106
+ if (matches(entry.path)) {
107
+ return { slug: feature.slug, entrySymbol: entry.entrySymbol };
108
+ }
109
+ }
110
+ }
111
+ else if (feature.paths) {
112
+ // Legacy fallback: single feature-level entrySymbol for all paths.
113
+ if (feature.paths.some(matches)) {
114
+ return { slug: feature.slug, entrySymbol: feature.entrySymbol };
115
+ }
97
116
  }
98
117
  }
99
118
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,17 @@
4
4
  * because the webpack plugin needs the same transform but webpack
5
5
  * exposes it through a loader function (vite uses `transform`).
6
6
  */
7
+ export interface FeatureEntry {
8
+ path: string;
9
+ entrySymbol?: string;
10
+ side?: string;
11
+ }
7
12
  export interface FeatureMapEntry {
8
13
  slug: string;
9
- paths: string[];
14
+ /** Preferred: per-file entries with their own entry symbols. */
15
+ entries?: FeatureEntry[];
16
+ /** Legacy: kept for back-compat with older server responses. */
17
+ paths?: string[];
10
18
  entrySymbol?: string;
11
19
  }
12
20
  export interface RuntimeConfigResponse {
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/webpack/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAcD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,OAAO,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO/C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGjF;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAkCf;AAED,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAQhC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/webpack/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAcD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,OAAO,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwB/C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGjF;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAkCf;AAED,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAQhC"}