@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.
- package/README.md +0 -39
- package/dist/src/builder/media-builder.d.ts.map +1 -1
- package/dist/src/builder/media-builder.js +5 -12
- package/dist/src/builder/session-builder.d.ts.map +1 -1
- package/dist/src/builder/session-builder.js +4 -14
- package/dist/src/index.d.ts +6 -10
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +37 -49
- package/dist/src/parser/core.d.ts +366 -0
- package/dist/src/parser/core.d.ts.map +1 -0
- package/dist/src/parser/core.js +802 -0
- package/dist/src/parser/field-parser.d.ts +51 -8
- package/dist/src/parser/field-parser.d.ts.map +1 -1
- package/dist/src/parser/field-parser.js +91 -23
- package/dist/src/parser/media-parser.d.ts +1 -1
- package/dist/src/parser/media-parser.d.ts.map +1 -1
- package/dist/src/parser/media-parser.js +9 -15
- package/dist/src/parser/session-parser.d.ts.map +1 -1
- package/dist/src/parser/session-parser.js +16 -17
- package/dist/src/parser/time-parser.d.ts +1 -1
- package/dist/src/parser/time-parser.d.ts.map +1 -1
- package/dist/src/parser/time-parser.js +8 -8
- package/dist/src/serializer/fields.d.ts +167 -0
- package/dist/src/serializer/fields.d.ts.map +1 -0
- package/dist/src/serializer/fields.js +320 -0
- package/dist/src/serializer/media-serializer.js +6 -7
- package/dist/src/serializer/session-serializer.js +13 -15
- package/dist/src/types/attributes.d.ts.map +1 -1
- package/dist/src/types/fields.d.ts +5 -5
- package/dist/src/types/fields.d.ts.map +1 -1
- package/dist/src/types/fields.js +4 -4
- package/dist/src/types/media.d.ts +9 -10
- package/dist/src/types/media.d.ts.map +1 -1
- package/dist/src/types/media.js +2 -4
- package/dist/src/types/network.d.ts +15 -56
- package/dist/src/types/network.d.ts.map +1 -1
- package/dist/src/types/network.js +3 -34
- package/dist/src/types/primitives.d.ts +3 -147
- package/dist/src/types/primitives.d.ts.map +1 -1
- package/dist/src/types/primitives.js +2 -171
- package/dist/src/types/session.d.ts +14 -14
- package/dist/src/types/session.d.ts.map +1 -1
- package/dist/src/types/time.d.ts +4 -4
- package/dist/src/types/time.d.ts.map +1 -1
- package/dist/src/types/time.js +8 -6
- package/dist/src/utils/address-parser.d.ts +4 -4
- package/dist/src/utils/address-parser.d.ts.map +1 -1
- package/dist/src/utils/address-parser.js +9 -16
- package/dist/src/validator/validator.d.ts +94 -0
- package/dist/src/validator/validator.d.ts.map +1 -0
- package/dist/src/validator/validator.js +573 -0
- package/dist/tests/unit/parser/attribute-parser.test.js +106 -107
- package/dist/tests/unit/parser/field-parser.test.js +66 -66
- package/dist/tests/unit/parser/media-parser.test.js +38 -38
- package/dist/tests/unit/parser/primitive-parser.test.js +89 -90
- package/dist/tests/unit/parser/scanner.test.js +32 -32
- package/dist/tests/unit/parser/time-parser.test.js +22 -22
- package/dist/tests/unit/serializer/attribute-serializer.test.js +22 -22
- package/dist/tests/unit/serializer/field-serializer.test.js +57 -57
- package/dist/tests/unit/serializer/media-serializer.test.js +5 -6
- package/dist/tests/unit/serializer/session-serializer.test.js +24 -24
- package/dist/tests/unit/serializer/time-serializer.test.js +16 -16
- package/dist/tests/unit/types/network.test.js +21 -56
- package/dist/tests/unit/types/primitives.test.js +0 -39
- package/dist/tests/unit/validator/media-validator.test.js +34 -35
- package/dist/tests/unit/validator/semantic-validator.test.js +36 -37
- package/dist/tests/unit/validator/session-validator.test.js +54 -54
- 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
|
|
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',
|
|
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,
|
|
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',
|
|
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)(
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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',
|
|
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,
|
|
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
|
|
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",
|