@tuteliq/sdk 2.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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1034 -0
  3. package/dist/cjs/client.js +1283 -0
  4. package/dist/cjs/client.js.map +1 -0
  5. package/dist/cjs/constants.js +179 -0
  6. package/dist/cjs/constants.js.map +1 -0
  7. package/dist/cjs/errors.js +129 -0
  8. package/dist/cjs/errors.js.map +1 -0
  9. package/dist/cjs/index.js +37 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/types/account.js +6 -0
  12. package/dist/cjs/types/account.js.map +1 -0
  13. package/dist/cjs/types/analysis.js +6 -0
  14. package/dist/cjs/types/analysis.js.map +1 -0
  15. package/dist/cjs/types/guidance.js +3 -0
  16. package/dist/cjs/types/guidance.js.map +1 -0
  17. package/dist/cjs/types/index.js +28 -0
  18. package/dist/cjs/types/index.js.map +1 -0
  19. package/dist/cjs/types/media.js +6 -0
  20. package/dist/cjs/types/media.js.map +1 -0
  21. package/dist/cjs/types/policy.js +6 -0
  22. package/dist/cjs/types/policy.js.map +1 -0
  23. package/dist/cjs/types/pricing.js +6 -0
  24. package/dist/cjs/types/pricing.js.map +1 -0
  25. package/dist/cjs/types/reports.js +3 -0
  26. package/dist/cjs/types/reports.js.map +1 -0
  27. package/dist/cjs/types/safety.js +7 -0
  28. package/dist/cjs/types/safety.js.map +1 -0
  29. package/dist/cjs/types/voice-stream.js +6 -0
  30. package/dist/cjs/types/voice-stream.js.map +1 -0
  31. package/dist/cjs/types/webhooks.js +6 -0
  32. package/dist/cjs/types/webhooks.js.map +1 -0
  33. package/dist/cjs/utils/retry.js +64 -0
  34. package/dist/cjs/utils/retry.js.map +1 -0
  35. package/dist/cjs/voice-stream.js +184 -0
  36. package/dist/cjs/voice-stream.js.map +1 -0
  37. package/dist/client.d.ts +643 -0
  38. package/dist/client.d.ts.map +1 -0
  39. package/dist/client.js +1280 -0
  40. package/dist/client.js.map +1 -0
  41. package/dist/constants.d.ts +141 -0
  42. package/dist/constants.d.ts.map +1 -0
  43. package/dist/constants.js +176 -0
  44. package/dist/constants.js.map +1 -0
  45. package/dist/errors.d.ts +81 -0
  46. package/dist/errors.d.ts.map +1 -0
  47. package/dist/errors.js +116 -0
  48. package/dist/errors.js.map +1 -0
  49. package/dist/index.d.ts +6 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +9 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/types/account.d.ts +161 -0
  54. package/dist/types/account.d.ts.map +1 -0
  55. package/dist/types/account.js +5 -0
  56. package/dist/types/account.js.map +1 -0
  57. package/dist/types/analysis.d.ts +41 -0
  58. package/dist/types/analysis.d.ts.map +1 -0
  59. package/dist/types/analysis.js +4 -0
  60. package/dist/types/analysis.js.map +1 -0
  61. package/dist/types/guidance.d.ts +35 -0
  62. package/dist/types/guidance.d.ts.map +1 -0
  63. package/dist/types/guidance.js +2 -0
  64. package/dist/types/guidance.js.map +1 -0
  65. package/dist/types/index.d.ts +231 -0
  66. package/dist/types/index.d.ts.map +1 -0
  67. package/dist/types/index.js +12 -0
  68. package/dist/types/index.js.map +1 -0
  69. package/dist/types/media.d.ts +121 -0
  70. package/dist/types/media.d.ts.map +1 -0
  71. package/dist/types/media.js +4 -0
  72. package/dist/types/media.js.map +1 -0
  73. package/dist/types/policy.d.ts +54 -0
  74. package/dist/types/policy.d.ts.map +1 -0
  75. package/dist/types/policy.js +5 -0
  76. package/dist/types/policy.js.map +1 -0
  77. package/dist/types/pricing.d.ts +53 -0
  78. package/dist/types/pricing.d.ts.map +1 -0
  79. package/dist/types/pricing.js +5 -0
  80. package/dist/types/pricing.js.map +1 -0
  81. package/dist/types/reports.d.ts +44 -0
  82. package/dist/types/reports.d.ts.map +1 -0
  83. package/dist/types/reports.js +2 -0
  84. package/dist/types/reports.js.map +1 -0
  85. package/dist/types/safety.d.ts +151 -0
  86. package/dist/types/safety.d.ts.map +1 -0
  87. package/dist/types/safety.js +4 -0
  88. package/dist/types/safety.js.map +1 -0
  89. package/dist/types/voice-stream.d.ts +97 -0
  90. package/dist/types/voice-stream.d.ts.map +1 -0
  91. package/dist/types/voice-stream.js +5 -0
  92. package/dist/types/voice-stream.js.map +1 -0
  93. package/dist/types/webhooks.d.ts +110 -0
  94. package/dist/types/webhooks.d.ts.map +1 -0
  95. package/dist/types/webhooks.js +4 -0
  96. package/dist/types/webhooks.js.map +1 -0
  97. package/dist/utils/retry.d.ts +17 -0
  98. package/dist/utils/retry.d.ts.map +1 -0
  99. package/dist/utils/retry.js +61 -0
  100. package/dist/utils/retry.js.map +1 -0
  101. package/dist/voice-stream.d.ts +16 -0
  102. package/dist/voice-stream.d.ts.map +1 -0
  103. package/dist/voice-stream.js +148 -0
  104. package/dist/voice-stream.js.map +1 -0
  105. package/package.json +81 -0
