nitrostack 1.0.73 → 1.0.75

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 (181) hide show
  1. package/dist/auth/__tests__/api-key.test.d.ts +2 -0
  2. package/dist/auth/__tests__/api-key.test.d.ts.map +1 -0
  3. package/dist/auth/__tests__/api-key.test.js +136 -0
  4. package/dist/auth/__tests__/api-key.test.js.map +1 -0
  5. package/dist/auth/__tests__/middleware.test.d.ts +2 -0
  6. package/dist/auth/__tests__/middleware.test.d.ts.map +1 -0
  7. package/dist/auth/__tests__/middleware.test.js +186 -0
  8. package/dist/auth/__tests__/middleware.test.js.map +1 -0
  9. package/dist/auth/__tests__/pkce.test.d.ts +2 -0
  10. package/dist/auth/__tests__/pkce.test.d.ts.map +1 -0
  11. package/dist/auth/__tests__/pkce.test.js +110 -0
  12. package/dist/auth/__tests__/pkce.test.js.map +1 -0
  13. package/dist/auth/__tests__/secure-secret.test.d.ts +2 -0
  14. package/dist/auth/__tests__/secure-secret.test.d.ts.map +1 -0
  15. package/dist/auth/__tests__/secure-secret.test.js +42 -0
  16. package/dist/auth/__tests__/secure-secret.test.js.map +1 -0
  17. package/dist/auth/__tests__/simple-jwt.test.d.ts +2 -0
  18. package/dist/auth/__tests__/simple-jwt.test.d.ts.map +1 -0
  19. package/dist/auth/__tests__/simple-jwt.test.js +219 -0
  20. package/dist/auth/__tests__/simple-jwt.test.js.map +1 -0
  21. package/dist/auth/__tests__/token-store.test.d.ts +2 -0
  22. package/dist/auth/__tests__/token-store.test.d.ts.map +1 -0
  23. package/dist/auth/__tests__/token-store.test.js +79 -0
  24. package/dist/auth/__tests__/token-store.test.js.map +1 -0
  25. package/dist/auth/__tests__/token-validation.test.d.ts +2 -0
  26. package/dist/auth/__tests__/token-validation.test.d.ts.map +1 -0
  27. package/dist/auth/__tests__/token-validation.test.js +23 -0
  28. package/dist/auth/__tests__/token-validation.test.js.map +1 -0
  29. package/dist/cli/__tests__/cli-dev.test.d.ts +2 -0
  30. package/dist/cli/__tests__/cli-dev.test.d.ts.map +1 -0
  31. package/dist/cli/__tests__/cli-dev.test.js +83 -0
  32. package/dist/cli/__tests__/cli-dev.test.js.map +1 -0
  33. package/dist/cli/__tests__/cli-start.test.d.ts +2 -0
  34. package/dist/cli/__tests__/cli-start.test.d.ts.map +1 -0
  35. package/dist/cli/__tests__/cli-start.test.js +61 -0
  36. package/dist/cli/__tests__/cli-start.test.js.map +1 -0
  37. package/dist/cli/__tests__/cli.test.d.ts +2 -0
  38. package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
  39. package/dist/cli/__tests__/cli.test.js +73 -0
  40. package/dist/cli/__tests__/cli.test.js.map +1 -0
  41. package/dist/cli/__tests__/commands.test.d.ts +2 -0
  42. package/dist/cli/__tests__/commands.test.d.ts.map +1 -0
  43. package/dist/cli/__tests__/commands.test.js +64 -0
  44. package/dist/cli/__tests__/commands.test.js.map +1 -0
  45. package/dist/cli/commands/install.d.ts +10 -0
  46. package/dist/cli/commands/install.d.ts.map +1 -0
  47. package/dist/cli/commands/install.js +79 -0
  48. package/dist/cli/commands/install.js.map +1 -0
  49. package/dist/cli/index.d.ts +2 -1
  50. package/dist/cli/index.d.ts.map +1 -1
  51. package/dist/cli/index.js +76 -45
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/core/__tests__/core-modules.test.d.ts +2 -0
  54. package/dist/core/__tests__/core-modules.test.d.ts.map +1 -0
  55. package/dist/core/__tests__/core-modules.test.js +36 -0
  56. package/dist/core/__tests__/core-modules.test.js.map +1 -0
  57. package/dist/core/__tests__/errors.test.d.ts +2 -0
  58. package/dist/core/__tests__/errors.test.d.ts.map +1 -0
  59. package/dist/core/__tests__/errors.test.js +109 -0
  60. package/dist/core/__tests__/errors.test.js.map +1 -0
  61. package/dist/core/__tests__/logger.test.d.ts +2 -0
  62. package/dist/core/__tests__/logger.test.d.ts.map +1 -0
  63. package/dist/core/__tests__/logger.test.js +83 -0
  64. package/dist/core/__tests__/logger.test.js.map +1 -0
  65. package/dist/core/__tests__/models.test.d.ts +2 -0
  66. package/dist/core/__tests__/models.test.d.ts.map +1 -0
  67. package/dist/core/__tests__/models.test.js +142 -0
  68. package/dist/core/__tests__/models.test.js.map +1 -0
  69. package/dist/core/__tests__/module.test.d.ts +2 -0
  70. package/dist/core/__tests__/module.test.d.ts.map +1 -0
  71. package/dist/core/__tests__/module.test.js +60 -0
  72. package/dist/core/__tests__/module.test.js.map +1 -0
  73. package/dist/core/__tests__/prompt.test.d.ts +2 -0
  74. package/dist/core/__tests__/prompt.test.d.ts.map +1 -0
  75. package/dist/core/__tests__/prompt.test.js +126 -0
  76. package/dist/core/__tests__/prompt.test.js.map +1 -0
  77. package/dist/core/__tests__/resource.test.d.ts +2 -0
  78. package/dist/core/__tests__/resource.test.d.ts.map +1 -0
  79. package/dist/core/__tests__/resource.test.js +173 -0
  80. package/dist/core/__tests__/resource.test.js.map +1 -0
  81. package/dist/core/__tests__/server.test.d.ts +2 -0
  82. package/dist/core/__tests__/server.test.d.ts.map +1 -0
  83. package/dist/core/__tests__/server.test.js +120 -0
  84. package/dist/core/__tests__/server.test.js.map +1 -0
  85. package/dist/core/__tests__/transports.test.d.ts +2 -0
  86. package/dist/core/__tests__/transports.test.d.ts.map +1 -0
  87. package/dist/core/__tests__/transports.test.js +12 -0
  88. package/dist/core/__tests__/transports.test.js.map +1 -0
  89. package/dist/core/decorators/__tests__/decorators.test.d.ts +2 -0
  90. package/dist/core/decorators/__tests__/decorators.test.d.ts.map +1 -0
  91. package/dist/core/decorators/__tests__/decorators.test.js +103 -0
  92. package/dist/core/decorators/__tests__/decorators.test.js.map +1 -0
  93. package/dist/core/decorators/__tests__/extended-decorators.test.d.ts +2 -0
  94. package/dist/core/decorators/__tests__/extended-decorators.test.d.ts.map +1 -0
  95. package/dist/core/decorators/__tests__/extended-decorators.test.js +194 -0
  96. package/dist/core/decorators/__tests__/extended-decorators.test.js.map +1 -0
  97. package/dist/core/di/__tests__/container.test.d.ts +2 -0
  98. package/dist/core/di/__tests__/container.test.d.ts.map +1 -0
  99. package/dist/core/di/__tests__/container.test.js +88 -0
  100. package/dist/core/di/__tests__/container.test.js.map +1 -0
  101. package/dist/core/events/__tests__/events.test.d.ts +2 -0
  102. package/dist/core/events/__tests__/events.test.d.ts.map +1 -0
  103. package/dist/core/events/__tests__/events.test.js +177 -0
  104. package/dist/core/events/__tests__/events.test.js.map +1 -0
  105. package/dist/core/filters/__tests__/filters.test.d.ts +2 -0
  106. package/dist/core/filters/__tests__/filters.test.d.ts.map +1 -0
  107. package/dist/core/filters/__tests__/filters.test.js +72 -0
  108. package/dist/core/filters/__tests__/filters.test.js.map +1 -0
  109. package/dist/core/guards/__tests__/guards.test.d.ts +2 -0
  110. package/dist/core/guards/__tests__/guards.test.d.ts.map +1 -0
  111. package/dist/core/guards/__tests__/guards.test.js +55 -0
  112. package/dist/core/guards/__tests__/guards.test.js.map +1 -0
  113. package/dist/core/health/__tests__/health.test.d.ts +2 -0
  114. package/dist/core/health/__tests__/health.test.d.ts.map +1 -0
  115. package/dist/core/health/__tests__/health.test.js +31 -0
  116. package/dist/core/health/__tests__/health.test.js.map +1 -0
  117. package/dist/core/interceptors/__tests__/interceptors.test.d.ts +2 -0
  118. package/dist/core/interceptors/__tests__/interceptors.test.d.ts.map +1 -0
  119. package/dist/core/interceptors/__tests__/interceptors.test.js +52 -0
  120. package/dist/core/interceptors/__tests__/interceptors.test.js.map +1 -0
  121. package/dist/core/middleware/__tests__/middleware.test.d.ts +2 -0
  122. package/dist/core/middleware/__tests__/middleware.test.d.ts.map +1 -0
  123. package/dist/core/middleware/__tests__/middleware.test.js +105 -0
  124. package/dist/core/middleware/__tests__/middleware.test.js.map +1 -0
  125. package/dist/core/pipes/__tests__/pipes.test.d.ts +2 -0
  126. package/dist/core/pipes/__tests__/pipes.test.d.ts.map +1 -0
  127. package/dist/core/pipes/__tests__/pipes.test.js +164 -0
  128. package/dist/core/pipes/__tests__/pipes.test.js.map +1 -0
  129. package/dist/core/transports/__tests__/transports.test.d.ts +2 -0
  130. package/dist/core/transports/__tests__/transports.test.d.ts.map +1 -0
  131. package/dist/core/transports/__tests__/transports.test.js +249 -0
  132. package/dist/core/transports/__tests__/transports.test.js.map +1 -0
  133. package/dist/core/widgets/__tests__/registry.test.d.ts +2 -0
  134. package/dist/core/widgets/__tests__/registry.test.d.ts.map +1 -0
  135. package/dist/core/widgets/__tests__/registry.test.js +69 -0
  136. package/dist/core/widgets/__tests__/registry.test.js.map +1 -0
  137. package/dist/testing/__tests__/testing.test.d.ts +2 -0
  138. package/dist/testing/__tests__/testing.test.d.ts.map +1 -0
  139. package/dist/testing/__tests__/testing.test.js +167 -0
  140. package/dist/testing/__tests__/testing.test.js.map +1 -0
  141. package/dist/testing/index.d.ts +0 -6
  142. package/dist/testing/index.d.ts.map +1 -1
  143. package/dist/testing/index.js.map +1 -1
  144. package/dist/ui-next/__tests__/ui-next.test.d.ts +2 -0
  145. package/dist/ui-next/__tests__/ui-next.test.d.ts.map +1 -0
  146. package/dist/ui-next/__tests__/ui-next.test.js +74 -0
  147. package/dist/ui-next/__tests__/ui-next.test.js.map +1 -0
  148. package/dist/widgets/__tests__/utils.test.d.ts +2 -0
  149. package/dist/widgets/__tests__/utils.test.d.ts.map +1 -0
  150. package/dist/widgets/__tests__/utils.test.js +80 -0
  151. package/dist/widgets/__tests__/utils.test.js.map +1 -0
  152. package/dist/widgets/__tests__/widgets.test.d.ts +2 -0
  153. package/dist/widgets/__tests__/widgets.test.d.ts.map +1 -0
  154. package/dist/widgets/__tests__/widgets.test.js +245 -0
  155. package/dist/widgets/__tests__/widgets.test.js.map +1 -0
  156. package/dist/widgets/hooks/__tests__/hooks.test.d.ts +2 -0
  157. package/dist/widgets/hooks/__tests__/hooks.test.d.ts.map +1 -0
  158. package/dist/widgets/hooks/__tests__/hooks.test.js +129 -0
  159. package/dist/widgets/hooks/__tests__/hooks.test.js.map +1 -0
  160. package/dist/widgets/hooks/__tests__/use-widget-state.test.d.ts +2 -0
  161. package/dist/widgets/hooks/__tests__/use-widget-state.test.d.ts.map +1 -0
  162. package/dist/widgets/hooks/__tests__/use-widget-state.test.js +66 -0
  163. package/dist/widgets/hooks/__tests__/use-widget-state.test.js.map +1 -0
  164. package/dist/widgets/runtime/__tests__/widget-polyfill.test.d.ts +2 -0
  165. package/dist/widgets/runtime/__tests__/widget-polyfill.test.d.ts.map +1 -0
  166. package/dist/widgets/runtime/__tests__/widget-polyfill.test.js +66 -0
  167. package/dist/widgets/runtime/__tests__/widget-polyfill.test.js.map +1 -0
  168. package/package.json +6 -2
  169. package/src/studio/app/chat/page.tsx +21 -0
  170. package/src/studio/components/WidgetErrorBoundary.tsx +1 -0
  171. package/src/studio/components/ops/index.ts +1 -0
  172. package/src/studio/components/ops/nodes/index.ts +1 -0
  173. package/src/studio/lib/llm-service.ts +77 -10
  174. package/templates/typescript-oauth/OAUTH_SETUP.md +592 -0
  175. package/templates/typescript-oauth/README.md +186 -235
  176. package/templates/typescript-oauth/package.json +5 -3
  177. package/templates/typescript-pizzaz/README.md +78 -57
  178. package/templates/typescript-pizzaz/package.json +32 -30
  179. package/templates/typescript-starter/README.md +22 -14
  180. package/templates/typescript-starter/package.json +4 -1
  181. package/templates/typescript-starter/package-lock.json +0 -4112
