@revenium/perplexity 2.0.4 → 2.0.5

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 (205) hide show
  1. package/CHANGELOG.md +32 -33
  2. package/README.md +120 -101
  3. package/SECURITY.md +34 -0
  4. package/dist/cjs/constants/models.js +38 -0
  5. package/dist/cjs/constants/models.js.map +1 -0
  6. package/dist/cjs/core/client/index.js +13 -0
  7. package/dist/cjs/core/client/index.js.map +1 -0
  8. package/dist/cjs/core/client/manager.js +85 -0
  9. package/dist/cjs/core/client/manager.js.map +1 -0
  10. package/dist/cjs/core/config/index.js +21 -0
  11. package/dist/cjs/core/config/index.js.map +1 -0
  12. package/dist/cjs/core/config/loader.js +48 -0
  13. package/dist/cjs/core/config/loader.js.map +1 -0
  14. package/dist/cjs/core/config/manager.js +77 -0
  15. package/dist/cjs/core/config/manager.js.map +1 -0
  16. package/dist/cjs/core/config/validator.js +45 -0
  17. package/dist/cjs/core/config/validator.js.map +1 -0
  18. package/dist/cjs/core/middleware/index.js +14 -0
  19. package/dist/cjs/core/middleware/index.js.map +1 -0
  20. package/dist/cjs/core/middleware/interfaces.js +94 -0
  21. package/dist/cjs/core/middleware/interfaces.js.map +1 -0
  22. package/dist/cjs/core/middleware/revenium-client.js +44 -0
  23. package/dist/cjs/core/middleware/revenium-client.js.map +1 -0
  24. package/dist/cjs/core/middleware/streaming-wrapper.js +80 -0
  25. package/dist/cjs/core/middleware/streaming-wrapper.js.map +1 -0
  26. package/dist/cjs/core/providers/detector.js +38 -0
  27. package/dist/cjs/core/providers/detector.js.map +1 -0
  28. package/dist/cjs/core/providers/index.js +14 -0
  29. package/dist/cjs/core/providers/index.js.map +1 -0
  30. package/dist/cjs/core/tracking/api-client.js +67 -0
  31. package/dist/cjs/core/tracking/api-client.js.map +1 -0
  32. package/dist/cjs/core/tracking/index.js +21 -0
  33. package/dist/cjs/core/tracking/index.js.map +1 -0
  34. package/dist/cjs/core/tracking/payload-builder.js +95 -0
  35. package/dist/cjs/core/tracking/payload-builder.js.map +1 -0
  36. package/dist/cjs/core/tracking/usage-tracker.js +83 -0
  37. package/dist/cjs/core/tracking/usage-tracker.js.map +1 -0
  38. package/dist/cjs/index.js +60 -59
  39. package/dist/cjs/index.js.map +1 -1
  40. package/dist/cjs/types/function-parameters.js +14 -0
  41. package/dist/cjs/types/function-parameters.js.map +1 -0
  42. package/dist/cjs/types/index.js +20 -1
  43. package/dist/cjs/types/index.js.map +1 -1
  44. package/dist/cjs/utils/constants.js +20 -0
  45. package/dist/cjs/utils/constants.js.map +1 -0
  46. package/dist/cjs/utils/error-handler.js +194 -0
  47. package/dist/cjs/utils/error-handler.js.map +1 -0
  48. package/dist/cjs/utils/metadata-builder.js +191 -0
  49. package/dist/cjs/utils/metadata-builder.js.map +1 -0
  50. package/dist/cjs/utils/stop-reason-mapper.js +74 -0
  51. package/dist/cjs/utils/stop-reason-mapper.js.map +1 -0
  52. package/dist/cjs/utils/transaction-id.js +19 -0
  53. package/dist/cjs/utils/transaction-id.js.map +1 -0
  54. package/dist/cjs/utils/url-builder.js +57 -0
  55. package/dist/cjs/utils/url-builder.js.map +1 -0
  56. package/dist/esm/constants/models.js +35 -0
  57. package/dist/esm/constants/models.js.map +1 -0
  58. package/dist/esm/core/client/index.js +5 -0
  59. package/dist/esm/core/client/index.js.map +1 -0
  60. package/dist/esm/core/client/manager.js +78 -0
  61. package/dist/esm/core/client/manager.js.map +1 -0
  62. package/dist/esm/core/config/index.js +11 -0
  63. package/dist/esm/core/config/index.js.map +1 -0
  64. package/dist/esm/core/config/loader.js +45 -0
  65. package/dist/esm/core/config/loader.js.map +1 -0
  66. package/dist/esm/core/config/manager.js +70 -0
  67. package/dist/esm/core/config/manager.js.map +1 -0
  68. package/dist/esm/core/config/validator.js +42 -0
  69. package/dist/esm/core/config/validator.js.map +1 -0
  70. package/dist/esm/core/middleware/index.js +7 -0
  71. package/dist/esm/core/middleware/index.js.map +1 -0
  72. package/dist/esm/core/middleware/interfaces.js +89 -0
  73. package/dist/esm/core/middleware/interfaces.js.map +1 -0
  74. package/dist/esm/core/middleware/revenium-client.js +37 -0
  75. package/dist/esm/core/middleware/revenium-client.js.map +1 -0
  76. package/dist/esm/core/middleware/streaming-wrapper.js +76 -0
  77. package/dist/esm/core/middleware/streaming-wrapper.js.map +1 -0
  78. package/dist/esm/core/providers/detector.js +34 -0
  79. package/dist/esm/core/providers/detector.js.map +1 -0
  80. package/dist/esm/core/providers/index.js +9 -0
  81. package/dist/esm/core/providers/index.js.map +1 -0
  82. package/dist/esm/core/tracking/api-client.js +64 -0
  83. package/dist/esm/core/tracking/api-client.js.map +1 -0
  84. package/dist/esm/core/tracking/index.js +13 -0
  85. package/dist/esm/core/tracking/index.js.map +1 -0
  86. package/dist/esm/core/tracking/payload-builder.js +92 -0
  87. package/dist/esm/core/tracking/payload-builder.js.map +1 -0
  88. package/dist/esm/core/tracking/usage-tracker.js +79 -0
  89. package/dist/esm/core/tracking/usage-tracker.js.map +1 -0
  90. package/dist/esm/index.js +46 -39
  91. package/dist/esm/index.js.map +1 -1
  92. package/dist/esm/types/function-parameters.js +13 -0
  93. package/dist/esm/types/function-parameters.js.map +1 -0
  94. package/dist/esm/types/index.js +6 -2
  95. package/dist/esm/types/index.js.map +1 -1
  96. package/dist/esm/utils/constants.js +17 -0
  97. package/dist/esm/utils/constants.js.map +1 -0
  98. package/dist/esm/utils/error-handler.js +182 -0
  99. package/dist/esm/utils/error-handler.js.map +1 -0
  100. package/dist/esm/utils/metadata-builder.js +183 -0
  101. package/dist/esm/utils/metadata-builder.js.map +1 -0
  102. package/dist/esm/utils/stop-reason-mapper.js +69 -0
  103. package/dist/esm/utils/stop-reason-mapper.js.map +1 -0
  104. package/dist/esm/utils/transaction-id.js +16 -0
  105. package/dist/esm/utils/transaction-id.js.map +1 -0
  106. package/dist/esm/utils/url-builder.js +53 -0
  107. package/dist/esm/utils/url-builder.js.map +1 -0
  108. package/dist/types/constants/models.d.ts +39 -0
  109. package/dist/types/constants/models.d.ts.map +1 -0
  110. package/dist/types/core/client/index.d.ts +5 -0
  111. package/dist/types/core/client/index.d.ts.map +1 -0
  112. package/dist/types/core/client/manager.d.ts +44 -0
  113. package/dist/types/core/client/manager.d.ts.map +1 -0
  114. package/dist/types/core/config/index.d.ts +10 -0
  115. package/dist/types/core/config/index.d.ts.map +1 -0
  116. package/dist/types/core/config/loader.d.ts +13 -0
  117. package/dist/types/core/config/loader.d.ts.map +1 -0
  118. package/dist/types/core/config/manager.d.ts +28 -0
  119. package/dist/types/core/config/manager.d.ts.map +1 -0
  120. package/dist/types/core/config/validator.d.ts +12 -0
  121. package/dist/types/core/config/validator.d.ts.map +1 -0
  122. package/dist/types/core/middleware/index.d.ts +7 -0
  123. package/dist/types/core/middleware/index.d.ts.map +1 -0
  124. package/dist/types/core/middleware/interfaces.d.ts +35 -0
  125. package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
  126. package/dist/types/core/middleware/revenium-client.d.ts +25 -0
  127. package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
  128. package/dist/types/core/middleware/streaming-wrapper.d.ts +21 -0
  129. package/dist/types/core/middleware/streaming-wrapper.d.ts.map +1 -0
  130. package/dist/types/core/providers/detector.d.ts +24 -0
  131. package/dist/types/core/providers/detector.d.ts.map +1 -0
  132. package/dist/types/core/providers/index.d.ts +8 -0
  133. package/dist/types/core/providers/index.d.ts.map +1 -0
  134. package/dist/types/core/tracking/api-client.d.ts +17 -0
  135. package/dist/types/core/tracking/api-client.d.ts.map +1 -0
  136. package/dist/types/core/tracking/index.d.ts +11 -0
  137. package/dist/types/core/tracking/index.d.ts.map +1 -0
  138. package/dist/types/core/tracking/payload-builder.d.ts +24 -0
  139. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -0
  140. package/dist/types/core/tracking/usage-tracker.d.ts +30 -0
  141. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -0
  142. package/dist/types/index.d.ts +56 -27
  143. package/dist/types/index.d.ts.map +1 -1
  144. package/dist/types/types/function-parameters.d.ts +185 -0
  145. package/dist/types/types/function-parameters.d.ts.map +1 -0
  146. package/dist/types/types/index.d.ts +108 -129
  147. package/dist/types/types/index.d.ts.map +1 -1
  148. package/dist/types/utils/constants.d.ts +9 -0
  149. package/dist/types/utils/constants.d.ts.map +1 -0
  150. package/dist/types/utils/error-handler.d.ts +95 -0
  151. package/dist/types/utils/error-handler.d.ts.map +1 -0
  152. package/dist/types/utils/metadata-builder.d.ts +65 -0
  153. package/dist/types/utils/metadata-builder.d.ts.map +1 -0
  154. package/dist/types/utils/stop-reason-mapper.d.ts +29 -0
  155. package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -0
  156. package/dist/types/utils/transaction-id.d.ts +14 -0
  157. package/dist/types/utils/transaction-id.d.ts.map +1 -0
  158. package/dist/types/utils/url-builder.d.ts +22 -0
  159. package/dist/types/utils/url-builder.d.ts.map +1 -0
  160. package/examples/README.md +124 -220
  161. package/examples/advanced.ts +123 -0
  162. package/examples/basic.ts +32 -37
  163. package/examples/getting_started.ts +26 -49
  164. package/examples/metadata.ts +51 -48
  165. package/examples/stream.ts +53 -0
  166. package/package.json +9 -10
  167. package/dist/cjs/constants.js +0 -70
  168. package/dist/cjs/constants.js.map +0 -1
  169. package/dist/cjs/core/config/perplexity-config.js +0 -45
  170. package/dist/cjs/core/config/perplexity-config.js.map +0 -1
  171. package/dist/cjs/core/config/revenium-config.js +0 -80
  172. package/dist/cjs/core/config/revenium-config.js.map +0 -1
  173. package/dist/cjs/core/tracking/metering.js +0 -211
  174. package/dist/cjs/core/tracking/metering.js.map +0 -1
  175. package/dist/cjs/core/wrapper/perplexity-client.js +0 -187
  176. package/dist/cjs/core/wrapper/perplexity-client.js.map +0 -1
  177. package/dist/cjs/utils/logger.js +0 -23
  178. package/dist/cjs/utils/logger.js.map +0 -1
  179. package/dist/esm/constants.js +0 -67
  180. package/dist/esm/constants.js.map +0 -1
  181. package/dist/esm/core/config/perplexity-config.js +0 -40
  182. package/dist/esm/core/config/perplexity-config.js.map +0 -1
  183. package/dist/esm/core/config/revenium-config.js +0 -72
  184. package/dist/esm/core/config/revenium-config.js.map +0 -1
  185. package/dist/esm/core/tracking/metering.js +0 -206
  186. package/dist/esm/core/tracking/metering.js.map +0 -1
  187. package/dist/esm/core/wrapper/perplexity-client.js +0 -180
  188. package/dist/esm/core/wrapper/perplexity-client.js.map +0 -1
  189. package/dist/esm/utils/logger.js +0 -20
  190. package/dist/esm/utils/logger.js.map +0 -1
  191. package/dist/types/constants.d.ts +0 -67
  192. package/dist/types/constants.d.ts.map +0 -1
  193. package/dist/types/core/config/perplexity-config.d.ts +0 -24
  194. package/dist/types/core/config/perplexity-config.d.ts.map +0 -1
  195. package/dist/types/core/config/revenium-config.d.ts +0 -37
  196. package/dist/types/core/config/revenium-config.d.ts.map +0 -1
  197. package/dist/types/core/tracking/metering.d.ts +0 -31
  198. package/dist/types/core/tracking/metering.d.ts.map +0 -1
  199. package/dist/types/core/wrapper/perplexity-client.d.ts +0 -32
  200. package/dist/types/core/wrapper/perplexity-client.d.ts.map +0 -1
  201. package/dist/types/utils/logger.d.ts +0 -10
  202. package/dist/types/utils/logger.d.ts.map +0 -1
  203. package/examples/advanced-features.ts +0 -148
  204. package/examples/chat.ts +0 -73
  205. package/examples/streaming.ts +0 -50