@@ -0,0 +1,61 @@
1
+ import { RateLimitError, ServerError, NetworkError, TimeoutError } from '../errors.js';
2
+ const DEFAULT_OPTIONS = {
3
+ maxRetries: 3,
4
+ initialDelay: 1000,
5
+ maxDelay: 30000,
6
+ backoffMultiplier: 2,
7
+ isRetryable: defaultIsRetryable,
8
+ };
9
+ function defaultIsRetryable(error) {
10
+ // Retry on rate limit, server errors, network errors, and timeouts
11
+ if (error instanceof RateLimitError)
12
+ return true;
13
+ if (error instanceof ServerError)
14
+ return true;
15
+ if (error instanceof NetworkError)
16
+ return true;
17
+ if (error instanceof TimeoutError)
18
+ return true;
19
+ // Retry on fetch errors (network issues)
20
+ if (error instanceof TypeError && error.message.includes('fetch'))
21
+ return true;
22
+ return false;
23
+ }
24
+ function sleep(ms) {
25
+ return new Promise((resolve) => setTimeout(resolve, ms));
26
+ }
27
+ function calculateDelay(attempt, options) {
28
+ const delay = options.initialDelay * Math.pow(options.backoffMultiplier, attempt);
29
+ // Add jitter (0-25% of delay)
30
+ const jitter = delay * Math.random() * 0.25;
31
+ return Math.min(delay + jitter, options.maxDelay);
32
+ }
33
+ /**
34
+ * Execute a function with exponential backoff retry
35
+ */
36
+ export async function withRetry(fn, options = {}) {
37
+ const opts = { ...DEFAULT_OPTIONS, ...options };
38
+ let lastError;
39
+ for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
40
+ try {
41
+ return await fn();
42
+ }
43
+ catch (error) {
44
+ lastError = error;
45
+ // Check if we should retry
46
+ if (attempt >= opts.maxRetries || !opts.isRetryable(error)) {
47
+ throw error;
48
+ }
49
+ // Handle rate limit with retry-after header
50
+ if (error instanceof RateLimitError && error.retryAfter) {
51
+ await sleep(error.retryAfter * 1000);
52
+ }
53
+ else {
54
+ const delay = calculateDelay(attempt, opts);
55
+ await sleep(delay);
56
+ }
57
+ }
58
+ }
59
+ throw lastError;
60
+ }
61
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAevF,MAAM,eAAe,GAA2B;IAC5C,UAAU,EAAE,CAAC;IACb,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,KAAK;IACf,iBAAiB,EAAE,CAAC;IACpB,WAAW,EAAE,kBAAkB;CAClC,CAAC;AAEF,SAAS,kBAAkB,CAAC,KAAc;IACtC,mEAAmE;IACnE,IAAI,KAAK,YAAY,cAAc;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,KAAK,YAAY,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,KAAK,YAAY,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/C,yCAAyC;IACzC,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/E,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,OAA+B;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAClF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,EAAoB,EACpB,UAAiC,EAAE;IAEnC,MAAM,IAAI,GAA2B,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IAExE,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QAC1D,IAAI,CAAC;YACD,OAAO,MAAM,EAAE,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,SAAS,GAAG,KAAK,CAAC;YAElB,2BAA2B;YAC3B,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,KAAK,CAAC;YAChB,CAAC;YAED,4CAA4C;YAC5C,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACtD,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5C,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,SAAS,CAAC;AACpB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { VoiceStreamConfig, VoiceStreamHandlers, VoiceStreamSession } from './types/voice-stream.js';
2
+ /**
3
+ * Creates a voice streaming session over WebSocket.
4
+ *
5
+ * Requires the `ws` package to be installed:
6
+ * ```bash
7
+ * npm install ws
8
+ * ```
9
+ *
10
+ * @param apiKey - Tuteliq API key for authentication
11
+ * @param config - Optional session configuration
12
+ * @param handlers - Optional event handler callbacks
13
+ * @returns A VoiceStreamSession for sending audio and controlling the session
14
+ */
15
+ export declare function createVoiceStream(apiKey: string, config?: VoiceStreamConfig, handlers?: VoiceStreamHandlers): VoiceStreamSession;
16
+ //# sourceMappingURL=voice-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-stream.d.ts","sourceRoot":"","sources":["../src/voice-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAGrB,MAAM,yBAAyB,CAAC;AAKjC;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,iBAAiB,EAC1B,QAAQ,CAAC,EAAE,mBAAmB,GAC/B,kBAAkB,CAqJpB"}
@@ -0,0 +1,148 @@
1
+ /** WebSocket URL for voice streaming */
2
+ const VOICE_STREAM_URL = 'wss://api.tuteliq.ai/voice/stream';
3
+ /**
4
+ * Creates a voice streaming session over WebSocket.
5
+ *
6
+ * Requires the `ws` package to be installed:
7
+ * ```bash
8
+ * npm install ws
9
+ * ```
10
+ *
11
+ * @param apiKey - Tuteliq API key for authentication
12
+ * @param config - Optional session configuration
13
+ * @param handlers - Optional event handler callbacks
14
+ * @returns A VoiceStreamSession for sending audio and controlling the session
15
+ */
16
+ export function createVoiceStream(apiKey, config, handlers) {
17
+ let ws = null;
18
+ let sessionId = null;
19
+ let active = false;
20
+ let summaryResolve = null;
21
+ let summaryReject = null;
22
+ // Dynamically import ws
23
+ let WebSocketCtor = null;
24
+ const init = async () => {
25
+ try {
26
+ const wsModule = await import('ws');
27
+ WebSocketCtor = wsModule.default || wsModule.WebSocket;
28
+ }
29
+ catch {
30
+ throw new Error('The "ws" package is required for voice streaming. ' +
31
+ 'Install it with: npm install ws');
32
+ }
33
+ return new Promise((resolve, reject) => {
34
+ ws = new WebSocketCtor(VOICE_STREAM_URL, {
35
+ headers: {
36
+ 'Authorization': `Bearer ${apiKey}`,
37
+ },
38
+ });
39
+ ws.on('open', () => {
40
+ active = true;
41
+ // Send initial config if provided
42
+ if (config) {
43
+ const configMsg = {
44
+ type: 'config',
45
+ interval_seconds: config.intervalSeconds,
46
+ analysis_types: config.analysisTypes,
47
+ context: config.context,
48
+ };
49
+ ws.send(JSON.stringify(configMsg));
50
+ }
51
+ });
52
+ ws.on('message', (data) => {
53
+ try {
54
+ const text = data.toString();
55
+ const event = JSON.parse(text);
56
+ switch (event.type) {
57
+ case 'ready':
58
+ sessionId = event.session_id;
59
+ handlers?.onReady?.(event);
60
+ resolve();
61
+ break;
62
+ case 'transcription':
63
+ handlers?.onTranscription?.(event);
64
+ break;
65
+ case 'alert':
66
+ handlers?.onAlert?.(event);
67
+ break;
68
+ case 'session_summary':
69
+ handlers?.onSessionSummary?.(event);
70
+ summaryResolve?.(event);
71
+ summaryResolve = null;
72
+ summaryReject = null;
73
+ break;
74
+ case 'config_updated':
75
+ handlers?.onConfigUpdated?.(event);
76
+ break;
77
+ case 'error':
78
+ handlers?.onError?.(event);
79
+ break;
80
+ }
81
+ }
82
+ catch {
83
+ // Ignore non-JSON messages (e.g. pong frames)
84
+ }
85
+ });
86
+ ws.on('close', (code, reason) => {
87
+ active = false;
88
+ const reasonStr = reason.toString();
89
+ handlers?.onClose?.(code, reasonStr);
90
+ if (summaryReject) {
91
+ summaryReject(new Error(`Connection closed before session summary (code: ${code})`));
92
+ summaryResolve = null;
93
+ summaryReject = null;
94
+ }
95
+ });
96
+ ws.on('error', (err) => {
97
+ active = false;
98
+ reject(err);
99
+ });
100
+ });
101
+ };
102
+ // Start connection immediately
103
+ const ready = init();
104
+ const session = {
105
+ sendAudio(data) {
106
+ if (!ws || !active) {
107
+ throw new Error('Voice stream is not connected');
108
+ }
109
+ ws.send(data);
110
+ },
111
+ updateConfig(newConfig) {
112
+ if (!ws || !active) {
113
+ throw new Error('Voice stream is not connected');
114
+ }
115
+ const configMsg = {
116
+ type: 'config',
117
+ interval_seconds: newConfig.intervalSeconds,
118
+ analysis_types: newConfig.analysisTypes,
119
+ context: newConfig.context,
120
+ };
121
+ ws.send(JSON.stringify(configMsg));
122
+ },
123
+ async end() {
124
+ await ready;
125
+ if (!ws || !active) {
126
+ throw new Error('Voice stream is not connected');
127
+ }
128
+ return new Promise((resolve, reject) => {
129
+ summaryResolve = resolve;
130
+ summaryReject = reject;
131
+ ws.send(JSON.stringify({ type: 'end' }));
132
+ });
133
+ },
134
+ close() {
135
+ active = false;
136
+ ws?.close();
137
+ ws = null;
138
+ },
139
+ get sessionId() {
140
+ return sessionId;
141
+ },
142
+ get isActive() {
143
+ return active;
144
+ },
145
+ };
146
+ return session;
147
+ }
148
+ //# sourceMappingURL=voice-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-stream.js","sourceRoot":"","sources":["../src/voice-stream.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "@tuteliq/sdk",
3
+ "version": "2.1.0",
4
+ "description": "TypeScript SDK for Tuteliq AI child safety API - Detect bullying, grooming, and unsafe content",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/cjs/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./constants": {
15
+ "import": "./dist/constants.js",
16
+ "require": "./dist/cjs/constants.js",
17
+ "types": "./dist/constants.d.ts"
18
+ },
19
+ "./types": {
20
+ "import": "./dist/types/index.js",
21
+ "require": "./dist/cjs/types/index.js",
22
+ "types": "./dist/types/index.d.ts"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "README.md",
28
+ "LICENSE"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc && tsc -p tsconfig.cjs.json",
32
+ "clean": "rm -rf dist",
33
+ "prepublishOnly": "npm run clean && npm run build",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest"
36
+ },
37
+ "keywords": [
38
+ "tuteliq",
39
+ "child-safety",
40
+ "content-moderation",
41
+ "bullying-detection",
42
+ "grooming-detection",
43
+ "ai",
44
+ "sdk",
45
+ "typescript",
46
+ "parental-control",
47
+ "online-safety"
48
+ ],
49
+ "author": "Tuteliq <hello@tuteliq.ai>",
50
+ "license": "MIT",
51
+ "homepage": "https://tuteliq.ai",
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "https://github.com/Tuteliq/node.git"
55
+ },
56
+ "bugs": {
57
+ "url": "https://github.com/Tuteliq/node/issues",
58
+ "email": "support@tuteliq.ai"
59
+ },
60
+ "peerDependencies": {
61
+ "ws": ">=8.0.0"
62
+ },
63
+ "peerDependenciesMeta": {
64
+ "ws": {
65
+ "optional": true
66
+ }
67
+ },
68
+ "engines": {
69
+ "node": ">=18.0.0"
70
+ },
71
+ "devDependencies": {
72
+ "@types/node": "^25.2.1",
73
+ "@types/ws": "^8.5.0",
74
+ "typescript": "^5.7.2",
75
+ "vitest": "^2.1.8",
76
+ "ws": "^8.18.0"
77
+ },
78
+ "publishConfig": {
79
+ "access": "public"
80
+ }
81
+ }