@tangle-network/sdk-telemetry 0.60.78-develop.20261017134105.a6b32a2 → 0.60.78-develop.20261021201434.3bcd5ef

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.
@@ -0,0 +1,36 @@
1
+ //#region src/create-wall.d.ts
2
+ /** Exclusive create-request wall phases; nested service spans are a separate view. */
3
+ declare const CREATE_WALL_PHASES: readonly ["middleware", "identity", "preflight", "tenantCoordination", "configuration", "leaseSelection", "credentialJournal", "quotaReservation", "orchestrator", "provisionResponse", "responseBody", "credentialAllocation", "postCreate", "response"];
4
+ type CreateWallPhase = (typeof CREATE_WALL_PHASES)[number];
5
+ type CreateWallPhases = Record<CreateWallPhase, number>;
6
+ interface CreateWallMeasurement {
7
+ phases: CreateWallPhases;
8
+ totalMs: number;
9
+ /** Includes middleware/auth, preserving the original bookkeeping + post budget. */
10
+ bookkeepingPostCreateMs: number;
11
+ }
12
+ /** The original other-Worker + post-create budget, including auth/middleware. */
13
+ declare function createBookkeepingPostWall(phases: CreateWallPhases): number;
14
+ /**
15
+ * One cursor owned by the sequential request path. Parallel operations keep
16
+ * their own spans and never transition this cursor from their callbacks.
17
+ * Invalid clocks or missing caller hooks withhold a complete measurement.
18
+ */
19
+ declare function createWallTiming(startedAt: number): {
20
+ phase(name: CreateWallPhase, at: number): void;
21
+ finish(receivedAt: number, respondedAt: number): CreateWallMeasurement | null;
22
+ };
23
+ /** Read the already-parsed header. Historical/incomplete/overlapping rows stay unknown. */
24
+ declare function readCreateWallTiming(stages: Readonly<Record<string, number>>): CreateWallMeasurement | null;
25
+ //#endregion
26
+ //#region src/server-timing-parser.d.mts
27
+ interface ServerTimingEntry {
28
+ name: string;
29
+ dur?: number;
30
+ desc?: string;
31
+ }
32
+ declare function parseServerTiming(header: string | null | undefined): ServerTimingEntry[];
33
+ declare function parseServerTimingDurations(header: string | null | undefined): Record<string, number>;
34
+ //#endregion
35
+ export { CreateWallMeasurement as a, createBookkeepingPostWall as c, CREATE_WALL_PHASES as i, createWallTiming as l, parseServerTiming as n, CreateWallPhase as o, parseServerTimingDurations as r, CreateWallPhases as s, ServerTimingEntry as t, readCreateWallTiming as u };
36
+ //# sourceMappingURL=server-timing-C9RFa_A_.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-timing-C9RFa_A_.d.mts","names":["ServerTimingEntry","name","dur","desc","parseServerTiming","header","parseServerTimingDurations","Record"],"sources":["../src/create-wall.ts","../src/server-timing-parser.d.mts"],"mappings":";;cACa,kBAAA;AAAA,KAiBD,eAAA,WAA0B,kBAAA;AAAA,KAC1B,gBAAA,GAAmB,MAAA,CAAO,eAAA;AAAA,UACrB,qBAAA;EACf,MAAA,EAAQ,gBAAA;EACR,OAAA;EAJyB;EAMzB,uBAAA;AAAA;;iBAWc,yBAAA,CAA0B,MAAA,EAAQ,gBAAA;;;;;AAflD;iBA6BgB,gBAAA,CAAiB,SAAA;cAUjB,eAAA,EAAe,EAAA;6BAWP,WAAA,WAEjB,qBAAA;AAAA;;iBA6BS,oBAAA,CACd,MAAA,EAAQ,QAAA,CAAS,MAAA,oBAChB,qBAAA;;;UCvGcA,iBAAAA;EACfC,IAAAA;EACAC,GAAAA;EACAC,IAAAA;AAAAA;AAAAA,iBAGcC,iBAAAA,CACdC,MAAAA,8BACCL,iBAAAA;AAAAA,iBAEaM,0BAAAA,CACdD,MAAAA,8BACCE,MAAAA"}
@@ -0,0 +1,135 @@
1
+ //#region src/create-wall.ts
2
+ /** Exclusive create-request wall phases; nested service spans are a separate view. */
3
+ const CREATE_WALL_PHASES = [
4
+ "middleware",
5
+ "identity",
6
+ "preflight",
7
+ "tenantCoordination",
8
+ "configuration",
9
+ "leaseSelection",
10
+ "credentialJournal",
11
+ "quotaReservation",
12
+ "orchestrator",
13
+ "provisionResponse",
14
+ "responseBody",
15
+ "credentialAllocation",
16
+ "postCreate",
17
+ "response"
18
+ ];
19
+ const REQUIRED_PHASES = CREATE_WALL_PHASES.filter((phase) => phase !== "middleware" && phase !== "leaseSelection" && phase !== "tenantCoordination");
20
+ /** The original other-Worker + post-create budget, including auth/middleware. */
21
+ function createBookkeepingPostWall(phases) {
22
+ return CREATE_WALL_PHASES.reduce((sum, phase) => sum + (phase === "preflight" || phase === "orchestrator" ? 0 : phases[phase]), 0);
23
+ }
24
+ /**
25
+ * One cursor owned by the sequential request path. Parallel operations keep
26
+ * their own spans and never transition this cursor from their callbacks.
27
+ * Invalid clocks or missing caller hooks withhold a complete measurement.
28
+ */
29
+ function createWallTiming(startedAt) {
30
+ const phases = Object.fromEntries(CREATE_WALL_PHASES.map((phase) => [phase, 0]));
31
+ const visited = new Set(["identity"]);
32
+ let current = "identity";
33
+ let cursor = startedAt;
34
+ let valid = Number.isFinite(startedAt);
35
+ let finished = false;
36
+ return {
37
+ phase(name, at) {
38
+ if (finished || !Number.isFinite(at) || at < cursor) {
39
+ valid = false;
40
+ return;
41
+ }
42
+ phases[current] += at - cursor;
43
+ cursor = at;
44
+ current = name;
45
+ visited.add(name);
46
+ },
47
+ finish(receivedAt, respondedAt) {
48
+ if (finished || !valid || !Number.isFinite(receivedAt) || !Number.isFinite(respondedAt) || receivedAt > startedAt || respondedAt < cursor || REQUIRED_PHASES.some((phase) => !visited.has(phase))) {
49
+ finished = true;
50
+ return null;
51
+ }
52
+ finished = true;
53
+ phases[current] += respondedAt - cursor;
54
+ phases.middleware = startedAt - receivedAt;
55
+ const totalMs = respondedAt - receivedAt;
56
+ if (Object.values(phases).reduce((sum, ms) => sum + ms, 0) !== totalMs) return null;
57
+ return {
58
+ phases: { ...phases },
59
+ totalMs,
60
+ bookkeepingPostCreateMs: createBookkeepingPostWall(phases)
61
+ };
62
+ }
63
+ };
64
+ }
65
+ /** Read the already-parsed header. Historical/incomplete/overlapping rows stay unknown. */
66
+ function readCreateWallTiming(stages) {
67
+ const totalMs = stages["createWall.total"];
68
+ if (!Number.isFinite(totalMs) || totalMs < 0 || totalMs !== stages.outerWall) return null;
69
+ const phases = {};
70
+ for (const phase of CREATE_WALL_PHASES) {
71
+ const value = stages[`createWall.${phase}`];
72
+ if (!Number.isFinite(value) || value < 0) return null;
73
+ phases[phase] = value;
74
+ }
75
+ if (Object.values(phases).reduce((sum, ms) => sum + ms, 0) !== totalMs) return null;
76
+ return {
77
+ phases,
78
+ totalMs,
79
+ bookkeepingPostCreateMs: createBookkeepingPostWall(phases)
80
+ };
81
+ }
82
+ //#endregion
83
+ //#region src/server-timing-parser.mjs
84
+ function splitHeader(value, separator) {
85
+ const parts = [];
86
+ let start = 0;
87
+ let quoted = false;
88
+ for (let i = 0; i < value.length; i++) if (quoted && value[i] === "\\") i++;
89
+ else if (value[i] === "\"") quoted = !quoted;
90
+ else if (!quoted && value[i] === separator) {
91
+ parts.push(value.slice(start, i));
92
+ start = i + 1;
93
+ }
94
+ parts.push(value.slice(start));
95
+ return parts;
96
+ }
97
+ /** Missing or malformed durations remain unmeasured, never zero. */
98
+ function parseServerTiming(header) {
99
+ if (!header) return [];
100
+ const entries = [];
101
+ for (const metric of splitHeader(header, ",")) {
102
+ const [rawName, ...params] = splitHeader(metric, ";");
103
+ const name = rawName.trim();
104
+ if (!/^[!#$%&'*+.^_`|~\w-]+$/.test(name)) continue;
105
+ const entry = { name };
106
+ const seen = /* @__PURE__ */ new Set();
107
+ for (const param of params) {
108
+ const eq = param.indexOf("=");
109
+ const key = (eq < 0 ? param : param.slice(0, eq)).trim().toLowerCase();
110
+ if (seen.has(key)) continue;
111
+ seen.add(key);
112
+ if (eq < 0) continue;
113
+ let value = param.slice(eq + 1).trim();
114
+ if (value.startsWith("\"")) {
115
+ if (!/^"(?:[^"\\]|\\[\s\S])*"$/.test(value)) continue;
116
+ value = value.slice(1, -1).replace(/\\([\s\S])/g, "$1");
117
+ }
118
+ if (key === "desc") entry.desc = value;
119
+ else if (key === "dur" && /^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i.test(value)) {
120
+ const duration = Number(value);
121
+ if (Number.isFinite(duration)) entry.dur = duration;
122
+ }
123
+ }
124
+ entries.push(entry);
125
+ }
126
+ return entries;
127
+ }
128
+ /** A stage ledger retains only duration-bearing entries; later metrics win. */
129
+ function parseServerTimingDurations(header) {
130
+ return Object.fromEntries(parseServerTiming(header).filter((entry) => entry.dur !== void 0).map(({ name, dur }) => [name, dur]));
131
+ }
132
+ //#endregion
133
+ export { createWallTiming as a, createBookkeepingPostWall as i, parseServerTimingDurations as n, readCreateWallTiming as o, CREATE_WALL_PHASES as r, parseServerTiming as t };
134
+
135
+ //# sourceMappingURL=server-timing-DakHMNHj.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-timing-DakHMNHj.mjs","names":[],"sources":["../src/create-wall.ts","../src/server-timing-parser.mjs"],"sourcesContent":["/** Exclusive create-request wall phases; nested service spans are a separate view. */\nexport const CREATE_WALL_PHASES = [\n \"middleware\",\n \"identity\",\n \"preflight\",\n \"tenantCoordination\",\n \"configuration\",\n \"leaseSelection\",\n \"credentialJournal\",\n \"quotaReservation\",\n \"orchestrator\",\n \"provisionResponse\",\n \"responseBody\",\n \"credentialAllocation\",\n \"postCreate\",\n \"response\",\n] as const;\n\nexport type CreateWallPhase = (typeof CREATE_WALL_PHASES)[number];\nexport type CreateWallPhases = Record<CreateWallPhase, number>;\nexport interface CreateWallMeasurement {\n phases: CreateWallPhases;\n totalMs: number;\n /** Includes middleware/auth, preserving the original bookkeeping + post budget. */\n bookkeepingPostCreateMs: number;\n}\n\nconst REQUIRED_PHASES = CREATE_WALL_PHASES.filter(\n (phase) =>\n phase !== \"middleware\" &&\n phase !== \"leaseSelection\" &&\n phase !== \"tenantCoordination\",\n);\n\n/** The original other-Worker + post-create budget, including auth/middleware. */\nexport function createBookkeepingPostWall(phases: CreateWallPhases): number {\n return CREATE_WALL_PHASES.reduce(\n (sum, phase) =>\n sum +\n (phase === \"preflight\" || phase === \"orchestrator\" ? 0 : phases[phase]),\n 0,\n );\n}\n\n/**\n * One cursor owned by the sequential request path. Parallel operations keep\n * their own spans and never transition this cursor from their callbacks.\n * Invalid clocks or missing caller hooks withhold a complete measurement.\n */\nexport function createWallTiming(startedAt: number) {\n const phases = Object.fromEntries(\n CREATE_WALL_PHASES.map((phase) => [phase, 0]),\n ) as CreateWallPhases;\n const visited = new Set<CreateWallPhase>([\"identity\"]);\n let current: CreateWallPhase = \"identity\";\n let cursor = startedAt;\n let valid = Number.isFinite(startedAt);\n let finished = false;\n return {\n phase(name: CreateWallPhase, at: number): void {\n if (finished || !Number.isFinite(at) || at < cursor) {\n valid = false;\n return;\n }\n phases[current] += at - cursor;\n cursor = at;\n current = name;\n visited.add(name);\n },\n finish(\n receivedAt: number,\n respondedAt: number,\n ): CreateWallMeasurement | null {\n if (\n finished ||\n !valid ||\n !Number.isFinite(receivedAt) ||\n !Number.isFinite(respondedAt) ||\n receivedAt > startedAt ||\n respondedAt < cursor ||\n REQUIRED_PHASES.some((phase) => !visited.has(phase))\n ) {\n finished = true;\n return null;\n }\n finished = true;\n phases[current] += respondedAt - cursor;\n phases.middleware = startedAt - receivedAt;\n const totalMs = respondedAt - receivedAt;\n if (Object.values(phases).reduce((sum, ms) => sum + ms, 0) !== totalMs)\n return null;\n return {\n phases: { ...phases },\n totalMs,\n bookkeepingPostCreateMs: createBookkeepingPostWall(phases),\n };\n },\n };\n}\n\n/** Read the already-parsed header. Historical/incomplete/overlapping rows stay unknown. */\nexport function readCreateWallTiming(\n stages: Readonly<Record<string, number>>,\n): CreateWallMeasurement | null {\n const totalMs = stages[\"createWall.total\"];\n if (!Number.isFinite(totalMs) || totalMs < 0 || totalMs !== stages.outerWall)\n return null;\n const phases = {} as CreateWallPhases;\n for (const phase of CREATE_WALL_PHASES) {\n const value = stages[`createWall.${phase}`];\n if (!Number.isFinite(value) || value < 0) return null;\n phases[phase] = value;\n }\n if (Object.values(phases).reduce((sum, ms) => sum + ms, 0) !== totalMs)\n return null;\n return {\n phases,\n totalMs,\n bookkeepingPostCreateMs: createBookkeepingPostWall(phases),\n };\n}\n","// HTTP quoted strings can contain both separators and escaped quotes.\nfunction splitHeader(value, separator) {\n const parts = [];\n let start = 0;\n let quoted = false;\n for (let i = 0; i < value.length; i++) {\n if (quoted && value[i] === \"\\\\\") i++;\n else if (value[i] === '\"') quoted = !quoted;\n else if (!quoted && value[i] === separator) {\n parts.push(value.slice(start, i));\n start = i + 1;\n }\n }\n parts.push(value.slice(start));\n return parts;\n}\n\n/** Missing or malformed durations remain unmeasured, never zero. */\nexport function parseServerTiming(header) {\n if (!header) return [];\n const entries = [];\n for (const metric of splitHeader(header, \",\")) {\n const [rawName, ...params] = splitHeader(metric, \";\");\n const name = rawName.trim();\n if (!/^[!#$%&'*+.^_`|~\\w-]+$/.test(name)) continue;\n const entry = { name };\n const seen = new Set();\n for (const param of params) {\n const eq = param.indexOf(\"=\");\n const key = (eq < 0 ? param : param.slice(0, eq)).trim().toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n if (eq < 0) continue;\n let value = param.slice(eq + 1).trim();\n if (value.startsWith('\"')) {\n if (!/^\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"$/.test(value)) continue;\n value = value.slice(1, -1).replace(/\\\\([\\s\\S])/g, \"$1\");\n }\n if (key === \"desc\") entry.desc = value;\n else if (\n key === \"dur\" &&\n /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value)\n ) {\n const duration = Number(value);\n if (Number.isFinite(duration)) entry.dur = duration;\n }\n }\n entries.push(entry);\n }\n return entries;\n}\n\n/** A stage ledger retains only duration-bearing entries; later metrics win. */\nexport function parseServerTimingDurations(header) {\n return Object.fromEntries(\n parseServerTiming(header)\n .filter((entry) => entry.dur !== undefined)\n .map(({ name, dur }) => [name, dur]),\n );\n}\n"],"mappings":";;AACA,MAAa,qBAAqB;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAWD,MAAM,kBAAkB,mBAAmB,QACxC,UACC,UAAU,gBACV,UAAU,oBACV,UAAU,qBACb;;AAGD,SAAgB,0BAA0B,QAAkC;AAC1E,QAAO,mBAAmB,QACvB,KAAK,UACJ,OACC,UAAU,eAAe,UAAU,iBAAiB,IAAI,OAAO,SAClE,EACD;;;;;;;AAQH,SAAgB,iBAAiB,WAAmB;CAClD,MAAM,SAAS,OAAO,YACpB,mBAAmB,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAC9C;CACD,MAAM,UAAU,IAAI,IAAqB,CAAC,WAAW,CAAC;CACtD,IAAI,UAA2B;CAC/B,IAAI,SAAS;CACb,IAAI,QAAQ,OAAO,SAAS,UAAU;CACtC,IAAI,WAAW;AACf,QAAO;EACL,MAAM,MAAuB,IAAkB;AAC7C,OAAI,YAAY,CAAC,OAAO,SAAS,GAAG,IAAI,KAAK,QAAQ;AACnD,YAAQ;AACR;;AAEF,UAAO,YAAY,KAAK;AACxB,YAAS;AACT,aAAU;AACV,WAAQ,IAAI,KAAK;;EAEnB,OACE,YACA,aAC8B;AAC9B,OACE,YACA,CAAC,SACD,CAAC,OAAO,SAAS,WAAW,IAC5B,CAAC,OAAO,SAAS,YAAY,IAC7B,aAAa,aACb,cAAc,UACd,gBAAgB,MAAM,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,EACpD;AACA,eAAW;AACX,WAAO;;AAET,cAAW;AACX,UAAO,YAAY,cAAc;AACjC,UAAO,aAAa,YAAY;GAChC,MAAM,UAAU,cAAc;AAC9B,OAAI,OAAO,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,MAAM,IAAI,EAAE,KAAK,QAC7D,QAAO;AACT,UAAO;IACL,QAAQ,EAAE,GAAG,QAAQ;IACrB;IACA,yBAAyB,0BAA0B,OAAO;IAC3D;;EAEJ;;;AAIH,SAAgB,qBACd,QAC8B;CAC9B,MAAM,UAAU,OAAO;AACvB,KAAI,CAAC,OAAO,SAAS,QAAQ,IAAI,UAAU,KAAK,YAAY,OAAO,UACjE,QAAO;CACT,MAAM,SAAS,EAAE;AACjB,MAAK,MAAM,SAAS,oBAAoB;EACtC,MAAM,QAAQ,OAAO,cAAc;AACnC,MAAI,CAAC,OAAO,SAAS,MAAM,IAAI,QAAQ,EAAG,QAAO;AACjD,SAAO,SAAS;;AAElB,KAAI,OAAO,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,MAAM,IAAI,EAAE,KAAK,QAC7D,QAAO;AACT,QAAO;EACL;EACA;EACA,yBAAyB,0BAA0B,OAAO;EAC3D;;;;ACtHH,SAAS,YAAY,OAAO,WAAW;CACrC,MAAM,QAAQ,EAAE;CAChB,IAAI,QAAQ;CACZ,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAChC,KAAI,UAAU,MAAM,OAAO,KAAM;UACxB,MAAM,OAAO,KAAK,UAAS,CAAC;UAC5B,CAAC,UAAU,MAAM,OAAO,WAAW;AAC1C,QAAM,KAAK,MAAM,MAAM,OAAO,EAAE,CAAC;AACjC,UAAQ,IAAI;;AAGhB,OAAM,KAAK,MAAM,MAAM,MAAM,CAAC;AAC9B,QAAO;;;AAIT,SAAgB,kBAAkB,QAAQ;AACxC,KAAI,CAAC,OAAQ,QAAO,EAAE;CACtB,MAAM,UAAU,EAAE;AAClB,MAAK,MAAM,UAAU,YAAY,QAAQ,IAAI,EAAE;EAC7C,MAAM,CAAC,SAAS,GAAG,UAAU,YAAY,QAAQ,IAAI;EACrD,MAAM,OAAO,QAAQ,MAAM;AAC3B,MAAI,CAAC,yBAAyB,KAAK,KAAK,CAAE;EAC1C,MAAM,QAAQ,EAAE,MAAM;EACtB,MAAM,uBAAO,IAAI,KAAK;AACtB,OAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,KAAK,MAAM,QAAQ,IAAI;GAC7B,MAAM,OAAO,KAAK,IAAI,QAAQ,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,CAAC,aAAa;AACtE,OAAI,KAAK,IAAI,IAAI,CAAE;AACnB,QAAK,IAAI,IAAI;AACb,OAAI,KAAK,EAAG;GACZ,IAAI,QAAQ,MAAM,MAAM,KAAK,EAAE,CAAC,MAAM;AACtC,OAAI,MAAM,WAAW,KAAI,EAAE;AACzB,QAAI,CAAC,2BAA2B,KAAK,MAAM,CAAE;AAC7C,YAAQ,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,eAAe,KAAK;;AAEzD,OAAI,QAAQ,OAAQ,OAAM,OAAO;YAE/B,QAAQ,SACR,4CAA4C,KAAK,MAAM,EACvD;IACA,MAAM,WAAW,OAAO,MAAM;AAC9B,QAAI,OAAO,SAAS,SAAS,CAAE,OAAM,MAAM;;;AAG/C,UAAQ,KAAK,MAAM;;AAErB,QAAO;;;AAIT,SAAgB,2BAA2B,QAAQ;AACjD,QAAO,OAAO,YACZ,kBAAkB,OAAO,CACtB,QAAQ,UAAU,MAAM,QAAQ,KAAA,EAAU,CAC1C,KAAK,EAAE,MAAM,UAAU,CAAC,MAAM,IAAI,CAAC,CACvC"}
@@ -1,2 +1,2 @@
1
- import { n as parseServerTiming, r as parseServerTimingDurations, t as ServerTimingEntry } from "./server-timing-BA7iR17B.mjs";
2
- export { ServerTimingEntry, parseServerTiming, parseServerTimingDurations };
1
+ import { a as CreateWallMeasurement, c as createBookkeepingPostWall, i as CREATE_WALL_PHASES, l as createWallTiming, n as parseServerTiming, o as CreateWallPhase, r as parseServerTimingDurations, s as CreateWallPhases, t as ServerTimingEntry, u as readCreateWallTiming } from "./server-timing-C9RFa_A_.mjs";
2
+ export { CREATE_WALL_PHASES, CreateWallMeasurement, CreateWallPhase, CreateWallPhases, ServerTimingEntry, createBookkeepingPostWall, createWallTiming, parseServerTiming, parseServerTimingDurations, readCreateWallTiming };
@@ -1,2 +1,2 @@
1
- import { n as parseServerTimingDurations, t as parseServerTiming } from "./server-timing-CcTtoaLu.mjs";
2
- export { parseServerTiming, parseServerTimingDurations };
1
+ import { a as createWallTiming, i as createBookkeepingPostWall, n as parseServerTimingDurations, o as readCreateWallTiming, r as CREATE_WALL_PHASES, t as parseServerTiming } from "./server-timing-DakHMNHj.mjs";
2
+ export { CREATE_WALL_PHASES, createBookkeepingPostWall, createWallTiming, parseServerTiming, parseServerTimingDurations, readCreateWallTiming };
@@ -1,4 +1,4 @@
1
- import { n as parseServerTiming, t as ServerTimingEntry } from "./server-timing-BA7iR17B.mjs";
1
+ import { n as parseServerTiming, t as ServerTimingEntry } from "./server-timing-C9RFa_A_.mjs";
2
2
 
3
3
  //#region src/stage-span.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as parseServerTiming } from "./server-timing-CcTtoaLu.mjs";
1
+ import { t as parseServerTiming } from "./server-timing-DakHMNHj.mjs";
2
2
  //#region src/stage-span.ts
3
3
  /**
4
4
  * One span shape for every lifecycle-op stage across every hop.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sdk-telemetry",
3
- "version": "0.60.78-develop.20261017134105.a6b32a2",
3
+ "version": "0.60.78-develop.20261021201434.3bcd5ef",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,11 +0,0 @@
1
- //#region src/server-timing-parser.d.mts
2
- interface ServerTimingEntry {
3
- name: string;
4
- dur?: number;
5
- desc?: string;
6
- }
7
- declare function parseServerTiming(header: string | null | undefined): ServerTimingEntry[];
8
- declare function parseServerTimingDurations(header: string | null | undefined): Record<string, number>;
9
- //#endregion
10
- export { parseServerTiming as n, parseServerTimingDurations as r, ServerTimingEntry as t };
11
- //# sourceMappingURL=server-timing-BA7iR17B.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-timing-BA7iR17B.d.mts","names":["ServerTimingEntry","name","dur","desc","parseServerTiming","header","parseServerTimingDurations","Record"],"sources":["../src/server-timing-parser.d.mts"],"mappings":";UAAiBA,iBAAAA;EACfC,IAAAA;EACAC,GAAAA;EACAC,IAAAA;AAAAA;AAAAA,iBAGcC,iBAAAA,CACdC,MAAAA,8BACCL,iBAAAA;AAAAA,iBAEaM,0BAAAA,CACdD,MAAAA,8BACCE,MAAAA"}
@@ -1,53 +0,0 @@
1
- //#region src/server-timing-parser.mjs
2
- function splitHeader(value, separator) {
3
- const parts = [];
4
- let start = 0;
5
- let quoted = false;
6
- for (let i = 0; i < value.length; i++) if (quoted && value[i] === "\\") i++;
7
- else if (value[i] === "\"") quoted = !quoted;
8
- else if (!quoted && value[i] === separator) {
9
- parts.push(value.slice(start, i));
10
- start = i + 1;
11
- }
12
- parts.push(value.slice(start));
13
- return parts;
14
- }
15
- /** Missing or malformed durations remain unmeasured, never zero. */
16
- function parseServerTiming(header) {
17
- if (!header) return [];
18
- const entries = [];
19
- for (const metric of splitHeader(header, ",")) {
20
- const [rawName, ...params] = splitHeader(metric, ";");
21
- const name = rawName.trim();
22
- if (!/^[!#$%&'*+.^_`|~\w-]+$/.test(name)) continue;
23
- const entry = { name };
24
- const seen = /* @__PURE__ */ new Set();
25
- for (const param of params) {
26
- const eq = param.indexOf("=");
27
- const key = (eq < 0 ? param : param.slice(0, eq)).trim().toLowerCase();
28
- if (seen.has(key)) continue;
29
- seen.add(key);
30
- if (eq < 0) continue;
31
- let value = param.slice(eq + 1).trim();
32
- if (value.startsWith("\"")) {
33
- if (!/^"(?:[^"\\]|\\[\s\S])*"$/.test(value)) continue;
34
- value = value.slice(1, -1).replace(/\\([\s\S])/g, "$1");
35
- }
36
- if (key === "desc") entry.desc = value;
37
- else if (key === "dur" && /^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i.test(value)) {
38
- const duration = Number(value);
39
- if (Number.isFinite(duration)) entry.dur = duration;
40
- }
41
- }
42
- entries.push(entry);
43
- }
44
- return entries;
45
- }
46
- /** A stage ledger retains only duration-bearing entries; later metrics win. */
47
- function parseServerTimingDurations(header) {
48
- return Object.fromEntries(parseServerTiming(header).filter((entry) => entry.dur !== void 0).map(({ name, dur }) => [name, dur]));
49
- }
50
- //#endregion
51
- export { parseServerTimingDurations as n, parseServerTiming as t };
52
-
53
- //# sourceMappingURL=server-timing-CcTtoaLu.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-timing-CcTtoaLu.mjs","names":[],"sources":["../src/server-timing-parser.mjs"],"sourcesContent":["// HTTP quoted strings can contain both separators and escaped quotes.\nfunction splitHeader(value, separator) {\n const parts = [];\n let start = 0;\n let quoted = false;\n for (let i = 0; i < value.length; i++) {\n if (quoted && value[i] === \"\\\\\") i++;\n else if (value[i] === '\"') quoted = !quoted;\n else if (!quoted && value[i] === separator) {\n parts.push(value.slice(start, i));\n start = i + 1;\n }\n }\n parts.push(value.slice(start));\n return parts;\n}\n\n/** Missing or malformed durations remain unmeasured, never zero. */\nexport function parseServerTiming(header) {\n if (!header) return [];\n const entries = [];\n for (const metric of splitHeader(header, \",\")) {\n const [rawName, ...params] = splitHeader(metric, \";\");\n const name = rawName.trim();\n if (!/^[!#$%&'*+.^_`|~\\w-]+$/.test(name)) continue;\n const entry = { name };\n const seen = new Set();\n for (const param of params) {\n const eq = param.indexOf(\"=\");\n const key = (eq < 0 ? param : param.slice(0, eq)).trim().toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n if (eq < 0) continue;\n let value = param.slice(eq + 1).trim();\n if (value.startsWith('\"')) {\n if (!/^\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"$/.test(value)) continue;\n value = value.slice(1, -1).replace(/\\\\([\\s\\S])/g, \"$1\");\n }\n if (key === \"desc\") entry.desc = value;\n else if (\n key === \"dur\" &&\n /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value)\n ) {\n const duration = Number(value);\n if (Number.isFinite(duration)) entry.dur = duration;\n }\n }\n entries.push(entry);\n }\n return entries;\n}\n\n/** A stage ledger retains only duration-bearing entries; later metrics win. */\nexport function parseServerTimingDurations(header) {\n return Object.fromEntries(\n parseServerTiming(header)\n .filter((entry) => entry.dur !== undefined)\n .map(({ name, dur }) => [name, dur]),\n );\n}\n"],"mappings":";AACA,SAAS,YAAY,OAAO,WAAW;CACrC,MAAM,QAAQ,EAAE;CAChB,IAAI,QAAQ;CACZ,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAChC,KAAI,UAAU,MAAM,OAAO,KAAM;UACxB,MAAM,OAAO,KAAK,UAAS,CAAC;UAC5B,CAAC,UAAU,MAAM,OAAO,WAAW;AAC1C,QAAM,KAAK,MAAM,MAAM,OAAO,EAAE,CAAC;AACjC,UAAQ,IAAI;;AAGhB,OAAM,KAAK,MAAM,MAAM,MAAM,CAAC;AAC9B,QAAO;;;AAIT,SAAgB,kBAAkB,QAAQ;AACxC,KAAI,CAAC,OAAQ,QAAO,EAAE;CACtB,MAAM,UAAU,EAAE;AAClB,MAAK,MAAM,UAAU,YAAY,QAAQ,IAAI,EAAE;EAC7C,MAAM,CAAC,SAAS,GAAG,UAAU,YAAY,QAAQ,IAAI;EACrD,MAAM,OAAO,QAAQ,MAAM;AAC3B,MAAI,CAAC,yBAAyB,KAAK,KAAK,CAAE;EAC1C,MAAM,QAAQ,EAAE,MAAM;EACtB,MAAM,uBAAO,IAAI,KAAK;AACtB,OAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,KAAK,MAAM,QAAQ,IAAI;GAC7B,MAAM,OAAO,KAAK,IAAI,QAAQ,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,CAAC,aAAa;AACtE,OAAI,KAAK,IAAI,IAAI,CAAE;AACnB,QAAK,IAAI,IAAI;AACb,OAAI,KAAK,EAAG;GACZ,IAAI,QAAQ,MAAM,MAAM,KAAK,EAAE,CAAC,MAAM;AACtC,OAAI,MAAM,WAAW,KAAI,EAAE;AACzB,QAAI,CAAC,2BAA2B,KAAK,MAAM,CAAE;AAC7C,YAAQ,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,eAAe,KAAK;;AAEzD,OAAI,QAAQ,OAAQ,OAAM,OAAO;YAE/B,QAAQ,SACR,4CAA4C,KAAK,MAAM,EACvD;IACA,MAAM,WAAW,OAAO,MAAM;AAC9B,QAAI,OAAO,SAAS,SAAS,CAAE,OAAM,MAAM;;;AAG/C,UAAQ,KAAK,MAAM;;AAErB,QAAO;;;AAIT,SAAgB,2BAA2B,QAAQ;AACjD,QAAO,OAAO,YACZ,kBAAkB,OAAO,CACtB,QAAQ,UAAU,MAAM,QAAQ,KAAA,EAAU,CAC1C,KAAK,EAAE,MAAM,UAAU,CAAC,MAAM,IAAI,CAAC,CACvC"}