package/examples/basic.ts CHANGED
@@ -1,50 +1,45 @@
1
1
  /**
2
- * Basic Chat Completion Example
3
- *
4
- * This example demonstrates how to use the Perplexity middleware
5
- * to create a simple chat completion with Revenium metering.
2
+ * Basic Example
3
+ * Demonstrates basic usage of Revenium Perplexity middleware.
6
4
  */
7
5
 
8
- import {
9
- initializeReveniumFromEnv,
10
- initializePerplexityFromEnv,
11
- createChatCompletion,
12
- UsageMetadata,
13
- } from "../src";
6
+ import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
14
7
 
15
8
  async function main() {
16
- // Initialize configurations from environment variables
17
- initializeReveniumFromEnv();
18
- initializePerplexityFromEnv();
9
+ // Initialize middleware
10
+ Initialize();
19
11
 
20
- // Create a simple chat completion with basic metadata
21
- const usageMetadata: UsageMetadata = {
22
- subscriber: { id: "user-123" },
23
- traceId: "session-abc",
12
+ // Get client
13
+ const client = GetClient();
14
+ const metadata: UsageMetadata = {
15
+ organizationId: "org-basic-demo",
16
+ productId: "prod-perplexity-basic",
24
17
  };
25
18
 
26
- const result = await createChatCompletion({
27
- messages: [
19
+ // Create chat completion
20
+ const response = await client
21
+ .chat()
22
+ .completions()
23
+ .create(
28
24
  {
29
- role: "user",
30
- content: "What is the capital of France? Answer in one sentence.",
25
+ model: "sonar-pro",
26
+ messages: [
27
+ {
28
+ role: "user",
29
+ content:
30
+ "Say hello in Spanish and explain why Spanish is a beautiful language in 2-3 sentences.",
31
+ },
32
+ ],
33
+ max_tokens: 1000,
31
34
  },
32
- ],
33
- model: "sonar-pro",
34
- maxTokens: 100,
35
- usageMetadata,
36
- });
35
+ metadata
36
+ );
37
37
 
38
- // Display essential results
39
- console.log("\n✓ Chat Completion Successful");
40
- console.log(`Response: ${result.content}`);
41
- console.log(`Model: ${result.model}`);
42
- console.log(
43
- `Tokens Used: ${result.usage.totalTokens} (prompt: ${result.usage.promptTokens}, completion: ${result.usage.completionTokens})`
44
- );
38
+ // Display response
39
+ if (response.choices.length > 0) {
40
+ console.log(`Assistant: ${response.choices[0].message.content}`);
41
+ }
42
+ console.log("\nUsage data sent to Revenium! Check your dashboard");
45
43
  }
46
44
 
47
- main().catch((error) => {
48
- console.error("Error:", error.message);
49
- process.exit(1);
50
- });
45
+ main().catch(console.error);
@@ -1,64 +1,41 @@
1
1
  /**
2
2
  * Getting Started with Revenium Perplexity Middleware
3
3
  *
4
- * This is the simplest possible entry point for new users.
5
- * Shows basic usage with all metadata options documented.
4
+ * This example shows the new Initialize/GetClient pattern.
6
5
  */
7
6
 
8
- import {
9
- initializeReveniumFromEnv,
10
- initializePerplexityFromEnv,
11
- createChatCompletion,
12
- } from "../src";
7
+ import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
13
8
 
14
9
  async function main() {
15
- // Initialize from environment variables (.env file)
16
- initializeReveniumFromEnv();
17
- initializePerplexityFromEnv();
10
+ Initialize();
11
+
12
+ // Get client
13
+ const client = GetClient();
14
+ const metadata: UsageMetadata = {
15
+ organizationId: "org-getting-started",
16
+ productId: "prod-perplexity-getting-started",
17
+ };
18
18
 
19
19
  // Create a simple chat completion
20
- const result = await createChatCompletion({
21
- messages: [
20
+ const response = await client
21
+ .chat()
22
+ .completions()
23
+ .create(
22
24
  {
23
- role: "user",
24
- content: "What is artificial intelligence?",
25
- },
26
- ],
27
- model: "sonar-pro",
28
- maxTokens: 500,
29
-
30
- /* Optional: Add metadata for advanced tracking and analytics
31
- usageMetadata: {
32
- // User identification
33
- subscriber: {
34
- id: 'user-123',
35
- email: 'user@example.com',
36
- credential: {
37
- name: 'api-key-prod',
38
- value: 'key-abc-123'
39
- }
25
+ model: "sonar-pro",
26
+ messages: [
27
+ {
28
+ role: "user",
29
+ content: "What is artificial intelligence?",
30
+ },
31
+ ],
32
+ max_tokens: 500,
40
33
  },
34
+ metadata
35
+ );
41
36
 
42
- // Organization & billing
43
- organizationId: 'my-customers-name',
44
- subscriptionId: 'plan-enterprise-2024',
45
-
46
- // Product & task tracking
47
- productId: 'my-product',
48
- taskType: 'qa',
49
- agent: 'customer-support',
50
-
51
- // Session tracking
52
- traceId: 'session-' + Date.now(),
53
-
54
- // Quality metrics
55
- responseQualityScore: 0.95
56
- }
57
- */
58
- });
59
-
60
- console.log("Response:", result.content);
61
- console.log("\nUsage:", result.usage);
37
+ console.log("Assistant:", response.choices[0]?.message?.content);
38
+ console.log("\nUsage:", response.usage);
62
39
  }
63
40
 
64
41
  main().catch(console.error);
@@ -1,65 +1,68 @@
1
1
  /**
2
- * Custom Metadata Example
3
- *
4
- * This example demonstrates how to pass comprehensive metadata
5
- * for enhanced tracking, analytics, and metering purposes.
6
- *
7
- * For complete metadata options and details, see:
8
- * https://revenium.readme.io/reference/meter_ai_completion
2
+ * Metadata Example
3
+ * Demonstrates advanced metadata usage with Revenium Perplexity middleware.
9
4
  */
10
5
 
11
- import {
12
- initializeReveniumFromEnv,
13
- initializePerplexityFromEnv,
14
- createChatCompletion,
15
- UsageMetadata,
16
- } from "../src";
6
+ import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
17
7
 
18
8
  async function main() {
19
- // Initialize configurations from environment variables
20
- initializeReveniumFromEnv();
21
- initializePerplexityFromEnv();
9
+ // Initialize middleware
10
+ Initialize();
22
11
 
23
- // Create a chat completion with comprehensive metadata
24
- const usageMetadata: UsageMetadata = {
12
+ // Get client
13
+ const client = GetClient();
14
+
15
+ // Optional metadata for advanced reporting, lineage tracking, and cost allocation
16
+ const metadata: UsageMetadata = {
17
+ // Organization & billing
18
+ organizationId: "org-metadata-demo",
19
+ subscriptionId: "plan-premium-2025",
20
+
21
+ // Product & task tracking
22
+ productId: "ai-assistant",
23
+ taskType: "explanation-request",
24
+ agent: "perplexity-metadata-chat-node",
25
+
26
+ // Session tracking
27
+ traceId: "session-" + Date.now(),
28
+
29
+ // Quality metrics
30
+ responseQualityScore: 0.95, // 0.0-1.0 scale
31
+
32
+ // User tracking
25
33
  subscriber: {
26
- id: "user-123",
27
- email: "metadata-user@example.com",
34
+ id: "user-12345",
35
+ email: "developer@company.com",
28
36
  credential: {
29
- name: "api-key",
30
- value: "key-premium-abc123",
37
+ name: "api-key-prod",
38
+ value: "key-abc-123",
31
39
  },
32
40
  },
33
- organizationId: "org-example",
34
- productId: "product-premium",
35
- agent: "calculator-bot-v1",
36
- traceId: "trace-abc-123",
37
41
  };
38
42
 
39
- const result = await createChatCompletion({
40
- messages: [
43
+ const response = await client
44
+ .chat()
45
+ .completions()
46
+ .create(
41
47
  {
42
- role: "user",
43
- content: "What is 2 + 2?",
48
+ model: "sonar-pro",
49
+ messages: [
50
+ {
51
+ role: "user",
52
+ content:
53
+ "Say hello in Spanish and explain why Spanish is a beautiful language in 2-3 sentences.",
54
+ },
55
+ ],
56
+ max_tokens: 1000,
44
57
  },
45
- ],
46
- model: "sonar-pro",
47
- maxTokens: 200,
48
- usageMetadata,
49
- });
58
+ metadata
59
+ );
50
60
 
51
- console.log("\n✓ Chat Completion Successful");
52
- console.log(`Response: ${result.content}`);
53
- console.log(`Model: ${result.model}`);
54
- console.log(
55
- `Tokens Used: ${result.usage.totalTokens} (prompt: ${result.usage.promptTokens}, completion: ${result.usage.completionTokens})`
56
- );
57
- console.log(
58
- "Metadata tracked: subscriber, organization, product, agent, trace"
59
- );
61
+ // Display response
62
+ if (response.choices.length > 0) {
63
+ console.log(`Assistant: ${response.choices[0].message.content}`);
64
+ }
65
+ console.log("\nUsage data sent to Revenium! Check your dashboard");
60
66
  }
61
67
 
62
- main().catch((error) => {
63
- console.error("Error:", error.message);
64
- process.exit(1);
65
- });
68
+ main().catch(console.error);
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Streaming Example with Revenium Perplexity Middleware (New Go-Aligned API)
3
+ *
4
+ * This example shows how to use streaming with the new API.
5
+ */
6
+
7
+ import { Initialize, GetClient } from "@revenium/perplexity";
8
+
9
+ async function main() {
10
+ // Initialize from environment variables
11
+ Initialize();
12
+
13
+ // Get client
14
+ const client = GetClient();
15
+
16
+ console.log("Streaming response:\n");
17
+
18
+ // Create a streaming chat completion
19
+ const stream = await client
20
+ .chat()
21
+ .completions()
22
+ .createStreaming(
23
+ {
24
+ model: "sonar-pro",
25
+ messages: [
26
+ {
27
+ role: "user",
28
+ content: "Write a short poem about AI",
29
+ },
30
+ ],
31
+ max_tokens: 200,
32
+ },
33
+ {
34
+ // Optional metadata
35
+ organizationId: "my-customers-name",
36
+ productId: "my-product",
37
+ subscriber: {
38
+ id: "user-123",
39
+ email: "user@example.com",
40
+ },
41
+ }
42
+ );
43
+
44
+ // Process stream
45
+ for await (const chunk of stream) {
46
+ const content = chunk.choices[0]?.delta?.content || "";
47
+ process.stdout.write(content);
48
+ }
49
+
50
+ console.log("\n\nUsage data sent to Revenium! Check your dashboard");
51
+ }
52
+
53
+ main().catch(console.error);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revenium/perplexity",
3
- "version": "2.0.4",
3
+ "version": "2.0.5",
4
4
  "description": "NodeJS middleware for Perplexity AI API with Revenium metering",
5
5
  "homepage": "https://github.com/revenium/revenium-middleware-perplexity-node#readme",
6
6
  "bugs": {
@@ -25,7 +25,8 @@
25
25
  "examples/",
26
26
  "README.md",
27
27
  "CHANGELOG.md",
28
- "LICENSE"
28
+ "LICENSE",
29
+ "SECURITY.md"
29
30
  ],
30
31
  "scripts": {
31
32
  "clean": "rm -rf dist",
@@ -34,13 +35,12 @@
34
35
  "build:types": "tsc -p tsconfig.types.json",
35
36
  "build": "npm run clean && npm run build:esm && npm run build:cjs && npm run build:types",
36
37
  "prepublishOnly": "npm run build",
37
- "example:getting-started": "tsx examples/getting_started.ts",
38
- "example:basic": "tsx examples/basic.ts",
39
- "example:streaming": "tsx examples/streaming.ts",
40
- "example:chat": "tsx examples/chat.ts",
41
- "example:metadata": "tsx examples/metadata.ts",
42
- "example:advanced": "tsx examples/advanced-features.ts",
43
- "test": "npm run example:getting-started && npm run example:basic && npm run example:streaming && npm run example:chat && npm run example:metadata && npm run example:advanced"
38
+ "example:getting-started": "npx tsx examples/getting_started.ts",
39
+ "example:basic": "npx tsx examples/basic.ts",
40
+ "example:metadata": "npx tsx examples/metadata.ts",
41
+ "example:advanced": "npx tsx examples/advanced.ts",
42
+ "example:stream": "npx tsx examples/stream.ts",
43
+ "test": "npm run example:getting-started && npm run example:stream"
44
44
  },
45
45
  "keywords": [
46
46
  "revenium",
@@ -55,7 +55,6 @@
55
55
  ],
56
56
  "author": "Revenium",
57
57
  "license": "MIT",
58
- "type": "commonjs",
59
58
  "engines": {
60
59
  "node": ">=20.0.0"
61
60
  },
@@ -1,70 +0,0 @@
1
- "use strict";
2
- /**
3
- * Configuration constants for Revenium Perplexity middleware
4
- * Centralizes all magic numbers and default values
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.API_ENDPOINTS = exports.DEFAULT_CONFIG = exports.PERPLEXITY_PATTERNS = exports.MIDDLEWARE_INFO = void 0;
8
- /**
9
- * Middleware identification
10
- *
11
- * Per Revenium API spec (https://revenium.readme.io/reference/meter_ai_completion):
12
- * "middlewareSource: Identifier of the Revenium middleware package or SDK that
13
- * captured and submitted this AI completion metadata. This field is AUTOMATICALLY
14
- * SET by Revenium's middleware packages (e.g., 'revenium-openai-python',
15
- * 'revenium-anthropic-node')."
16
- */
17
- exports.MIDDLEWARE_INFO = {
18
- /** Package name */
19
- NAME: "@revenium/perplexity",
20
- /** Package version */
21
- VERSION: "2.0.4",
22
- /** Full middleware source identifier for API tracking */
23
- SOURCE: "@revenium/perplexity-2.0.4",
24
- };
25
- /**
26
- * Perplexity model patterns and API response mappings
27
- *
28
- * Per Revenium API spec (https://revenium.readme.io/reference/meter_ai_completion):
29
- * stopReason enum: "END", "END_SEQUENCE", "TIMEOUT", "TOKEN_LIMIT",
30
- * "COST_LIMIT", "COMPLETION_LIMIT", "ERROR", "CANCELLED"
31
- *
32
- * We map Perplexity's finish_reason values to these Revenium enums.
33
- * Only provider-reported values are mapped; middleware-level values
34
- * (TIMEOUT, COST_LIMIT, etc.) are not applicable to provider responses.
35
- */
36
- exports.PERPLEXITY_PATTERNS = {
37
- /** Known Perplexity/OpenAI finish reasons */
38
- FINISH_REASONS: {
39
- STOP: "stop",
40
- LENGTH: "length",
41
- TOOL_CALLS: "tool_calls",
42
- CONTENT_FILTER: "content_filter",
43
- FUNCTION_CALL: "function_call",
44
- },
45
- /** Revenium stop reason mappings from Perplexity finish_reason to Revenium enum */
46
- REVENIUM_STOP_REASON_MAP: {
47
- stop: "END",
48
- length: "TOKEN_LIMIT",
49
- tool_calls: "END",
50
- content_filter: "END",
51
- function_call: "END",
52
- },
53
- };
54
- /**
55
- * Default configuration values
56
- */
57
- exports.DEFAULT_CONFIG = {
58
- /** Default Revenium API base URL */
59
- REVENIUM_BASE_URL: "https://api.revenium.ai",
60
- /** Default Perplexity API base URL */
61
- PERPLEXITY_BASE_URL: "https://api.perplexity.ai",
62
- };
63
- /**
64
- * API endpoints
65
- */
66
- exports.API_ENDPOINTS = {
67
- /** Revenium AI completions endpoint */
68
- AI_COMPLETIONS: "/meter/v2/ai/completions",
69
- };
70
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;;;;;GAQG;AACU,QAAA,eAAe,GAAG;IAC7B,mBAAmB;IACnB,IAAI,EAAE,sBAAsB;IAC5B,sBAAsB;IACtB,OAAO,EAAE,OAAO;IAChB,yDAAyD;IACzD,MAAM,EAAE,4BAA4B;CAC5B,CAAC;AAEX;;;;;;;;;;GAUG;AACU,QAAA,mBAAmB,GAAG;IACjC,6CAA6C;IAC7C,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,cAAc,EAAE,gBAAgB;QAChC,aAAa,EAAE,eAAe;KACtB;IAEV,mFAAmF;IACnF,wBAAwB,EAAE;QACxB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;KACZ;CACF,CAAC;AAEX;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,oCAAoC;IACpC,iBAAiB,EAAE,yBAAyB;IAE5C,sCAAsC;IACtC,mBAAmB,EAAE,2BAA2B;CACxC,CAAC;AAEX;;GAEG;AACU,QAAA,aAAa,GAAG;IAC3B,uCAAuC;IACvC,cAAc,EAAE,0BAA0B;CAClC,CAAC"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- /**
3
- * Perplexity Configuration Module
4
- * Manages Perplexity API configuration
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.initializePerplexityFromEnv = initializePerplexityFromEnv;
8
- exports.initializePerplexity = initializePerplexity;
9
- exports.getPerplexityConfig = getPerplexityConfig;
10
- const logger_1 = require("../../utils/logger");
11
- let perplexityConfig = null;
12
- /**
13
- * Initialize Perplexity configuration from environment variables
14
- */
15
- function initializePerplexityFromEnv() {
16
- const apiKey = process.env.PERPLEXITY_API_KEY;
17
- const baseUrl = process.env.PERPLEXITY_API_BASE_URL || "https://api.perplexity.ai";
18
- if (!apiKey) {
19
- throw new Error("PERPLEXITY_API_KEY environment variable is required but not set");
20
- }
21
- perplexityConfig = {
22
- apiKey,
23
- baseUrl,
24
- };
25
- logger_1.logger.info("Perplexity configuration initialized successfully");
26
- return perplexityConfig;
27
- }
28
- /**
29
- * Initialize Perplexity configuration with custom values
30
- */
31
- function initializePerplexity(config) {
32
- perplexityConfig = {
33
- apiKey: config.apiKey,
34
- baseUrl: config.baseUrl || "https://api.perplexity.ai",
35
- };
36
- logger_1.logger.info("Perplexity configuration initialized with custom config");
37
- return perplexityConfig;
38
- }
39
- /**
40
- * Get current Perplexity configuration
41
- */
42
- function getPerplexityConfig() {
43
- return perplexityConfig;
44
- }
45
- //# sourceMappingURL=perplexity-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"perplexity-config.js","sourceRoot":"","sources":["../../../../src/core/config/perplexity-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAcH,kEAkBC;AAKD,oDAWC;AAKD,kDAEC;AArDD,+CAA4C;AAO5C,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAErD;;GAEG;AACH,SAAgB,2BAA2B;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC9C,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,2BAA2B,CAAC;IAErE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,gBAAgB,GAAG;QACjB,MAAM;QACN,OAAO;KACR,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAGpC;IACC,gBAAgB,GAAG;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;KACvD,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -1,80 +0,0 @@
1
- "use strict";
2
- /**
3
- * Revenium Configuration Module
4
- * Manages Revenium metering configuration and initialization
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.initializeReveniumFromEnv = initializeReveniumFromEnv;
8
- exports.initializeRevenium = initializeRevenium;
9
- exports.getReveniumConfig = getReveniumConfig;
10
- exports.isReveniumEnabled = isReveniumEnabled;
11
- exports.disableRevenium = disableRevenium;
12
- exports.enableRevenium = enableRevenium;
13
- const logger_1 = require("../../utils/logger");
14
- let reveniumConfig = null;
15
- /**
16
- * Initialize Revenium configuration from environment variables
17
- */
18
- function initializeReveniumFromEnv() {
19
- const meteringApiKey = process.env.REVENIUM_METERING_API_KEY?.trim().replace(/^["']|["']$/g, "");
20
- const meteringBaseUrl = process.env.REVENIUM_METERING_BASE_URL?.trim().replace(/^["']|["']$/g, "");
21
- if (!meteringApiKey || !meteringBaseUrl) {
22
- logger_1.logger.warn("Revenium metering disabled: Missing REVENIUM_METERING_API_KEY or REVENIUM_METERING_BASE_URL");
23
- reveniumConfig = {
24
- meteringApiKey: "",
25
- meteringBaseUrl: "",
26
- enabled: false,
27
- };
28
- return reveniumConfig;
29
- }
30
- reveniumConfig = {
31
- meteringApiKey,
32
- meteringBaseUrl,
33
- enabled: true,
34
- };
35
- logger_1.logger.info("Revenium configuration initialized successfully");
36
- logger_1.logger.debug(`Metering Base URL: ${meteringBaseUrl}`);
37
- return reveniumConfig;
38
- }
39
- /**
40
- * Initialize Revenium configuration with custom values
41
- */
42
- function initializeRevenium(config) {
43
- reveniumConfig = {
44
- ...config,
45
- enabled: true,
46
- };
47
- logger_1.logger.info("Revenium configuration initialized with custom config");
48
- return reveniumConfig;
49
- }
50
- /**
51
- * Get current Revenium configuration
52
- */
53
- function getReveniumConfig() {
54
- return reveniumConfig;
55
- }
56
- /**
57
- * Check if Revenium is enabled
58
- */
59
- function isReveniumEnabled() {
60
- return reveniumConfig?.enabled ?? false;
61
- }
62
- /**
63
- * Disable Revenium metering
64
- */
65
- function disableRevenium() {
66
- if (reveniumConfig) {
67
- reveniumConfig.enabled = false;
68
- logger_1.logger.info("Revenium metering disabled");
69
- }
70
- }
71
- /**
72
- * Enable Revenium metering
73
- */
74
- function enableRevenium() {
75
- if (reveniumConfig) {
76
- reveniumConfig.enabled = true;
77
- logger_1.logger.info("Revenium metering enabled");
78
- }
79
- }
80
- //# sourceMappingURL=revenium-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"revenium-config.js","sourceRoot":"","sources":["../../../../src/core/config/revenium-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAeH,8DA6BC;AAKD,gDAWC;AAKD,8CAEC;AAKD,8CAEC;AAKD,0CAKC;AAKD,wCAKC;AA5FD,+CAA4C;AAQ5C,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD;;GAEG;AACH,SAAgB,yBAAyB;IACvC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC,OAAO,CAC1E,cAAc,EACd,EAAE,CACH,CAAC;IACF,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,eAAM,CAAC,IAAI,CACT,6FAA6F,CAC9F,CAAC;QACF,cAAc,GAAG;YACf,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,cAAc,GAAG;QACf,cAAc;QACd,eAAe;QACf,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC/D,eAAM,CAAC,KAAK,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAGlC;IACC,cAAc,GAAG;QACf,GAAG,MAAM;QACT,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,cAAc,EAAE,OAAO,IAAI,KAAK,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,eAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc;IAC5B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}