@tomgiee/tsdp 1.0.1 → 1.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 (68) hide show
  1. package/README.md +0 -39
  2. package/dist/src/builder/media-builder.d.ts.map +1 -1
  3. package/dist/src/builder/media-builder.js +5 -12
  4. package/dist/src/builder/session-builder.d.ts.map +1 -1
  5. package/dist/src/builder/session-builder.js +4 -14
  6. package/dist/src/index.d.ts +6 -10
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/index.js +37 -49
  9. package/dist/src/parser/core.d.ts +366 -0
  10. package/dist/src/parser/core.d.ts.map +1 -0
  11. package/dist/src/parser/core.js +802 -0
  12. package/dist/src/parser/field-parser.d.ts +51 -8
  13. package/dist/src/parser/field-parser.d.ts.map +1 -1
  14. package/dist/src/parser/field-parser.js +91 -23
  15. package/dist/src/parser/media-parser.d.ts +1 -1
  16. package/dist/src/parser/media-parser.d.ts.map +1 -1
  17. package/dist/src/parser/media-parser.js +9 -15
  18. package/dist/src/parser/session-parser.d.ts.map +1 -1
  19. package/dist/src/parser/session-parser.js +16 -17
  20. package/dist/src/parser/time-parser.d.ts +1 -1
  21. package/dist/src/parser/time-parser.d.ts.map +1 -1
  22. package/dist/src/parser/time-parser.js +8 -8
  23. package/dist/src/serializer/fields.d.ts +167 -0
  24. package/dist/src/serializer/fields.d.ts.map +1 -0
  25. package/dist/src/serializer/fields.js +320 -0
  26. package/dist/src/serializer/media-serializer.js +6 -7
  27. package/dist/src/serializer/session-serializer.js +13 -15
  28. package/dist/src/types/attributes.d.ts.map +1 -1
  29. package/dist/src/types/fields.d.ts +5 -5
  30. package/dist/src/types/fields.d.ts.map +1 -1
  31. package/dist/src/types/fields.js +4 -4
  32. package/dist/src/types/media.d.ts +9 -10
  33. package/dist/src/types/media.d.ts.map +1 -1
  34. package/dist/src/types/media.js +2 -4
  35. package/dist/src/types/network.d.ts +15 -56
  36. package/dist/src/types/network.d.ts.map +1 -1
  37. package/dist/src/types/network.js +3 -34
  38. package/dist/src/types/primitives.d.ts +3 -147
  39. package/dist/src/types/primitives.d.ts.map +1 -1
  40. package/dist/src/types/primitives.js +2 -171
  41. package/dist/src/types/session.d.ts +14 -14
  42. package/dist/src/types/session.d.ts.map +1 -1
  43. package/dist/src/types/time.d.ts +4 -4
  44. package/dist/src/types/time.d.ts.map +1 -1
  45. package/dist/src/types/time.js +8 -6
  46. package/dist/src/utils/address-parser.d.ts +4 -4
  47. package/dist/src/utils/address-parser.d.ts.map +1 -1
  48. package/dist/src/utils/address-parser.js +9 -16
  49. package/dist/src/validator/validator.d.ts +94 -0
  50. package/dist/src/validator/validator.d.ts.map +1 -0
  51. package/dist/src/validator/validator.js +573 -0
  52. package/dist/tests/unit/parser/attribute-parser.test.js +106 -107
  53. package/dist/tests/unit/parser/field-parser.test.js +66 -66
  54. package/dist/tests/unit/parser/media-parser.test.js +38 -38
  55. package/dist/tests/unit/parser/primitive-parser.test.js +89 -90
  56. package/dist/tests/unit/parser/scanner.test.js +32 -32
  57. package/dist/tests/unit/parser/time-parser.test.js +22 -22
  58. package/dist/tests/unit/serializer/attribute-serializer.test.js +22 -22
  59. package/dist/tests/unit/serializer/field-serializer.test.js +57 -57
  60. package/dist/tests/unit/serializer/media-serializer.test.js +5 -6
  61. package/dist/tests/unit/serializer/session-serializer.test.js +24 -24
  62. package/dist/tests/unit/serializer/time-serializer.test.js +16 -16
  63. package/dist/tests/unit/types/network.test.js +21 -56
  64. package/dist/tests/unit/types/primitives.test.js +0 -39
  65. package/dist/tests/unit/validator/media-validator.test.js +34 -35
  66. package/dist/tests/unit/validator/semantic-validator.test.js +36 -37
  67. package/dist/tests/unit/validator/session-validator.test.js +54 -54
  68. package/package.json +1 -1
