(value: unknown)
| 381 | } |
| 382 | |
| 383 | function decodePrefixPosition(value: unknown): RuntimePrefixPositionV1 { |
| 384 | if ( |
| 385 | !isRecord(value) || |
| 386 | !hasExactKeys(value, ['lastEventSeq', 'eventCount', 'lastEventId']) || |
| 387 | !Number.isSafeInteger(value.lastEventSeq) || |
| 388 | (value.lastEventSeq as number) <= 0 || |
| 389 | !Number.isSafeInteger(value.eventCount) || |
| 390 | value.eventCount !== value.lastEventSeq || |
| 391 | !isNonEmptyString(value.lastEventId) |
| 392 | ) { |
| 393 | throw new Error('Invalid RuntimeEvent prefix position'); |
| 394 | } |
| 395 | return { |
| 396 | lastEventSeq: value.lastEventSeq as number, |
| 397 | eventCount: value.eventCount as number, |
| 398 | lastEventId: value.lastEventId, |
| 399 | }; |
| 400 | } |
| 401 | |
| 402 | function decodeBoundaryDigest(value: unknown): RuntimeBoundaryDigest { |
| 403 | if (typeof value !== 'string' || !/^sha256:[0-9a-f]{64}$/.test(value)) { |
no test coverage detected