@agentuity/runtime 1.0.4 → 1.0.6

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/dist/workbench.js CHANGED
@@ -1,4 +1,3 @@
1
- import { timingSafeEqual } from 'node:crypto';
2
1
  import { toJSONSchema } from '@agentuity/server';
3
2
  import { getAgents, createAgentMiddleware } from './agent';
4
3
  import { createRouter } from './router';
@@ -7,6 +6,65 @@ import { privateContext } from './_server';
7
6
  import { getThreadProvider } from './_services';
8
7
  import { loadBuildMetadata, getAgentMetadataByAgentId, hasMetadata, ensureAgentsImported, } from './_metadata';
9
8
  import { TOKENS_HEADER, DURATION_HEADER } from './_tokens';
9
+ import { verifySignature } from './signature';
10
+ import { isProduction } from './_config';
11
+ import { createCorsMiddleware } from './middleware';
12
+ /**
13
+ * Trusted Agentuity domain suffixes for workbench CORS.
14
+ * Any origin matching https://*.{suffix} is allowed.
15
+ * In development, any origin is allowed.
16
+ */
17
+ const TRUSTED_WORKBENCH_DOMAIN_SUFFIXES = [
18
+ '.agentuity.com',
19
+ '.agentuity.dev',
20
+ '.agentuity.io',
21
+ ];
22
+ /**
23
+ * Check if an origin is a trusted Agentuity app origin.
24
+ * Matches any HTTPS subdomain of the trusted domain suffixes.
25
+ */
26
+ function isTrustedWorkbenchOrigin(origin) {
27
+ try {
28
+ const url = new URL(origin);
29
+ if (url.protocol !== 'https:')
30
+ return false;
31
+ return TRUSTED_WORKBENCH_DOMAIN_SUFFIXES.some((suffix) => url.hostname.endsWith(suffix));
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Middleware that verifies workbench request signatures in production.
39
+ * In development mode, all requests are allowed.
40
+ * Supports both header-based auth (for HTTP) and query param auth (for WebSocket).
41
+ */
42
+ const createWorkbenchAuthMiddleware = () => {
43
+ return async (c, next) => {
44
+ // Allow CORS preflight requests through (they don't have auth headers)
45
+ if (c.req.method === 'OPTIONS') {
46
+ return next();
47
+ }
48
+ // Skip auth in dev mode
49
+ if (!isProduction()) {
50
+ return next();
51
+ }
52
+ // Check signature from headers or query params (for WebSocket)
53
+ const signature = c.req.header('X-Agentuity-Workbench-Signature') || c.req.query('signature');
54
+ const timestamp = c.req.header('X-Agentuity-Workbench-Timestamp') || c.req.query('timestamp');
55
+ // For non-POST requests, body is empty
56
+ let body = '';
57
+ if (c.req.method === 'POST') {
58
+ const clonedReq = c.req.raw.clone();
59
+ body = await clonedReq.text();
60
+ }
61
+ const isValid = await verifySignature(signature, timestamp, body);
62
+ if (!isValid) {
63
+ return c.json({ error: 'Unauthorized' }, 401);
64
+ }
65
+ return next();
66
+ };
67
+ };
10
68
  /**
11
69
  * Middleware that captures execution metadata (tokens, duration, sessionId) after the handler completes
12
70
  * and saves it to thread state. Applied only to the /execute route.
@@ -63,25 +121,7 @@ const createWorkbenchExecutionMetadataMiddleware = () => {
63
121
  };
64
122
  };
65
123
  export const createWorkbenchExecutionRoute = () => {
66
- const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY
67
- ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}`
68
- : undefined;
69
124
  return async (ctx) => {
70
- // Authentication check
71
- if (authHeader) {
72
- try {
73
- const authValue = ctx.req.header('Authorization');
74
- if (!authValue ||
75
- !timingSafeEqual(Buffer.from(authValue, 'utf-8'), Buffer.from(authHeader, 'utf-8'))) {
76
- return ctx.text('Unauthorized', { status: 401 });
77
- }
78
- }
79
- catch {
80
- // timing safe equals will throw if the input/output lengths are mismatched
81
- // so we treat all exceptions as invalid
82
- return ctx.text('Unauthorized', { status: 401 });
83
- }
84
- }
85
125
  // Content-type validation
86
126
  const contentType = ctx.req.header('Content-Type');
87
127
  if (!contentType || !contentType.includes('application/json')) {
@@ -154,25 +194,7 @@ export const createWorkbenchExecutionRoute = () => {
154
194
  };
155
195
  };
156
196
  export const createWorkbenchClearStateRoute = () => {
157
- const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY
158
- ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}`
159
- : undefined;
160
197
  return async (ctx) => {
161
- // Authentication check
162
- if (authHeader) {
163
- try {
164
- const authValue = ctx.req.header('Authorization');
165
- if (!authValue ||
166
- !timingSafeEqual(Buffer.from(authValue, 'utf-8'), Buffer.from(authHeader, 'utf-8'))) {
167
- return ctx.text('Unauthorized', { status: 401 });
168
- }
169
- }
170
- catch {
171
- // timing safe equals will throw if the input/output lengths are mismatched
172
- // so we treat all exceptions as invalid
173
- return ctx.text('Unauthorized', { status: 401 });
174
- }
175
- }
176
198
  const agentId = ctx.req.query('agentId');
177
199
  if (!agentId) {
178
200
  return ctx.json({ error: 'agentId query parameter is required' }, { status: 400 });
@@ -203,25 +225,7 @@ export const createWorkbenchClearStateRoute = () => {
203
225
  };
204
226
  };
205
227
  export const createWorkbenchStateRoute = () => {
206
- const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY
207
- ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}`
208
- : undefined;
209
228
  return async (ctx) => {
210
- // Authentication check
211
- if (authHeader) {
212
- try {
213
- const authValue = ctx.req.header('Authorization');
214
- if (!authValue ||
215
- !timingSafeEqual(Buffer.from(authValue, 'utf-8'), Buffer.from(authHeader, 'utf-8'))) {
216
- return ctx.text('Unauthorized', { status: 401 });
217
- }
218
- }
219
- catch {
220
- // timing safe equals will throw if the input/output lengths are mismatched
221
- // so we treat all exceptions as invalid
222
- return ctx.text('Unauthorized', { status: 401 });
223
- }
224
- }
225
229
  const agentId = ctx.req.query('agentId');
226
230
  if (!agentId) {
227
231
  return ctx.json({ error: 'agentId query parameter is required' }, { status: 400 });
@@ -242,29 +246,52 @@ export const createWorkbenchStateRoute = () => {
242
246
  * Creates a workbench router with proper agent middleware for execution routes
243
247
  */
244
248
  export const createWorkbenchRouter = () => {
245
- // Try to extract API key from inline workbench config if available
246
- try {
247
- // @ts-expect-error - AGENTUITY_WORKBENCH_CONFIG_INLINE will be replaced at build time
248
- if (typeof AGENTUITY_WORKBENCH_CONFIG_INLINE !== 'undefined') {
249
- // @ts-expect-error - AGENTUITY_WORKBENCH_CONFIG_INLINE will be replaced at build time
250
- const encoded = AGENTUITY_WORKBENCH_CONFIG_INLINE;
251
- // Decode the config manually to avoid async import
252
- const json = Buffer.from(encoded, 'base64').toString('utf-8');
253
- const config = JSON.parse(json);
254
- // Extract API key from Authorization header if present
255
- if (config.headers?.['Authorization']) {
256
- const authHeader = config.headers['Authorization'];
257
- if (authHeader.startsWith('Bearer ')) {
258
- const apiKey = authHeader.slice('Bearer '.length);
259
- process.env.AGENTUITY_WORKBENCH_APIKEY = apiKey;
249
+ const router = createRouter();
250
+ // Apply CORS middleware first so that even error responses get CORS headers
251
+ // In production, restrict origins to known Agentuity app domains + same-origin
252
+ // In development, allow any origin for local testing flexibility
253
+ router.use('/_agentuity/workbench/*', createCorsMiddleware({
254
+ origin: (origin, c) => {
255
+ // In dev mode, allow any origin for local testing flexibility
256
+ if (!isProduction()) {
257
+ return origin;
258
+ }
259
+ // In production, allow any *.agentuity.{com,dev,io} origin
260
+ if (isTrustedWorkbenchOrigin(origin)) {
261
+ return origin;
262
+ }
263
+ // Allow same-origin requests (agent calling its own workbench)
264
+ try {
265
+ const requestOrigin = new URL(c.req.url).origin;
266
+ if (origin === requestOrigin) {
267
+ return origin;
260
268
  }
261
269
  }
262
- }
263
- }
264
- catch {
265
- // Silently ignore if config is not available or invalid
266
- }
267
- const router = createRouter();
270
+ catch {
271
+ // Invalid URL, reject
272
+ }
273
+ // Reject unknown origins no Access-Control-Allow-Origin header
274
+ return undefined;
275
+ },
276
+ allowHeaders: [
277
+ 'Content-Type',
278
+ 'Authorization',
279
+ 'Accept',
280
+ 'Origin',
281
+ 'X-Requested-With',
282
+ 'X-Agentuity-Workbench-Signature',
283
+ 'X-Agentuity-Workbench-Timestamp',
284
+ 'x-thread-id',
285
+ ],
286
+ exposeHeaders: [
287
+ 'x-thread-id',
288
+ 'x-session-id',
289
+ 'x-agentuity-tokens',
290
+ 'x-agentuity-duration',
291
+ ],
292
+ }));
293
+ // Apply auth middleware (signature verification in production)
294
+ router.use('/_agentuity/workbench/*', createWorkbenchAuthMiddleware());
268
295
  // Apply agent middleware to ensure proper context is available
269
296
  router.use('/_agentuity/workbench/*', createAgentMiddleware(''));
270
297
  // Add workbench routes
@@ -277,23 +304,7 @@ export const createWorkbenchRouter = () => {
277
304
  return router;
278
305
  };
279
306
  export const createWorkbenchSampleRoute = () => {
280
- const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY
281
- ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}`
282
- : undefined;
283
307
  return async (ctx) => {
284
- // Authentication check
285
- if (authHeader) {
286
- try {
287
- const authValue = ctx.req.header('Authorization');
288
- if (!authValue ||
289
- !timingSafeEqual(Buffer.from(authValue, 'utf-8'), Buffer.from(authHeader, 'utf-8'))) {
290
- return ctx.text('Unauthorized', { status: 401 });
291
- }
292
- }
293
- catch {
294
- return ctx.text('Unauthorized', { status: 401 });
295
- }
296
- }
297
308
  try {
298
309
  const agentId = ctx.req.query('agentId');
299
310
  if (!agentId) {
@@ -394,24 +405,7 @@ Return a JSON object that matches this schema with realistic values.`;
394
405
  };
395
406
  };
396
407
  export const createWorkbenchMetadataRoute = () => {
397
- const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY
398
- ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}`
399
- : undefined;
400
408
  return async (ctx) => {
401
- if (authHeader) {
402
- try {
403
- const authValue = ctx.req.header('Authorization');
404
- if (!authValue ||
405
- !timingSafeEqual(Buffer.from(authValue, 'utf-8'), Buffer.from(authHeader, 'utf-8'))) {
406
- return ctx.text('Unauthorized', { status: 401 });
407
- }
408
- }
409
- catch {
410
- // timing safe equals will throw if the input/output lengths are mismatched
411
- // so we treat all exceptions as invalid
412
- return ctx.text('Unauthorized', { status: 401 });
413
- }
414
- }
415
409
  // Read metadata from agentuity.metadata.json file
416
410
  const metadata = loadBuildMetadata();
417
411
  if (!metadata) {
@@ -1 +1 @@
1
- {"version":3,"file":"workbench.js","sourceRoot":"","sources":["../src/workbench.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workbench.js","sourceRoot":"","sources":["../src/workbench.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/runtime",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Agentuity employees and contributors",
6
6
  "type": "module",
@@ -26,11 +26,11 @@
26
26
  "prepublishOnly": "bun run clean && bun run build"
27
27
  },
28
28
  "dependencies": {
29
- "@agentuity/auth": "1.0.4",
30
- "@agentuity/core": "1.0.4",
31
- "@agentuity/frontend": "1.0.4",
32
- "@agentuity/schema": "1.0.4",
33
- "@agentuity/server": "1.0.4",
29
+ "@agentuity/auth": "1.0.6",
30
+ "@agentuity/core": "1.0.6",
31
+ "@agentuity/frontend": "1.0.6",
32
+ "@agentuity/schema": "1.0.6",
33
+ "@agentuity/server": "1.0.6",
34
34
  "@opentelemetry/api": "^1.9.0",
35
35
  "@opentelemetry/api-logs": "^0.207.0",
36
36
  "@opentelemetry/auto-instrumentations-node": "^0.66.0",
@@ -50,7 +50,7 @@
50
50
  "zod": "^4.3.5"
51
51
  },
52
52
  "devDependencies": {
53
- "@agentuity/test-utils": "1.0.4",
53
+ "@agentuity/test-utils": "1.0.6",
54
54
  "@types/bun": "latest",
55
55
  "@types/react": "^19.2.2",
56
56
  "@types/react-dom": "^19.2.2",
@@ -1,6 +1,7 @@
1
1
  import type { Context, Handler } from 'hono';
2
2
  import { returnResponse } from '../_util';
3
3
  import type { Env } from '../app';
4
+ import { verifySignature } from '../signature';
4
5
 
5
6
  /**
6
7
  * Handler function for cron jobs.
@@ -21,65 +22,6 @@ export interface CronOptions {
21
22
  auth: boolean;
22
23
  }
23
24
 
24
- // Maximum age for cron signatures (5 minutes)
25
- const MAX_SIGNATURE_AGE_SECONDS = 300;
26
-
27
- /**
28
- * Verifies the cron request signature from Catalyst.
29
- * Returns true if signature is valid or if running in local dev mode (no SDK key).
30
- */
31
- async function verifyCronSignature(c: Context, body: string): Promise<boolean> {
32
- const sdkKey = process.env.AGENTUITY_SDK_KEY;
33
-
34
- // In local dev mode (no SDK key), allow all requests
35
- if (!sdkKey) {
36
- return true;
37
- }
38
-
39
- const signature = c.req.header('X-Agentuity-Cron-Signature');
40
- const timestampStr = c.req.header('X-Agentuity-Cron-Timestamp');
41
-
42
- // If no signature headers, reject the request
43
- if (!signature || !timestampStr) {
44
- return false;
45
- }
46
-
47
- // Verify timestamp is within acceptable range (prevent replay attacks)
48
- const timestamp = parseInt(timestampStr, 10);
49
- const now = Math.floor(Date.now() / 1000);
50
- if (isNaN(timestamp) || Math.abs(now - timestamp) > MAX_SIGNATURE_AGE_SECONDS) {
51
- return false;
52
- }
53
-
54
- // Validate signature format: must be 'v1=' followed by valid hex (64 chars for SHA-256)
55
- if (!signature.startsWith('v1=')) {
56
- return false;
57
- }
58
- const hexPayload = signature.slice(3);
59
- if (!/^[0-9a-f]{64}$/i.test(hexPayload)) {
60
- return false;
61
- }
62
-
63
- // Decode hex payload into Uint8Array
64
- const incomingSigBytes = new Uint8Array(32);
65
- for (let i = 0; i < 32; i++) {
66
- incomingSigBytes[i] = parseInt(hexPayload.slice(i * 2, i * 2 + 2), 16);
67
- }
68
-
69
- // Verify the signature using constant-time comparison
70
- const message = `${timestamp}.${body}`;
71
- const encoder = new TextEncoder();
72
- const key = await crypto.subtle.importKey(
73
- 'raw',
74
- encoder.encode(sdkKey),
75
- { name: 'HMAC', hash: 'SHA-256' },
76
- false,
77
- ['verify']
78
- );
79
-
80
- return crypto.subtle.verify('HMAC', key, incomingSigBytes, encoder.encode(message));
81
- }
82
-
83
25
  /**
84
26
  * Creates a cron middleware for scheduled task endpoints.
85
27
  *
@@ -164,7 +106,11 @@ export function cron<E extends Env = Env>(
164
106
  const body = await clonedReq.text();
165
107
 
166
108
  // Verify the cron signature
167
- const isValid = await verifyCronSignature(c, body);
109
+ const isValid = await verifySignature(
110
+ c.req.header('X-Agentuity-Cron-Signature'),
111
+ c.req.header('X-Agentuity-Cron-Timestamp'),
112
+ body
113
+ );
168
114
  if (!isValid) {
169
115
  return c.json({ error: 'Unauthorized' }, 401);
170
116
  }
package/src/middleware.ts CHANGED
@@ -36,10 +36,10 @@ const THREAD_HEADER = 'x-thread-id';
36
36
  const DEPLOYMENT_HEADER = 'x-deployment';
37
37
 
38
38
  /**
39
- * Paths that should skip OTEL session tracking.
40
- * These routes are still accessible but won't create session events.
39
+ * Paths that should skip OTEL session event tracking.
40
+ * These routes still get thread/session setup but won't create session start/complete events.
41
41
  */
42
- const OTEL_SESSION_SKIP_PATHS = new Set([
42
+ const OTEL_SESSION_EVENT_SKIP_PATHS = new Set([
43
43
  '/_agentuity/workbench/ws',
44
44
  '/_agentuity/workbench/sample',
45
45
  '/_agentuity/workbench/state',
@@ -48,6 +48,16 @@ const OTEL_SESSION_SKIP_PATHS = new Set([
48
48
  '/_agentuity/webanalytics/session.js',
49
49
  ]);
50
50
 
51
+ /**
52
+ * Paths that should skip thread/session setup entirely.
53
+ * These are lightweight endpoints that don't need any context.
54
+ */
55
+ const OTEL_FULL_SKIP_PATHS = new Set([
56
+ '/_agentuity/workbench/metadata.json',
57
+ '/_agentuity/webanalytics/analytics.js',
58
+ '/_agentuity/webanalytics/session.js',
59
+ ]);
60
+
51
61
  export const AGENT_CONTEXT_PROPERTIES = [
52
62
  'logger',
53
63
  'tracer',
@@ -237,14 +247,16 @@ export function createCorsMiddleware(staticOptions?: CorsConfig) {
237
247
  // Default headers to expose (used if none specified)
238
248
  const defaultExposeHeaders = ['Content-Length'];
239
249
 
250
+ const finalAllowHeaders = [
251
+ ...(honoCorsOptions.allowHeaders ?? defaultAllowHeaders),
252
+ ...requiredAllowHeaders,
253
+ ];
254
+
240
255
  const corsMiddleware = cors({
241
256
  ...honoCorsOptions,
242
257
  origin: originHandler,
243
258
  // Always include required headers, merge with user-provided or defaults
244
- allowHeaders: [
245
- ...(honoCorsOptions.allowHeaders ?? defaultAllowHeaders),
246
- ...requiredAllowHeaders,
247
- ],
259
+ allowHeaders: finalAllowHeaders,
248
260
  allowMethods: honoCorsOptions.allowMethods ?? [
249
261
  'POST',
250
262
  'GET',
@@ -274,11 +286,14 @@ export function createCorsMiddleware(staticOptions?: CorsConfig) {
274
286
  export function createOtelMiddleware() {
275
287
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
276
288
  return createMiddleware<Env<any>>(async (c, next) => {
277
- // Skip session tracking for paths in the skip list
278
- if (OTEL_SESSION_SKIP_PATHS.has(c.req.path)) {
289
+ // Skip thread/session setup entirely for lightweight endpoints
290
+ if (OTEL_FULL_SKIP_PATHS.has(c.req.path)) {
279
291
  return next();
280
292
  }
281
293
 
294
+ // Check if we should skip session events (but still set up thread/session)
295
+ const skipSessionEvents = OTEL_SESSION_EVENT_SKIP_PATHS.has(c.req.path);
296
+
282
297
  // Import providers dynamically to avoid circular deps
283
298
  const { getThreadProvider, getSessionProvider } = await import('./_services');
284
299
  const WaitUntilHandler = (await import('./_waituntil')).default;
@@ -354,8 +369,9 @@ export function createOtelMiddleware() {
354
369
 
355
370
  // Send session start event (so evalruns can reference this session)
356
371
  // The provider decides whether to send based on available data (orgId, projectId, etc.)
372
+ // Skip for workbench routes that don't need session tracking
357
373
  const sessionEventProvider = getSessionEventProvider();
358
- if (sessionEventProvider) {
374
+ if (sessionEventProvider && !skipSessionEvents) {
359
375
  try {
360
376
  // Look up routeId from build metadata by matching method and path
361
377
  // We need to do this here because the router wrapper hasn't run yet
@@ -428,8 +444,8 @@ export function createOtelMiddleware() {
428
444
  await threadProvider.save(thread);
429
445
  internal.info('[session] thread saved');
430
446
 
431
- // Send session complete event
432
- if (sessionEventProvider) {
447
+ // Send session complete event (skip for workbench routes)
448
+ if (sessionEventProvider && !skipSessionEvents) {
433
449
  try {
434
450
  const userData = session.serializeUserData();
435
451
  internal.info(
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Shared HMAC-SHA256 signature verification for internal routes.
3
+ * Used by cron handlers and workbench routes.
4
+ */
5
+
6
+ import { isProduction } from './_config';
7
+
8
+ // Maximum age for signatures (5 minutes)
9
+ const MAX_SIGNATURE_AGE_SECONDS = 300;
10
+
11
+ /**
12
+ * Verifies an HMAC-SHA256 signature.
13
+ *
14
+ * The signature format is "v1=<64 hex chars>" where the hex payload is the
15
+ * HMAC-SHA256 of "{timestamp}.{body}" using AGENTUITY_SDK_KEY as the key.
16
+ *
17
+ * In non-production environments (dev mode), this function always returns true
18
+ * to allow local development without signature verification.
19
+ *
20
+ * In production, requests are rejected if AGENTUITY_SDK_KEY is not set.
21
+ *
22
+ * @param signature - The signature header value (format: "v1=<64 hex chars>")
23
+ * @param timestamp - The timestamp header value (unix seconds as string)
24
+ * @param body - The request body (empty string for GET/DELETE requests)
25
+ * @returns true if signature is valid, or if not in production mode
26
+ */
27
+ export async function verifySignature(
28
+ signature: string | undefined,
29
+ timestamp: string | undefined,
30
+ body: string
31
+ ): Promise<boolean> {
32
+ // Skip auth in dev mode
33
+ if (!isProduction()) {
34
+ return true;
35
+ }
36
+
37
+ const sdkKey = process.env.AGENTUITY_SDK_KEY;
38
+ if (!sdkKey) {
39
+ // No SDK key in production is a misconfiguration — reject the request
40
+ return false;
41
+ }
42
+
43
+ // If no signature headers, reject the request
44
+ if (!signature || !timestamp) {
45
+ return false;
46
+ }
47
+
48
+ // Verify timestamp is within acceptable range (prevent replay attacks)
49
+ const ts = parseInt(timestamp, 10);
50
+ const now = Math.floor(Date.now() / 1000);
51
+ if (isNaN(ts) || Math.abs(now - ts) > MAX_SIGNATURE_AGE_SECONDS) {
52
+ return false;
53
+ }
54
+
55
+ // Validate signature format: must be 'v1=' followed by valid hex (64 chars for SHA-256)
56
+ if (!signature.startsWith('v1=')) {
57
+ return false;
58
+ }
59
+ const hexPayload = signature.slice(3);
60
+ if (!/^[0-9a-f]{64}$/i.test(hexPayload)) {
61
+ return false;
62
+ }
63
+
64
+ // Decode hex payload into Uint8Array
65
+ const incomingSigBytes = new Uint8Array(32);
66
+ for (let i = 0; i < 32; i++) {
67
+ incomingSigBytes[i] = parseInt(hexPayload.slice(i * 2, i * 2 + 2), 16);
68
+ }
69
+
70
+ // Verify the signature using constant-time comparison
71
+ const message = `${ts}.${body}`;
72
+ const encoder = new TextEncoder();
73
+ const key = await crypto.subtle.importKey(
74
+ 'raw',
75
+ encoder.encode(sdkKey),
76
+ { name: 'HMAC', hash: 'SHA-256' },
77
+ false,
78
+ ['verify']
79
+ );
80
+
81
+ return crypto.subtle.verify('HMAC', key, incomingSigBytes, encoder.encode(message));
82
+ }