PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.6.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.6.1
4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / stellarwp / licensing-api-client / src / Tracing / TraceParent.php
give / vendor / vendor-prefixed / stellarwp / licensing-api-client / src / Tracing Last commit date
TraceContext.php 3 months ago TraceParent.php 3 months ago
TraceParent.php
129 lines
1 <?php declare(strict_types=1);
2
3 namespace Give\Vendors\LiquidWeb\LicensingApiClient\Tracing;
4
5 use InvalidArgumentException;
6
7 /**
8 * Immutable W3C traceparent value object.
9 *
10 * @see https://www.w3.org/TR/trace-context/#traceparent-header
11 */
12 final class TraceParent
13 {
14 private string $version;
15
16 private string $traceId;
17
18 private string $parentSpanId;
19
20 private string $flags;
21
22 private function __construct(string $version, string $traceId, string $parentSpanId, string $flags) {
23 $this->version = $version;
24 $this->traceId = $traceId;
25 $this->parentSpanId = $parentSpanId;
26 $this->flags = $flags;
27 }
28
29 /**
30 * Parse and validate a W3C traceparent header value.
31 *
32 * @throws InvalidArgumentException
33 */
34 public static function fromString(string $value): self {
35 $value = trim($value);
36
37 if ($value === '') {
38 throw new InvalidArgumentException('traceparent cannot be empty.');
39 }
40
41 $parts = explode('-', strtolower($value));
42
43 if (count($parts) !== 4) {
44 throw new InvalidArgumentException('traceparent must have 4 dash-delimited parts.');
45 }
46
47 $version = $parts[0];
48 $traceId = $parts[1];
49 $parentSpanId = $parts[2];
50 $flags = $parts[3];
51
52 if (!self::isHex($version, 2) || $version === 'ff') {
53 throw new InvalidArgumentException('traceparent version must be 2 hex characters and not ff.');
54 }
55
56 if (!self::isIdentifier($traceId, 32)) {
57 throw new InvalidArgumentException('traceparent trace-id must be 32 non-zero hex characters.');
58 }
59
60 if (!self::isIdentifier($parentSpanId, 16)) {
61 throw new InvalidArgumentException('traceparent parent-id must be 16 non-zero hex characters.');
62 }
63
64 if (!self::isHex($flags, 2)) {
65 throw new InvalidArgumentException('traceparent flags must be 2 hex characters.');
66 }
67
68 return new self($version, $traceId, $parentSpanId, $flags);
69 }
70
71 /**
72 * Generate a new root traceparent value.
73 */
74 public static function generate(bool $sampled = true): self {
75 return new self(
76 '00',
77 bin2hex(random_bytes(16)),
78 bin2hex(random_bytes(8)),
79 $sampled ? '01' : '00'
80 );
81 }
82
83 /**
84 * Return the normalized traceparent header string.
85 */
86 public function header(): string {
87 return sprintf(
88 '%s-%s-%s-%s',
89 $this->version,
90 $this->traceId,
91 $this->parentSpanId,
92 $this->flags
93 );
94 }
95
96 /**
97 * Return the trace-id segment.
98 */
99 public function traceId(): string {
100 return $this->traceId;
101 }
102
103 /**
104 * Return the parent span-id segment.
105 */
106 public function parentSpanId(): string {
107 return $this->parentSpanId;
108 }
109
110 /**
111 * Return the trace-flags segment.
112 */
113 public function flags(): string {
114 return $this->flags;
115 }
116
117 public function __toString(): string {
118 return $this->header();
119 }
120
121 private static function isHex(string $value, int $length): bool {
122 return strlen($value) === $length && ctype_xdigit($value);
123 }
124
125 private static function isIdentifier(string $value, int $length): bool {
126 return self::isHex($value, $length) && trim($value, '0') !== '';
127 }
128 }
129