@@ -3,7 +3,7 @@
3
3
  * Tests for session-validator.ts
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const session_validator_1 = require("../../../src/validator/session-validator");
6
+ const validator_1 = require("../../../src/validator/validator");
7
7
  const session_1 = require("../../../src/types/session");
8
8
  const fields_1 = require("../../../src/types/fields");
9
9
  const time_1 = require("../../../src/types/time");
@@ -15,58 +15,58 @@ describe('session-validator', () => {
15
15
  it('should validate minimal valid session', () => {
16
16
  const session = (0, session_1.createSessionDescription)({
17
17
  version: 0,
18
- origin: (0, fields_1.createOrigin)('jdoe', '2890844526', '2890842807', 'IN', 'IP4', (0, network_1.createIP4Address)('10.47.16.5')),
18
+ origin: (0, fields_1.createOrigin)('jdoe', '2890844526', '2890842807', 'IN', 'IP4', '10.47.16.5'),
19
19
  sessionName: 'Test Session',
20
20
  timeDescriptions: [(0, time_1.createTimeDescription)((0, time_1.createTiming)(0, 0))],
21
21
  });
22
- const result = (0, session_validator_1.validateSessionDescription)(session);
22
+ const result = (0, validator_1.validateSessionDescription)(session);
23
23
  expect(result.valid).toBe(true);
24
24
  expect(result.errors).toHaveLength(0);
25
25
  });
26
26
  it('should validate session with connection', () => {
27
27
  const session = (0, session_1.createSessionDescription)({
28
28
  version: 0,
29
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
29
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
30
30
  sessionName: 'Test',
31
- connection: (0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4MulticastAddress)((0, network_1.createIP4Address)('224.2.17.12'), 127)),
31
+ connection: (0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4MulticastAddress)('224.2.17.12', 127)),
32
32
  timeDescriptions: [(0, time_1.createTimeDescription)((0, time_1.createTiming)(0, 0))],
33
33
  });
34
- const result = (0, session_validator_1.validateSessionDescription)(session);
34
+ const result = (0, validator_1.validateSessionDescription)(session);
35
35
  expect(result.valid).toBe(true);
36
36
  });
37
37
  it('should validate session with multiple time descriptions', () => {
38
38
  const session = (0, session_1.createSessionDescription)({
39
39
  version: 0,
40
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
40
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
41
41
  sessionName: 'Test',
42
42
  timeDescriptions: [
43
43
  (0, time_1.createTimeDescription)((0, time_1.createTiming)(2873397496, 2873404696)),
44
44
  (0, time_1.createTimeDescription)((0, time_1.createTiming)(3034423619, 3042462419)),
45
45
  ],
46
46
  });
47
- const result = (0, session_validator_1.validateSessionDescription)(session);
47
+ const result = (0, validator_1.validateSessionDescription)(session);
48
48
  expect(result.valid).toBe(true);
49
49
  });
50
50
  it('should validate session with bandwidth', () => {
51
51
  const session = (0, session_1.createSessionDescription)({
52
52
  version: 0,
53
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
53
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
54
54
  sessionName: 'Test',
55
55
  bandwidths: [(0, fields_1.createBandwidth)('AS', 128)],
56
56
  timeDescriptions: [(0, time_1.createTimeDescription)((0, time_1.createTiming)(0, 0))],
57
57
  });
58
- const result = (0, session_validator_1.validateSessionDescription)(session);
58
+ const result = (0, validator_1.validateSessionDescription)(session);
59
59
  expect(result.valid).toBe(true);
60
60
  });
61
61
  it('should validate session with single direction attribute', () => {
62
62
  const session = (0, session_1.createSessionDescription)({
63
63
  version: 0,
64
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
64
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
65
65
  sessionName: 'Test',
66
66
  timeDescriptions: [(0, time_1.createTimeDescription)((0, time_1.createTiming)(0, 0))],
67
67
  attributes: [(0, attributes_1.createRecvonly)()],
68
68
  });
69
- const result = (0, session_validator_1.validateSessionDescription)(session);
69
+ const result = (0, validator_1.validateSessionDescription)(session);
70
70
  expect(result.valid).toBe(true);
71
71
  });
