Fix sw header is not validated (#90)
diff --git a/package.json b/package.json
index 783efa0..add81fb 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
"generate-source": "scripts/protoc.sh",
"build": "npm run clean && npm run prepare && tsc --build src && OUT_DIR=lib/proto/ scripts/protoc.sh",
"lint": "eslint src/**/*.ts",
- "lint:fix": "eslint --fix src/**/*.ts",
+ "lint:fix": "prettier --write \"src/**/*.ts\"",
"lint-staged": "lint-staged",
"test": "DEBUG=testcontainers* jest",
"format": "prettier --write \"src/**/*.ts\"",
diff --git a/src/trace/context/ContextCarrier.ts b/src/trace/context/ContextCarrier.ts
index abe06a1..f5ad3b8 100644
--- a/src/trace/context/ContextCarrier.ts
+++ b/src/trace/context/ContextCarrier.ts
@@ -44,20 +44,28 @@
};
get value(): string {
- return [
- '1',
- this.encode(this.traceId?.toString() || ''),
- this.encode(this.segmentId?.toString() || ''),
- this.spanId?.toString(),
- this.encode(this.service || ''),
- this.encode(this.serviceInstance || ''),
- this.encode(this.endpoint || ''),
- this.encode(this.clientAddress || ''),
- ].join('-');
+ return this.isValid()
+ ? [
+ '1',
+ this.encode(this.traceId?.toString() || ''),
+ this.encode(this.segmentId?.toString() || ''),
+ this.spanId?.toString(),
+ this.encode(this.service || ''),
+ this.encode(this.serviceInstance || ''),
+ this.encode(this.endpoint || ''),
+ this.encode(this.clientAddress || ''),
+ ].join('-')
+ : '';
}
set value(val) {
+ if (!val) {
+ return;
+ }
const parts = val.split('-');
+ if (parts.length != 8) {
+ return;
+ }
this.traceId = new ID(this.decode(parts[1]));
this.segmentId = new ID(this.decode(parts[2]));
this.spanId = Number.parseInt(parts[3], 10);
@@ -70,22 +78,23 @@
isValid(): boolean {
return Boolean(
this.traceId?.rawId &&
- this.segmentId?.rawId &&
- this.spanId !== undefined &&
- !isNaN(this.spanId) &&
- this.service &&
- this.endpoint &&
- this.clientAddress !== undefined
+ this.segmentId?.rawId &&
+ this.spanId !== undefined &&
+ !isNaN(this.spanId) &&
+ this.service &&
+ this.endpoint &&
+ this.clientAddress !== undefined,
);
}
public static from(map: { [key: string]: string }): ContextCarrier | undefined {
- if (!map.hasOwnProperty('sw8'))
- return;
+ if (!Object.prototype.hasOwnProperty.call(map, 'sw8')) return;
const carrier = new ContextCarrier();
- carrier.items.filter((item) => map.hasOwnProperty(item.key)).forEach((item) => (item.value = map[item.key]));
+ carrier.items
+ .filter((item) => Object.prototype.hasOwnProperty.call(map, item.key))
+ .forEach((item) => (item.value = map[item.key]));
return carrier;
}