@api.global/typedsocket 5.1.2 → 6.1.0

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.
Files changed (36) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/classes.clienttagreconciler.d.ts +51 -0
  3. package/dist_ts/classes.clienttagreconciler.js +290 -0
  4. package/dist_ts/classes.nativebyteerror.d.ts +13 -0
  5. package/dist_ts/classes.nativebyteerror.js +26 -0
  6. package/dist_ts/classes.nativebytemanager.d.ts +327 -0
  7. package/dist_ts/classes.nativebytemanager.js +2343 -0
  8. package/dist_ts/{typedsocket.classes.typedsocket.d.ts → classes.typedsocket.d.ts} +122 -13
  9. package/dist_ts/classes.typedsocket.js +1733 -0
  10. package/dist_ts/classes.typedsockettagpolicymanager.d.ts +112 -0
  11. package/dist_ts/classes.typedsockettagpolicymanager.js +549 -0
  12. package/dist_ts/constants.nativebytes.d.ts +59 -0
  13. package/dist_ts/constants.nativebytes.js +58 -0
  14. package/dist_ts/helpers.nativebytecodec.d.ts +8 -0
  15. package/dist_ts/helpers.nativebytecodec.js +328 -0
  16. package/dist_ts/helpers.websocket.d.ts +8 -0
  17. package/dist_ts/helpers.websocket.js +13 -0
  18. package/dist_ts/index.d.ts +9 -1
  19. package/dist_ts/index.js +6 -2
  20. package/dist_ts/interfaces.diagnostics.d.ts +73 -0
  21. package/dist_ts/interfaces.diagnostics.js +2 -0
  22. package/dist_ts/interfaces.nativebytes.d.ts +187 -0
  23. package/dist_ts/interfaces.nativebytes.js +2 -0
  24. package/{ts/typedsocket.plugins.ts → dist_ts/plugins.d.ts} +3 -9
  25. package/dist_ts/plugins.js +14 -0
  26. package/{license → license.md} +2 -2
  27. package/package.json +22 -18
  28. package/readme.hints.md +60 -19
  29. package/readme.md +536 -56
  30. package/dist_ts/typedsocket.classes.typedsocket.js +0 -941
  31. package/dist_ts/typedsocket.plugins.d.ts +0 -11
  32. package/dist_ts/typedsocket.plugins.js +0 -13
  33. package/npmextra.json +0 -35
  34. package/ts/00_commitinfo_data.ts +0 -8
  35. package/ts/index.ts +0 -1
  36. package/ts/typedsocket.classes.typedsocket.ts +0 -1156
