@vistagenic/vista 0.2.16 → 0.3.2

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 (153) hide show
  1. package/bin/vista.js +184 -177
  2. package/dist/ai/agent.d.ts +37 -0
  3. package/dist/ai/agent.js +385 -0
  4. package/dist/ai/embeddings.d.ts +11 -0
  5. package/dist/ai/embeddings.js +71 -0
  6. package/dist/ai/index.d.ts +10 -0
  7. package/dist/ai/index.js +26 -0
  8. package/dist/ai/memory.d.ts +16 -0
  9. package/dist/ai/memory.js +39 -0
  10. package/dist/ai/observability.d.ts +21 -0
  11. package/dist/ai/observability.js +69 -0
  12. package/dist/ai/providers/anthropic.d.ts +2 -0
  13. package/dist/ai/providers/anthropic.js +190 -0
  14. package/dist/ai/providers/base.d.ts +7 -0
  15. package/dist/ai/providers/base.js +85 -0
  16. package/dist/ai/providers/gemini.d.ts +2 -0
  17. package/dist/ai/providers/gemini.js +194 -0
  18. package/dist/ai/providers/index.d.ts +5 -0
  19. package/dist/ai/providers/index.js +21 -0
  20. package/dist/ai/providers/mock.d.ts +8 -0
  21. package/dist/ai/providers/mock.js +77 -0
  22. package/dist/ai/providers/openai.d.ts +2 -0
  23. package/dist/ai/providers/openai.js +211 -0
  24. package/dist/ai/rag.d.ts +35 -0
  25. package/dist/ai/rag.js +110 -0
  26. package/dist/ai/react/index.d.ts +1 -0
  27. package/dist/ai/react/index.js +17 -0
  28. package/dist/ai/react/react-server.d.ts +1 -0
  29. package/dist/ai/react/react-server.js +17 -0
  30. package/dist/ai/react/use-agent.d.ts +23 -0
  31. package/dist/ai/react/use-agent.js +138 -0
  32. package/dist/ai/stream.d.ts +24 -0
  33. package/dist/ai/stream.js +109 -0
  34. package/dist/ai/tool.d.ts +11 -0
  35. package/dist/ai/tool.js +47 -0
  36. package/dist/ai/types.d.ts +117 -0
  37. package/dist/ai/types.js +5 -0
  38. package/dist/auth/core.d.ts +140 -0
  39. package/dist/auth/core.js +165 -0
  40. package/dist/auth/index.d.ts +20 -8
  41. package/dist/auth/index.js +369 -16
  42. package/dist/auth/react-server.d.ts +1 -0
  43. package/dist/auth/react-server.js +10 -0
  44. package/dist/auth/react.d.ts +18 -0
  45. package/dist/auth/react.js +71 -0
  46. package/dist/bin/build-rsc.js +602 -604
  47. package/dist/bin/build.js +389 -388
  48. package/dist/bin/deploy-output.d.ts +2 -7
  49. package/dist/bin/deploy-output.js +3 -76
  50. package/dist/bin/deploy.d.ts +7 -0
  51. package/dist/bin/deploy.js +102 -0
  52. package/dist/bin/dev-error-overlay-snippet.js +778 -552
  53. package/dist/bin/devtools-indicator-snippet.js +387 -387
  54. package/dist/bin/generate.js +510 -248
  55. package/dist/build/manifest.d.ts +169 -139
  56. package/dist/build/manifest.js +423 -367
  57. package/dist/build/rsc/client-manifest.d.ts +62 -52
  58. package/dist/build/rsc/client-manifest.js +295 -193
  59. package/dist/build/rsc/client-reference-plugin.d.ts +37 -37
  60. package/dist/build/rsc/client-reference-plugin.js +160 -160
  61. package/dist/build/rsc/native-scanner.d.ts +135 -123
  62. package/dist/build/rsc/native-scanner.js +203 -170
  63. package/dist/build/rsc/react-client-reference-manifest.d.ts +28 -22
  64. package/dist/build/rsc/react-client-reference-manifest.js +240 -219
  65. package/dist/build/rsc/rsc-renderer.d.ts +99 -99
  66. package/dist/build/rsc/rsc-renderer.js +263 -263
  67. package/dist/build/rsc/server-component-loader.d.ts +19 -19
  68. package/dist/build/rsc/server-component-loader.js +91 -91
  69. package/dist/build/rsc/server-manifest.d.ts +17 -0
  70. package/dist/build/rsc/server-manifest.js +20 -0
  71. package/dist/build/standalone.js +337 -334
  72. package/dist/build/webpack/plugins/vista-flight-plugin.js +5 -5
  73. package/dist/client/dynamic.react-server.d.ts +2 -0
  74. package/dist/client/dynamic.react-server.js +23 -0
  75. package/dist/client/link.react-server.d.ts +2 -0
  76. package/dist/client/link.react-server.js +11 -0
  77. package/dist/client/navigation.react-server.d.ts +1 -0
  78. package/dist/client/navigation.react-server.js +17 -0
  79. package/dist/client/router.react-server.d.ts +1 -0
  80. package/dist/client/router.react-server.js +17 -0
  81. package/dist/client/rsc-router.react-server.d.ts +1 -0
  82. package/dist/client/rsc-router.react-server.js +17 -0
  83. package/dist/client/script.react-server.d.ts +2 -0
  84. package/dist/client/script.react-server.js +23 -0
  85. package/dist/components/client-island.d.ts +34 -34
  86. package/dist/components/client-island.js +75 -75
  87. package/dist/config.d.ts +17 -0
  88. package/dist/config.js +60 -1
  89. package/dist/deploy/adapters/cloudflare.d.ts +2 -0
  90. package/dist/deploy/adapters/cloudflare.js +124 -0
  91. package/dist/deploy/adapters/docker.d.ts +2 -0
  92. package/dist/deploy/adapters/docker.js +112 -0
  93. package/dist/deploy/adapters/index.d.ts +15 -0
  94. package/dist/deploy/adapters/index.js +24 -0
  95. package/dist/deploy/adapters/netlify.d.ts +2 -0
  96. package/dist/deploy/adapters/netlify.js +115 -0
  97. package/dist/deploy/adapters/render.d.ts +2 -0
  98. package/dist/deploy/adapters/render.js +95 -0
  99. package/dist/deploy/adapters/vercel.d.ts +7 -0
  100. package/dist/deploy/adapters/vercel.js +164 -0
  101. package/dist/deploy/cli-runner.d.ts +8 -0
  102. package/dist/deploy/cli-runner.js +58 -0
  103. package/dist/deploy/detect.d.ts +6 -0
  104. package/dist/deploy/detect.js +77 -0
  105. package/dist/deploy/index.d.ts +24 -0
  106. package/dist/deploy/index.js +112 -0
  107. package/dist/deploy/preflight.d.ts +8 -0
  108. package/dist/deploy/preflight.js +80 -0
  109. package/dist/deploy/types.d.ts +48 -0
  110. package/dist/deploy/types.js +2 -0
  111. package/dist/deploy/utils.d.ts +18 -0
  112. package/dist/deploy/utils.js +70 -0
  113. package/dist/dev-error.d.ts +14 -0
  114. package/dist/dev-error.js +1763 -705
  115. package/dist/index.d.ts +23 -21
  116. package/dist/index.js +61 -57
  117. package/dist/server/cookie-parse.d.ts +4 -0
  118. package/dist/server/cookie-parse.js +14 -0
  119. package/dist/server/engine.js +7 -26
  120. package/dist/server/index.d.ts +109 -102
  121. package/dist/server/index.js +315 -286
  122. package/dist/server/middleware-runner.d.ts +125 -57
  123. package/dist/server/middleware-runner.js +615 -218
  124. package/dist/server/middleware-security.d.ts +36 -0
  125. package/dist/server/middleware-security.js +183 -0
  126. package/dist/server/module-compile-hook.js +695 -662
  127. package/dist/server/route-handler-registry.d.ts +65 -0
  128. package/dist/server/route-handler-registry.js +195 -0
  129. package/dist/server/route-patterns.d.ts +67 -0
  130. package/dist/server/route-patterns.js +186 -0
  131. package/dist/server/rsc-engine.js +75 -92
  132. package/dist/server/rsc-module-system.d.ts +33 -33
  133. package/dist/server/rsc-module-system.js +87 -87
  134. package/dist/server/rsc-upstream.js +892 -888
  135. package/dist/server/static-generator.js +10 -10
  136. package/dist/server/typed-api-runtime.d.ts +18 -0
  137. package/dist/server/typed-api-runtime.js +635 -507
  138. package/dist/server/vista-import-map.js +134 -123
  139. package/dist/stack/index.d.ts +34 -32
  140. package/dist/stack/index.js +49 -45
  141. package/dist/stack/server/caller.d.ts +13 -0
  142. package/dist/stack/server/caller.js +42 -0
  143. package/dist/stack/server/executor.d.ts +40 -36
  144. package/dist/stack/server/executor.js +222 -174
  145. package/dist/stack/server/index.d.ts +11 -10
  146. package/dist/stack/server/index.js +24 -23
  147. package/dist/stack/server/procedure.d.ts +20 -18
  148. package/dist/stack/server/procedure.js +66 -58
  149. package/dist/stack/server/types.d.ts +113 -100
  150. package/dist/theme/react-server.d.ts +10 -0
  151. package/dist/theme/react-server.js +16 -0
  152. package/package.json +28 -3
  153. package/LICENSE +0 -21
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Middleware security primitives.
3
+ *
4
+ * These are Next-inspired helpers that apps can compose in `middleware.ts`.
5
+ * The runner also uses the redirect/header sanitizers internally.
6
+ */
7
+ export declare const FORBIDDEN_REQUEST_HEADERS: Set<string>;
8
+ export declare function isForbiddenRequestHeader(name: string): boolean;
9
+ export declare function sanitizeRequestHeaderMap(headers: Map<string, string> | Headers | Record<string, string>): Map<string, string>;
10
+ export declare function isSafeRedirectLocation(location: string, requestUrl: string, allowedHosts?: string[]): boolean;
11
+ export declare function isSafeRewriteLocation(location: string): boolean;
12
+ export declare function securityHeaders(init?: ResponseInit): Headers;
13
+ export declare function cors(options?: {
14
+ origin?: string | string[] | '*';
15
+ methods?: string[];
16
+ headers?: string[];
17
+ credentials?: boolean;
18
+ maxAge?: number;
19
+ }): (request: Request) => Headers;
20
+ export declare function rateLimit(options?: {
21
+ key?: string;
22
+ limit?: number;
23
+ windowMs?: number;
24
+ identifier?: (request: {
25
+ headers: Headers;
26
+ ip?: string;
27
+ }) => string;
28
+ }): (request: {
29
+ headers: Headers;
30
+ ip?: string;
31
+ }) => {
32
+ ok: boolean;
33
+ remaining: number;
34
+ };
35
+ export type MiddlewareLike = (context: any) => Promise<Response | void> | Response | void;
36
+ export declare function chain(middlewares: MiddlewareLike[]): MiddlewareLike;
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ /**
3
+ * Middleware security primitives.
4
+ *
5
+ * These are Next-inspired helpers that apps can compose in `middleware.ts`.
6
+ * The runner also uses the redirect/header sanitizers internally.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.FORBIDDEN_REQUEST_HEADERS = void 0;
10
+ exports.isForbiddenRequestHeader = isForbiddenRequestHeader;
11
+ exports.sanitizeRequestHeaderMap = sanitizeRequestHeaderMap;
12
+ exports.isSafeRedirectLocation = isSafeRedirectLocation;
13
+ exports.isSafeRewriteLocation = isSafeRewriteLocation;
14
+ exports.securityHeaders = securityHeaders;
15
+ exports.cors = cors;
16
+ exports.rateLimit = rateLimit;
17
+ exports.chain = chain;
18
+ exports.FORBIDDEN_REQUEST_HEADERS = new Set([
19
+ 'host',
20
+ 'cookie',
21
+ 'content-length',
22
+ 'content-type',
23
+ 'transfer-encoding',
24
+ 'x-forwarded-for',
25
+ 'x-forwarded-host',
26
+ 'x-forwarded-proto',
27
+ 'x-forwarded-port',
28
+ 'x-real-ip',
29
+ 'x-middleware-next',
30
+ 'x-middleware-rewrite',
31
+ ]);
32
+ function isForbiddenRequestHeader(name) {
33
+ return exports.FORBIDDEN_REQUEST_HEADERS.has(name.toLowerCase());
34
+ }
35
+ function sanitizeRequestHeaderMap(headers) {
36
+ const sanitized = new Map();
37
+ const append = (key, value) => {
38
+ if (!isForbiddenRequestHeader(key)) {
39
+ sanitized.set(key.toLowerCase(), value);
40
+ }
41
+ };
42
+ if (headers instanceof Map) {
43
+ headers.forEach((value, key) => append(key, value));
44
+ }
45
+ else if (typeof headers.forEach === 'function' && !Array.isArray(headers)) {
46
+ headers.forEach((value, key) => append(key, value));
47
+ }
48
+ else {
49
+ for (const [key, value] of Object.entries(headers)) {
50
+ append(key, value);
51
+ }
52
+ }
53
+ return sanitized;
54
+ }
55
+ function isSafeRedirectLocation(location, requestUrl, allowedHosts = []) {
56
+ const trimmed = String(location || '').trim();
57
+ if (!trimmed)
58
+ return false;
59
+ if (trimmed.startsWith('/') && !trimmed.startsWith('//') && !trimmed.startsWith('/\\')) {
60
+ return !trimmed.includes('://');
61
+ }
62
+ try {
63
+ const base = new URL(requestUrl);
64
+ const target = new URL(trimmed, base);
65
+ if (target.origin === base.origin) {
66
+ return true;
67
+ }
68
+ const allowed = new Set(allowedHosts.map((host) => host.toLowerCase()));
69
+ return allowed.has(target.host.toLowerCase());
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ }
75
+ function isSafeRewriteLocation(location) {
76
+ const trimmed = String(location || '').trim();
77
+ if (!trimmed)
78
+ return false;
79
+ if (trimmed.startsWith('/') && !trimmed.startsWith('//') && !trimmed.startsWith('/\\')) {
80
+ return !trimmed.includes('://');
81
+ }
82
+ return false;
83
+ }
84
+ function securityHeaders(init = {}) {
85
+ const headers = new Headers(init.headers);
86
+ if (!headers.has('X-Content-Type-Options'))
87
+ headers.set('X-Content-Type-Options', 'nosniff');
88
+ if (!headers.has('X-Frame-Options'))
89
+ headers.set('X-Frame-Options', 'DENY');
90
+ if (!headers.has('Referrer-Policy'))
91
+ headers.set('Referrer-Policy', 'strict-origin-when-cross-origin');
92
+ if (!headers.has('X-DNS-Prefetch-Control'))
93
+ headers.set('X-DNS-Prefetch-Control', 'off');
94
+ if (!headers.has('Permissions-Policy')) {
95
+ headers.set('Permissions-Policy', 'camera=(), microphone=(), geolocation=()');
96
+ }
97
+ if (process.env.NODE_ENV === 'production' && !headers.has('Strict-Transport-Security')) {
98
+ headers.set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
99
+ }
100
+ return headers;
101
+ }
102
+ function cors(options = {}) {
103
+ const origin = options.origin ?? '*';
104
+ const methods = (options.methods ?? ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']).join(', ');
105
+ const allowHeaders = (options.headers ?? ['Content-Type', 'Authorization']).join(', ');
106
+ return (request) => {
107
+ const headers = new Headers();
108
+ const requestOrigin = request.headers.get('origin');
109
+ if (origin === '*') {
110
+ headers.set('Access-Control-Allow-Origin', '*');
111
+ }
112
+ else if (Array.isArray(origin)) {
113
+ if (requestOrigin && origin.includes(requestOrigin)) {
114
+ headers.set('Access-Control-Allow-Origin', requestOrigin);
115
+ headers.set('Vary', 'Origin');
116
+ }
117
+ }
118
+ else if (origin) {
119
+ headers.set('Access-Control-Allow-Origin', origin);
120
+ }
121
+ headers.set('Access-Control-Allow-Methods', methods);
122
+ headers.set('Access-Control-Allow-Headers', allowHeaders);
123
+ if (options.credentials) {
124
+ headers.set('Access-Control-Allow-Credentials', 'true');
125
+ }
126
+ if (options.maxAge != null) {
127
+ headers.set('Access-Control-Max-Age', String(options.maxAge));
128
+ }
129
+ return headers;
130
+ };
131
+ }
132
+ const rateLimitStores = new Map();
133
+ function rateLimit(options = {}) {
134
+ const limit = options.limit ?? 60;
135
+ const windowMs = options.windowMs ?? 60_000;
136
+ const storeKey = options.key ?? 'default';
137
+ if (!rateLimitStores.has(storeKey)) {
138
+ rateLimitStores.set(storeKey, new Map());
139
+ }
140
+ const store = rateLimitStores.get(storeKey);
141
+ return (request) => {
142
+ const identifier = options.identifier?.(request) ||
143
+ request.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ||
144
+ request.ip ||
145
+ 'anonymous';
146
+ const now = Date.now();
147
+ const bucket = store.get(identifier) || { tokens: limit, updatedAt: now };
148
+ const elapsed = now - bucket.updatedAt;
149
+ const refill = (elapsed / windowMs) * limit;
150
+ bucket.tokens = Math.min(limit, bucket.tokens + refill);
151
+ bucket.updatedAt = now;
152
+ if (bucket.tokens < 1) {
153
+ store.set(identifier, bucket);
154
+ return { ok: false, remaining: 0 };
155
+ }
156
+ bucket.tokens -= 1;
157
+ store.set(identifier, bucket);
158
+ return { ok: true, remaining: Math.floor(bucket.tokens) };
159
+ };
160
+ }
161
+ function chain(middlewares) {
162
+ return async (context) => {
163
+ const originalNext = context.next;
164
+ let index = -1;
165
+ const dispatch = async (current) => {
166
+ if (current <= index) {
167
+ throw new Error('next() called multiple times');
168
+ }
169
+ index = current;
170
+ const fn = middlewares[current];
171
+ if (!fn) {
172
+ return originalNext();
173
+ }
174
+ const next = async () => dispatch(current + 1);
175
+ const result = await fn({ ...context, next });
176
+ if (result instanceof Response) {
177
+ return result;
178
+ }
179
+ return next();
180
+ };
181
+ return dispatch(0);
182
+ };
183
+ }