@wopr-network/platform-core 1.12.2 → 1.13.1

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 (123) hide show
  1. package/dist/api/routes/activity.d.ts +9 -0
  2. package/dist/api/routes/activity.js +68 -0
  3. package/dist/api/routes/admin-audit-helper.d.ts +7 -0
  4. package/dist/api/routes/admin-audit-helper.js +13 -0
  5. package/dist/api/routes/admin-audit.d.ts +13 -0
  6. package/dist/api/routes/admin-audit.js +61 -0
  7. package/dist/api/routes/admin-backups.d.ts +19 -0
  8. package/dist/api/routes/admin-backups.js +116 -0
  9. package/dist/api/routes/admin-compliance.d.ts +9 -0
  10. package/dist/api/routes/admin-compliance.js +27 -0
  11. package/dist/api/routes/admin-credits.d.ts +9 -0
  12. package/dist/api/routes/admin-credits.js +255 -0
  13. package/dist/api/routes/admin-gpu.d.ts +46 -0
  14. package/dist/api/routes/admin-gpu.js +140 -0
  15. package/dist/api/routes/admin-inference.d.ts +16 -0
  16. package/dist/api/routes/admin-inference.js +98 -0
  17. package/dist/api/routes/admin-marketplace.d.ts +36 -0
  18. package/dist/api/routes/admin-marketplace.js +181 -0
  19. package/dist/api/routes/admin-migration.d.ts +10 -0
  20. package/dist/api/routes/admin-migration.js +46 -0
  21. package/dist/api/routes/admin-notes.d.ts +34 -0
  22. package/dist/api/routes/admin-notes.js +131 -0
  23. package/dist/api/routes/admin-onboarding.d.ts +7 -0
  24. package/dist/api/routes/admin-onboarding.js +49 -0
  25. package/dist/api/routes/admin-rates.d.ts +9 -0
  26. package/dist/api/routes/admin-rates.js +427 -0
  27. package/dist/api/routes/admin-recovery.d.ts +91 -0
  28. package/dist/api/routes/admin-recovery.js +246 -0
  29. package/dist/api/routes/admin-roles.d.ts +27 -0
  30. package/dist/api/routes/admin-roles.js +157 -0
  31. package/dist/api/routes/audit.d.ts +19 -0
  32. package/dist/api/routes/audit.js +95 -0
  33. package/dist/api/routes/auth.d.ts +19 -0
  34. package/dist/api/routes/auth.js +25 -0
  35. package/dist/api/routes/channel-validate.d.ts +11 -0
  36. package/dist/api/routes/channel-validate.js +148 -0
  37. package/dist/api/routes/fleet-events.d.ts +4 -0
  38. package/dist/api/routes/fleet-events.js +53 -0
  39. package/dist/api/routes/friends-proxy.d.ts +28 -0
  40. package/dist/api/routes/friends-proxy.js +63 -0
  41. package/dist/api/routes/friends-types.d.ts +34 -0
  42. package/dist/api/routes/friends-types.js +28 -0
  43. package/dist/api/routes/health.d.ts +14 -0
  44. package/dist/api/routes/health.js +32 -0
  45. package/dist/api/routes/health.test.d.ts +1 -0
  46. package/dist/api/routes/health.test.js +70 -0
  47. package/dist/api/routes/incident-response.d.ts +9 -0
  48. package/dist/api/routes/incident-response.js +148 -0
  49. package/dist/api/routes/internal-gpu.d.ts +12 -0
  50. package/dist/api/routes/internal-gpu.js +70 -0
  51. package/dist/api/routes/internal-nodes.d.ts +41 -0
  52. package/dist/api/routes/internal-nodes.js +105 -0
  53. package/dist/api/routes/login-history.d.ts +11 -0
  54. package/dist/api/routes/login-history.js +22 -0
  55. package/dist/api/routes/public-pricing.d.ts +9 -0
  56. package/dist/api/routes/public-pricing.js +32 -0
  57. package/dist/api/routes/quota.d.ts +8 -0
  58. package/dist/api/routes/quota.js +113 -0
  59. package/dist/api/routes/secret-audit.d.ts +12 -0
  60. package/dist/api/routes/secret-audit.js +41 -0
  61. package/dist/api/routes/secrets.d.ts +31 -0
  62. package/dist/api/routes/secrets.js +135 -0
  63. package/dist/api/routes/tenant-keys.d.ts +16 -0
  64. package/dist/api/routes/tenant-keys.js +142 -0
  65. package/dist/api/routes/verify-email.d.ts +19 -0
  66. package/dist/api/routes/verify-email.js +70 -0
  67. package/dist/api/routes/ws-auth.d.ts +21 -0
  68. package/dist/api/routes/ws-auth.js +24 -0
  69. package/dist/monetization/adapters/bootstrap.d.ts +2 -2
  70. package/dist/monetization/adapters/bootstrap.js +3 -2
  71. package/dist/monetization/adapters/bootstrap.test.js +11 -7
  72. package/dist/monetization/adapters/embeddings-factory.d.ts +10 -5
  73. package/dist/monetization/adapters/embeddings-factory.js +17 -4
  74. package/dist/monetization/adapters/embeddings-factory.test.js +85 -31
  75. package/dist/monetization/adapters/ollama-embeddings.d.ts +40 -0
  76. package/dist/monetization/adapters/ollama-embeddings.js +76 -0
  77. package/dist/monetization/adapters/ollama-embeddings.test.d.ts +1 -0
  78. package/dist/monetization/adapters/ollama-embeddings.test.js +178 -0
  79. package/dist/monetization/adapters/rate-table.js +9 -3
  80. package/dist/monetization/adapters/rate-table.test.js +22 -1
  81. package/package.json +35 -1
  82. package/src/api/routes/activity.ts +77 -0
  83. package/src/api/routes/admin-audit-helper.ts +18 -0
  84. package/src/api/routes/admin-audit.ts +67 -0
  85. package/src/api/routes/admin-backups.ts +134 -0
  86. package/src/api/routes/admin-compliance.ts +35 -0
  87. package/src/api/routes/admin-credits.ts +280 -0
  88. package/src/api/routes/admin-gpu.ts +202 -0
  89. package/src/api/routes/admin-inference.ts +109 -0
  90. package/src/api/routes/admin-marketplace.ts +233 -0
  91. package/src/api/routes/admin-migration.ts +61 -0
  92. package/src/api/routes/admin-notes.ts +145 -0
  93. package/src/api/routes/admin-onboarding.ts +62 -0
  94. package/src/api/routes/admin-rates.ts +462 -0
  95. package/src/api/routes/admin-recovery.ts +376 -0
  96. package/src/api/routes/admin-roles.ts +205 -0
  97. package/src/api/routes/audit.ts +106 -0
  98. package/src/api/routes/auth.ts +30 -0
  99. package/src/api/routes/channel-validate.ts +182 -0
  100. package/src/api/routes/fleet-events.ts +66 -0
  101. package/src/api/routes/friends-proxy.ts +94 -0
  102. package/src/api/routes/friends-types.ts +37 -0
  103. package/src/api/routes/health.test.ts +80 -0
  104. package/src/api/routes/health.ts +48 -0
  105. package/src/api/routes/incident-response.ts +159 -0
  106. package/src/api/routes/internal-gpu.ts +92 -0
  107. package/src/api/routes/internal-nodes.ts +157 -0
  108. package/src/api/routes/login-history.ts +28 -0
  109. package/src/api/routes/public-pricing.ts +36 -0
  110. package/src/api/routes/quota.ts +136 -0
  111. package/src/api/routes/secret-audit.ts +55 -0
  112. package/src/api/routes/secrets.ts +178 -0
  113. package/src/api/routes/tenant-keys.ts +178 -0
  114. package/src/api/routes/verify-email.ts +102 -0
  115. package/src/api/routes/ws-auth.ts +44 -0
  116. package/src/monetization/adapters/bootstrap.test.ts +11 -7
  117. package/src/monetization/adapters/bootstrap.ts +3 -2
  118. package/src/monetization/adapters/embeddings-factory.test.ts +102 -33
  119. package/src/monetization/adapters/embeddings-factory.ts +24 -7
  120. package/src/monetization/adapters/ollama-embeddings.test.ts +235 -0
  121. package/src/monetization/adapters/ollama-embeddings.ts +120 -0
  122. package/src/monetization/adapters/rate-table.test.ts +32 -1
  123. package/src/monetization/adapters/rate-table.ts +9 -3
