@nekutima/provili-sdk 0.2.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 (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/core/http-client.d.ts +84 -0
  4. package/dist/core/http-client.d.ts.map +1 -0
  5. package/dist/core/http-client.js +177 -0
  6. package/dist/core/http-client.js.map +1 -0
  7. package/dist/core/index.d.ts +3 -0
  8. package/dist/core/index.d.ts.map +1 -0
  9. package/dist/core/index.js +7 -0
  10. package/dist/core/index.js.map +1 -0
  11. package/dist/core/rate-limiter.d.ts +40 -0
  12. package/dist/core/rate-limiter.d.ts.map +1 -0
  13. package/dist/core/rate-limiter.js +65 -0
  14. package/dist/core/rate-limiter.js.map +1 -0
  15. package/dist/generated/api-types.d.ts +1742 -0
  16. package/dist/generated/api-types.d.ts.map +1 -0
  17. package/dist/generated/api-types.js +7 -0
  18. package/dist/generated/api-types.js.map +1 -0
  19. package/dist/index.d.ts +92 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +129 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/llm-engines/adapters.d.ts +26 -0
  24. package/dist/llm-engines/adapters.d.ts.map +1 -0
  25. package/dist/llm-engines/adapters.js +121 -0
  26. package/dist/llm-engines/adapters.js.map +1 -0
  27. package/dist/llm-engines/client.d.ts +12 -0
  28. package/dist/llm-engines/client.d.ts.map +1 -0
  29. package/dist/llm-engines/client.js +138 -0
  30. package/dist/llm-engines/client.js.map +1 -0
  31. package/dist/llm-engines/descriptors.d.ts +24 -0
  32. package/dist/llm-engines/descriptors.d.ts.map +1 -0
  33. package/dist/llm-engines/descriptors.js +192 -0
  34. package/dist/llm-engines/descriptors.js.map +1 -0
  35. package/dist/llm-engines/endpoint.d.ts +5 -0
  36. package/dist/llm-engines/endpoint.d.ts.map +1 -0
  37. package/dist/llm-engines/endpoint.js +19 -0
  38. package/dist/llm-engines/endpoint.js.map +1 -0
  39. package/dist/llm-engines/errors.d.ts +16 -0
  40. package/dist/llm-engines/errors.d.ts.map +1 -0
  41. package/dist/llm-engines/errors.js +72 -0
  42. package/dist/llm-engines/errors.js.map +1 -0
  43. package/dist/llm-engines/index.d.ts +7 -0
  44. package/dist/llm-engines/index.d.ts.map +1 -0
  45. package/dist/llm-engines/index.js +10 -0
  46. package/dist/llm-engines/index.js.map +1 -0
  47. package/dist/llm-engines/types.d.ts +130 -0
  48. package/dist/llm-engines/types.d.ts.map +1 -0
  49. package/dist/llm-engines/types.js +32 -0
  50. package/dist/llm-engines/types.js.map +1 -0
  51. package/dist/mcp/host.d.ts +13 -0
  52. package/dist/mcp/host.d.ts.map +1 -0
  53. package/dist/mcp/host.js +72 -0
  54. package/dist/mcp/host.js.map +1 -0
  55. package/dist/mcp/index.d.ts +4 -0
  56. package/dist/mcp/index.d.ts.map +1 -0
  57. package/dist/mcp/index.js +7 -0
  58. package/dist/mcp/index.js.map +1 -0
  59. package/dist/mcp/mcp.service.d.ts +21 -0
  60. package/dist/mcp/mcp.service.d.ts.map +1 -0
  61. package/dist/mcp/mcp.service.js +35 -0
  62. package/dist/mcp/mcp.service.js.map +1 -0
  63. package/dist/mcp/types.d.ts +60 -0
  64. package/dist/mcp/types.d.ts.map +1 -0
  65. package/dist/mcp/types.js +7 -0
  66. package/dist/mcp/types.js.map +1 -0
  67. package/dist/models/agent.model.d.ts +62 -0
  68. package/dist/models/agent.model.d.ts.map +1 -0
  69. package/dist/models/agent.model.js +3 -0
  70. package/dist/models/agent.model.js.map +1 -0
  71. package/dist/models/ai-chat.model.d.ts +27 -0
  72. package/dist/models/ai-chat.model.d.ts.map +1 -0
  73. package/dist/models/ai-chat.model.js +3 -0
  74. package/dist/models/ai-chat.model.js.map +1 -0
  75. package/dist/models/api-error.model.d.ts +33 -0
  76. package/dist/models/api-error.model.d.ts.map +1 -0
  77. package/dist/models/api-error.model.js +59 -0
  78. package/dist/models/api-error.model.js.map +1 -0
  79. package/dist/models/api-response.model.d.ts +52 -0
  80. package/dist/models/api-response.model.d.ts.map +1 -0
  81. package/dist/models/api-response.model.js +78 -0
  82. package/dist/models/api-response.model.js.map +1 -0
  83. package/dist/models/auth.model.d.ts +25 -0
  84. package/dist/models/auth.model.d.ts.map +1 -0
  85. package/dist/models/auth.model.js +6 -0
  86. package/dist/models/auth.model.js.map +1 -0
  87. package/dist/models/backup.model.d.ts +34 -0
  88. package/dist/models/backup.model.d.ts.map +1 -0
  89. package/dist/models/backup.model.js +3 -0
  90. package/dist/models/backup.model.js.map +1 -0
  91. package/dist/models/chat.model.d.ts +87 -0
  92. package/dist/models/chat.model.d.ts.map +1 -0
  93. package/dist/models/chat.model.js +7 -0
  94. package/dist/models/chat.model.js.map +1 -0
  95. package/dist/models/file.model.d.ts +50 -0
  96. package/dist/models/file.model.d.ts.map +1 -0
  97. package/dist/models/file.model.js +7 -0
  98. package/dist/models/file.model.js.map +1 -0
  99. package/dist/models/index.d.ts +17 -0
  100. package/dist/models/index.d.ts.map +1 -0
  101. package/dist/models/index.js +20 -0
  102. package/dist/models/index.js.map +1 -0
  103. package/dist/models/knowledge.model.d.ts +63 -0
  104. package/dist/models/knowledge.model.d.ts.map +1 -0
  105. package/dist/models/knowledge.model.js +3 -0
  106. package/dist/models/knowledge.model.js.map +1 -0
  107. package/dist/models/llm-engine.model.d.ts +25 -0
  108. package/dist/models/llm-engine.model.d.ts.map +1 -0
  109. package/dist/models/llm-engine.model.js +3 -0
  110. package/dist/models/llm-engine.model.js.map +1 -0
  111. package/dist/models/prompt.model.d.ts +30 -0
  112. package/dist/models/prompt.model.d.ts.map +1 -0
  113. package/dist/models/prompt.model.js +3 -0
  114. package/dist/models/prompt.model.js.map +1 -0
  115. package/dist/models/role.model.d.ts +19 -0
  116. package/dist/models/role.model.d.ts.map +1 -0
  117. package/dist/models/role.model.js +3 -0
  118. package/dist/models/role.model.js.map +1 -0
  119. package/dist/models/streaming.model.d.ts +27 -0
  120. package/dist/models/streaming.model.d.ts.map +1 -0
  121. package/dist/models/streaming.model.js +3 -0
  122. package/dist/models/streaming.model.js.map +1 -0
  123. package/dist/models/update.model.d.ts +16 -0
  124. package/dist/models/update.model.d.ts.map +1 -0
  125. package/dist/models/update.model.js +3 -0
  126. package/dist/models/update.model.js.map +1 -0
  127. package/dist/models/usb-patch.model.d.ts +13 -0
  128. package/dist/models/usb-patch.model.d.ts.map +1 -0
  129. package/dist/models/usb-patch.model.js +3 -0
  130. package/dist/models/usb-patch.model.js.map +1 -0
  131. package/dist/models/user.model.d.ts +64 -0
  132. package/dist/models/user.model.d.ts.map +1 -0
  133. package/dist/models/user.model.js +3 -0
  134. package/dist/models/user.model.js.map +1 -0
  135. package/dist/services/agent.service.d.ts +45 -0
  136. package/dist/services/agent.service.d.ts.map +1 -0
  137. package/dist/services/agent.service.js +91 -0
  138. package/dist/services/agent.service.js.map +1 -0
  139. package/dist/services/ai-chat.service.d.ts +12 -0
  140. package/dist/services/ai-chat.service.d.ts.map +1 -0
  141. package/dist/services/ai-chat.service.js +116 -0
  142. package/dist/services/ai-chat.service.js.map +1 -0
  143. package/dist/services/auth.service.d.ts +25 -0
  144. package/dist/services/auth.service.d.ts.map +1 -0
  145. package/dist/services/auth.service.js +76 -0
  146. package/dist/services/auth.service.js.map +1 -0
  147. package/dist/services/chat.service.d.ts +90 -0
  148. package/dist/services/chat.service.d.ts.map +1 -0
  149. package/dist/services/chat.service.js +240 -0
  150. package/dist/services/chat.service.js.map +1 -0
  151. package/dist/services/index.d.ts +12 -0
  152. package/dist/services/index.d.ts.map +1 -0
  153. package/dist/services/index.js +16 -0
  154. package/dist/services/index.js.map +1 -0
  155. package/dist/services/knowledge.service.d.ts +18 -0
  156. package/dist/services/knowledge.service.d.ts.map +1 -0
  157. package/dist/services/knowledge.service.js +33 -0
  158. package/dist/services/knowledge.service.js.map +1 -0
  159. package/dist/services/llm-engines.service.d.ts +12 -0
  160. package/dist/services/llm-engines.service.d.ts.map +1 -0
  161. package/dist/services/llm-engines.service.js +26 -0
  162. package/dist/services/llm-engines.service.js.map +1 -0
  163. package/dist/services/prompts.service.d.ts +16 -0
  164. package/dist/services/prompts.service.d.ts.map +1 -0
  165. package/dist/services/prompts.service.js +31 -0
  166. package/dist/services/prompts.service.js.map +1 -0
  167. package/dist/services/role.service.d.ts +12 -0
  168. package/dist/services/role.service.d.ts.map +1 -0
  169. package/dist/services/role.service.js +29 -0
  170. package/dist/services/role.service.js.map +1 -0
  171. package/dist/services/streaming.service.d.ts +18 -0
  172. package/dist/services/streaming.service.d.ts.map +1 -0
  173. package/dist/services/streaming.service.js +103 -0
  174. package/dist/services/streaming.service.js.map +1 -0
  175. package/dist/services/usb-patches.service.d.ts +9 -0
  176. package/dist/services/usb-patches.service.d.ts.map +1 -0
  177. package/dist/services/usb-patches.service.js +16 -0
  178. package/dist/services/usb-patches.service.js.map +1 -0
  179. package/dist/services/user.service.d.ts +15 -0
  180. package/dist/services/user.service.d.ts.map +1 -0
  181. package/dist/services/user.service.js +40 -0
  182. package/dist/services/user.service.js.map +1 -0
  183. package/package.json +93 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Nekutima
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # @nekutima/provili-sdk
2
+
3
+ Nekutima's AI SDK. It provides two things:
4
+
5
+ 1. **LLM Engine access layer** — a vendor-neutral, isomorphic (browser + Node) way to talk to an LLM provider. Configure an engine once and use the same `chat` / `chatStream` / `embed` / `health` surface regardless of vendor.
6
+ 2. **Pro.vi.li platform client** — typed client for the Pro.vi.li backend (chat, sessions, agents, knowledge/RAG, prompts, users, roles, MCP).
7
+
8
+ ## Install
9
+
10
+ ```sh
11
+ npm install @nekutima/provili-sdk
12
+ ```
13
+
14
+ ## LLM Engines
15
+
16
+ ```ts
17
+ import { createEngineClient, validateEngineConfig } from '@nekutima/provili-sdk/llm-engines';
18
+
19
+ const engine = { type: 'deepseek' as const, apiKey: process.env.DEEPSEEK_API_KEY, model: 'deepseek-chat' };
20
+
21
+ const errors = validateEngineConfig(engine); // [] when valid
22
+ if (errors.length) throw new Error(errors.map((e) => e.message).join(', '));
23
+
24
+ const client = createEngineClient(engine);
25
+
26
+ const health = await client.health(); // { ok, latencyMs, category? }
27
+ const answer = await client.chat([{ role: 'user', content: 'Hello' }]);
28
+
29
+ for await (const delta of client.chatStream([{ role: 'user', content: 'Tell me a story' }])) {
30
+ process.stdout.write(delta);
31
+ }
32
+ ```
33
+
34
+ Supported types: `ollama`, `deepseek`, `openai`, `anthropic`, `gemini`, `xai`, `openrouter`, `custom`
35
+ (any OpenAI-compatible endpoint). Each type declares its own minimal configuration via
36
+ `ENGINE_TYPE_DESCRIPTORS`; vendor URL/auth/streaming differences are handled inside the SDK.
37
+
38
+ The layer is isomorphic: it uses the global `fetch` (injectable via `createEngineClient(config, { fetch })`)
39
+ and never touches Node-only APIs, so the same code runs in a browser or on a server.
40
+
41
+ ## Platform client
42
+
43
+ ```ts
44
+ import { createProviliSDK } from '@nekutima/provili-sdk';
45
+
46
+ const sdk = createProviliSDK({ baseURL: 'https://your-provili-host/api' });
47
+ ```
48
+
49
+ ## Building
50
+
51
+ ```sh
52
+ npm run build:sdk # from the repo root
53
+ ```
54
+
55
+ ## License
56
+
57
+ MIT — see [LICENSE](./LICENSE).
@@ -0,0 +1,84 @@
1
+ import { AxiosRequestConfig } from "axios";
2
+ import { AuthConfig } from "../models/auth.model";
3
+ import { RateLimitConfig } from "./rate-limiter";
4
+ export interface ProviliConfig {
5
+ baseURL: string;
6
+ timeout?: number;
7
+ headers?: Record<string, string>;
8
+ withCredentials?: boolean;
9
+ auth?: AuthConfig;
10
+ rateLimit?: RateLimitConfig;
11
+ }
12
+ /**
13
+ * HTTP client for Pro.vi.li SDK
14
+ * Based on Biome SDK patterns with axios integration
15
+ */
16
+ export declare class ProviliHttpClient {
17
+ private config;
18
+ static onAuthExpired: (() => void) | null;
19
+ private readonly axiosInstance;
20
+ private currentAuth?;
21
+ private rateLimiter?;
22
+ /**
23
+ * Get the base URL configured for this client
24
+ */
25
+ get baseURL(): string;
26
+ constructor(config: ProviliConfig);
27
+ /**
28
+ * Perform GET request
29
+ */
30
+ get<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
31
+ /**
32
+ * Perform POST request
33
+ */
34
+ post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>;
35
+ /**
36
+ * Perform PUT request
37
+ */
38
+ put<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>;
39
+ /**
40
+ * Perform PATCH request
41
+ */
42
+ patch<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>;
43
+ /**
44
+ * Perform DELETE request
45
+ */
46
+ delete<T = void>(url: string, config?: AxiosRequestConfig): Promise<T>;
47
+ /**
48
+ * Set default headers
49
+ */
50
+ setHeader(name: string, value: string): void;
51
+ /**
52
+ * Remove default header
53
+ */
54
+ removeHeader(name: string): void;
55
+ /**
56
+ * Set authentication
57
+ */
58
+ setAuth(auth: AuthConfig): void;
59
+ /**
60
+ * Get current authentication config
61
+ */
62
+ getAuth(): AuthConfig | undefined;
63
+ /**
64
+ * Clear authentication
65
+ */
66
+ clearAuth(): void;
67
+ /**
68
+ * Apply current authentication to headers
69
+ */
70
+ private applyAuth;
71
+ /**
72
+ * Get rate limiter status
73
+ */
74
+ getRateLimitStatus(): {
75
+ availableTokens: number;
76
+ maxTokens: number;
77
+ timeUntilNextToken: number;
78
+ } | undefined;
79
+ /**
80
+ * Setup request and response interceptors
81
+ */
82
+ private setupInterceptors;
83
+ }
84
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/core/http-client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,kBAAkB,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAe,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAcd,OAAO,CAAC,MAAM;IAb1B,MAAM,CAAC,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAQ;IAEjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;gBAEmB,MAAM,EAAE,aAAa;IAoBzC;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAKlE;;OAEG;IACG,IAAI,CAAC,CAAC,EACR,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,CAAC,CAAC;IAKb;;OAEG;IACG,GAAG,CAAC,CAAC,EACP,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,CAAC,CAAC;IAKb;;OAEG;IACG,KAAK,CAAC,CAAC,EACT,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,CAAC,CAAC;IAKb;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5E;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK/B;;OAEG;IACH,OAAO,IAAI,UAAU,GAAG,SAAS;IAIjC;;OAEG;IACH,SAAS,IAAI,IAAI;IAMjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAejB;;OAEG;IACH,kBAAkB;;;;;IAIlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAuD5B"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProviliHttpClient = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const rate_limiter_1 = require("./rate-limiter");
7
+ /**
8
+ * HTTP client for Pro.vi.li SDK
9
+ * Based on Biome SDK patterns with axios integration
10
+ */
11
+ class ProviliHttpClient {
12
+ /**
13
+ * Get the base URL configured for this client
14
+ */
15
+ get baseURL() {
16
+ return this.config.baseURL;
17
+ }
18
+ constructor(config) {
19
+ this.config = config;
20
+ this.currentAuth = config.auth;
21
+ if (config.rateLimit) {
22
+ this.rateLimiter = new rate_limiter_1.RateLimiter(config.rateLimit);
23
+ }
24
+ this.axiosInstance = axios_1.default.create({
25
+ baseURL: config.baseURL,
26
+ timeout: config.timeout || 30000,
27
+ headers: {
28
+ ...config.headers,
29
+ },
30
+ withCredentials: config.withCredentials !== undefined ? config.withCredentials : true,
31
+ });
32
+ this.setupInterceptors();
33
+ this.applyAuth();
34
+ }
35
+ /**
36
+ * Perform GET request
37
+ */
38
+ async get(url, config) {
39
+ const response = await this.axiosInstance.get(url, config);
40
+ return response.data;
41
+ }
42
+ /**
43
+ * Perform POST request
44
+ */
45
+ async post(url, data, config) {
46
+ const response = await this.axiosInstance.post(url, data, config);
47
+ return response.data;
48
+ }
49
+ /**
50
+ * Perform PUT request
51
+ */
52
+ async put(url, data, config) {
53
+ const response = await this.axiosInstance.put(url, data, config);
54
+ return response.data;
55
+ }
56
+ /**
57
+ * Perform PATCH request
58
+ */
59
+ async patch(url, data, config) {
60
+ const response = await this.axiosInstance.patch(url, data, config);
61
+ return response.data;
62
+ }
63
+ /**
64
+ * Perform DELETE request
65
+ */
66
+ async delete(url, config) {
67
+ const response = await this.axiosInstance.delete(url, config);
68
+ return response.data;
69
+ }
70
+ /**
71
+ * Set default headers
72
+ */
73
+ setHeader(name, value) {
74
+ this.axiosInstance.defaults.headers.common[name] = value;
75
+ }
76
+ /**
77
+ * Remove default header
78
+ */
79
+ removeHeader(name) {
80
+ delete this.axiosInstance.defaults.headers.common[name];
81
+ }
82
+ /**
83
+ * Set authentication
84
+ */
85
+ setAuth(auth) {
86
+ this.currentAuth = auth;
87
+ this.applyAuth();
88
+ }
89
+ /**
90
+ * Get current authentication config
91
+ */
92
+ getAuth() {
93
+ return this.currentAuth;
94
+ }
95
+ /**
96
+ * Clear authentication
97
+ */
98
+ clearAuth() {
99
+ this.currentAuth = undefined;
100
+ this.removeHeader('Authorization');
101
+ this.removeHeader('X-API-Key');
102
+ }
103
+ /**
104
+ * Apply current authentication to headers
105
+ */
106
+ applyAuth() {
107
+ if (!this.currentAuth) {
108
+ return;
109
+ }
110
+ if (this.currentAuth.method === 'api-key') {
111
+ // Use HTTP Basic auth for API keys
112
+ const credentials = btoa(`${this.currentAuth.apiKey}:`);
113
+ this.setHeader('Authorization', `Basic ${credentials}`);
114
+ }
115
+ else if (this.currentAuth.method === 'jwt') {
116
+ // Use Bearer token for JWT
117
+ this.setHeader('Authorization', `Bearer ${this.currentAuth.token}`);
118
+ }
119
+ }
120
+ /**
121
+ * Get rate limiter status
122
+ */
123
+ getRateLimitStatus() {
124
+ return this.rateLimiter?.getStatus();
125
+ }
126
+ /**
127
+ * Setup request and response interceptors
128
+ */
129
+ setupInterceptors() {
130
+ // Request interceptor
131
+ this.axiosInstance.interceptors.request.use((config) => {
132
+ // Ensure config has headers
133
+ if (!config.headers) {
134
+ config.headers = {};
135
+ }
136
+ // Check rate limit before making request
137
+ if (this.rateLimiter) {
138
+ const canProceed = this.rateLimiter.consumeToken();
139
+ if (!canProceed) {
140
+ const waitTime = this.rateLimiter.getTimeUntilNextToken();
141
+ throw new Error(`Rate limit exceeded. Try again in ${Math.ceil(waitTime / 1000)} seconds.`);
142
+ }
143
+ }
144
+ // Ensure auth headers are set
145
+ if (this.currentAuth) {
146
+ if (this.currentAuth.method === 'api-key') {
147
+ const credentials = btoa(`${this.currentAuth.apiKey}:`);
148
+ config.headers.Authorization = `Basic ${credentials}`;
149
+ }
150
+ else if (this.currentAuth.method === 'jwt') {
151
+ config.headers.Authorization = `Bearer ${this.currentAuth.token}`;
152
+ }
153
+ }
154
+ // Ensure proper content type for non-FormData requests
155
+ if (config.data && !(config.data instanceof FormData)) {
156
+ config.headers['Content-Type'] = 'application/json';
157
+ }
158
+ return config;
159
+ }, (error) => Promise.reject(error));
160
+ // Response interceptor for error handling
161
+ this.axiosInstance.interceptors.response.use((response) => response, (error) => {
162
+ // Handle rate limit responses from server
163
+ if (error.response?.status === 429) {
164
+ // Server rate limit - could implement backoff here
165
+ }
166
+ // Handle common error scenarios
167
+ if (error.response?.status === 401) {
168
+ this.clearAuth();
169
+ ProviliHttpClient.onAuthExpired?.();
170
+ }
171
+ return Promise.reject(error);
172
+ });
173
+ }
174
+ }
175
+ exports.ProviliHttpClient = ProviliHttpClient;
176
+ ProviliHttpClient.onAuthExpired = null;
177
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/core/http-client.ts"],"names":[],"mappings":";;;;AAAA,0DAAiE;AAEjE,iDAA8D;AAW9D;;;GAGG;AACH,MAAa,iBAAiB;IAO1B;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,YAAoB,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QACrC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;QAE/B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;YAChC,OAAO,EAAE;gBACL,GAAG,MAAM,CAAC,OAAO;aACpB;YACD,eAAe,EAAE,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;SACxF,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,MAA2B;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACN,GAAW,EACX,IAAU,EACV,MAA2B;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACL,GAAW,EACX,IAAU,EACV,MAA2B;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACP,GAAW,EACX,IAAU,EACV,MAA2B;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACtE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAW,GAAW,EAAE,MAA2B;QAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,KAAa;QACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAgB;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,SAAS;QACL,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACxC,mCAAmC;YACnC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC3C,2BAA2B;YAC3B,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,kBAAkB;QACd,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,iBAAiB;QACrB,sBAAsB;QACtB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CACvC,CAAC,MAAM,EAAE,EAAE;YACP,4BAA4B;YAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,GAAG,EAAS,CAAC;YAC/B,CAAC;YAED,yCAAyC;YACzC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;gBACnD,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;oBAC1D,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChG,CAAC;YACL,CAAC;YAED,8BAA8B;YAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;oBACxD,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,SAAS,WAAW,EAAE,CAAC;gBAC1D,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBAC3C,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBACtE,CAAC;YACL,CAAC;YAED,uDAAuD;YACvD,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,YAAY,QAAQ,CAAC,EAAE,CAAC;gBACpD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;YACxD,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CACnC,CAAC;QAEF,0CAA0C;QAC1C,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACxC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAK,EAAE,EAAE;YACN,0CAA0C;YAC1C,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjC,mDAAmD;YACvD,CAAC;YAED,gCAAgC;YAChC,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,iBAAiB,CAAC,aAAa,EAAE,EAAE,CAAC;YACxC,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CACJ,CAAC;IACN,CAAC;;AA9ML,8CA+MC;AA9MU,+BAAa,GAAwB,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './http-client';
2
+ export * from './rate-limiter';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ // Core infrastructure
5
+ tslib_1.__exportStar(require("./http-client"), exports);
6
+ tslib_1.__exportStar(require("./rate-limiter"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AAAA,sBAAsB;AACtB,wDAA8B;AAC9B,yDAA+B"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Rate limiter for Pro.vi.li SDK
3
+ * Implements token bucket algorithm for request rate limiting
4
+ */
5
+ export interface RateLimitConfig {
6
+ requestsPerMinute: number;
7
+ burstLimit?: number;
8
+ }
9
+ export declare class RateLimiter {
10
+ private tokens;
11
+ private lastRefill;
12
+ private readonly maxTokens;
13
+ private readonly refillRate;
14
+ constructor(config: RateLimitConfig);
15
+ /**
16
+ * Check if a request can be made
17
+ */
18
+ canMakeRequest(): boolean;
19
+ /**
20
+ * Consume a token for a request
21
+ */
22
+ consumeToken(): boolean;
23
+ /**
24
+ * Get time until next token is available (in milliseconds)
25
+ */
26
+ getTimeUntilNextToken(): number;
27
+ /**
28
+ * Refill tokens based on elapsed time
29
+ */
30
+ private refillTokens;
31
+ /**
32
+ * Get current status
33
+ */
34
+ getStatus(): {
35
+ availableTokens: number;
36
+ maxTokens: number;
37
+ timeUntilNextToken: number;
38
+ };
39
+ }
40
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/core/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,eAAe;IAOnC;;OAEG;IACH,cAAc,IAAI,OAAO;IAKzB;;OAEG;IACH,YAAY,IAAI,OAAO;IAQvB;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAQ/B;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,SAAS;;;;;CAQZ"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * Rate limiter for Pro.vi.li SDK
4
+ * Implements token bucket algorithm for request rate limiting
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RateLimiter = void 0;
8
+ class RateLimiter {
9
+ constructor(config) {
10
+ this.maxTokens = config.burstLimit || config.requestsPerMinute;
11
+ this.tokens = this.maxTokens;
12
+ this.lastRefill = Date.now();
13
+ this.refillRate = config.requestsPerMinute / 60000; // tokens per millisecond
14
+ }
15
+ /**
16
+ * Check if a request can be made
17
+ */
18
+ canMakeRequest() {
19
+ this.refillTokens();
20
+ return this.tokens >= 1;
21
+ }
22
+ /**
23
+ * Consume a token for a request
24
+ */
25
+ consumeToken() {
26
+ if (!this.canMakeRequest()) {
27
+ return false;
28
+ }
29
+ this.tokens -= 1;
30
+ return true;
31
+ }
32
+ /**
33
+ * Get time until next token is available (in milliseconds)
34
+ */
35
+ getTimeUntilNextToken() {
36
+ if (this.tokens >= 1) {
37
+ return 0;
38
+ }
39
+ const tokensNeeded = 1 - this.tokens;
40
+ return tokensNeeded / this.refillRate;
41
+ }
42
+ /**
43
+ * Refill tokens based on elapsed time
44
+ */
45
+ refillTokens() {
46
+ const now = Date.now();
47
+ const elapsed = now - this.lastRefill;
48
+ const tokensToAdd = elapsed * this.refillRate;
49
+ this.tokens = Math.min(this.maxTokens, this.tokens + tokensToAdd);
50
+ this.lastRefill = now;
51
+ }
52
+ /**
53
+ * Get current status
54
+ */
55
+ getStatus() {
56
+ this.refillTokens();
57
+ return {
58
+ availableTokens: Math.floor(this.tokens),
59
+ maxTokens: this.maxTokens,
60
+ timeUntilNextToken: this.getTimeUntilNextToken()
61
+ };
62
+ }
63
+ }
64
+ exports.RateLimiter = RateLimiter;
65
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/core/rate-limiter.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAOH,MAAa,WAAW;IAMpB,YAAY,MAAuB;QAC/B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,iBAAiB,CAAC;QAC/D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC,yBAAyB;IACjF,CAAC;IAED;;OAEG;IACH,cAAc;QACV,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,YAAY;QACR,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,qBAAqB;QACjB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,OAAO,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,YAAY;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QACtC,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAE9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,SAAS;QACL,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO;YACH,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YACxC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,EAAE;SACnD,CAAC;IACN,CAAC;CACJ;AAlED,kCAkEC"}