@@ -6,3 +6,4 @@ export { ToolResultNode } from './ToolResultNode';
6
6
  export { WidgetRenderNode } from './WidgetRenderNode';
7
7
  export { LLMResponseNode } from './LLMResponseNode';
8
8
 
9
+
@@ -466,10 +466,7 @@ User: "list all resources"
466
466
  } else {
467
467
  // Regular user or assistant message
468
468
  const parts: GeminiFunctionPart[] = [];
469
-
470
- if (msg.content) {
471
- parts.push({ text: msg.content });
472
- }
469
+ let hasImageData = false;
473
470
 
474
471
  if (msg.role === 'user' && msg.file) {
475
472
  // Extract base64 and mime type
@@ -486,6 +483,7 @@ User: "list all resources"
486
483
  mimeType.startsWith('audio/');
487
484
 
488
485
  if (isSupported) {
486
+ hasImageData = true;
489
487
  parts.push({
490
488
  inlineData: {
491
489
  mimeType: mimeType,
@@ -516,10 +514,22 @@ User: "list all resources"
516
514
  }
517
515
  }
518
516
 
519
- contents.push({
520
- role: msg.role === 'assistant' ? 'model' : 'user',
521
- parts,
522
- });
517
+ // Add text content - IMPORTANT: Gemini REQUIRES a text prompt when processing images
518
+ if (msg.content) {
519
+ parts.push({ text: msg.content });
520
+ } else if (hasImageData) {
521
+ // If we have image data but no text, add a default prompt
522
+ // Gemini requires at least some text instruction with images
523
+ parts.push({ text: `Please analyze this image (${msg.file?.name || 'uploaded file'}) and process it with the appropriate tool if needed.` });
524
+ }
525
+
526
+ // Only add content if we have parts
527
+ if (parts.length > 0) {
528
+ contents.push({
529
+ role: msg.role === 'assistant' ? 'model' : 'user',
530
+ parts,
531
+ });
532
+ }
523
533
  i++;
524
534
  }
525
535
  }
@@ -582,8 +592,36 @@ User: "list all resources"
582
592
  // console.log('Sending tools to Gemini:', JSON.stringify(requestBody.tools, null, 2));
583
593
  }
584
594
 
595
+ // Add generation config to ensure we get a response
596
+ requestBody.generationConfig = {
597
+ temperature: 0.7,
598
+ topP: 0.95,
599
+ topK: 40,
600
+ maxOutputTokens: 8192,
601
+ };
602
+
603
+ // Add safety settings to be more permissive (for image processing)
604
+ requestBody.safetySettings = [
605
+ { category: 'HARM_CATEGORY_HARASSMENT', threshold: 'BLOCK_ONLY_HIGH' },
606
+ { category: 'HARM_CATEGORY_HATE_SPEECH', threshold: 'BLOCK_ONLY_HIGH' },
607
+ { category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT', threshold: 'BLOCK_ONLY_HIGH' },
608
+ { category: 'HARM_CATEGORY_DANGEROUS_CONTENT', threshold: 'BLOCK_ONLY_HIGH' },
609
+ ];
610
+
611
+ // Log request for debugging (truncate large data)
612
+ const debugRequest = JSON.parse(JSON.stringify(requestBody));
613
+ if (debugRequest.contents) {
614
+ debugRequest.contents = debugRequest.contents.map((c: { parts?: Array<{ inlineData?: { data?: string } }> }) => ({
615
+ ...c,
616
+ parts: c.parts?.map((p: { inlineData?: { data?: string } }) =>
617
+ p.inlineData ? { ...p, inlineData: { ...p.inlineData, data: '[BASE64_TRUNCATED]' } } : p
618
+ )
619
+ }));
620
+ }
621
+ console.log('Gemini request body (truncated):', JSON.stringify(debugRequest, null, 2));
622
+
585
623
  // Use Gemini 2.0 Flash Experimental (latest model with function calling)
586
- // The v1beta API uses 'gemini-2.0-flash-exp' for the newest features
624
+ // Fallback to gemini-1.5-flash if issues persist
587
625
  const model = 'gemini-2.0-flash-exp';
588
626
  const response = await fetch(
589
627
  `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`,
@@ -605,7 +643,36 @@ User: "list all resources"
605
643
 
606
644
  const candidate = data.candidates?.[0];
607
645
  if (!candidate) {
608
- throw new Error('No response from Gemini');
646
+ // Check for prompt feedback (content filtering)
647
+ if (data.promptFeedback) {
648
+ const feedback = data.promptFeedback;
649
+ if (feedback.blockReason) {
650
+ throw new Error(`Gemini blocked the request: ${feedback.blockReason}. ${feedback.blockReasonMessage || ''}`);
651
+ }
652
+ if (feedback.safetyRatings) {
653
+ const blockedRatings = feedback.safetyRatings.filter(
654
+ (r: { probability: string }) => r.probability === 'HIGH' || r.probability === 'MEDIUM'
655
+ );
656
+ if (blockedRatings.length > 0) {
657
+ throw new Error(`Gemini safety filter triggered: ${JSON.stringify(blockedRatings)}`);
658
+ }
659
+ }
660
+ }
661
+
662
+ // Check if there's a candidates array but it's empty with finish reason
663
+ if (data.candidates && data.candidates.length === 0) {
664
+ throw new Error('Gemini returned empty candidates - content may have been filtered');
665
+ }
666
+
667
+ // Generic error with full response for debugging
668
+ console.error('Full Gemini response without candidates:', JSON.stringify(data, null, 2));
669
+ throw new Error(`No response from Gemini. Response metadata: ${JSON.stringify(data.usageMetadata || {})}`);
670
+ }
671
+
672
+ // Check if candidate was blocked
673
+ if (candidate.finishReason === 'SAFETY' || candidate.finishReason === 'BLOCKED') {
674
+ const safetyRatings = candidate.safetyRatings || [];
675
+ throw new Error(`Gemini blocked response due to safety: ${JSON.stringify(safetyRatings)}`);
609
676
  }
610
677
 
611
678
  const parts = candidate.content?.parts || [];