72
72
  });
@@ -74,7 +74,7 @@ describe('session-validator', () => {
74
74
  it('should reject empty session name', () => {
75
75
  const session = {
76
76
  version: 0,
77
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
77
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
78
78
  sessionName: '',
79
79
  emails: [],
80
80
  phones: [],
@@ -83,14 +83,14 @@ describe('session-validator', () => {
83
83
  attributes: [],
84
84
  mediaDescriptions: [],
85
85
  };
86
- const result = (0, session_validator_1.validateSessionDescription)(session);
86
+ const result = (0, validator_1.validateSessionDescription)(session);
87
87
  expect(result.valid).toBe(false);
88
88
  expect(result.errors.some((e) => e.field === 'sessionName')).toBe(true);
89
89
  });
90
90
  it('should reject missing time descriptions', () => {
91
91
  const session = {
92
92
  version: 0,
93
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
93
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
94
94
  sessionName: 'Test',
95
95
  emails: [],
96
96
  phones: [],
@@ -99,14 +99,14 @@ describe('session-validator', () => {
99
99
  attributes: [],
100
100
  mediaDescriptions: [],
101
101
  };
102
- const result = (0, session_validator_1.validateSessionDescription)(session);
102
+ const result = (0, validator_1.validateSessionDescription)(session);
103
103
  expect(result.valid).toBe(false);
104
104
  expect(result.errors.some((e) => e.constraint === 'RFC8866:5.9')).toBe(true);
105
105
  });
106
106
  it('should reject start time > stop time', () => {
107
107
  const session = {
108
108
  version: 0,
109
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
109
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
110
110
  sessionName: 'Test',
111
111
  emails: [],
112
112
  phones: [],
@@ -120,14 +120,14 @@ describe('session-validator', () => {
120
120
  attributes: [],
121
121
  mediaDescriptions: [],
122
122
  };
123
- const result = (0, session_validator_1.validateSessionDescription)(session);
123
+ const result = (0, validator_1.validateSessionDescription)(session);
124
124
  expect(result.valid).toBe(false);
125
125
  expect(result.errors.some((e) => e.message.includes('start time'))).toBe(true);
126
126
  });
127
127
  it('should reject multiple direction attributes', () => {
128
128
  const session = {
129
129
  version: 0,
130
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
130
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
131
131
  sessionName: 'Test',
132
132
  emails: [],
133
133
  phones: [],
@@ -136,14 +136,14 @@ describe('session-validator', () => {
136
136
  attributes: [(0, attributes_1.createRecvonly)(), (0, attributes_1.createSendrecv)()],
137
137
  mediaDescriptions: [],
138
138
  };
139
- const result = (0, session_validator_1.validateSessionDescription)(session);
139
+ const result = (0, validator_1.validateSessionDescription)(session);
140
140
  expect(result.valid).toBe(false);
141
141
  expect(result.errors.some((e) => e.constraint === 'RFC8866:6.7')).toBe(true);
142
142
  });
143
143
  it('should reject negative bandwidth', () => {
144
144
  const session = {
145
145
  version: 0,
146
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
146
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
147
147
  sessionName: 'Test',
148
148
  emails: [],
149
149
  phones: [],
@@ -152,14 +152,14 @@ describe('session-validator', () => {
152
152
  attributes: [],
153
153
  mediaDescriptions: [],
154
154
  };
155
- const result = (0, session_validator_1.validateSessionDescription)(session);
155
+ const result = (0, validator_1.validateSessionDescription)(session);
156
156
  expect(result.valid).toBe(false);
157
157
  expect(result.errors.some((e) => { var _a; return (_a = e.field) === null || _a === void 0 ? void 0 : _a.includes('bandwidth'); })).toBe(true);
158
158
  });
159
159
  it('should reject media-only attribute ptime at session level (RFC 8866 Section 6.4)', () => {
160
160
  const session = {
161
161
  version: 0,
162
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
162
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
163
163
  sessionName: 'Test',
164
164
  emails: [],
165
165
  phones: [],
@@ -168,14 +168,14 @@ describe('session-validator', () => {
168
168
  attributes: [(0, attributes_1.createValueAttribute)('ptime', '20')],
169
169
  mediaDescriptions: [],
170
170
  };
171
- const result = (0, session_validator_1.validateSessionDescription)(session);
171
+ const result = (0, validator_1.validateSessionDescription)(session);
172
172
  expect(result.valid).toBe(false);
173
173
  expect(result.errors.some((e) => e.message.includes('ptime') && e.message.includes('media level'))).toBe(true);
174
174
  });
175
175
  it('should reject media-only attribute rtpmap at session level (RFC 8866 Section 6.6)', () => {
176
176
  const session = {
177
177
  version: 0,
178
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
178
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
179
179
  sessionName: 'Test',
180
180
  emails: [],
181
181
  phones: [],
@@ -184,14 +184,14 @@ describe('session-validator', () => {
184
184
  attributes: [(0, attributes_1.createValueAttribute)('rtpmap', '0 PCMU/8000')],
185
185
  mediaDescriptions: [],
186
186
  };
187
- const result = (0, session_validator_1.validateSessionDescription)(session);
187
+ const result = (0, validator_1.validateSessionDescription)(session);
188
188
  expect(result.valid).toBe(false);
189
189
  expect(result.errors.some((e) => e.message.includes('rtpmap') && e.message.includes('media level'))).toBe(true);
190
190
  });
191
191
  it('should reject media-only attribute fmtp at session level (RFC 8866 Section 6.15)', () => {
192
192
  const session = {
193
193
  version: 0,
194
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
194
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
195
195
  sessionName: 'Test',
196
196
  emails: [],
197
197
  phones: [],
@@ -200,7 +200,7 @@ describe('session-validator', () => {
200
200
  attributes: [(0, attributes_1.createValueAttribute)('fmtp', '96 profile-level-id=42e01f')],
201
201
  mediaDescriptions: [],
202
202
  };
203
- const result = (0, session_validator_1.validateSessionDescription)(session);
203
+ const result = (0, validator_1.validateSessionDescription)(session);
204
204
  expect(result.valid).toBe(false);
205
205
  expect(result.errors.some((e) => e.message.includes('fmtp') && e.message.includes('media level'))).toBe(true);
206
206
  });
@@ -210,7 +210,7 @@ describe('session-validator', () => {
210
210
  for (const attrName of mediaOnlyAttrs) {
211
211
  const session = {
212
212
  version: 0,
213
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
213
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
214
214
  sessionName: 'Test',
215
215
  emails: [],
216
216
  phones: [],
@@ -219,7 +219,7 @@ describe('session-validator', () => {
219
219
  attributes: [(0, attributes_1.createValueAttribute)(attrName, 'test')],
220
220
  mediaDescriptions: [],
221
221
  };
222
- const result = (0, session_validator_1.validateSessionDescription)(session);
222
+ const result = (0, validator_1.validateSessionDescription)(session);
223
223
  expect(result.valid).toBe(false);
224
224
  expect(result.errors.some((e) => e.message.includes(attrName) && e.message.includes('media level'))).toBe(true);
225
225
  }
@@ -233,7 +233,7 @@ describe('session-validator', () => {
233
233
  sessVersion: '456',
234
234
  netType: 'IN',
235
235
  addrType: 'IP4',
236
- unicastAddress: (0, network_1.createIP4Address)('10.0.0.1'),
236
+ unicastAddress: '10.0.0.1',
237
237
  },
238
238
  sessionName: 'Test',
239
239
  emails: [],
@@ -243,7 +243,7 @@ describe('session-validator', () => {
243
243
  attributes: [],
244
244
  mediaDescriptions: [],
245
245
  };
246
- const result = (0, session_validator_1.validateSessionDescription)(session);
246
+ const result = (0, validator_1.validateSessionDescription)(session);
247
247
  expect(result.valid).toBe(false);
248
248
  expect(result.errors.some((e) => e.field === 'origin.sessId' &&
249
249
  e.message.includes('only digits'))).toBe(true);
@@ -257,7 +257,7 @@ describe('session-validator', () => {
257
257
  sessVersion: '456abc', // Non-numeric session version
258
258
  netType: 'IN',
259
259
  addrType: 'IP4',
260
- unicastAddress: (0, network_1.createIP4Address)('10.0.0.1'),
260
+ unicastAddress: '10.0.0.1',
261
261
  },
262
262
  sessionName: 'Test',
263
263
  emails: [],
@@ -267,7 +267,7 @@ describe('session-validator', () => {
267
267
  attributes: [],
268
268
  mediaDescriptions: [],
269
269
  };
270
- const result = (0, session_validator_1.validateSessionDescription)(session);
270
+ const result = (0, validator_1.validateSessionDescription)(session);
271
271
  expect(result.valid).toBe(false);
272
272
  expect(result.errors.some((e) => e.field === 'origin.sessVersion' &&
273
273
  e.message.includes('only digits'))).toBe(true);
@@ -281,7 +281,7 @@ describe('session-validator', () => {
281
281
  sessVersion: '789',
282
282
  netType: 'IN',
283
283
  addrType: 'IP4',
284
- unicastAddress: (0, network_1.createIP4Address)('10.0.0.1'),
284
+ unicastAddress: '10.0.0.1',
285
285
  },
286
286
  sessionName: 'Test',
287
287
  emails: [],
@@ -291,7 +291,7 @@ describe('session-validator', () => {
291
291
  attributes: [],
292
292
  mediaDescriptions: [],
293
293
  };
294
- const result = (0, session_validator_1.validateSessionDescription)(session);
294
+ const result = (0, validator_1.validateSessionDescription)(session);
295
295
  expect(result.valid).toBe(false);
296
296
  expect(result.errors.some((e) => e.field === 'origin.sessId' &&
297
297
  e.message.includes('only digits'))).toBe(true);
@@ -301,17 +301,17 @@ describe('session-validator', () => {
301
301
  version: 0,
302
302
  origin: (0, fields_1.createOrigin)('jdoe', '2890844526', // Valid numeric session ID
303
303
  '2890842807', // Valid numeric session version
304
- 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
304
+ 'IN', 'IP4', '10.0.0.1'),
305
305
  sessionName: 'Test',
306
306
  timeDescriptions: [(0, time_1.createTimeDescription)((0, time_1.createTiming)(0, 0))],
307
307
  });
308
- const result = (0, session_validator_1.validateSessionDescription)(session);
308
+ const result = (0, validator_1.validateSessionDescription)(session);
309
309
  expect(result.valid).toBe(true);
310
310
  });
311
311
  it('should reject invalid email format (RFC 8866 Section 5.6)', () => {
312
312
  const session = {
313
313
  version: 0,
314
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
314
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
315
315
  sessionName: 'Test',
316
316
  emails: ['invalid-email'],
317
317
  phones: [],
@@ -320,7 +320,7 @@ describe('session-validator', () => {
320
320
  attributes: [],
321
321
  mediaDescriptions: [],
322
322
  };
323
- const result = (0, session_validator_1.validateSessionDescription)(session);
323
+ const result = (0, validator_1.validateSessionDescription)(session);
324
324
  expect(result.valid).toBe(false);
325
325
  expect(result.errors.some((e) => e.field === 'emails[0]' &&
326
326
  e.constraint === 'RFC8866:5.6')).toBe(true);
@@ -328,7 +328,7 @@ describe('session-validator', () => {
328
328
  it('should accept valid email formats (RFC 8866 Section 5.6)', () => {
329
329
  const session = {
330
330
  version: 0,
331
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
331
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
332
332
  sessionName: 'Test',
333
333
  emails: [
334
334
  'j.doe@example.com',
@@ -341,13 +341,13 @@ describe('session-validator', () => {
341
341
  attributes: [],
342
342
  mediaDescriptions: [],
343
343
  };
344
- const result = (0, session_validator_1.validateSessionDescription)(session);
344
+ const result = (0, validator_1.validateSessionDescription)(session);
345
345
  expect(result.valid).toBe(true);
346
346
  });
347
347
  it('should reject invalid phone format (RFC 8866 Section 5.6)', () => {
348
348
  const session = {
349
349
  version: 0,
350
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
350
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
351
351
  sessionName: 'Test',
352
352
  emails: [],
353
353
  phones: ['invalid-phone'],
@@ -356,7 +356,7 @@ describe('session-validator', () => {
356
356
  attributes: [],
357
357
  mediaDescriptions: [],
358
358
  };
359
- const result = (0, session_validator_1.validateSessionDescription)(session);
359
+ const result = (0, validator_1.validateSessionDescription)(session);
360
360
  expect(result.valid).toBe(false);
361
361
  expect(result.errors.some((e) => e.field === 'phones[0]' &&
362
362
  e.constraint === 'RFC8866:5.6')).toBe(true);
@@ -364,7 +364,7 @@ describe('session-validator', () => {
364
364
  it('should accept valid phone formats (RFC 8866 Section 5.6)', () => {
365
365
  const session = {
366
366
  version: 0,
367
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
367
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
368
368
  sessionName: 'Test',
369
369
  emails: [],
370
370
  phones: [
@@ -377,13 +377,13 @@ describe('session-validator', () => {
377
377
  attributes: [],
378
378
  mediaDescriptions: [],
379
379
  };
380
- const result = (0, session_validator_1.validateSessionDescription)(session);
380
+ const result = (0, validator_1.validateSessionDescription)(session);
381
381
  expect(result.valid).toBe(true);
382
382
  });
383
383
  it('should reject invalid URI format (RFC 8866 Section 5.5)', () => {
384
384
  const session = {
385
385
  version: 0,
386
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
386
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
387
387
  sessionName: 'Test',
388
388
  uri: 'http://example.com/path with spaces',
389
389
  emails: [],
@@ -393,7 +393,7 @@ describe('session-validator', () => {
393
393
  attributes: [],
394
394
  mediaDescriptions: [],
395
395
  };
396
- const result = (0, session_validator_1.validateSessionDescription)(session);
396
+ const result = (0, validator_1.validateSessionDescription)(session);
397
397
  expect(result.valid).toBe(false);
398
398
  expect(result.errors.some((e) => e.field === 'uri' &&
399
399
  e.constraint === 'RFC8866:5.5')).toBe(true);
@@ -401,7 +401,7 @@ describe('session-validator', () => {
401
401
  it('should accept valid URI formats (RFC 8866 Section 5.5)', () => {
402
402
  const session = {
403
403
  version: 0,
404
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
404
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
405
405
  sessionName: 'Test',
406
406
  uri: 'http://www.example.com/session',
407
407
  emails: [],
@@ -411,13 +411,13 @@ describe('session-validator', () => {
411
411
  attributes: [],
412
412
  mediaDescriptions: [],
413
413
  };
414
- const result = (0, session_validator_1.validateSessionDescription)(session);
414
+ const result = (0, validator_1.validateSessionDescription)(session);
415
415
  expect(result.valid).toBe(true);
416
416
  });
417
417
  it('should accept URI with query string and fragment (RFC 8866 Section 5.5)', () => {
418
418
  const session = {
419
419
  version: 0,
420
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
420
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
421
421
  sessionName: 'Test',
422
422
  uri: 'https://conference.example.org/meeting?id=123#info',
423
423
  emails: [],
@@ -427,7 +427,7 @@ describe('session-validator', () => {
427
427
  attributes: [],
428
428
  mediaDescriptions: [],
429
429
  };
430
- const result = (0, session_validator_1.validateSessionDescription)(session);
430
+ const result = (0, validator_1.validateSessionDescription)(session);
431
431
  expect(result.valid).toBe(true);
432
432
  });
433
433
  });
@@ -435,11 +435,11 @@ describe('session-validator', () => {
435
435
  it('should allow session without media and no connection', () => {
436
436
  const session = (0, session_1.createSessionDescription)({
437
437
  version: 0,
438
- origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', (0, network_1.createIP4Address)('10.0.0.1')),
438
+ origin: (0, fields_1.createOrigin)('jdoe', '123', '456', 'IN', 'IP4', '10.0.0.1'),
439
439
  sessionName: 'Test',
440
440
  timeDescriptions: [(0, time_1.createTimeDescription)((0, time_1.createTiming)(0, 0))],
441
441
  });
442
- const result = (0, session_validator_1.validateSessionDescription)(session);
442
+ const result = (0, validator_1.validateSessionDescription)(session);
443
443
  expect(result.valid).toBe(true);
444
444
  });
445
445
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://www.schemastore.org/package.json",
3
3
  "name": "@tomgiee/tsdp",
4
- "version": "1.0.1",
4
+ "version": "1.1.0",
5
5
  "description": "RFC 8866-compliant SDP parser, serializer, and validator for TypeScript",
6
6
  "author": "Thomas Giesler <tgiesler@brassnode.net>",
7
7
  "license": "MIT",