@@ -11,6 +11,18 @@ describe("RATE_TABLE", () => {
11
11
  expect(premiumTTS).toEqual(expect.objectContaining({ capability: "tts", tier: "premium" }));
12
12
  });
13
13
 
14
+ it("contains both standard and premium tiers for embeddings", () => {
15
+ const standard = RATE_TABLE.find((e) => e.capability === "embeddings" && e.tier === "standard");
16
+ const premium = RATE_TABLE.find((e) => e.capability === "embeddings" && e.tier === "premium");
17
+
18
+ expect(standard).toEqual(
19
+ expect.objectContaining({ capability: "embeddings", tier: "standard", provider: "ollama-embeddings" }),
20
+ );
21
+ expect(premium).toEqual(
22
+ expect.objectContaining({ capability: "embeddings", tier: "premium", provider: "openrouter" }),
23
+ );
24
+ });
25
+
14
26
  it("contains both standard and premium tiers for text-generation", () => {
15
27
  const standard = RATE_TABLE.find((e) => e.capability === "text-generation" && e.tier === "standard");
16
28
  const premium = RATE_TABLE.find((e) => e.capability === "text-generation" && e.tier === "premium");
@@ -52,7 +64,10 @@ describe("RATE_TABLE", () => {
52
64
 
53
65
  for (const entry of standardEntries) {
54
66
  // Self-hosted providers include "self-hosted-" prefix or are known self-hosted names
55
- const isSelfHosted = entry.provider.startsWith("self-hosted-") || entry.provider === "chatterbox-tts";
67
+ const isSelfHosted =
68
+ entry.provider.startsWith("self-hosted-") ||
69
+ entry.provider === "chatterbox-tts" ||
70
+ entry.provider === "ollama-embeddings";
56
71
  expect(isSelfHosted).toBe(true);
57
72
  }
58
73
  });
@@ -140,6 +155,13 @@ describe("getRatesForCapability", () => {
140
155
  expect(rates.map((r) => r.tier)).toContain("premium");
141
156
  });
142
157
 
158
+ it("returns both standard and premium for embeddings", () => {
159
+ const rates = getRatesForCapability("embeddings");
160
+ expect(rates).toHaveLength(2);
161
+ expect(rates.map((r) => r.tier)).toContain("standard");
162
+ expect(rates.map((r) => r.tier)).toContain("premium");
163
+ });
164
+
143
165
  it("returns premium-only for transcription (no standard tier yet)", () => {
144
166
  const rates = getRatesForCapability("transcription");
145
167
  expect(rates).toHaveLength(1);
@@ -186,6 +208,15 @@ describe("calculateSavings", () => {
186
208
  expect(savings).toBeCloseTo(2.01, 2);
187
209
  });
188
210
 
211
+ it("calculates savings for embeddings at 1M tokens", () => {
212
+ const savings = calculateSavings("embeddings", 1_000_000);
213
+
214
+ // Standard (ollama-embeddings): $0.006 per 1M tokens
215
+ // Premium (openrouter): $0.026 per 1M tokens
216
+ // Savings: $0.020 per 1M tokens
217
+ expect(savings).toBeCloseTo(0.02, 3);
218
+ });
219
+
189
220
  it("returns zero when capability has no standard tier", () => {
190
221
  // Transcription only has premium (deepgram) — no self-hosted whisper yet
191
222
  const savings = calculateSavings("transcription", 1000);
@@ -119,8 +119,15 @@ export const RATE_TABLE: RateEntry[] = [
119
119
  },
120
120
 
121
121
  // Embeddings
122
- // NOTE: No self-hosted embeddings adapter yet — only premium (openrouter) available.
123
- // When self-hosted-embeddings lands, add a standard tier entry here.
122
+ {
123
+ capability: "embeddings",
124
+ tier: "standard",
125
+ provider: "ollama-embeddings",
126
+ costPerUnit: 0.000000005, // Amortized GPU cost per token ($0.005 per 1M tokens)
127
+ billingUnit: "per-token",
128
+ margin: 1.2, // 20% — dashboard default; runtime uses getMargin()
129
+ effectivePrice: 0.000000006, // = costPerUnit * margin ($0.006 per 1M tokens)
130
+ },
124
131
  {
125
132
  capability: "embeddings",
126
133
  tier: "premium",
@@ -157,7 +164,6 @@ export const RATE_TABLE: RateEntry[] = [
157
164
 
158
165
  // Future self-hosted adapters will add more entries here:
159
166
  // - transcription: self-hosted-whisper (standard) — when GPU adapter exists
160
- // - embeddings: self-hosted-embeddings (standard) — when GPU adapter exists
161
167
  // - image-generation: self-hosted-sdxl (standard) — when GPU adapter exists
162
168
  ];
163
169