@@ -0,0 +1,58 @@
1
+ export const NATIVE_BYTE_PROTOCOL = 'native-byte-v1';
2
+ export const NATIVE_BYTE_PROTOCOL_MAJOR = 6;
3
+ export const NATIVE_BYTE_FRAME_MAGIC = 'TSB1';
4
+ export const NATIVE_BYTE_FRAME_TYPES = {
5
+ OPEN: 1,
6
+ OPEN_ACK: 2,
7
+ DATA: 3,
8
+ ACK: 4,
9
+ FIN: 5,
10
+ FIN_ACK: 6,
11
+ RESET: 7,
12
+ };
13
+ export const NATIVE_BYTE_RESET_CODES = {
14
+ PROTOCOL_ERROR: 1,
15
+ CAPABILITY_REJECTED: 2,
16
+ RESOURCE_LIMIT: 3,
17
+ TIMEOUT: 4,
18
+ ABORTED: 5,
19
+ INTEGRITY_ERROR: 6,
20
+ AUTHORITY_REVOKED: 7,
21
+ INTERNAL_ERROR: 8,
22
+ };
23
+ export const NATIVE_BYTE_COMMON_HEADER_BYTES = 32;
24
+ export const NATIVE_BYTE_OPEN_FIXED_HEADER_BYTES = 116;
25
+ export const NATIVE_BYTE_OPEN_ACK_HEADER_BYTES = 48;
26
+ export const NATIVE_BYTE_DATA_HEADER_BYTES = 48;
27
+ export const NATIVE_BYTE_ACK_HEADER_BYTES = 48;
28
+ export const NATIVE_BYTE_FIN_HEADER_BYTES = 72;
29
+ export const NATIVE_BYTE_FIN_ACK_HEADER_BYTES = 72;
30
+ export const NATIVE_BYTE_RESET_FIXED_HEADER_BYTES = 40;
31
+ export const NATIVE_BYTE_MAX_FRAME_BYTES = 32 * 1024;
32
+ export const NATIVE_BYTE_MAX_DATA_PAYLOAD_BYTES = NATIVE_BYTE_MAX_FRAME_BYTES - NATIVE_BYTE_DATA_HEADER_BYTES;
33
+ export const NATIVE_BYTE_MAX_STREAM_BYTES = NATIVE_BYTE_MAX_DATA_PAYLOAD_BYTES * 0x1_0000_0000;
34
+ export const NATIVE_BYTE_MAX_CONTENT_TYPE_BYTES = 255;
35
+ export const NATIVE_BYTE_MAX_RESET_REASON_BYTES = 256;
36
+ export const NATIVE_BYTE_DEFAULT_INITIAL_WINDOW_BYTES = 256 * 1024;
37
+ export const NATIVE_BYTE_MAX_WINDOW_BYTES = 1024 * 1024;
38
+ export const NATIVE_BYTE_MAX_QUEUED_PAYLOAD_BYTES_PER_STREAM = 1024 * 1024;
39
+ export const NATIVE_BYTE_MAX_QUEUED_PAYLOAD_BYTES_PER_CONNECTION = 8 * 1024 * 1024;
40
+ export const NATIVE_BYTE_MAX_RECEIVE_QUEUE_CHUNKS = 4096;
41
+ export const NATIVE_BYTE_MAX_STREAMS_PER_CONNECTION = 32;
42
+ export const NATIVE_BYTE_MAX_PENDING_DATA_OPERATIONS_PER_CONNECTION = 64;
43
+ export const NATIVE_BYTE_MAX_RAW_QUEUE_FRAMES = 64;
44
+ export const NATIVE_BYTE_MAX_RAW_QUEUE_BYTES = 2 * 1024 * 1024;
45
+ export const NATIVE_BYTE_GRANT_OPEN_TIMEOUT_MS = 10_000;
46
+ export const NATIVE_BYTE_PROGRESS_TIMEOUT_MS = 30_000;
47
+ export const NATIVE_BYTE_TOMBSTONE_RETENTION_MS = 60_000;
48
+ export const NATIVE_BYTE_MAX_TOMBSTONES = 64;
49
+ export const NATIVE_BYTE_MAX_PRINCIPAL_ID_BYTES = 256;
50
+ export const NATIVE_BYTE_MAX_AUTHORITY_REVISION_BYTES = 256;
51
+ export const NATIVE_BYTE_REVALIDATION_TIMEOUT_MS = 5_000;
52
+ export const NATIVE_BYTE_MAX_REVALIDATIONS_PER_PEER = 4;
53
+ export const NATIVE_BYTE_MAX_REVALIDATIONS_PER_PRINCIPAL = 16;
54
+ export const NATIVE_BYTE_MAX_REVALIDATIONS_PER_SERVER = 128;
55
+ export const NATIVE_BYTE_MAX_CONNECTIONS_PER_SERVER = 1_024;
56
+ export const NATIVE_BYTE_MAX_STREAMS_PER_SERVER = 1_024;
57
+ export const NATIVE_BYTE_MAX_RETAINED_BYTES_PER_SERVER = 64 * 1024 * 1024;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLm5hdGl2ZWJ5dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY29uc3RhbnRzLm5hdGl2ZWJ5dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGdCQUF5QixDQUFDO0FBQzlELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQVUsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxNQUFlLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUc7SUFDckMsSUFBSSxFQUFFLENBQUM7SUFDUCxRQUFRLEVBQUUsQ0FBQztJQUNYLElBQUksRUFBRSxDQUFDO0lBQ1AsR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztJQUNOLE9BQU8sRUFBRSxDQUFDO0lBQ1YsS0FBSyxFQUFFLENBQUM7Q0FDQSxDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUc7SUFDckMsY0FBYyxFQUFFLENBQUM7SUFDakIsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QixjQUFjLEVBQUUsQ0FBQztJQUNqQixPQUFPLEVBQUUsQ0FBQztJQUNWLE9BQU8sRUFBRSxDQUFDO0lBQ1YsZUFBZSxFQUFFLENBQUM7SUFDbEIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixjQUFjLEVBQUUsQ0FBQztDQUNULENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxFQUFFLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsR0FBRyxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxFQUFFLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQzdDLDJCQUEyQixHQUFHLDZCQUE2QixDQUFDO0FBQzlELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUN2QyxrQ0FBa0MsR0FBRyxhQUFhLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsR0FBRyxDQUFDO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0sK0NBQStDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMzRSxNQUFNLENBQUMsTUFBTSxtREFBbUQsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuRixNQUFNLENBQUMsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsRUFBRSxDQUFDO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLHNEQUFzRCxHQUFHLEVBQUUsQ0FBQztBQUN6RSxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsTUFBTSxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLE1BQU0sQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxNQUFNLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBRyxHQUFHLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsS0FBSyxDQUFDO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLENBQUMsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBRyxFQUFFLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sd0NBQXdDLEdBQUcsR0FBRyxDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLEtBQUssQ0FBQztBQUM1RCxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxLQUFLLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0seUNBQXlDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMifQ==
@@ -0,0 +1,8 @@
1
+ import type { TNativeByteFrame } from './interfaces.nativebytes.js';
2
+ export declare function assertNativeByteLength(valueArg: unknown, nameArg?: string): number;
3
+ export declare function normalizeNativeByteSha256(valueArg: unknown): string;
4
+ export declare function normalizeNativeByteContentType(valueArg: unknown): string;
5
+ export declare function normalizeNativeByteStreamId(valueArg: unknown): string;
6
+ export declare function normalizeNativeByteCapability(valueArg: unknown): string;
7
+ export declare function encodeNativeByteFrame(frameArg: TNativeByteFrame): Uint8Array<ArrayBuffer>;
8
+ export declare function decodeNativeByteFrame(bytesArg: Uint8Array): TNativeByteFrame;
@@ -0,0 +1,328 @@
1
+ import { NATIVE_BYTE_ACK_HEADER_BYTES, NATIVE_BYTE_COMMON_HEADER_BYTES, NATIVE_BYTE_DATA_HEADER_BYTES, NATIVE_BYTE_FIN_ACK_HEADER_BYTES, NATIVE_BYTE_FIN_HEADER_BYTES, NATIVE_BYTE_FRAME_MAGIC, NATIVE_BYTE_FRAME_TYPES, NATIVE_BYTE_MAX_CONTENT_TYPE_BYTES, NATIVE_BYTE_MAX_DATA_PAYLOAD_BYTES, NATIVE_BYTE_MAX_FRAME_BYTES, NATIVE_BYTE_MAX_RESET_REASON_BYTES, NATIVE_BYTE_MAX_STREAM_BYTES, NATIVE_BYTE_MAX_WINDOW_BYTES, NATIVE_BYTE_OPEN_ACK_HEADER_BYTES, NATIVE_BYTE_OPEN_FIXED_HEADER_BYTES, NATIVE_BYTE_RESET_FIXED_HEADER_BYTES, } from './constants.nativebytes.js';
2
+ import { NativeByteProtocolError } from './classes.nativebyteerror.js';
3
+ const textEncoder = new TextEncoder();
4
+ const fatalTextDecoder = new TextDecoder('utf-8', { fatal: true });
5
+ const streamIdPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
6
+ const capabilityPattern = /^[0-9a-f]{64}$/;
7
+ const sha256Pattern = /^sha256:[0-9a-f]{64}$/;
8
+ const contentTypePattern = /^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+(?:;[\x20-\x7e]+)?$/;
9
+ function decodeUtf8(bytesArg, nameArg) {
10
+ try {
11
+ return fatalTextDecoder.decode(bytesArg);
12
+ }
13
+ catch (errorArg) {
14
+ throw new NativeByteProtocolError(`${nameArg} must contain valid UTF-8`, {
15
+ cause: errorArg,
16
+ });
17
+ }
18
+ }
19
+ function assertNativeByteWindow(valueArg, nameArg) {
20
+ if (!Number.isSafeInteger(valueArg)
21
+ || valueArg <= 0
22
+ || valueArg > NATIVE_BYTE_MAX_WINDOW_BYTES) {
23
+ throw new NativeByteProtocolError(`${nameArg} must be an integer from 1 through ${NATIVE_BYTE_MAX_WINDOW_BYTES}`);
24
+ }
25
+ return valueArg;
26
+ }
27
+ export function assertNativeByteLength(valueArg, nameArg = 'byteLength') {
28
+ if (typeof valueArg !== 'number'
29
+ || !Number.isSafeInteger(valueArg)
30
+ || valueArg < 0
31
+ || valueArg > NATIVE_BYTE_MAX_STREAM_BYTES) {
32
+ throw new NativeByteProtocolError(`${nameArg} must be an integer from 0 through ${NATIVE_BYTE_MAX_STREAM_BYTES}`);
33
+ }
34
+ return valueArg;
35
+ }
36
+ export function normalizeNativeByteSha256(valueArg) {
37
+ if (typeof valueArg !== 'string' || !sha256Pattern.test(valueArg)) {
38
+ throw new NativeByteProtocolError('sha256 must use sha256:<64 lowercase hex>');
39
+ }
40
+ return valueArg;
41
+ }
42
+ export function normalizeNativeByteContentType(valueArg) {
43
+ if (typeof valueArg !== 'string'
44
+ || valueArg.length === 0
45
+ || valueArg !== valueArg.trim()
46
+ || !contentTypePattern.test(valueArg)) {
47
+ throw new NativeByteProtocolError('contentType must be a normalized nonempty media type');
48
+ }
49
+ const bytes = textEncoder.encode(valueArg);
50
+ if (bytes.byteLength > NATIVE_BYTE_MAX_CONTENT_TYPE_BYTES) {
51
+ throw new NativeByteProtocolError(`contentType must not exceed ${NATIVE_BYTE_MAX_CONTENT_TYPE_BYTES} UTF-8 bytes`);
52
+ }
53
+ return valueArg;
54
+ }
55
+ export function normalizeNativeByteStreamId(valueArg) {
56
+ if (typeof valueArg !== 'string' || !streamIdPattern.test(valueArg)) {
57
+ throw new NativeByteProtocolError('streamId must be a canonical lowercase 128-bit UUID');
58
+ }
59
+ return valueArg;
60
+ }
61
+ export function normalizeNativeByteCapability(valueArg) {
62
+ if (typeof valueArg !== 'string' || !capabilityPattern.test(valueArg)) {
63
+ throw new NativeByteProtocolError('capability must be 256 bits of lowercase hexadecimal');
64
+ }
65
+ return valueArg;
66
+ }
67
+ function bytesToHex(bytesArg) {
68
+ let result = '';
69
+ for (const value of bytesArg)
70
+ result += value.toString(16).padStart(2, '0');
71
+ return result;
72
+ }
73
+ function hexToBytes(valueArg) {
74
+ const result = new Uint8Array(valueArg.length / 2);
75
+ for (let index = 0; index < result.length; index++) {
76
+ result[index] = Number.parseInt(valueArg.slice(index * 2, index * 2 + 2), 16);
77
+ }
78
+ return result;
79
+ }
80
+ function streamIdToBytes(streamIdArg) {
81
+ return hexToBytes(normalizeNativeByteStreamId(streamIdArg).replaceAll('-', ''));
82
+ }
83
+ function bytesToStreamId(bytesArg) {
84
+ const hex = bytesToHex(bytesArg);
85
+ return normalizeNativeByteStreamId(`${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`);
86
+ }
87
+ function writeSafeU64(viewArg, offsetArg, valueArg, nameArg) {
88
+ assertNativeByteLength(valueArg, nameArg);
89
+ viewArg.setBigUint64(offsetArg, BigInt(valueArg), false);
90
+ }
91
+ function readSafeU64(viewArg, offsetArg, nameArg) {
92
+ const value = viewArg.getBigUint64(offsetArg, false);
93
+ if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
94
+ throw new NativeByteProtocolError(`${nameArg} exceeds JavaScript safe integer range`);
95
+ }
96
+ return assertNativeByteLength(Number(value), nameArg);
97
+ }
98
+ function createHeader(typeArg, streamIdArg, headerLengthArg, payloadLengthArg) {
99
+ const totalLength = headerLengthArg + payloadLengthArg;
100
+ if (totalLength > NATIVE_BYTE_MAX_FRAME_BYTES) {
101
+ throw new NativeByteProtocolError(`native-byte-v1 frame exceeds ${NATIVE_BYTE_MAX_FRAME_BYTES} bytes`);
102
+ }
103
+ const bytes = new Uint8Array(totalLength);
104
+ bytes.set(textEncoder.encode(NATIVE_BYTE_FRAME_MAGIC), 0);
105
+ const view = new DataView(bytes.buffer);
106
+ view.setUint8(4, typeArg);
107
+ view.setUint8(5, 0);
108
+ view.setUint16(6, headerLengthArg, false);
109
+ bytes.set(streamIdToBytes(streamIdArg), 8);
110
+ view.setUint32(24, payloadLengthArg, false);
111
+ view.setUint32(28, 0, false);
112
+ return { bytes, view };
113
+ }
114
+ function digestToBytes(digestArg) {
115
+ return hexToBytes(normalizeNativeByteSha256(digestArg).slice('sha256:'.length));
116
+ }
117
+ function bytesToDigest(bytesArg) {
118
+ return normalizeNativeByteSha256(`sha256:${bytesToHex(bytesArg)}`);
119
+ }
120
+ export function encodeNativeByteFrame(frameArg) {
121
+ switch (frameArg.type) {
122
+ case NATIVE_BYTE_FRAME_TYPES.OPEN: {
123
+ const contentType = normalizeNativeByteContentType(frameArg.contentType);
124
+ const contentTypeBytes = textEncoder.encode(contentType);
125
+ const headerLength = NATIVE_BYTE_OPEN_FIXED_HEADER_BYTES + contentTypeBytes.byteLength;
126
+ const { bytes, view } = createHeader(frameArg.type, frameArg.streamId, headerLength, 0);
127
+ bytes.set(hexToBytes(normalizeNativeByteCapability(frameArg.capability)), 32);
128
+ writeSafeU64(view, 64, frameArg.byteLength, 'byteLength');
129
+ writeSafeU64(view, 72, assertNativeByteWindow(frameArg.initialWindowBytes, 'initialWindowBytes'), 'initialWindowBytes');
130
+ bytes.set(digestToBytes(frameArg.sha256), 80);
131
+ view.setUint16(112, contentTypeBytes.byteLength, false);
132
+ view.setUint16(114, 0, false);
133
+ bytes.set(contentTypeBytes, NATIVE_BYTE_OPEN_FIXED_HEADER_BYTES);
134
+ return bytes;
135
+ }
136
+ case NATIVE_BYTE_FRAME_TYPES.OPEN_ACK: {
137
+ const { bytes, view } = createHeader(frameArg.type, frameArg.streamId, NATIVE_BYTE_OPEN_ACK_HEADER_BYTES, 0);
138
+ writeSafeU64(view, 32, frameArg.receiveLimitOffset, 'receiveLimitOffset');
139
+ writeSafeU64(view, 40, 0, 'reserved');
140
+ return bytes;
141
+ }
142
+ case NATIVE_BYTE_FRAME_TYPES.DATA: {
143
+ if (!(frameArg.payload instanceof Uint8Array) || frameArg.payload.byteLength === 0) {
144
+ throw new NativeByteProtocolError('DATA payload must be a nonempty Uint8Array');
145
+ }
146
+ if (frameArg.payload.byteLength > NATIVE_BYTE_MAX_DATA_PAYLOAD_BYTES) {
147
+ throw new NativeByteProtocolError(`DATA payload exceeds ${NATIVE_BYTE_MAX_DATA_PAYLOAD_BYTES} bytes`);
148
+ }
149
+ if (!Number.isSafeInteger(frameArg.sequence) || frameArg.sequence < 0 || frameArg.sequence > 0xffffffff) {
150
+ throw new NativeByteProtocolError('DATA sequence must be an unsigned 32-bit integer');
151
+ }
152
+ const { bytes, view } = createHeader(frameArg.type, frameArg.streamId, NATIVE_BYTE_DATA_HEADER_BYTES, frameArg.payload.byteLength);
153
+ view.setUint32(32, frameArg.sequence, false);
154
+ view.setUint32(36, 0, false);
155
+ writeSafeU64(view, 40, frameArg.offset, 'offset');
156
+ bytes.set(frameArg.payload, NATIVE_BYTE_DATA_HEADER_BYTES);
157
+ return bytes;
158
+ }
159
+ case NATIVE_BYTE_FRAME_TYPES.ACK: {
160
+ const { bytes, view } = createHeader(frameArg.type, frameArg.streamId, NATIVE_BYTE_ACK_HEADER_BYTES, 0);
161
+ writeSafeU64(view, 32, frameArg.acknowledgedOffset, 'acknowledgedOffset');
162
+ writeSafeU64(view, 40, frameArg.receiveLimitOffset, 'receiveLimitOffset');
163
+ return bytes;
164
+ }
165
+ case NATIVE_BYTE_FRAME_TYPES.FIN:
166
+ case NATIVE_BYTE_FRAME_TYPES.FIN_ACK: {
167
+ const headerLength = frameArg.type === NATIVE_BYTE_FRAME_TYPES.FIN
168
+ ? NATIVE_BYTE_FIN_HEADER_BYTES
169
+ : NATIVE_BYTE_FIN_ACK_HEADER_BYTES;
170
+ const { bytes, view } = createHeader(frameArg.type, frameArg.streamId, headerLength, 0);
171
+ writeSafeU64(view, 32, frameArg.byteLength, 'byteLength');
172
+ bytes.set(digestToBytes(frameArg.sha256), 40);
173
+ return bytes;
174
+ }
175
+ case NATIVE_BYTE_FRAME_TYPES.RESET: {
176
+ if (!Number.isSafeInteger(frameArg.code) || frameArg.code <= 0 || frameArg.code > 0xffff) {
177
+ throw new NativeByteProtocolError('RESET code must be a nonzero unsigned 16-bit integer');
178
+ }
179
+ if (typeof frameArg.reason !== 'string') {
180
+ throw new NativeByteProtocolError('RESET reason must be a string');
181
+ }
182
+ const reasonBytes = textEncoder.encode(frameArg.reason);
183
+ if (reasonBytes.byteLength > NATIVE_BYTE_MAX_RESET_REASON_BYTES) {
184
+ throw new NativeByteProtocolError(`RESET reason exceeds ${NATIVE_BYTE_MAX_RESET_REASON_BYTES} UTF-8 bytes`);
185
+ }
186
+ const headerLength = NATIVE_BYTE_RESET_FIXED_HEADER_BYTES + reasonBytes.byteLength;
187
+ const { bytes, view } = createHeader(frameArg.type, frameArg.streamId, headerLength, 0);
188
+ view.setUint16(32, frameArg.code, false);
189
+ view.setUint16(34, reasonBytes.byteLength, false);
190
+ view.setUint32(36, 0, false);
191
+ bytes.set(reasonBytes, NATIVE_BYTE_RESET_FIXED_HEADER_BYTES);
192
+ return bytes;
193
+ }
194
+ }
195
+ }
196
+ function assertExactHeaderAndPayload(headerLengthArg, expectedHeaderLengthArg, payloadLengthArg, expectedPayloadLengthArg) {
197
+ if (headerLengthArg !== expectedHeaderLengthArg || payloadLengthArg !== expectedPayloadLengthArg) {
198
+ throw new NativeByteProtocolError('frame has an invalid header or payload length');
199
+ }
200
+ }
201
+ export function decodeNativeByteFrame(bytesArg) {
202
+ if (!(bytesArg instanceof Uint8Array)) {
203
+ throw new NativeByteProtocolError('frame must be a Uint8Array');
204
+ }
205
+ if (bytesArg.byteLength < NATIVE_BYTE_COMMON_HEADER_BYTES || bytesArg.byteLength > NATIVE_BYTE_MAX_FRAME_BYTES) {
206
+ throw new NativeByteProtocolError('frame length is outside native-byte-v1 bounds');
207
+ }
208
+ if (decodeUtf8(bytesArg.subarray(0, 4), 'frame magic') !== NATIVE_BYTE_FRAME_MAGIC) {
209
+ throw new NativeByteProtocolError('frame magic is not TSB1');
210
+ }
211
+ const view = new DataView(bytesArg.buffer, bytesArg.byteOffset, bytesArg.byteLength);
212
+ const type = view.getUint8(4);
213
+ if (view.getUint8(5) !== 0 || view.getUint32(28, false) !== 0) {
214
+ throw new NativeByteProtocolError('frame contains nonzero reserved flags or bytes');
215
+ }
216
+ const headerLength = view.getUint16(6, false);
217
+ const payloadLength = view.getUint32(24, false);
218
+ if (headerLength < NATIVE_BYTE_COMMON_HEADER_BYTES
219
+ || headerLength > bytesArg.byteLength
220
+ || headerLength + payloadLength !== bytesArg.byteLength) {
221
+ throw new NativeByteProtocolError('frame length fields do not match the WebSocket message');
222
+ }
223
+ const streamId = bytesToStreamId(bytesArg.subarray(8, 24));
224
+ switch (type) {
225
+ case NATIVE_BYTE_FRAME_TYPES.OPEN: {
226
+ if (headerLength < NATIVE_BYTE_OPEN_FIXED_HEADER_BYTES || payloadLength !== 0) {
227
+ throw new NativeByteProtocolError('OPEN frame has invalid lengths');
228
+ }
229
+ if (view.getUint16(114, false) !== 0) {
230
+ throw new NativeByteProtocolError('OPEN frame contains nonzero reserved bytes');
231
+ }
232
+ const contentTypeLength = view.getUint16(112, false);
233
+ if (contentTypeLength === 0
234
+ || contentTypeLength > NATIVE_BYTE_MAX_CONTENT_TYPE_BYTES
235
+ || headerLength !== NATIVE_BYTE_OPEN_FIXED_HEADER_BYTES + contentTypeLength) {
236
+ throw new NativeByteProtocolError('OPEN contentType length is invalid');
237
+ }
238
+ const frame = {
239
+ type,
240
+ streamId,
241
+ capability: normalizeNativeByteCapability(bytesToHex(bytesArg.subarray(32, 64))),
242
+ byteLength: readSafeU64(view, 64, 'byteLength'),
243
+ initialWindowBytes: assertNativeByteWindow(readSafeU64(view, 72, 'initialWindowBytes'), 'initialWindowBytes'),
244
+ sha256: bytesToDigest(bytesArg.subarray(80, 112)),
245
+ contentType: normalizeNativeByteContentType(decodeUtf8(bytesArg.subarray(NATIVE_BYTE_OPEN_FIXED_HEADER_BYTES, headerLength), 'OPEN contentType')),
246
+ };
247
+ return frame;
248
+ }
249
+ case NATIVE_BYTE_FRAME_TYPES.OPEN_ACK: {
250
+ assertExactHeaderAndPayload(headerLength, NATIVE_BYTE_OPEN_ACK_HEADER_BYTES, payloadLength, 0);
251
+ if (readSafeU64(view, 40, 'reserved') !== 0) {
252
+ throw new NativeByteProtocolError('OPEN_ACK contains nonzero reserved bytes');
253
+ }
254
+ const frame = {
255
+ type,
256
+ streamId,
257
+ receiveLimitOffset: readSafeU64(view, 32, 'receiveLimitOffset'),
258
+ };
259
+ return frame;
260
+ }
261
+ case NATIVE_BYTE_FRAME_TYPES.DATA: {
262
+ if (headerLength !== NATIVE_BYTE_DATA_HEADER_BYTES
263
+ || payloadLength === 0
264
+ || payloadLength > NATIVE_BYTE_MAX_DATA_PAYLOAD_BYTES) {
265
+ throw new NativeByteProtocolError('DATA frame has invalid lengths');
266
+ }
267
+ if (view.getUint32(36, false) !== 0) {
268
+ throw new NativeByteProtocolError('DATA contains nonzero reserved bytes');
269
+ }
270
+ const frame = {
271
+ type,
272
+ streamId,
273
+ sequence: view.getUint32(32, false),
274
+ offset: readSafeU64(view, 40, 'offset'),
275
+ payload: bytesArg.subarray(headerLength),
276
+ };
277
+ return frame;
278
+ }
279
+ case NATIVE_BYTE_FRAME_TYPES.ACK: {
280
+ assertExactHeaderAndPayload(headerLength, NATIVE_BYTE_ACK_HEADER_BYTES, payloadLength, 0);
281
+ const frame = {
282
+ type,
283
+ streamId,
284
+ acknowledgedOffset: readSafeU64(view, 32, 'acknowledgedOffset'),
285
+ receiveLimitOffset: readSafeU64(view, 40, 'receiveLimitOffset'),
286
+ };
287
+ return frame;
288
+ }
289
+ case NATIVE_BYTE_FRAME_TYPES.FIN:
290
+ case NATIVE_BYTE_FRAME_TYPES.FIN_ACK: {
291
+ const expectedHeader = type === NATIVE_BYTE_FRAME_TYPES.FIN
292
+ ? NATIVE_BYTE_FIN_HEADER_BYTES
293
+ : NATIVE_BYTE_FIN_ACK_HEADER_BYTES;
294
+ assertExactHeaderAndPayload(headerLength, expectedHeader, payloadLength, 0);
295
+ const byteLength = readSafeU64(view, 32, 'byteLength');
296
+ const sha256 = bytesToDigest(bytesArg.subarray(40, 72));
297
+ if (type === NATIVE_BYTE_FRAME_TYPES.FIN) {
298
+ const frame = { type, streamId, byteLength, sha256 };
299
+ return frame;
300
+ }
301
+ const frame = { type, streamId, byteLength, sha256 };
302
+ return frame;
303
+ }
304
+ case NATIVE_BYTE_FRAME_TYPES.RESET: {
305
+ if (headerLength < NATIVE_BYTE_RESET_FIXED_HEADER_BYTES || payloadLength !== 0) {
306
+ throw new NativeByteProtocolError('RESET frame has invalid lengths');
307
+ }
308
+ const code = view.getUint16(32, false);
309
+ const reasonLength = view.getUint16(34, false);
310
+ if (code === 0
311
+ || view.getUint32(36, false) !== 0
312
+ || reasonLength > NATIVE_BYTE_MAX_RESET_REASON_BYTES
313
+ || headerLength !== NATIVE_BYTE_RESET_FIXED_HEADER_BYTES + reasonLength) {
314
+ throw new NativeByteProtocolError('RESET frame has invalid code, reserved bytes, or reason length');
315
+ }
316
+ const frame = {
317
+ type,
318
+ streamId,
319
+ code,
320
+ reason: decodeUtf8(bytesArg.subarray(NATIVE_BYTE_RESET_FIXED_HEADER_BYTES, headerLength), 'RESET reason'),
321
+ };
322
+ return frame;
323
+ }
324
+ default:
325
+ throw new NativeByteProtocolError(`unknown native-byte-v1 frame type ${type}`);
326
+ }
327
+ }
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5uYXRpdmVieXRlY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9oZWxwZXJzLm5hdGl2ZWJ5dGVjb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQiw2QkFBNkIsRUFDN0IsZ0NBQWdDLEVBQ2hDLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsMkJBQTJCLEVBQzNCLGtDQUFrQyxFQUNsQyw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLGlDQUFpQyxFQUNqQyxtQ0FBbUMsRUFDbkMsb0NBQW9DLEdBQ3JDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFZdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUN0QyxNQUFNLGdCQUFnQixHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sZUFBZSxHQUFHLGdFQUFnRSxDQUFDO0FBQ3pGLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDM0MsTUFBTSxhQUFhLEdBQUcsdUJBQXVCLENBQUM7QUFDOUMsTUFBTSxrQkFBa0IsR0FBRyw0REFBNEQsQ0FBQztBQUV4RixTQUFTLFVBQVUsQ0FBQyxRQUFvQixFQUFFLE9BQWU7SUFDdkQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLHVCQUF1QixDQUFDLEdBQUcsT0FBTywyQkFBMkIsRUFBRTtZQUN2RSxLQUFLLEVBQUUsUUFBUTtTQUNoQixDQUFDLENB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
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The WebSocket JS API only permits close codes 1000 and 3000-4999 from
3
+ * close(); protocol-range invariant codes are mirrored into the application
4
+ * range (1009 -> 4009) so client-initiated closes cannot throw. Server-side
5
+ * peer closes keep the protocol codes, and diagnostics always report the
6
+ * semantic protocol code.
7
+ */
8
+ export declare function toClientWebSocketCloseCode(codeArg: number): number;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The WebSocket JS API only permits close codes 1000 and 3000-4999 from
3
+ * close(); protocol-range invariant codes are mirrored into the application
4
+ * range (1009 -> 4009) so client-initiated closes cannot throw. Server-side
5
+ * peer closes keep the protocol codes, and diagnostics always report the
6
+ * semantic protocol code.
7
+ */
8
+ export function toClientWebSocketCloseCode(codeArg) {
9
+ return codeArg === 1000 || (codeArg >= 3000 && codeArg <= 4999)
10
+ ? codeArg
11
+ : 3000 + codeArg;
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy53ZWJzb2NrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9oZWxwZXJzLndlYnNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBZTtJQUN4RCxPQUFPLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDN0QsQ0FBQyxDQUFDLE9BQU87UUFDVCxDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUNyQixDQUFDIn0=
@@ -1 +1,9 @@
1
- export * from './typedsocket.classes.typedsocket.js';
1
+ export * from './classes.typedsocket.js';
2
+ export { NATIVE_BYTE_PROTOCOL, NATIVE_BYTE_PROTOCOL_MAJOR, NATIVE_BYTE_MAX_FRAME_BYTES, NATIVE_BYTE_MAX_CONTENT_TYPE_BYTES, NATIVE_BYTE_MAX_DATA_PAYLOAD_BYTES, NATIVE_BYTE_MAX_STREAM_BYTES, NATIVE_BYTE_DEFAULT_INITIAL_WINDOW_BYTES, NATIVE_BYTE_MAX_WINDOW_BYTES, NATIVE_BYTE_MAX_QUEUED_PAYLOAD_BYTES_PER_STREAM, NATIVE_BYTE_MAX_QUEUED_PAYLOAD_BYTES_PER_CONNECTION, NATIVE_BYTE_MAX_RECEIVE_QUEUE_CHUNKS, NATIVE_BYTE_MAX_STREAMS_PER_CONNECTION, NATIVE_BYTE_MAX_PENDING_DATA_OPERATIONS_PER_CONNECTION, NATIVE_BYTE_MAX_RAW_QUEUE_FRAMES, NATIVE_BYTE_MAX_RAW_QUEUE_BYTES, NATIVE_BYTE_GRANT_OPEN_TIMEOUT_MS, NATIVE_BYTE_PROGRESS_TIMEOUT_MS, NATIVE_BYTE_TOMBSTONE_RETENTION_MS, NATIVE_BYTE_MAX_TOMBSTONES, NATIVE_BYTE_MAX_PRINCIPAL_ID_BYTES, NATIVE_BYTE_MAX_AUTHORITY_REVISION_BYTES, NATIVE_BYTE_REVALIDATION_TIMEOUT_MS, NATIVE_BYTE_MAX_REVALIDATIONS_PER_PEER, NATIVE_BYTE_MAX_REVALIDATIONS_PER_PRINCIPAL, NATIVE_BYTE_MAX_REVALIDATIONS_PER_SERVER, NATIVE_BYTE_MAX_CONNECTIONS_PER_SERVER, NATIVE_BYTE_MAX_STREAMS_PER_SERVER, NATIVE_BYTE_MAX_RETAINED_BYTES_PER_SERVER, } from './constants.nativebytes.js';
3
+ export type { TNativeByteCapabilityMode, TNativeByteRole, TNativeByteAuthorityOperation, INativeByteDescriptorTransport, INativeByteDescriptor, INativeByteReceipt, INativeByteAuthorizationBinding, INativeByteAuthorizationContext, INativeByteAuthorizationAdapter, INativeByteCreateVirtualStreamOptions, INativeByteAuthorityRevisions, TNativeByteConnectionBinding, INativeByteRevalidationContext, TNativeByteRevalidate, INativeByteCreateReceiveGrantOptions, INativeByteOpenSenderOptions, INativeByteReceiveGrant, INativeByteReceiverLike, INativeByteSenderLike, INativeByteCapabilityStatus, INativeByteStats, INativeByteRuntime, } from './interfaces.nativebytes.js';
4
+ export * from './classes.nativebyteerror.js';
5
+ export { NativeByteManager, NativeByteReceiver, NativeByteSender, } from './classes.nativebytemanager.js';
6
+ export type { INativeByteManagerOptions } from './classes.nativebytemanager.js';
7
+ export { TYPEDSOCKET_MAX_TAG_NAME_BYTES, TYPEDSOCKET_MAX_TAG_PAYLOAD_BYTES, TYPEDSOCKET_MAX_CLIENT_TAGS_PER_PEER, TYPEDSOCKET_MAX_CLIENT_TAG_RETAINED_BYTES_PER_PEER, TYPEDSOCKET_MAX_RETAINED_TAG_MUTATIONS_PER_PEER, TYPEDSOCKET_MAX_RETAINED_TAG_MUTATIONS_PER_RULE, TYPEDSOCKET_MAX_RETAINED_TAG_MUTATIONS_PER_SERVER, TYPEDSOCKET_MAX_TAG_AUTHORIZATION_TIMEOUT_MS, TYPEDSOCKET_MAX_SERVER_TAG_NAMES_PER_PEER, TYPEDSOCKET_MAX_SERVER_TAG_RETAINED_BYTES_PER_PEER, TYPEDSOCKET_TAG_DENIAL_CODES, TypedSocketClientTagDeniedError, } from './classes.typedsockettagpolicymanager.js';
8
+ export type { TTypedSocketDiagnosticSide, TTypedSocketDiagnosticEvent, TNativeByteDiagnosticEvent, ITypedSocketConnectionClosedDiagnostic, ITypedSocketPeerRejectedDiagnostic, ITypedSocketReconnectScheduledDiagnostic, ITypedSocketReconnectExhaustedDiagnostic, ITypedSocketTagMutationDeniedDiagnostic, ITypedSocketImplicitTargetingDiagnostic, } from './interfaces.diagnostics.js';
9
+ export type { TTypedSocketTagOwner, TTypedSocketTagMutationOperation, TTypedSocketTagDenialCode, ITypedSocketTagConnectionAuthority, ITypedSocketClientTagExistingState, ITypedSocketClientTagValidationContext, ITypedSocketClientTagRule, ITypedSocketClientTagPolicy, ITypedSocketTagMutationSuccess, ITypedSocketTagMutationDenial, TTypedSocketTagMutationResponse, } from './classes.typedsockettagpolicymanager.js';
package/dist_ts/index.js CHANGED
@@ -1,2 +1,6 @@
1
- export * from './typedsocket.classes.typedsocket.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNDQUFzQyxDQUFDIn0=
1
+ export * from './classes.typedsocket.js';
2
+ export { NATIVE_BYTE_PROTOCOL, NATIVE_BYTE_PROTOCOL_MAJOR, NATIVE_BYTE_MAX_FRAME_BYTES, NATIVE_BYTE_MAX_CONTENT_TYPE_BYTES, NATIVE_BYTE_MAX_DATA_PAYLOAD_BYTES, NATIVE_BYTE_MAX_STREAM_BYTES, NATIVE_BYTE_DEFAULT_INITIAL_WINDOW_BYTES, NATIVE_BYTE_MAX_WINDOW_BYTES, NATIVE_BYTE_MAX_QUEUED_PAYLOAD_BYTES_PER_STREAM, NATIVE_BYTE_MAX_QUEUED_PAYLOAD_BYTES_PER_CONNECTION, NATIVE_BYTE_MAX_RECEIVE_QUEUE_CHUNKS, NATIVE_BYTE_MAX_STREAMS_PER_CONNECTION, NATIVE_BYTE_MAX_PENDING_DATA_OPERATIONS_PER_CONNECTION, NATIVE_BYTE_MAX_RAW_QUEUE_FRAMES, NATIVE_BYTE_MAX_RAW_QUEUE_BYTES, NATIVE_BYTE_GRANT_OPEN_TIMEOUT_MS, NATIVE_BYTE_PROGRESS_TIMEOUT_MS, NATIVE_BYTE_TOMBSTONE_RETENTION_MS, NATIVE_BYTE_MAX_TOMBSTONES, NATIVE_BYTE_MAX_PRINCIPAL_ID_BYTES, NATIVE_BYTE_MAX_AUTHORITY_REVISION_BYTES, NATIVE_BYTE_REVALIDATION_TIMEOUT_MS, NATIVE_BYTE_MAX_REVALIDATIONS_PER_PEER, NATIVE_BYTE_MAX_REVALIDATIONS_PER_PRINCIPAL, NATIVE_BYTE_MAX_REVALIDATIONS_PER_SERVER, NATIVE_BYTE_MAX_CONNECTIONS_PER_SERVER, NATIVE_BYTE_MAX_STREAMS_PER_SERVER, NATIVE_BYTE_MAX_RETAINED_BYTES_PER_SERVER, } from './constants.nativebytes.js';
3
+ export * from './classes.nativebyteerror.js';
4
+ export { NativeByteManager, NativeByteReceiver, NativeByteSender, } from './classes.nativebytemanager.js';
5
+ export { TYPEDSOCKET_MAX_TAG_NAME_BYTES, TYPEDSOCKET_MAX_TAG_PAYLOAD_BYTES, TYPEDSOCKET_MAX_CLIENT_TAGS_PER_PEER, TYPEDSOCKET_MAX_CLIENT_TAG_RETAINED_BYTES_PER_PEER, TYPEDSOCKET_MAX_RETAINED_TAG_MUTATIONS_PER_PEER, TYPEDSOCKET_MAX_RETAINED_TAG_MUTATIONS_PER_RULE, TYPEDSOCKET_MAX_RETAINED_TAG_MUTATIONS_PER_SERVER, TYPEDSOCKET_MAX_TAG_AUTHORIZATION_TIMEOUT_MS, TYPEDSOCKET_MAX_SERVER_TAG_NAMES_PER_PEER, TYPEDSOCKET_MAX_SERVER_TAG_RETAINED_BYTES_PER_PEER, TYPEDSOCKET_TAG_DENIAL_CODES, TypedSocketClientTagDeniedError, } from './classes.typedsockettagpolicymanager.js';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMEJBQTBCLEVBQzFCLDJCQUEyQixFQUMzQixrQ0FBa0MsRUFDbEMsa0NBQWtDLEVBQ2xDLDRCQUE0QixFQUM1Qix3Q0FBd0MsRUFDeEMsNEJBQTRCLEVBQzVCLCtDQUErQyxFQUMvQyxtREFBbUQsRUFDbkQsb0NBQW9DLEVBQ3BDLHNDQUFzQyxFQUN0QyxzREFBc0QsRUFDdEQsZ0NBQWdDLEVBQ2hDLCtCQUErQixFQUMvQixpQ0FBaUMsRUFDakMsK0JBQStCLEVBQy9CLGtDQUFrQyxFQUNsQywwQkFBMEIsRUFDMUIsa0NBQWtDLEVBQ2xDLHdDQUF3QyxFQUN4QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLDJDQUEyQyxFQUMzQyx3Q0FBd0MsRUFDeEMsc0NBQXNDLEVBQ3RDLGtDQUFrQyxFQUNsQyx5Q0FBeUMsR0FDMUMsTUFBTSw0QkFBNEIsQ0FBQztBQXlCcEMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FDakIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGlDQUFpQyxFQUNqQyxvQ0FBb0MsRUFDcEMsa0RBQWtELEVBQ2xELCtDQUErQyxFQUMvQywrQ0FBK0MsRUFDL0MsaURBQWlELEVBQ2pELDRDQUE0QyxFQUM1Qyx5Q0FBeUMsRUFDekMsa0RBQWtELEVBQ2xELDRCQUE0QixFQUM1QiwrQkFBK0IsR0FDaEMsTUFBTSwwQ0FBMEMsQ0FBQyJ9
@@ -0,0 +1,73 @@
1
+ import type { TTypedSocketTagDenialCode } from './classes.typedsockettagpolicymanager.js';
2
+ export type TTypedSocketDiagnosticSide = 'client' | 'server';
3
+ /**
4
+ * A transport connection was closed by this package because a bounded
5
+ * invariant was violated. `reason` is always a static package-defined string;
6
+ * `errorCode` carries the bounded NativeByteError code on 1011 failures.
7
+ */
8
+ export interface ITypedSocketConnectionClosedDiagnostic {
9
+ readonly kind: 'connectionClosed';
10
+ readonly side: TTypedSocketDiagnosticSide;
11
+ readonly scope: 'text' | 'nativeByte';
12
+ readonly closeCode: number;
13
+ readonly reason: string;
14
+ readonly errorCode?: string;
15
+ }
16
+ /**
17
+ * A server peer was rejected before any native-byte connection state existed
18
+ * for it (admission capacity, or a post-negotiation capability race).
19
+ */
20
+ export interface ITypedSocketPeerRejectedDiagnostic {
21
+ readonly kind: 'peerRejected';
22
+ readonly side: 'server';
23
+ readonly closeCode: number;
24
+ readonly reason: string;
25
+ }
26
+ /**
27
+ * A client reconnect attempt was scheduled. `endpoint` is redacted to
28
+ * protocol and host; paths, queries, and credentials never appear.
29
+ */
30
+ export interface ITypedSocketReconnectScheduledDiagnostic {
31
+ readonly kind: 'reconnectScheduled';
32
+ readonly side: 'client';
33
+ readonly attempt: number;
34
+ readonly maxRetries: number;
35
+ readonly delayMs: number;
36
+ readonly endpoint: string;
37
+ }
38
+ /**
39
+ * Automatic reconnection gave up while the socket was neither stopped nor
40
+ * aborted. Emitted at most once per exhausted reconnect sequence; the flag
41
+ * resets when a later connection succeeds.
42
+ */
43
+ export interface ITypedSocketReconnectExhaustedDiagnostic {
44
+ readonly kind: 'reconnectExhausted';
45
+ readonly side: 'client';
46
+ readonly attempts: number;
47
+ readonly endpoint: string;
48
+ }
49
+ /**
50
+ * A client tag mutation was denied. On servers this reports denials issued to
51
+ * remote clients; on clients it reports denials received or raised locally.
52
+ * `name` is included only when it is a valid bounded tag name, otherwise ''.
53
+ */
54
+ export interface ITypedSocketTagMutationDeniedDiagnostic {
55
+ readonly kind: 'tagMutationDenied';
56
+ readonly side: TTypedSocketDiagnosticSide;
57
+ readonly operation: 'set' | 'remove';
58
+ readonly name: string;
59
+ readonly code: TTypedSocketTagDenialCode;
60
+ }
61
+ /**
62
+ * A server-side TypedRequest resolved its target implicitly because exactly
63
+ * one connection was attached. Deprecated behavior slated for removal in the
64
+ * next major; emitted at most once per TypedRequest object.
65
+ */
66
+ export interface ITypedSocketImplicitTargetingDiagnostic {
67
+ readonly kind: 'implicitTargetingUsed';
68
+ readonly side: 'server';
69
+ readonly method: string;
70
+ }
71
+ export type TTypedSocketDiagnosticEvent = ITypedSocketConnectionClosedDiagnostic | ITypedSocketPeerRejectedDiagnostic | ITypedSocketReconnectScheduledDiagnostic | ITypedSocketReconnectExhaustedDiagnostic | ITypedSocketTagMutationDeniedDiagnostic | ITypedSocketImplicitTargetingDiagnostic;
72
+ /** The subset of diagnostic events a NativeByteManager can emit. */
73
+ export type TNativeByteDiagnosticEvent = ITypedSocketConnectionClosedDiagnostic | ITypedSocketPeerRejectedDiagnostic;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5kaWFnbm9zdGljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMuZGlhZ25vc3RpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9