wakz-sdk 1.0.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 +264 -0
- package/dist/client.d.ts +124 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +323 -0
- package/dist/client.js.map +1 -0
- package/dist/crypto.d.ts +26 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +161 -0
- package/dist/crypto.js.map +1 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/client.mjs +319 -0
- package/dist/esm/crypto.js.map +1 -0
- package/dist/esm/crypto.mjs +123 -0
- package/dist/esm/events.js.map +1 -0
- package/dist/esm/events.mjs +100 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/http.mjs +159 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.mjs +32 -0
- package/dist/esm/session.js.map +1 -0
- package/dist/esm/session.mjs +186 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/types.mjs +5 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/utils.mjs +139 -0
- package/dist/esm/websocket.js.map +1 -0
- package/dist/esm/websocket.mjs +363 -0
- package/dist/events.d.ts +38 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +104 -0
- package/dist/events.js.map +1 -0
- package/dist/http.d.ts +37 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +163 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/session.d.ts +75 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +190 -0
- package/dist/session.js.map +1 -0
- package/dist/types.d.ts +149 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +56 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +153 -0
- package/dist/utils.js.map +1 -0
- package/dist/websocket.d.ts +93 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +367 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +50 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ═══════════════════════════════════════════════════════════════
|
|
3
|
+
// WAKZ SDK — Main Client
|
|
4
|
+
// ═══════════════════════════════════════════════════════════════
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WAKZClient = void 0;
|
|
7
|
+
const events_1 = require("./events");
|
|
8
|
+
const websocket_1 = require("./websocket");
|
|
9
|
+
const http_1 = require("./http");
|
|
10
|
+
const session_1 = require("./session");
|
|
11
|
+
const utils_1 = require("./utils");
|
|
12
|
+
/**
|
|
13
|
+
* WAKZ SDK Client — The main entry point for integrating WAKZ AI.
|
|
14
|
+
*
|
|
15
|
+
* Features:
|
|
16
|
+
* - Dual transport: WebSocket (primary) with HTTP/REST fallback
|
|
17
|
+
* - Automatic reconnection with exponential backoff
|
|
18
|
+
* - API key authentication with HMAC-SHA256 request signing
|
|
19
|
+
* - Typed event emitter for real-time updates
|
|
20
|
+
* - Session management with visitor fingerprinting
|
|
21
|
+
* - Works in both browser and Node.js environments
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const client = new WAKZClient({
|
|
26
|
+
* apiKey: 'wakz_live_xxxxx',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* await client.connect();
|
|
30
|
+
* client.on('message', (msg) => console.log(msg));
|
|
31
|
+
* const response = await client.sendMessage('Hello!');
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
class WAKZClient extends events_1.WAKZEventEmitter {
|
|
35
|
+
/**
|
|
36
|
+
* Create a new WAKZ SDK client instance.
|
|
37
|
+
*
|
|
38
|
+
* @param options - Client configuration options
|
|
39
|
+
*/
|
|
40
|
+
constructor(options) {
|
|
41
|
+
super();
|
|
42
|
+
this.wsTransport = null;
|
|
43
|
+
this._status = 'disconnected';
|
|
44
|
+
this._currentTransport = 'http';
|
|
45
|
+
if (!options.apiKey || typeof options.apiKey !== 'string') {
|
|
46
|
+
throw new Error('[WAKZ SDK] A valid API key is required. API keys start with "wakz_live_".');
|
|
47
|
+
}
|
|
48
|
+
if (!options.apiKey.startsWith('wakz_live_')) {
|
|
49
|
+
this.warn('[WAKZ SDK] API key does not start with "wakz_live_". Please verify your key.');
|
|
50
|
+
}
|
|
51
|
+
this.options = {
|
|
52
|
+
apiKey: options.apiKey,
|
|
53
|
+
baseUrl: (0, utils_1.normalizeUrl)(options.baseUrl || 'https://api.wakz.dev'),
|
|
54
|
+
websocketUrl: options.websocketUrl || (0, utils_1.httpToWsUrl)(options.baseUrl || 'https://api.wakz.dev'),
|
|
55
|
+
autoReconnect: options.autoReconnect ?? true,
|
|
56
|
+
maxRetries: options.maxRetries ?? 5,
|
|
57
|
+
initialRetryDelay: options.initialRetryDelay ?? 1000,
|
|
58
|
+
maxRetryDelay: options.maxRetryDelay ?? 30000,
|
|
59
|
+
visitorId: options.visitorId,
|
|
60
|
+
metadata: options.metadata,
|
|
61
|
+
timeout: options.timeout ?? 30000,
|
|
62
|
+
debug: options.debug ?? false,
|
|
63
|
+
};
|
|
64
|
+
this.logger = new utils_1.Logger(this.options.debug);
|
|
65
|
+
// Initialize HTTP transport (always available as fallback)
|
|
66
|
+
this.httpTransport = new http_1.HttpTransport(this.options.apiKey, this.options.baseUrl, this.options.timeout, this.options.debug);
|
|
67
|
+
// Initialize session manager
|
|
68
|
+
this.sessionManager = new session_1.SessionManager(this.options.visitorId, this.options.metadata);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Connect to the WAKZ API.
|
|
72
|
+
*
|
|
73
|
+
* Attempts WebSocket connection first. Falls back to HTTP if:
|
|
74
|
+
* - WebSocket is not available in the environment
|
|
75
|
+
* - WebSocket connection fails after max retries
|
|
76
|
+
*
|
|
77
|
+
* @returns Promise that resolves when connected
|
|
78
|
+
*/
|
|
79
|
+
async connect() {
|
|
80
|
+
this._status = 'connecting';
|
|
81
|
+
this.logger.info('Connecting to WAKZ API...');
|
|
82
|
+
// Resolve the best available transport
|
|
83
|
+
const preferredTransport = (0, utils_1.resolveTransportMode)();
|
|
84
|
+
if (preferredTransport === 'websocket') {
|
|
85
|
+
try {
|
|
86
|
+
await this.connectWebSocket();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
this.logger.warn('WebSocket connection failed, falling back to HTTP:', err);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Fallback to HTTP transport
|
|
94
|
+
this._currentTransport = 'http';
|
|
95
|
+
this._status = 'connected';
|
|
96
|
+
this.logger.info('Connected via HTTP transport');
|
|
97
|
+
this.emit('connected', undefined);
|
|
98
|
+
// Initialize session
|
|
99
|
+
const session = await this.sessionManager.getSession();
|
|
100
|
+
this.emit('session_start', session);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Send a chat message.
|
|
104
|
+
*
|
|
105
|
+
* Uses the current active transport (WebSocket or HTTP).
|
|
106
|
+
*
|
|
107
|
+
* @param content - The message text to send
|
|
108
|
+
* @returns Promise resolving to the assistant's reply
|
|
109
|
+
*/
|
|
110
|
+
async sendMessage(content) {
|
|
111
|
+
if (!content || typeof content !== 'string') {
|
|
112
|
+
return { success: false, error: 'Message content is required' };
|
|
113
|
+
}
|
|
114
|
+
const session = await this.sessionManager.getSession();
|
|
115
|
+
// Try WebSocket first
|
|
116
|
+
if (this._currentTransport === 'websocket' && this.wsTransport?.isConnected) {
|
|
117
|
+
try {
|
|
118
|
+
const message = await this.wsTransport.sendMessage(content, session.id, session.visitorId);
|
|
119
|
+
this.sessionManager.incrementMessageCount();
|
|
120
|
+
return { success: true, message };
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
this.logger.warn('WebSocket send failed, falling back to HTTP:', err);
|
|
124
|
+
// Fall through to HTTP
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// HTTP fallback
|
|
128
|
+
try {
|
|
129
|
+
const result = await this.httpTransport.sendMessage(content, session.id, session.visitorId);
|
|
130
|
+
if (result.success) {
|
|
131
|
+
this.sessionManager.incrementMessageCount();
|
|
132
|
+
if (result.message) {
|
|
133
|
+
this.emit('message', result.message);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
error: err instanceof Error ? err.message : 'Failed to send message',
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Disconnect from the WAKZ API.
|
|
147
|
+
*/
|
|
148
|
+
disconnect() {
|
|
149
|
+
this._status = 'disconnected';
|
|
150
|
+
this.wsTransport?.disconnect();
|
|
151
|
+
this.sessionManager.endSession();
|
|
152
|
+
this.logger.info('Disconnected');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Register an event listener.
|
|
156
|
+
*/
|
|
157
|
+
on(event, callback) {
|
|
158
|
+
super.on(event, callback);
|
|
159
|
+
return this;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Register a one-time event listener.
|
|
163
|
+
*/
|
|
164
|
+
once(event, callback) {
|
|
165
|
+
super.once(event, callback);
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Remove an event listener.
|
|
170
|
+
*/
|
|
171
|
+
off(event, callback) {
|
|
172
|
+
super.off(event, callback);
|
|
173
|
+
return this;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get the current session information.
|
|
177
|
+
*/
|
|
178
|
+
async getSession() {
|
|
179
|
+
return this.sessionManager.getSession();
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get the current visitor ID.
|
|
183
|
+
*/
|
|
184
|
+
getVisitorId() {
|
|
185
|
+
return this.sessionManager.getVisitorId();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get the current connection status.
|
|
189
|
+
*/
|
|
190
|
+
getStatus() {
|
|
191
|
+
return this._status;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get the current transport mode.
|
|
195
|
+
*/
|
|
196
|
+
getTransport() {
|
|
197
|
+
return this._currentTransport;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Fetch the widget configuration from the API.
|
|
201
|
+
*/
|
|
202
|
+
async getWidgetConfig() {
|
|
203
|
+
return this.httpTransport.fetchWidgetConfig();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Perform a health check against the WAKZ API.
|
|
207
|
+
*/
|
|
208
|
+
async healthCheck() {
|
|
209
|
+
// Use the active transport for health check
|
|
210
|
+
if (this._currentTransport === 'websocket' && this.wsTransport?.isConnected) {
|
|
211
|
+
return this.wsTransport.healthCheck();
|
|
212
|
+
}
|
|
213
|
+
return this.httpTransport.healthCheck();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Update visitor metadata.
|
|
217
|
+
*/
|
|
218
|
+
updateMetadata(metadata) {
|
|
219
|
+
this.sessionManager.updateMetadata(metadata);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Destroy the client — disconnect and clean up all resources.
|
|
223
|
+
*/
|
|
224
|
+
destroy() {
|
|
225
|
+
this.disconnect();
|
|
226
|
+
this.wsTransport = null;
|
|
227
|
+
this.sessionManager.destroy();
|
|
228
|
+
this.removeAllListeners();
|
|
229
|
+
this.logger.info('Client destroyed');
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* ─── Static Methods ──────────────────────────────────────
|
|
233
|
+
*/
|
|
234
|
+
/**
|
|
235
|
+
* Perform a quick health check against a WAKZ API endpoint.
|
|
236
|
+
* Useful for checking connectivity before creating a client instance.
|
|
237
|
+
*
|
|
238
|
+
* @param baseUrl - The API base URL to check
|
|
239
|
+
* @param timeout - Request timeout in ms (default: 10000)
|
|
240
|
+
* @returns Health check result
|
|
241
|
+
*/
|
|
242
|
+
static async healthCheck(baseUrl = 'https://api.wakz.dev', timeout = 10000) {
|
|
243
|
+
const startTime = Date.now();
|
|
244
|
+
try {
|
|
245
|
+
const url = `${(0, utils_1.normalizeUrl)(baseUrl)}/api/v1/embed/health`;
|
|
246
|
+
const controller = new AbortController();
|
|
247
|
+
const timer = setTimeout(() => controller.abort(), timeout);
|
|
248
|
+
const response = await fetch(url, {
|
|
249
|
+
method: 'GET',
|
|
250
|
+
signal: controller.signal,
|
|
251
|
+
}).finally(() => clearTimeout(timer));
|
|
252
|
+
const data = await response.json().catch(() => ({}));
|
|
253
|
+
return {
|
|
254
|
+
healthy: response.ok,
|
|
255
|
+
latency: Date.now() - startTime,
|
|
256
|
+
version: data.version,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
return {
|
|
261
|
+
healthy: false,
|
|
262
|
+
latency: Date.now() - startTime,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// ─── Private Methods ──────────────────────────────────────
|
|
267
|
+
/**
|
|
268
|
+
* Connect via WebSocket transport.
|
|
269
|
+
*/
|
|
270
|
+
async connectWebSocket() {
|
|
271
|
+
this._currentTransport = 'websocket';
|
|
272
|
+
// Create WebSocket transport and forward events
|
|
273
|
+
this.wsTransport = new websocket_1.WebSocketTransport(this.options.apiKey, this.options.websocketUrl, {
|
|
274
|
+
autoReconnect: this.options.autoReconnect,
|
|
275
|
+
maxRetries: this.options.maxRetries,
|
|
276
|
+
initialRetryDelay: this.options.initialRetryDelay,
|
|
277
|
+
maxRetryDelay: this.options.maxRetryDelay,
|
|
278
|
+
debug: this.options.debug,
|
|
279
|
+
});
|
|
280
|
+
// Forward WebSocket events to client
|
|
281
|
+
this.wsTransport.on('connected', () => {
|
|
282
|
+
this._status = 'connected';
|
|
283
|
+
this.emit('connected', undefined);
|
|
284
|
+
// Start session
|
|
285
|
+
this.sessionManager.getSession().then((session) => {
|
|
286
|
+
this.emit('session_start', session);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
this.wsTransport.on('disconnected', (data) => {
|
|
290
|
+
if (this._status === 'connected') {
|
|
291
|
+
this._status = 'disconnected';
|
|
292
|
+
}
|
|
293
|
+
this.emit('disconnected', data);
|
|
294
|
+
});
|
|
295
|
+
this.wsTransport.on('reconnecting', (data) => {
|
|
296
|
+
this._status = 'reconnecting';
|
|
297
|
+
this.emit('reconnecting', data);
|
|
298
|
+
});
|
|
299
|
+
this.wsTransport.on('reconnect_failed', (data) => {
|
|
300
|
+
this.logger.warn('WebSocket reconnect failed, switching to HTTP');
|
|
301
|
+
this.emit('reconnect_failed', data);
|
|
302
|
+
// Auto-switch to HTTP transport
|
|
303
|
+
this._currentTransport = 'http';
|
|
304
|
+
this._status = 'connected';
|
|
305
|
+
this.emit('transport_change', { from: 'websocket', to: 'http' });
|
|
306
|
+
this.emit('connected', undefined);
|
|
307
|
+
});
|
|
308
|
+
this.wsTransport.on('message', (msg) => {
|
|
309
|
+
this.sessionManager.incrementMessageCount();
|
|
310
|
+
this.emit('message', msg);
|
|
311
|
+
});
|
|
312
|
+
this.wsTransport.on('error', (err) => {
|
|
313
|
+
this.emit('error', err);
|
|
314
|
+
});
|
|
315
|
+
// Connect
|
|
316
|
+
await this.wsTransport.connect();
|
|
317
|
+
}
|
|
318
|
+
warn(msg) {
|
|
319
|
+
console.warn(msg);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
exports.WAKZClient = WAKZClient;
|
|
323
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/crypto.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SignedHeaders } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Sign an API request payload for authentication.
|
|
4
|
+
*
|
|
5
|
+
* The signing process:
|
|
6
|
+
* 1. Create a timestamp string (ISO 8601)
|
|
7
|
+
* 2. Build the signing payload: `${timestamp}.${JSON.stringify(body)}`
|
|
8
|
+
* 3. HMAC-SHA256 sign with the API key
|
|
9
|
+
*
|
|
10
|
+
* Headers produced:
|
|
11
|
+
* - `X-API-Key`: The raw API key
|
|
12
|
+
* - `X-Timestamp`: ISO timestamp
|
|
13
|
+
* - `X-Signature`: HMAC hex digest
|
|
14
|
+
* - `Content-Type`: application/json
|
|
15
|
+
*/
|
|
16
|
+
export declare function signRequest(apiKey: string, body: Record<string, unknown>): Promise<SignedHeaders>;
|
|
17
|
+
/**
|
|
18
|
+
* Simple hash function for visitor fingerprinting.
|
|
19
|
+
* NOT cryptographically secure — used only for session identification.
|
|
20
|
+
*/
|
|
21
|
+
export declare function simpleHash(input: string): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Generate a random hex string of specified byte length.
|
|
24
|
+
*/
|
|
25
|
+
export declare function randomHex(bytes: number): string;
|
|
26
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA0D7C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,aAAa,CAAC,CAWxB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB/D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA8B/C"}
|
package/dist/crypto.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ═══════════════════════════════════════════════════════════════
|
|
3
|
+
// WAKZ SDK — Cryptographic Utilities
|
|
4
|
+
// ═══════════════════════════════════════════════════════════════
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.signRequest = signRequest;
|
|
40
|
+
exports.simpleHash = simpleHash;
|
|
41
|
+
exports.randomHex = randomHex;
|
|
42
|
+
/**
|
|
43
|
+
* Cryptographic utilities for API request signing and verification.
|
|
44
|
+
* Uses the Web Crypto API (browser) or Node.js crypto (server).
|
|
45
|
+
*/
|
|
46
|
+
// ── Platform Detection ──────────────────────────────────────────
|
|
47
|
+
const isNode = typeof process !== 'undefined' &&
|
|
48
|
+
typeof process.versions !== 'undefined' &&
|
|
49
|
+
typeof process.versions.node !== 'undefined';
|
|
50
|
+
const isBrowser = typeof window !== 'undefined' && typeof window.crypto !== 'undefined';
|
|
51
|
+
// ── HMAC-SHA256 Implementation ──────────────────────────────────
|
|
52
|
+
/**
|
|
53
|
+
* Create HMAC-SHA256 signature using the best available crypto API.
|
|
54
|
+
* Works in both browser (Web Crypto) and Node.js environments.
|
|
55
|
+
*/
|
|
56
|
+
async function hmacSha256(key, message) {
|
|
57
|
+
if (isNode) {
|
|
58
|
+
// Node.js crypto
|
|
59
|
+
const nodeCrypto = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
60
|
+
return nodeCrypto
|
|
61
|
+
.createHmac('sha256', key)
|
|
62
|
+
.update(message)
|
|
63
|
+
.digest('hex');
|
|
64
|
+
}
|
|
65
|
+
if (isBrowser && typeof window.crypto.subtle !== 'undefined') {
|
|
66
|
+
// Web Crypto API (async)
|
|
67
|
+
const encoder = new TextEncoder();
|
|
68
|
+
const keyData = encoder.encode(key);
|
|
69
|
+
const msgData = encoder.encode(message);
|
|
70
|
+
const cryptoKey = await window.crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
|
|
71
|
+
const signature = await window.crypto.subtle.sign('HMAC', cryptoKey, msgData);
|
|
72
|
+
return Array.from(new Uint8Array(signature))
|
|
73
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
74
|
+
.join('');
|
|
75
|
+
}
|
|
76
|
+
throw new Error('[WAKZ SDK] No cryptographic implementation available. ' +
|
|
77
|
+
'Requires Node.js >= 16 or a modern browser with Web Crypto API support.');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Sign an API request payload for authentication.
|
|
81
|
+
*
|
|
82
|
+
* The signing process:
|
|
83
|
+
* 1. Create a timestamp string (ISO 8601)
|
|
84
|
+
* 2. Build the signing payload: `${timestamp}.${JSON.stringify(body)}`
|
|
85
|
+
* 3. HMAC-SHA256 sign with the API key
|
|
86
|
+
*
|
|
87
|
+
* Headers produced:
|
|
88
|
+
* - `X-API-Key`: The raw API key
|
|
89
|
+
* - `X-Timestamp`: ISO timestamp
|
|
90
|
+
* - `X-Signature`: HMAC hex digest
|
|
91
|
+
* - `Content-Type`: application/json
|
|
92
|
+
*/
|
|
93
|
+
async function signRequest(apiKey, body) {
|
|
94
|
+
const timestamp = new Date().toISOString();
|
|
95
|
+
const signingPayload = `${timestamp}.${JSON.stringify(body)}`;
|
|
96
|
+
const signature = await hmacSha256(apiKey, signingPayload);
|
|
97
|
+
return {
|
|
98
|
+
'X-API-Key': apiKey,
|
|
99
|
+
'X-Timestamp': timestamp,
|
|
100
|
+
'X-Signature': signature,
|
|
101
|
+
'Content-Type': 'application/json',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Simple hash function for visitor fingerprinting.
|
|
106
|
+
* NOT cryptographically secure — used only for session identification.
|
|
107
|
+
*/
|
|
108
|
+
async function simpleHash(input) {
|
|
109
|
+
if (isNode) {
|
|
110
|
+
const nodeCrypto = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
111
|
+
return nodeCrypto.createHash('sha256').update(input).digest('hex').slice(0, 16);
|
|
112
|
+
}
|
|
113
|
+
if (isBrowser && typeof window.crypto.subtle !== 'undefined') {
|
|
114
|
+
const encoder = new TextEncoder();
|
|
115
|
+
const data = encoder.encode(input);
|
|
116
|
+
const hash = await window.crypto.subtle.digest('SHA-256', data);
|
|
117
|
+
return Array.from(new Uint8Array(hash))
|
|
118
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
119
|
+
.join('')
|
|
120
|
+
.slice(0, 16);
|
|
121
|
+
}
|
|
122
|
+
// Fallback: simple string hash (non-crypto)
|
|
123
|
+
let hash = 0;
|
|
124
|
+
for (let i = 0; i < input.length; i++) {
|
|
125
|
+
const char = input.charCodeAt(i);
|
|
126
|
+
hash = ((hash << 5) - hash + char) | 0;
|
|
127
|
+
}
|
|
128
|
+
return Math.abs(hash).toString(16).padStart(16, '0');
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Generate a random hex string of specified byte length.
|
|
132
|
+
*/
|
|
133
|
+
function randomHex(bytes) {
|
|
134
|
+
const isNodeEnv = typeof process !== 'undefined' &&
|
|
135
|
+
typeof process.versions !== 'undefined' &&
|
|
136
|
+
typeof process.versions.node !== 'undefined';
|
|
137
|
+
if (isNodeEnv) {
|
|
138
|
+
try {
|
|
139
|
+
const nodeCrypto = require('crypto');
|
|
140
|
+
return nodeCrypto.randomBytes(bytes).toString('hex');
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Fallback below
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues !== 'undefined') {
|
|
147
|
+
const array = new Uint8Array(bytes);
|
|
148
|
+
crypto.getRandomValues(array);
|
|
149
|
+
return Array.from(array)
|
|
150
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
151
|
+
.join('');
|
|
152
|
+
}
|
|
153
|
+
// Math.random fallback (not cryptographically secure)
|
|
154
|
+
const chars = '0123456789abcdef';
|
|
155
|
+
let result = '';
|
|
156
|
+
for (let i = 0; i < bytes * 2; i++) {
|
|
157
|
+
result += chars[Math.floor(Math.random() * chars.length)];
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|