@bsv/sdk 1.3.14 → 1.3.15
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/dist/cjs/package.json +3 -2
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +43 -70
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +43 -69
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/auth.md +1 -1
- package/package.json +3 -2
- package/src/auth/transports/SimplifiedFetchTransport.ts +73 -144
|
@@ -31,7 +31,7 @@ export class SimplifiedFetchTransport {
|
|
|
31
31
|
* @throws Will throw an error if no listener has been registered via `onData`.
|
|
32
32
|
*/
|
|
33
33
|
async send(message) {
|
|
34
|
-
if (this.onDataCallback
|
|
34
|
+
if (!this.onDataCallback) {
|
|
35
35
|
throw new Error('Listen before you start speaking. God gave you two ears and one mouth for a reason.');
|
|
36
36
|
}
|
|
37
37
|
if (message.messageType !== 'general') {
|
|
@@ -43,7 +43,7 @@ export class SimplifiedFetchTransport {
|
|
|
43
43
|
body: JSON.stringify(message)
|
|
44
44
|
});
|
|
45
45
|
// Handle the response if data is received and callback is set
|
|
46
|
-
if (response.ok &&
|
|
46
|
+
if (response.ok && this.onDataCallback) {
|
|
47
47
|
const responseMessage = await response.json();
|
|
48
48
|
if (responseMessage?.status !== 'certificate received') {
|
|
49
49
|
this.onDataCallback(responseMessage);
|
|
@@ -56,58 +56,43 @@ export class SimplifiedFetchTransport {
|
|
|
56
56
|
}
|
|
57
57
|
else {
|
|
58
58
|
// Parse message payload
|
|
59
|
-
const httpRequest = this.deserializeRequestPayload(message.payload
|
|
59
|
+
const httpRequest = this.deserializeRequestPayload(message.payload);
|
|
60
60
|
// Send the byte array as the HTTP payload
|
|
61
61
|
const url = `${this.baseUrl}${httpRequest.urlPostfix}`;
|
|
62
|
-
|
|
63
|
-
method: httpRequest.method,
|
|
64
|
-
headers: httpRequest.headers,
|
|
65
|
-
body: Array.isArray(httpRequest.body)
|
|
66
|
-
? JSON.stringify(httpRequest.body)
|
|
67
|
-
: httpRequest.body
|
|
68
|
-
};
|
|
62
|
+
let httpRequestWithAuthHeaders = httpRequest;
|
|
69
63
|
if (typeof httpRequest.headers !== 'object') {
|
|
70
64
|
httpRequestWithAuthHeaders.headers = {};
|
|
71
65
|
}
|
|
72
66
|
// Append auth headers in request to server
|
|
73
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-version'] =
|
|
74
|
-
|
|
75
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-
|
|
76
|
-
|
|
77
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-
|
|
78
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-
|
|
79
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-signature'] = Utils.toHex(message.signature ?? []);
|
|
80
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-request-id'] =
|
|
81
|
-
httpRequest.requestId;
|
|
67
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-version'] = message.version;
|
|
68
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-identity-key'] = message.identityKey;
|
|
69
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-nonce'] = message.nonce;
|
|
70
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-your-nonce'] = message.yourNonce;
|
|
71
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-signature'] = Utils.toHex(message.signature);
|
|
72
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-request-id'] = httpRequest.requestId;
|
|
82
73
|
// Ensure Content-Type is set for requests with a body
|
|
83
|
-
if (httpRequestWithAuthHeaders.body
|
|
74
|
+
if (httpRequestWithAuthHeaders.body) {
|
|
84
75
|
const headers = httpRequestWithAuthHeaders.headers;
|
|
85
|
-
if (headers['content-type']
|
|
76
|
+
if (!headers['content-type']) {
|
|
86
77
|
throw new Error('Content-Type header is required for requests with a body.');
|
|
87
78
|
}
|
|
88
79
|
const contentType = headers['content-type'];
|
|
89
80
|
// Transform body based on Content-Type
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (!(httpRequestWithAuthHeaders.body instanceof Uint8Array)) {
|
|
106
|
-
httpRequestWithAuthHeaders.body = new Uint8Array(typeof httpRequestWithAuthHeaders.body === 'string'
|
|
107
|
-
? Utils.toArray(httpRequestWithAuthHeaders.body, 'utf8') // Convert string to byte array
|
|
108
|
-
: []);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
81
|
+
if (contentType.includes('application/json')) {
|
|
82
|
+
// Convert byte array to JSON string
|
|
83
|
+
httpRequestWithAuthHeaders.body = Utils.toUTF8(httpRequestWithAuthHeaders.body);
|
|
84
|
+
}
|
|
85
|
+
else if (contentType.includes('application/x-www-form-urlencoded')) {
|
|
86
|
+
// Convert byte array to URL-encoded string
|
|
87
|
+
httpRequestWithAuthHeaders.body = Utils.toUTF8(httpRequestWithAuthHeaders.body);
|
|
88
|
+
}
|
|
89
|
+
else if (contentType.includes('text/plain')) {
|
|
90
|
+
// Convert byte array to plain UTF-8 string
|
|
91
|
+
httpRequestWithAuthHeaders.body = Utils.toUTF8(httpRequestWithAuthHeaders.body);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// For all other content types, treat as binary data
|
|
95
|
+
httpRequestWithAuthHeaders.body = new Uint8Array(httpRequestWithAuthHeaders.body);
|
|
111
96
|
}
|
|
112
97
|
}
|
|
113
98
|
// Send the actual fetch request to the server
|
|
@@ -118,21 +103,20 @@ export class SimplifiedFetchTransport {
|
|
|
118
103
|
});
|
|
119
104
|
// Check for an acceptable status
|
|
120
105
|
if (!SUCCESS_STATUS_CODES.includes(response.status)) {
|
|
121
|
-
|
|
106
|
+
// Try parsing JSON error
|
|
107
|
+
let errorInfo;
|
|
122
108
|
try {
|
|
123
|
-
errorInfo = await response.json();
|
|
109
|
+
errorInfo = await response.json();
|
|
124
110
|
}
|
|
125
111
|
catch {
|
|
126
112
|
// Fallback to text if JSON parse fails
|
|
127
113
|
const text = await response.text().catch(() => '');
|
|
128
|
-
throw new Error(`HTTP ${response.status} - ${text
|
|
114
|
+
throw new Error(`HTTP ${response.status} - ${text || 'Unknown error'}`);
|
|
129
115
|
}
|
|
130
116
|
// If we find a known { status: 'error', code, description } structure
|
|
131
|
-
if (errorInfo
|
|
132
|
-
errorInfo.status === 'error' &&
|
|
133
|
-
typeof errorInfo.description === 'string') {
|
|
117
|
+
if (errorInfo?.status === 'error' && typeof errorInfo.description === 'string') {
|
|
134
118
|
const msg = `HTTP ${response.status} - ${errorInfo.description}`;
|
|
135
|
-
throw new Error(
|
|
119
|
+
throw new Error(errorInfo.code ? `${msg} (code: ${errorInfo.code})` : msg);
|
|
136
120
|
}
|
|
137
121
|
// Otherwise just throw whatever we got
|
|
138
122
|
throw new Error(`HTTP ${response.status} - ${JSON.stringify(errorInfo)}`);
|
|
@@ -174,7 +158,7 @@ export class SimplifiedFetchTransport {
|
|
|
174
158
|
payloadWriter.write(headerValueAsArray);
|
|
175
159
|
}
|
|
176
160
|
// Handle body
|
|
177
|
-
if (parsedBody
|
|
161
|
+
if (parsedBody) {
|
|
178
162
|
const bodyAsArray = Array.from(new Uint8Array(parsedBody));
|
|
179
163
|
payloadWriter.writeVarIntNum(bodyAsArray.length);
|
|
180
164
|
payloadWriter.write(bodyAsArray);
|
|
@@ -184,20 +168,17 @@ export class SimplifiedFetchTransport {
|
|
|
184
168
|
}
|
|
185
169
|
// Build the correct AuthMessage for the response
|
|
186
170
|
const responseMessage = {
|
|
187
|
-
version: response.headers.get('x-bsv-auth-version')
|
|
188
|
-
messageType: response.headers.get('x-bsv-auth-message-type') ===
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
nonce: response.headers.get('x-bsv-auth-nonce') ?? undefined,
|
|
194
|
-
yourNonce: response.headers.get('x-bsv-auth-your-nonce') ?? undefined,
|
|
195
|
-
requestedCertificates: JSON.parse(response.headers.get('x-bsv-auth-requested-certificates') ?? '[]'),
|
|
171
|
+
version: response.headers.get('x-bsv-auth-version'),
|
|
172
|
+
messageType: response.headers.get('x-bsv-auth-message-type') === 'certificateRequest' ? 'certificateRequest' : 'general',
|
|
173
|
+
identityKey: response.headers.get('x-bsv-auth-identity-key'),
|
|
174
|
+
nonce: response.headers.get('x-bsv-auth-nonce'),
|
|
175
|
+
yourNonce: response.headers.get('x-bsv-auth-your-nonce'),
|
|
176
|
+
requestedCertificates: JSON.parse(response.headers.get('x-bsv-auth-requested-certificates')),
|
|
196
177
|
payload: payloadWriter.toArray(),
|
|
197
|
-
signature: Utils.toArray(response.headers.get('x-bsv-auth-signature')
|
|
178
|
+
signature: Utils.toArray(response.headers.get('x-bsv-auth-signature'), 'hex'),
|
|
198
179
|
};
|
|
199
180
|
// If the server didn't provide the correct authentication headers, throw an error
|
|
200
|
-
if (responseMessage.version
|
|
181
|
+
if (!responseMessage.version) {
|
|
201
182
|
throw new Error('HTTP server failed to authenticate');
|
|
202
183
|
}
|
|
203
184
|
// Handle the response if data is received and callback is set
|
|
@@ -213,14 +194,7 @@ export class SimplifiedFetchTransport {
|
|
|
213
194
|
*/
|
|
214
195
|
async onData(callback) {
|
|
215
196
|
this.onDataCallback = (m) => {
|
|
216
|
-
|
|
217
|
-
try {
|
|
218
|
-
await callback(m); // ✅ Ensures proper `await`
|
|
219
|
-
}
|
|
220
|
-
catch (error) {
|
|
221
|
-
console.error('Error handling AuthMessage:', error instanceof Error ? error.message : String(error));
|
|
222
|
-
}
|
|
223
|
-
})();
|
|
197
|
+
callback(m);
|
|
224
198
|
};
|
|
225
199
|
}
|
|
226
200
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimplifiedFetchTransport.js","sourceRoot":"","sources":["../../../../../src/auth/transports/SimplifiedFetchTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SimplifiedFetchTransport.js","sourceRoot":"","sources":["../../../../../src/auth/transports/SimplifiedFetchTransport.ts"],"names":[],"mappings":"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"}
|