ehbp 0.0.7 → 0.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 +84 -138
- package/dist/cjs/client.d.ts +13 -13
- package/dist/cjs/client.d.ts.map +1 -1
- package/dist/cjs/client.js +32 -52
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/derive.d.ts +63 -0
- package/dist/cjs/derive.d.ts.map +1 -0
- package/dist/cjs/derive.js +136 -0
- package/dist/cjs/derive.js.map +1 -0
- package/dist/cjs/identity.d.ts +37 -10
- package/dist/cjs/identity.d.ts.map +1 -1
- package/dist/cjs/identity.js +152 -146
- package/dist/cjs/identity.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +15 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/protocol.d.ts +1 -1
- package/dist/cjs/protocol.js +2 -2
- package/dist/cjs/protocol.js.map +1 -1
- package/dist/esm/client.d.ts +13 -13
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +32 -52
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/derive.d.ts +63 -0
- package/dist/esm/derive.d.ts.map +1 -0
- package/dist/esm/derive.js +127 -0
- package/dist/esm/derive.js.map +1 -0
- package/dist/esm/identity.d.ts +37 -10
- package/dist/esm/identity.d.ts.map +1 -1
- package/dist/esm/identity.js +152 -146
- package/dist/esm/identity.js.map +1 -1
- package/dist/esm/index.d.ts +4 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/protocol.d.ts +1 -1
- package/dist/esm/protocol.js +2 -2
- package/dist/esm/protocol.js.map +1 -1
- package/dist/esm/test/client.test.js +15 -16
- package/dist/esm/test/client.test.js.map +1 -1
- package/dist/esm/test/derive.test.d.ts +2 -0
- package/dist/esm/test/derive.test.d.ts.map +1 -0
- package/dist/esm/test/derive.test.js +164 -0
- package/dist/esm/test/derive.test.js.map +1 -0
- package/dist/esm/test/security.test.d.ts +10 -0
- package/dist/esm/test/security.test.d.ts.map +1 -0
- package/dist/esm/test/security.test.js +153 -0
- package/dist/esm/test/security.test.js.map +1 -0
- package/dist/esm/test/streaming.integration.d.ts +9 -0
- package/dist/esm/test/streaming.integration.d.ts.map +1 -0
- package/dist/esm/test/streaming.integration.js +190 -0
- package/dist/esm/test/streaming.integration.js.map +1 -0
- package/package.json +6 -7
- package/dist/esm/example.d.ts +0 -6
- package/dist/esm/example.d.ts.map +0 -1
- package/dist/esm/example.js +0 -115
- package/dist/esm/example.js.map +0 -1
- package/dist/esm/streaming-test.d.ts +0 -3
- package/dist/esm/streaming-test.d.ts.map +0 -1
- package/dist/esm/streaming-test.js +0 -102
- package/dist/esm/streaming-test.js.map +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for EHBP streaming functionality.
|
|
4
|
+
* Requires a running EHBP server at localhost:8080.
|
|
5
|
+
*
|
|
6
|
+
* Run with: npm run test:integration
|
|
7
|
+
*/
|
|
8
|
+
import { createTransport } from '../index.js';
|
|
9
|
+
async function streamingIntegrationTest() {
|
|
10
|
+
console.log('EHBP Streaming Integration Test');
|
|
11
|
+
console.log('================================');
|
|
12
|
+
try {
|
|
13
|
+
// Create transport
|
|
14
|
+
console.log('Creating transport...');
|
|
15
|
+
const serverURL = 'http://localhost:8080';
|
|
16
|
+
const transport = await createTransport(serverURL);
|
|
17
|
+
console.log('Transport created');
|
|
18
|
+
// Test 1: GET streaming (unencrypted - bodyless request)
|
|
19
|
+
console.log('\n--- Test 1: GET Streaming (unencrypted) ---');
|
|
20
|
+
const getStreamResponse = await transport.get(`${serverURL}/stream`);
|
|
21
|
+
console.log('GET stream request sent, status:', getStreamResponse.status);
|
|
22
|
+
if (getStreamResponse.ok) {
|
|
23
|
+
console.log('Reading stream data...');
|
|
24
|
+
const reader = getStreamResponse.body?.getReader();
|
|
25
|
+
if (reader) {
|
|
26
|
+
const decoder = new TextDecoder();
|
|
27
|
+
while (true) {
|
|
28
|
+
const { done, value } = await reader.read();
|
|
29
|
+
if (done)
|
|
30
|
+
break;
|
|
31
|
+
const text = decoder.decode(value, { stream: true });
|
|
32
|
+
process.stdout.write(text);
|
|
33
|
+
}
|
|
34
|
+
console.log('\nStream completed');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log('No readable stream available');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log('Stream request failed with status:', getStreamResponse.status);
|
|
42
|
+
}
|
|
43
|
+
// Test 2: POST streaming (encrypted - has request body)
|
|
44
|
+
console.log('\n--- Test 2: POST Streaming (encrypted) ---');
|
|
45
|
+
try {
|
|
46
|
+
const postStreamResponse = await transport.post(`${serverURL}/stream`, JSON.stringify({ message: 'Hello streaming!' }), { headers: { 'Content-Type': 'application/json' } });
|
|
47
|
+
console.log('POST stream request sent, status:', postStreamResponse.status);
|
|
48
|
+
if (postStreamResponse.ok) {
|
|
49
|
+
console.log('Reading encrypted stream data...');
|
|
50
|
+
const reader = postStreamResponse.body?.getReader();
|
|
51
|
+
if (reader) {
|
|
52
|
+
const decoder = new TextDecoder();
|
|
53
|
+
while (true) {
|
|
54
|
+
const { done, value } = await reader.read();
|
|
55
|
+
if (done)
|
|
56
|
+
break;
|
|
57
|
+
const text = decoder.decode(value, { stream: true });
|
|
58
|
+
process.stdout.write(text);
|
|
59
|
+
}
|
|
60
|
+
console.log('\nEncrypted stream completed');
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log('No readable stream available');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log('POST stream request failed with status:', postStreamResponse.status);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.log('POST streaming test failed:', error instanceof Error ? error.message : String(error));
|
|
72
|
+
console.log('(Server may not support POST to /stream endpoint)');
|
|
73
|
+
}
|
|
74
|
+
// Test 3: Multiple concurrent streams (GET - unencrypted)
|
|
75
|
+
console.log('\n--- Test 3: Concurrent GET Streams (unencrypted) ---');
|
|
76
|
+
const concurrentStreams = 3;
|
|
77
|
+
const streamPromises = [];
|
|
78
|
+
for (let i = 0; i < concurrentStreams; i++) {
|
|
79
|
+
streamPromises.push((async (streamId) => {
|
|
80
|
+
const response = await transport.get(`${serverURL}/stream`);
|
|
81
|
+
if (response.ok && response.body) {
|
|
82
|
+
const reader = response.body.getReader();
|
|
83
|
+
const decoder = new TextDecoder();
|
|
84
|
+
while (true) {
|
|
85
|
+
const { done, value } = await reader.read();
|
|
86
|
+
if (done)
|
|
87
|
+
break;
|
|
88
|
+
const text = decoder.decode(value, { stream: true });
|
|
89
|
+
// Prefix with stream ID to show concurrency
|
|
90
|
+
process.stdout.write(`[Stream ${streamId}] ${text}`);
|
|
91
|
+
}
|
|
92
|
+
return { streamId };
|
|
93
|
+
}
|
|
94
|
+
return { streamId };
|
|
95
|
+
})(i + 1));
|
|
96
|
+
}
|
|
97
|
+
const results = await Promise.all(streamPromises);
|
|
98
|
+
console.log('\nConcurrent streams completed:');
|
|
99
|
+
results.forEach(result => {
|
|
100
|
+
console.log(` - Stream ${result.streamId}: completed`);
|
|
101
|
+
});
|
|
102
|
+
// Test 4: Multiple concurrent streams (POST - encrypted)
|
|
103
|
+
console.log('\n--- Test 4: Concurrent POST Streams (encrypted) ---');
|
|
104
|
+
try {
|
|
105
|
+
const encryptedStreamPromises = [];
|
|
106
|
+
for (let i = 0; i < concurrentStreams; i++) {
|
|
107
|
+
encryptedStreamPromises.push((async (streamId) => {
|
|
108
|
+
const response = await transport.post(`${serverURL}/stream`, JSON.stringify({ streamId, message: `Stream ${streamId} request` }), { headers: { 'Content-Type': 'application/json' } });
|
|
109
|
+
if (response.ok && response.body) {
|
|
110
|
+
const reader = response.body.getReader();
|
|
111
|
+
const decoder = new TextDecoder();
|
|
112
|
+
while (true) {
|
|
113
|
+
const { done, value } = await reader.read();
|
|
114
|
+
if (done)
|
|
115
|
+
break;
|
|
116
|
+
const text = decoder.decode(value, { stream: true });
|
|
117
|
+
process.stdout.write(`[Encrypted ${streamId}] ${text}`);
|
|
118
|
+
}
|
|
119
|
+
return { streamId, encrypted: true };
|
|
120
|
+
}
|
|
121
|
+
return { streamId, encrypted: true };
|
|
122
|
+
})(i + 1));
|
|
123
|
+
}
|
|
124
|
+
const encryptedResults = await Promise.all(encryptedStreamPromises);
|
|
125
|
+
console.log('\nConcurrent encrypted streams completed:');
|
|
126
|
+
encryptedResults.forEach(result => {
|
|
127
|
+
console.log(` - Stream ${result.streamId}: completed (encrypted)`);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.log('Concurrent POST streaming test failed:', error instanceof Error ? error.message : String(error));
|
|
132
|
+
}
|
|
133
|
+
// Test 5: Large data streaming (GET - unencrypted)
|
|
134
|
+
console.log('\n--- Test 5: Large Data GET Stream (unencrypted) ---');
|
|
135
|
+
try {
|
|
136
|
+
const largeStreamResponse = await transport.get(`${serverURL}/stream`);
|
|
137
|
+
if (largeStreamResponse.ok) {
|
|
138
|
+
console.log('Reading large data stream...');
|
|
139
|
+
const reader = largeStreamResponse.body?.getReader();
|
|
140
|
+
if (reader) {
|
|
141
|
+
const decoder = new TextDecoder();
|
|
142
|
+
while (true) {
|
|
143
|
+
const { done, value } = await reader.read();
|
|
144
|
+
if (done)
|
|
145
|
+
break;
|
|
146
|
+
const text = decoder.decode(value, { stream: true });
|
|
147
|
+
process.stdout.write(text);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.log('Large data GET stream test failed:', error instanceof Error ? error.message : String(error));
|
|
154
|
+
}
|
|
155
|
+
// Test 6: Large data streaming (POST - encrypted)
|
|
156
|
+
console.log('\n--- Test 6: Large Data POST Stream (encrypted) ---');
|
|
157
|
+
try {
|
|
158
|
+
const largePostStreamResponse = await transport.post(`${serverURL}/stream`, JSON.stringify({ message: 'Large data stream request', size: 'large' }), { headers: { 'Content-Type': 'application/json' } });
|
|
159
|
+
if (largePostStreamResponse.ok) {
|
|
160
|
+
console.log('Reading large encrypted data stream...');
|
|
161
|
+
const reader = largePostStreamResponse.body?.getReader();
|
|
162
|
+
if (reader) {
|
|
163
|
+
const decoder = new TextDecoder();
|
|
164
|
+
while (true) {
|
|
165
|
+
const { done, value } = await reader.read();
|
|
166
|
+
if (done)
|
|
167
|
+
break;
|
|
168
|
+
const text = decoder.decode(value, { stream: true });
|
|
169
|
+
process.stdout.write(text);
|
|
170
|
+
}
|
|
171
|
+
console.log('\nLarge encrypted stream completed');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
console.log('Large POST stream request failed with status:', largePostStreamResponse.status);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
console.log('Large data POST stream test failed:', error instanceof Error ? error.message : String(error));
|
|
180
|
+
}
|
|
181
|
+
console.log('\nAll streaming integration tests completed successfully!');
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
console.error('Streaming integration test failed:', error);
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Run the integration test
|
|
189
|
+
streamingIntegrationTest().catch(console.error);
|
|
190
|
+
//# sourceMappingURL=streaming.integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.integration.js","sourceRoot":"","sources":["../../../src/test/streaming.integration.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ehbp",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "JavaScript client for Encrypted HTTP Body Protocol (EHBP)",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
7
7
|
"types": "./dist/esm/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
+
"types": "./dist/esm/index.d.ts",
|
|
10
11
|
"import": "./dist/esm/index.js",
|
|
11
|
-
"require": "./dist/cjs/index.js"
|
|
12
|
-
"types": "./dist/esm/index.d.ts"
|
|
12
|
+
"require": "./dist/cjs/index.js"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"scripts": {
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"build:all": "npm run build && npm run build:browser",
|
|
21
21
|
"dev": "tsc --watch",
|
|
22
22
|
"test": "node --test dist/esm/test/*.test.js",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
23
|
+
"test:integration": "node dist/esm/test/streaming.integration.js",
|
|
24
|
+
"example": "node --experimental-strip-types examples/example.ts",
|
|
25
25
|
"serve": "node serve.js"
|
|
26
26
|
},
|
|
27
27
|
"keywords": [
|
|
@@ -38,8 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"
|
|
42
|
-
"@hpke/dhkem-x25519": "^1.6.4"
|
|
41
|
+
"hpke": "^1.0.1"
|
|
43
42
|
},
|
|
44
43
|
"devDependencies": {
|
|
45
44
|
"@types/node": "^20.0.0",
|
package/dist/esm/example.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
package/dist/esm/example.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Example usage of the EHBP JavaScript client
|
|
4
|
-
*/
|
|
5
|
-
import { Identity, createTransport } from './index.js';
|
|
6
|
-
async function main() {
|
|
7
|
-
console.log('EHBP JavaScript Client Example');
|
|
8
|
-
console.log('==============================');
|
|
9
|
-
try {
|
|
10
|
-
// Create client identity
|
|
11
|
-
console.log('Creating client identity...');
|
|
12
|
-
const clientIdentity = await Identity.generate();
|
|
13
|
-
console.log('Client public key:', await clientIdentity.getPublicKeyHex());
|
|
14
|
-
// Create transport (this will fetch server public key)
|
|
15
|
-
console.log('Creating transport...');
|
|
16
|
-
const serverURL = 'http://localhost:8080'; // Adjust as needed
|
|
17
|
-
const transport = await createTransport(serverURL, clientIdentity);
|
|
18
|
-
console.log('Transport created successfully');
|
|
19
|
-
// Example 1: GET request to secure endpoint
|
|
20
|
-
console.log('\n--- GET Request ---');
|
|
21
|
-
try {
|
|
22
|
-
const getResponse = await transport.get(`${serverURL}/secure`);
|
|
23
|
-
console.log('GET Response status:', getResponse.status);
|
|
24
|
-
if (getResponse.ok) {
|
|
25
|
-
const getData = await getResponse.text();
|
|
26
|
-
console.log('GET Response:', getData);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
console.log('GET Request failed with status:', getResponse.status);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
console.log('GET Request failed:', error instanceof Error ? error.message : String(error));
|
|
34
|
-
}
|
|
35
|
-
// Example 2: POST request with JSON data
|
|
36
|
-
console.log('\n--- POST Request ---');
|
|
37
|
-
try {
|
|
38
|
-
const postData = { message: 'Hello from JavaScript client!', timestamp: new Date().toISOString() };
|
|
39
|
-
const postResponse = await transport.post(`${serverURL}/secure`, JSON.stringify(postData), { headers: { 'Content-Type': 'application/json' } });
|
|
40
|
-
console.log('POST Response status:', postResponse.status);
|
|
41
|
-
if (postResponse.ok) {
|
|
42
|
-
const responseData = await postResponse.text();
|
|
43
|
-
console.log('POST Response:', responseData);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
console.log('POST Request failed with status:', postResponse.status);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
console.log('POST Request failed:', error instanceof Error ? error.message : String(error));
|
|
51
|
-
}
|
|
52
|
-
// Example 3: PUT request
|
|
53
|
-
console.log('\n--- PUT Request ---');
|
|
54
|
-
try {
|
|
55
|
-
const putData = { id: 1, name: 'Updated Item' };
|
|
56
|
-
const putResponse = await transport.put(`${serverURL}/secure`, JSON.stringify(putData), { headers: { 'Content-Type': 'application/json' } });
|
|
57
|
-
console.log('PUT Response status:', putResponse.status);
|
|
58
|
-
if (putResponse.ok) {
|
|
59
|
-
const putResponseData = await putResponse.text();
|
|
60
|
-
console.log('PUT Response:', putResponseData);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
console.log('PUT Request failed with status:', putResponse.status);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
console.log('PUT Request failed:', error instanceof Error ? error.message : String(error));
|
|
68
|
-
}
|
|
69
|
-
// Example 4: Streaming request
|
|
70
|
-
console.log('\n--- Streaming Request ---');
|
|
71
|
-
try {
|
|
72
|
-
const streamResponse = await transport.get(`${serverURL}/stream`);
|
|
73
|
-
console.log('Stream Response status:', streamResponse.status);
|
|
74
|
-
if (streamResponse.ok) {
|
|
75
|
-
console.log('Streaming response (should show numbers 1-20):');
|
|
76
|
-
const reader = streamResponse.body?.getReader();
|
|
77
|
-
if (reader) {
|
|
78
|
-
const decoder = new TextDecoder();
|
|
79
|
-
let chunkCount = 0;
|
|
80
|
-
while (true) {
|
|
81
|
-
const { done, value } = await reader.read();
|
|
82
|
-
if (done)
|
|
83
|
-
break;
|
|
84
|
-
const text = decoder.decode(value, { stream: true });
|
|
85
|
-
process.stdout.write(text);
|
|
86
|
-
chunkCount++;
|
|
87
|
-
}
|
|
88
|
-
console.log(`\nStream completed with ${chunkCount} chunks`);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
console.log('No readable stream available');
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
console.log('Stream Request failed with status:', streamResponse.status);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
console.log('Stream Request failed:', error instanceof Error ? error.message : String(error));
|
|
100
|
-
}
|
|
101
|
-
console.log('\nExample completed successfully!');
|
|
102
|
-
console.log('\nTo test with a real server:');
|
|
103
|
-
console.log('1. Start the Go server: go run pkg/server/main.go');
|
|
104
|
-
console.log('2. Run this example: npm run example');
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
console.error('Error:', error);
|
|
108
|
-
process.exit(1);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
// Run the example
|
|
112
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
113
|
-
main().catch(console.error);
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=example.js.map
|
package/dist/esm/example.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-test.d.ts","sourceRoot":"","sources":["../../src/streaming-test.ts"],"names":[],"mappings":""}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { Identity, createTransport } from './index.js';
|
|
3
|
-
async function streamingTest() {
|
|
4
|
-
console.log('EHBP Streaming Test');
|
|
5
|
-
console.log('===================');
|
|
6
|
-
try {
|
|
7
|
-
// Create client identity
|
|
8
|
-
console.log('Creating client identity...');
|
|
9
|
-
const clientIdentity = await Identity.generate();
|
|
10
|
-
console.log('Client identity created');
|
|
11
|
-
// Create transport
|
|
12
|
-
console.log('Creating transport...');
|
|
13
|
-
const serverURL = 'http://localhost:8080';
|
|
14
|
-
const transport = await createTransport(serverURL, clientIdentity);
|
|
15
|
-
console.log('Transport created');
|
|
16
|
-
// Test 1: Basic streaming request
|
|
17
|
-
console.log('\n--- Test 1: Basic Streaming ---');
|
|
18
|
-
const streamResponse = await transport.get(`${serverURL}/stream`);
|
|
19
|
-
console.log('Stream request sent, status:', streamResponse.status);
|
|
20
|
-
if (streamResponse.ok) {
|
|
21
|
-
console.log('Reading stream data...');
|
|
22
|
-
const reader = streamResponse.body?.getReader();
|
|
23
|
-
if (reader) {
|
|
24
|
-
const decoder = new TextDecoder();
|
|
25
|
-
while (true) {
|
|
26
|
-
const { done, value } = await reader.read();
|
|
27
|
-
if (done)
|
|
28
|
-
break;
|
|
29
|
-
const text = decoder.decode(value, { stream: true });
|
|
30
|
-
process.stdout.write(text);
|
|
31
|
-
}
|
|
32
|
-
console.log('\nStream completed');
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
console.log('No readable stream available');
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
console.log('Stream request failed with status:', streamResponse.status);
|
|
40
|
-
}
|
|
41
|
-
// Test 2: Multiple concurrent streams
|
|
42
|
-
console.log('\n--- Test 2: Concurrent Streams ---');
|
|
43
|
-
const concurrentStreams = 3;
|
|
44
|
-
const streamPromises = [];
|
|
45
|
-
for (let i = 0; i < concurrentStreams; i++) {
|
|
46
|
-
streamPromises.push((async (streamId) => {
|
|
47
|
-
const response = await transport.get(`${serverURL}/stream`);
|
|
48
|
-
if (response.ok && response.body) {
|
|
49
|
-
const reader = response.body.getReader();
|
|
50
|
-
const decoder = new TextDecoder();
|
|
51
|
-
while (true) {
|
|
52
|
-
const { done, value } = await reader.read();
|
|
53
|
-
if (done)
|
|
54
|
-
break;
|
|
55
|
-
const text = decoder.decode(value, { stream: true });
|
|
56
|
-
// Prefix with stream ID to show concurrency
|
|
57
|
-
process.stdout.write(`[Stream ${streamId}] ${text}`);
|
|
58
|
-
}
|
|
59
|
-
return { streamId };
|
|
60
|
-
}
|
|
61
|
-
return { streamId };
|
|
62
|
-
})(i + 1));
|
|
63
|
-
}
|
|
64
|
-
const results = await Promise.all(streamPromises);
|
|
65
|
-
console.log('\nConcurrent streams completed:');
|
|
66
|
-
results.forEach(result => {
|
|
67
|
-
console.log(` - Stream ${result.streamId}: completed`);
|
|
68
|
-
});
|
|
69
|
-
// Test 3: Large data streaming (if server supports it)
|
|
70
|
-
console.log('\n--- Test 3: Large Data Stream ---');
|
|
71
|
-
try {
|
|
72
|
-
const largeStreamResponse = await transport.get(`${serverURL}/stream`);
|
|
73
|
-
if (largeStreamResponse.ok) {
|
|
74
|
-
console.log('Reading large data stream...');
|
|
75
|
-
const reader = largeStreamResponse.body?.getReader();
|
|
76
|
-
if (reader) {
|
|
77
|
-
const decoder = new TextDecoder();
|
|
78
|
-
while (true) {
|
|
79
|
-
const { done, value } = await reader.read();
|
|
80
|
-
if (done)
|
|
81
|
-
break;
|
|
82
|
-
const text = decoder.decode(value, { stream: true });
|
|
83
|
-
process.stdout.write(text);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
console.log('Large data stream test failed:', error instanceof Error ? error.message : String(error));
|
|
90
|
-
}
|
|
91
|
-
console.log('\nAll streaming tests completed successfully!');
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
console.error('Streaming test failed:', error);
|
|
95
|
-
process.exit(1);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Run the streaming test
|
|
99
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
100
|
-
streamingTest().catch(console.error);
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=streaming-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-test.js","sourceRoot":"","sources":["../../src/streaming-test.ts"],"names":[],"mappings":"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"}
|